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:
parent
7b38dd8e25
commit
b602daea1b
@ -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)
|
||||
|
27
test/typeparam/issue48056.go
Normal file
27
test/typeparam/issue48056.go
Normal 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()
|
||||
}
|
Loading…
Reference in New Issue
Block a user