From: Keith Randall Date: Fri, 29 Apr 2016 19:09:32 +0000 (-0700) Subject: cmd/compile: don't SSA any variables when -N X-Git-Tag: go1.7beta1~371 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=5325fbc7dbab155a88efab0bcd128236e97b3349;p=gostls13.git cmd/compile: don't SSA any variables when -N Turn SSAing of variables off when compiling with optimizations off. This helps keep variable names around that would otherwise be optimized away. Fixes #14744 Change-Id: I31db8cf269c068c7c5851808f13e5955a09810ca Reviewed-on: https://go-review.googlesource.com/22681 Run-TryBot: Keith Randall TryBot-Result: Gobot Gobot Reviewed-by: David Chase --- diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go index 9d03f239a8..b05dedcfa9 100644 --- a/src/cmd/compile/internal/gc/ssa.go +++ b/src/cmd/compile/internal/gc/ssa.go @@ -2356,7 +2356,7 @@ func (s *state) assign(left *Node, right *ssa.Value, wb, deref bool, line int32, } // Left is not ssa-able. Compute its address. addr := s.addr(left, false) - if left.Op == ONAME { + if left.Op == ONAME && skip == 0 { s.vars[&memVar] = s.newValue1A(ssa.OpVarDef, ssa.TypeMem, left, s.mem()) } if deref { @@ -2792,6 +2792,9 @@ func (s *state) addr(n *Node, bounded bool) *ssa.Value { // canSSA reports whether n is SSA-able. // n must be an ONAME (or an ODOT sequence with an ONAME base). func (s *state) canSSA(n *Node) bool { + if Debug['N'] != 0 { + return false + } for n.Op == ODOT { n = n.Left }