From 37515135626ba0bb81c3f2befc3393f862290826 Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Fri, 31 Mar 2017 16:52:50 -0700 Subject: [PATCH] cmd/compile: don't modify nodfp in AllocFrame nodfp is a global, so modifying it is unsafe in a concurrent backend. It is also not necessary, since the Used marks are only relevant for nodes in fn.Dcl. For good measure, mark nodfp as always used. Passes toolstash-check. Updates #15756 Change-Id: I5320459f5eced2898615a17b395a10c1064bcaf5 Reviewed-on: https://go-review.googlesource.com/39200 Run-TryBot: Josh Bleecher Snyder TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- src/cmd/compile/internal/gc/pgen.go | 7 +++++-- src/cmd/compile/internal/gc/universe.go | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/cmd/compile/internal/gc/pgen.go b/src/cmd/compile/internal/gc/pgen.go index 71d9b8f9e3..06b7e5a691 100644 --- a/src/cmd/compile/internal/gc/pgen.go +++ b/src/cmd/compile/internal/gc/pgen.go @@ -207,7 +207,6 @@ func (s *ssafn) AllocFrame(f *ssa.Func) { if ls, ok := l.(ssa.LocalSlot); ok { ls.N.(*Node).SetUsed(true) } - } scratchUsed := false @@ -215,7 +214,11 @@ func (s *ssafn) AllocFrame(f *ssa.Func) { for _, v := range b.Values { switch a := v.Aux.(type) { case *ssa.ArgSymbol: - a.Node.(*Node).SetUsed(true) + n := a.Node.(*Node) + // Don't modify nodfp; it is a global. + if n != nodfp { + n.SetUsed(true) + } case *ssa.AutoSymbol: a.Node.(*Node).SetUsed(true) } diff --git a/src/cmd/compile/internal/gc/universe.go b/src/cmd/compile/internal/gc/universe.go index fea0103b33..50f7335cd0 100644 --- a/src/cmd/compile/internal/gc/universe.go +++ b/src/cmd/compile/internal/gc/universe.go @@ -463,4 +463,5 @@ func finishUniverse() { nodfp = newname(lookup(".fp")) nodfp.Type = Types[TINT32] nodfp.Class = PPARAM + nodfp.SetUsed(true) } -- 2.48.1