]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix error when revcType is ptr in selectorExpr
authorkorzhao <korzhao95@gmail.com>
Mon, 30 Aug 2021 09:09:51 +0000 (17:09 +0800)
committerDan Scales <danscales@google.com>
Mon, 30 Aug 2021 17:13:00 +0000 (17:13 +0000)
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>

src/cmd/compile/internal/noder/expr.go
test/typeparam/issue48056.go [new file with mode: 0644]

index 58637dca39cb27afe89b457c56c615f3e90b7f56..0e5257d7cf95acdaec03ef7b94c0eadea6060ffc 100644 (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)
diff --git a/test/typeparam/issue48056.go b/test/typeparam/issue48056.go
new file mode 100644 (file)
index 0000000..8d1c3ef
--- /dev/null
@@ -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()
+}