]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: fix identity case relating to 'any' and shape types
authorDan Scales <danscales@google.com>
Sun, 12 Dec 2021 19:08:59 +0000 (11:08 -0800)
committerDan Scales <danscales@google.com>
Mon, 13 Dec 2021 06:35:06 +0000 (06:35 +0000)
commit9bfe09d78bd1b3ab97bc6e1c31395f0822875fba
tree12754b715fc756853d71e04e94bb2a1a0713891e
parent49b7c9caec6b96d0b327624efee61bd8a72cf68c
cmd/compile: fix identity case relating to 'any' and shape types

In identical(), we don't want any to match a shape empty-interface type
for the identStrict option, since IdenticalStrict() is specifically not
supposed to match a shape type with a non-shape type.

There is similar code in (*Type).cmp() (TINTER case), but I don't
believe that we want to disqualify shape types from matching any in this
case, since cmp() is used for back-end code, where we don't care about
shape types vs non-shape types.

The issue mainly comes about when 'any' is used as a type argument
(rather than 'interface{}'), but only with some complicated
circumstances, as shown by the test case. (Couldn't reproduce with
simpler test cases.)

Fixes #50109

Change-Id: I3f2f88be158f9ad09273237e1d346bc56aac099f
Reviewed-on: https://go-review.googlesource.com/c/go/+/371154
Trust: Dan Scales <danscales@google.com>
Run-TryBot: Dan Scales <danscales@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/types/identity.go
test/typeparam/issue50109.go [new file with mode: 0644]
test/typeparam/issue50109.out [new file with mode: 0644]