// The lhs must be of integer type or be representable
// as an integer; otherwise the shift has no chance.
- if !isInteger(x.typ) && (!untypedx || !representableConst(x.val, nil, UntypedInt, nil)) {
+ if !x.isInteger() {
check.invalidOp(x.pos(), "shifted operand %s must be integer", x)
x.mode = invalid
return
if x.mode == constant {
if y.mode == constant {
+ // rhs must be an integer value
+ if !y.isInteger() {
+ check.invalidOp(y.pos(), "shift count %s must be unsigned integer", y)
+ x.mode = invalid
+ return
+ }
// rhs must be within reasonable bounds
const stupidShift = 1023 - 1 + 52 // so we can express smallestFloat64
s, ok := exact.Uint64Val(y.val)
var x = 'a' << 1 // type of x must be rune
var _ rune = x
}
+
+func issue11325() {
+ var _ = 0 >> 1.1 /* ERROR "must be unsigned integer" */ // example from issue 11325
+ _ = 0 >> 1.1 /* ERROR "must be unsigned integer" */
+ _ = 0 << 1.1 /* ERROR "must be unsigned integer" */
+ _ = 0 >> 1.
+ _ = 1 >> 1.1 /* ERROR "must be unsigned integer" */
+ _ = 1 >> 1.
+ _ = 1. >> 1
+ _ = 1. >> 1.
+ _ = 1.1 /* ERROR "must be integer" */ >> 1
+}