]> Cypherpunks repositories - gostls13.git/commitdiff
go/types: remove superfluous code for shift checking
authorRobert Griesemer <gri@golang.org>
Fri, 19 Mar 2021 00:29:02 +0000 (17:29 -0700)
committerRobert Griesemer <gri@golang.org>
Tue, 23 Mar 2021 05:12:12 +0000 (05:12 +0000)
Negative constant shift counts are already handled
earlier in the code. No need anymore for this extra
section.

With this change, the shift code matches types2
with respect to the function logic.

Change-Id: Ic8b7f382271c79ab66021e30955cd9bac092332b
Reviewed-on: https://go-review.googlesource.com/c/go/+/303093
Trust: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
src/go/types/expr.go

index e1b484c4109e4b516dff090a60cb0ced12225eb4..170761afb3747577417b49a749f26980dc404dec 100644 (file)
@@ -805,20 +805,6 @@ func (check *Checker) shift(x, y *operand, e ast.Expr, op token.Token) {
                return
        }
 
-       var yval constant.Value
-       if y.mode == constant_ {
-               // rhs must be an integer value
-               // (Either it was of an integer type already, or it was
-               // untyped and successfully converted to a uint above.)
-               yval = constant.ToInt(y.val)
-               assert(yval.Kind() == constant.Int)
-               if constant.Sign(yval) < 0 {
-                       check.invalidOp(y, _InvalidShiftCount, "negative shift count %s", y)
-                       x.mode = invalid
-                       return
-               }
-       }
-
        if x.mode == constant_ {
                if y.mode == constant_ {
                        // if either x or y has an unknown value, the result is unknown
@@ -832,7 +818,7 @@ func (check *Checker) shift(x, y *operand, e ast.Expr, op token.Token) {
                        }
                        // rhs must be within reasonable bounds in constant shifts
                        const shiftBound = 1023 - 1 + 52 // so we can express smallestFloat64 (see issue #44057)
-                       s, ok := constant.Uint64Val(yval)
+                       s, ok := constant.Uint64Val(y.val)
                        if !ok || s > shiftBound {
                                check.invalidOp(y, _InvalidShiftCount, "invalid shift count %s", y)
                                x.mode = invalid