mirror of https://github.com/golang/go.git
cmd/compile: fix irgen mis-handling of ... argument when creating closure
When bulding formal arguments of newly created closure, irgen forgets to set "..." field attribute, causing type mismatched between the closure function and the ONAME node represents that closure function. Fixes #49432 Change-Id: Ieddaa64980cdd3d8cea236a5a9de0204ee21ee39 Reviewed-on: https://go-review.googlesource.com/c/go/+/361961 Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com> Trust: Dan Scales <danscales@google.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Dan Scales <danscales@google.com>
This commit is contained in:
parent
67e22941df
commit
bee0c73900
|
|
@ -2085,6 +2085,7 @@ func startClosure(pos src.XPos, outer *ir.Func, typ *types.Type) (*ir.Func, []*t
|
|||
fn.Dcl = append(fn.Dcl, arg)
|
||||
f := types.NewField(pos, arg.Sym(), t)
|
||||
f.Nname = arg
|
||||
f.SetIsDDD(typ.Params().Field(i).IsDDD())
|
||||
formalParams = append(formalParams, f)
|
||||
}
|
||||
for i := 0; i < typ.NumResults(); i++ {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
// 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 main
|
||||
|
||||
type Handler func(in ...interface{})
|
||||
|
||||
type Foo[T any] struct{}
|
||||
|
||||
func (b *Foo[T]) Bar(in ...interface{}) {}
|
||||
|
||||
func (b *Foo[T]) Init() {
|
||||
_ = Handler(b.Bar)
|
||||
}
|
||||
|
||||
func main() {
|
||||
c := &Foo[int]{}
|
||||
c.Init()
|
||||
}
|
||||
Loading…
Reference in New Issue