st := g.getInstantiation(gf, targs, true).fun
dictValue, usingSubdict := g.getDictOrSubdict(declInfo, n, gf, targs, true)
- // We have to be using a subdictionary, since this is
- // a generic method call.
- assert(usingSubdict)
+ if hasShapeTypes(targs) {
+ // We have to be using a subdictionary, since this is
+ // a generic method call.
+ assert(usingSubdict)
+ } else {
+ // We should use main dictionary, because the receiver is
+ // an instantiation already, see issue #53406.
+ assert(!usingSubdict)
+ }
// Transform to a function call, by appending the
// dictionary and the receiver to the args.
--- /dev/null
+// compile
+
+// Copyright 2022 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 main
+
+func main() {
+ f[int]()
+}
+
+func f[T1 any]() {
+ var x Outer[T1, int]
+ x.M()
+}
+
+type Outer[T1, T2 any] struct{ Inner[T2] }
+
+type Inner[_ any] int
+
+func (Inner[_]) M() {}