diff options
| author | Wayne Zuo <wdvxdr@golangcn.org> | 2022-06-16 11:05:39 +0800 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2022-06-22 16:25:18 +0000 |
| commit | 4045b1bc3f97a47274ef1da2bf6d29f5ce1c7b88 (patch) | |
| tree | b39c527aae3a431e2c6497adbede0b77a427b57a | |
| parent | 6bad7e82430bb1eb927a2901f44f9664637db27d (diff) | |
| download | go-4045b1bc3f97a47274ef1da2bf6d29f5ce1c7b88.tar.xz | |
cmd/compile: fix assert condition in generic method call
Fixes #53406.
Change-Id: If7ae39ec1042a792d82a0a2de96d168c22d8ab71
Reviewed-on: https://go-review.googlesource.com/c/go/+/412614
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Alex Rakoczy <alex@golang.org>
Auto-Submit: Alex Rakoczy <alex@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Wayne Zuo <wdvxdr@golangcn.org>
| -rw-r--r-- | src/cmd/compile/internal/noder/stencil.go | 12 | ||||
| -rw-r--r-- | test/typeparam/issue53406.go | 22 |
2 files changed, 31 insertions, 3 deletions
diff --git a/src/cmd/compile/internal/noder/stencil.go b/src/cmd/compile/internal/noder/stencil.go index eeb503811c..d463c850f3 100644 --- a/src/cmd/compile/internal/noder/stencil.go +++ b/src/cmd/compile/internal/noder/stencil.go @@ -208,9 +208,15 @@ func (g *genInst) scanForGenCalls(decl ir.Node) { 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. diff --git a/test/typeparam/issue53406.go b/test/typeparam/issue53406.go new file mode 100644 index 0000000000..90fe78fb6f --- /dev/null +++ b/test/typeparam/issue53406.go @@ -0,0 +1,22 @@ +// 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() {} |
