]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/compile: always zero the temporary in mapKeyTemp
authorCherry Zhang <cherryyz@google.com>
Tue, 13 Apr 2021 22:01:59 +0000 (18:01 -0400)
committerCherry Zhang <cherryyz@google.com>
Tue, 13 Apr 2021 22:55:30 +0000 (22:55 +0000)
As we are taking its address, always zero it. In many cases the
temporary will be optimized out. But in case it does not (e.g. -N,
-race), this ensures it has the right liveness information.

May fix the noopt builder.

Change-Id: I3d5d617c276d2a1a1aaebff813b4cd60bc691592
Reviewed-on: https://go-review.googlesource.com/c/go/+/309771
Trust: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
src/cmd/compile/internal/walk/order.go

index 8b306326650081264779c10fd4acc7464cab56de..42d9d589713e9aeabe42e25036cd55db8e6cabeb 100644 (file)
@@ -306,8 +306,7 @@ func (o *orderState) mapKeyTemp(t *types.Type, n ir.Node) ir.Node {
                if kt.Align < nt.Align {
                        base.Fatalf("mapKeyTemp: key type is not sufficiently aligned, kt=%v nt=%v", kt, nt)
                }
-               clear := base.Flag.Cfg.Instrumenting // clear tmp if instrumenting, as it may be live at an inserted race call
-               tmp := o.newTemp(kt, clear)
+               tmp := o.newTemp(kt, true)
                // *(*nt)(&tmp) = n
                var e ir.Node = typecheck.NodAddr(tmp)
                e = ir.NewConvExpr(n.Pos(), ir.OCONVNOP, nt.PtrTo(), e)