mirror of
https://github.com/golang/go
synced 2024-11-26 03:47:57 -07:00
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>
This commit is contained in:
parent
6bad7e8243
commit
4045b1bc3f
@ -208,9 +208,15 @@ func (g *genInst) scanForGenCalls(decl ir.Node) {
|
|||||||
|
|
||||||
st := g.getInstantiation(gf, targs, true).fun
|
st := g.getInstantiation(gf, targs, true).fun
|
||||||
dictValue, usingSubdict := g.getDictOrSubdict(declInfo, n, gf, targs, true)
|
dictValue, usingSubdict := g.getDictOrSubdict(declInfo, n, gf, targs, true)
|
||||||
// We have to be using a subdictionary, since this is
|
if hasShapeTypes(targs) {
|
||||||
// a generic method call.
|
// We have to be using a subdictionary, since this is
|
||||||
assert(usingSubdict)
|
// 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
|
// Transform to a function call, by appending the
|
||||||
// dictionary and the receiver to the args.
|
// dictionary and the receiver to the args.
|
||||||
|
22
test/typeparam/issue53406.go
Normal file
22
test/typeparam/issue53406.go
Normal file
@ -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() {}
|
Loading…
Reference in New Issue
Block a user