]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: use s.temp for creating defer struct
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Wed, 23 Aug 2023 03:20:29 +0000 (10:20 +0700)
committerGopher Robot <gobot@golang.org>
Wed, 23 Aug 2023 22:40:36 +0000 (22:40 +0000)
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 <cuong.manhle.vn@gmail.com>
Reviewed-by: Keith Randall <khr@google.com>
Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/cmd/compile/internal/ssagen/ssa.go

index cdf6bfd8b95d91f3740d70fd95448e2fe9475967..1f06290dc334746ba95cf82d5326de81cf34c829 100644 (file)
@@ -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)