From 86f0f08461ae5b5fd605c229aad696ddefa92b2b Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Wed, 23 Aug 2023 10:20:29 +0700 Subject: [PATCH] cmd/compile: use s.temp for creating defer struct Follow discussion in go.dev/cl/521676. Change-Id: Ie5c0ce66b60fcbfd59385e8c2c45d431133ab53a Reviewed-on: https://go-review.googlesource.com/c/go/+/522115 Run-TryBot: Cuong Manh Le Reviewed-by: Keith Randall Auto-Submit: Cuong Manh Le Reviewed-by: Matthew Dempsky TryBot-Result: Gopher Robot --- src/cmd/compile/internal/ssagen/ssa.go | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/cmd/compile/internal/ssagen/ssa.go b/src/cmd/compile/internal/ssagen/ssa.go index cdf6bfd8b95d91..1f06290dc33474 100644 --- a/src/cmd/compile/internal/ssagen/ssa.go +++ b/src/cmd/compile/internal/ssagen/ssa.go @@ -5249,19 +5249,12 @@ func (s *state) call(n *ir.CallExpr, k callKind, returnResultAddr bool) *ssa.Val var call *ssa.Value if k == callDeferStack { - // Make a defer struct d on the stack. if stksize != 0 { s.Fatalf("deferprocStack with non-zero stack size %d: %v", stksize, n) } - + // Make a defer struct on the stack. t := deferstruct() - d := typecheck.TempAt(n.Pos(), s.curfn, t) - - if t.HasPointers() { - s.vars[memVar] = s.newValue1A(ssa.OpVarDef, types.TypeMem, d, s.mem()) - } - addr := s.addr(d) - + _, addr := s.temp(n.Pos(), t) s.store(closure.Type, s.newValue1I(ssa.OpOffPtr, closure.Type.PtrTo(), t.FieldOff(deferStructFnField), addr), closure)