1
0
mirror of https://github.com/golang/go synced 2024-11-11 20:20:23 -07:00

cmd/compile: fix error when revcType is ptr in selectorExpr

Fixes #48056

Change-Id: I13ca4caadbabf02084f66ab28b4cf0c4a3705370
Reviewed-on: https://go-review.googlesource.com/c/go/+/346049
Reviewed-by: Dan Scales <danscales@google.com>
Trust: Dan Scales <danscales@google.com>
Trust: Keith Randall <khr@golang.org>
Run-TryBot: Dan Scales <danscales@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
This commit is contained in:
korzhao 2021-08-30 17:09:51 +08:00 committed by Dan Scales
parent 7b38dd8e25
commit b602daea1b
2 changed files with 28 additions and 1 deletions

View File

@ -270,7 +270,7 @@ func (g *irgen) selectorExpr(pos src.XPos, typ types2.Type, expr *syntax.Selecto
if types2.AsInterface(recvType.Underlying()) != nil {
fieldType := n.X.Type()
for _, ix := range index[:len(index)-1] {
fieldType = fieldType.Field(ix).Type
fieldType = deref(fieldType).Field(ix).Type
}
if fieldType.Kind() == types.TTYPEPARAM {
n.Selection = fieldType.Bound().AllMethods().Index(last)

View File

@ -0,0 +1,27 @@
// compile -G=3
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package p
type B[T any] interface {
Work()
}
type BImpl[T any] struct{}
func (b *BImpl[T]) Work() {
}
type A[T any] struct {
B[T]
}
func f[T any]() {
s := &A[T]{
&BImpl[T]{},
}
// golang.org/issue/48056
s.Work()
}