]> Cypherpunks repositories - gostls13.git/commit
go/types: don't report errors for untyped int shifts on Go < 1.13
authorRobert Findley <rfindley@google.com>
Wed, 30 Mar 2022 13:56:13 +0000 (09:56 -0400)
committerRobert Findley <rfindley@google.com>
Sat, 2 Apr 2022 14:28:33 +0000 (14:28 +0000)
commit8a816d5efcc842ae92f0193aa9c1d433bd66ef31
tree105f24d1547ade1a4f141adb038b3688537e3810
parentf8e70fc9a6d2a88d51d36208e64b12a236fce1b1
go/types: don't report errors for untyped int shifts on Go < 1.13

CL 337529 introduced upfront type-checking of constant shift operands,
to avoid converting their type to uint (per the spec). However, it
had an oversight in that the checks intended for non-constant operands
still ran after the explicit checking of constant operands. As a
result, there are at least two bugs:
 - When GoVersion is < 1.13, we report spurious errors for untyped
   constant shift operands.
 - When the operand is an untyped float constant, we still convert to
   uint (this was a known bug reported in #47410).

Looking at this now, it seems clear that we can avoid both of these bugs
by simply not running the additional checks in the case of a constant
operand. However, this should be considered with some care, as shifts
are notoriously tricky.

Updates #47410
Fixes #52031

Change-Id: Ia489cc5470b92a8187d3de0423d05b309daf47bb
Reviewed-on: https://go-review.googlesource.com/c/go/+/396775
Reviewed-by: Robert Griesemer <gri@golang.org>
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
src/go/types/api_test.go
src/go/types/check_test.go
src/go/types/expr.go
src/go/types/testdata/fixedbugs/issue52031.go [new file with mode: 0644]