1
0
mirror of https://github.com/golang/go synced 2024-11-26 20:31:25 -07:00
go/test/typeparam/mdempsky
Matthew Dempsky d6294e00f0 cmd/compile: fix devirtualization bug with unified IR
As a consistency check in devirtualization, when we determine `i` (of
interface type `I`) always has dynamic type `T`, we insert a type
assertion `i.(T)`. This emits an itab check for `go:itab.T,I`, but
it's always true (and so SSA optimizes it away).

However, if `I` is instead the generic interface type `I[T]`, then
`go:itab.T,I[int]` and `go:itab.T,I[go.shape.int]` are equivalent but
distinct itabs. And notably, we'll have originally created the
interface value using the former; but the (non-dynamic) TypeAssertExpr
created by devirtualization would ultimately emit a comparison against
the latter. This comparison would then evaluate false, leading to a
spurious type assertion panic at runtime.

The comparison is just meant as an extra safety check, so it should be
safe to just disable. But for now, it's simpler/safer to just punt on
devirtualization in this case. (The non-unified frontend doesn't
devirtualize this either.)

Change-Id: I6a8809bcfebc9571f32e289fa4bc6a8b0d21ca46
Reviewed-on: https://go-review.googlesource.com/c/go/+/424774
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Keith Randall <khr@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
2022-08-18 17:26:32 +00:00
..
1.dir
3.dir
4.dir
7.dir
8.dir
10.dir
12.dir
1.go
2.go
3.go
4.go
5.go
6.go
7.go
8.go
9.go
10.go
11.go
12.go
13.go
14.go
15.go
16.go [dev.unified] test: add regress tests for #53276 and #53328 2022-06-10 21:35:49 +00:00
17.go [dev.unified] test: add regress tests for #53276 and #53328 2022-06-10 21:35:49 +00:00
18.go [dev.unified] test: add regress test for generic select statements 2022-06-29 19:33:57 +00:00
18.out [dev.unified] test: add regress test for generic select statements 2022-06-29 19:33:57 +00:00
19.go test: add test case for type parameter method indexing 2022-08-08 17:39:25 +00:00
20.go test: test method expressions promoted to derived types 2022-08-09 16:42:12 +00:00
21.go cmd/compile: fix devirtualization bug with unified IR 2022-08-18 17:26:32 +00:00