From: David Chase Date: Wed, 24 Jun 2020 21:00:48 +0000 (-0400) Subject: cmd/compile: populate AuxCall fields for OpClosureCall X-Git-Tag: go1.16beta1~1027 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=39da81da5e35e50da74ebb8c4fe12fd363bf41b9;p=gostls13.git cmd/compile: populate AuxCall fields for OpClosureCall Change-Id: Ib5f62826d5249c1727b57d9f8ff2f3a1d6dc5032 Reviewed-on: https://go-review.googlesource.com/c/go/+/240185 Trust: David Chase Run-TryBot: David Chase TryBot-Result: Go Bot Reviewed-by: Cherry Zhang --- diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go index 6c0b027c17..75fdbbae04 100644 --- a/src/cmd/compile/internal/gc/ssa.go +++ b/src/cmd/compile/internal/gc/ssa.go @@ -4306,7 +4306,7 @@ func (s *state) openDeferExit() { v := s.load(r.closure.Type.Elem(), r.closure) s.maybeNilCheckClosure(v, callDefer) codeptr := s.rawLoad(types.Types[TUINTPTR], v) - call = s.newValue3A(ssa.OpClosureCall, types.TypeMem, ssa.ClosureAuxCall(), codeptr, v, s.mem()) + call = s.newValue3A(ssa.OpClosureCall, types.TypeMem, ssa.ClosureAuxCall(ACArgs, ACResults), codeptr, v, s.mem()) } else { // Do a static call if the original call was a static function or method call = s.newValue1A(ssa.OpStaticCall, types.TypeMem, ssa.StaticAuxCall(fn.Sym.Linksym(), ACArgs, ACResults), s.mem()) @@ -4512,7 +4512,7 @@ func (s *state) call(n *Node, k callKind) *ssa.Value { // critical that we not clobber any arguments already // stored onto the stack. codeptr = s.rawLoad(types.Types[TUINTPTR], closure) - call = s.newValue3A(ssa.OpClosureCall, types.TypeMem, ssa.ClosureAuxCall(), codeptr, closure, s.mem()) + call = s.newValue3A(ssa.OpClosureCall, types.TypeMem, ssa.ClosureAuxCall(ACArgs, ACResults), codeptr, closure, s.mem()) case codeptr != nil: call = s.newValue2A(ssa.OpInterCall, types.TypeMem, ssa.InterfaceAuxCall(ACArgs, ACResults), codeptr, s.mem()) case sym != nil: diff --git a/src/cmd/compile/internal/ssa/op.go b/src/cmd/compile/internal/ssa/op.go index f94399028a..02ecdef5e6 100644 --- a/src/cmd/compile/internal/ssa/op.go +++ b/src/cmd/compile/internal/ssa/op.go @@ -79,6 +79,10 @@ type AuxCall struct { results []Param } +// String returns +// "AuxCall{()}" if len(results) == 0; +// "AuxCall{()}" if len(results) == 1; +// "AuxCall{()()}" otherwise. func (a *AuxCall) String() string { var fn string if a.Fn == nil { @@ -125,8 +129,8 @@ func InterfaceAuxCall(args []Param, results []Param) *AuxCall { } // ClosureAuxCall returns an AuxCall for a closure call. -func ClosureAuxCall() *AuxCall { - return &AuxCall{} +func ClosureAuxCall(args []Param, results []Param) *AuxCall { + return &AuxCall{Fn: nil, args: args, results: results} } const (