mirror of
https://github.com/golang/go
synced 2024-07-05 09:50:19 +00:00
cmd/compile: allow huge rsh in constants arithmetic
Currently an expression like var v = 0 >> 1000 is rejected by gc with a "stupid shift" error, while gotype compiles it successfully. As suggested by gri on the issue tracker, allow an rsh right operand to be any valid uint value. Fixes #11328 Change-Id: I6ccb3b7f842338d91fd26ae37dd4fa279d7fc440 Reviewed-on: https://go-review.googlesource.com/13777 Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
parent
548041ed08
commit
85de30e72f
|
@ -229,7 +229,7 @@ func mprshfixfix(a, b *Mpint) {
|
|||
}
|
||||
|
||||
s := Mpgetfix(b)
|
||||
if s < 0 || s >= Mpprec {
|
||||
if s < 0 {
|
||||
Yyerror("stupid shift: %d", s)
|
||||
if a.Val.Sign() < 0 {
|
||||
Mpmovecfix(a, -1)
|
||||
|
|
|
@ -19,6 +19,9 @@ const (
|
|||
c3div2 = 3 / 2
|
||||
c1e3 = 1e3
|
||||
|
||||
rsh1 = 1e100 >> 1000
|
||||
rsh2 = 1e302 >> 1000
|
||||
|
||||
ctrue = true
|
||||
cfalse = !ctrue
|
||||
)
|
||||
|
@ -48,6 +51,8 @@ func ints() {
|
|||
assert(c3div2 == 1, "3/2")
|
||||
assert(c1e3 == 1000, "c1e3 int")
|
||||
assert(c1e3 == 1e3, "c1e3 float")
|
||||
assert(rsh1 == 0, "rsh1")
|
||||
assert(rsh2 == 9, "rsh2")
|
||||
|
||||
// verify that all (in range) are assignable as ints
|
||||
var i int
|
||||
|
|
Loading…
Reference in New Issue
Block a user