]> Cypherpunks repositories - gostls13.git/commit
[release-branch.go1.18] go/types: don't report errors for untyped int shifts on Go...
authorRobert Findley <rfindley@google.com>
Wed, 30 Mar 2022 13:56:13 +0000 (09:56 -0400)
committerCherry Mui <cherryyz@google.com>
Wed, 6 Apr 2022 17:10:45 +0000 (17:10 +0000)
commit9535031e32757d2f3b83f3f1ce116017bd06fdbe
tree5cdb37ba65c3f80c694fe366bca162b0760ecdc2
parent2097b2d51b095296d20712f0b8b0b42a6f693f2e
[release-branch.go1.18] 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.

While cherry-picking, the new test file is updated to use the go1_12
package name, following our convention for specifying language version
in the release branch.

Fixes #52032

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>
(cherry picked from commit 8a816d5efcc842ae92f0193aa9c1d433bd66ef31)
Reviewed-on: https://go-review.googlesource.com/c/go/+/397680
src/go/types/api_test.go
src/go/types/expr.go
src/go/types/testdata/fixedbugs/issue52031.go [new file with mode: 0644]