From 9d70b3ae04316c5753435dddee54fe7373502e09 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Mon, 4 Dec 2017 13:30:13 -0800 Subject: [PATCH] cmd/compile: fix noopt builder, weird append case Turn off append-to-itself optimization if optimizations are turned off. This optimization triggered a bug when doing s = append(s, s) where we write to the leftmost s before reading the rightmost s. Update #17039 Change-Id: I21996532d20a75db6ec8d49db50cb157a1360b80 Reviewed-on: https://go-review.googlesource.com/81816 Run-TryBot: Keith Randall Reviewed-by: Brad Fitzpatrick Reviewed-by: David Chase TryBot-Result: Gobot Gobot --- src/cmd/compile/internal/gc/ssa.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go index 36dd1a4be4..fe062da409 100644 --- a/src/cmd/compile/internal/gc/ssa.go +++ b/src/cmd/compile/internal/gc/ssa.go @@ -737,7 +737,7 @@ func (s *state) stmt(n *Node) { // Check whether we're writing the result of an append back to the same slice. // If so, we handle it specially to avoid write barriers on the fast // (non-growth) path. - if !samesafeexpr(n.Left, rhs.List.First()) { + if !samesafeexpr(n.Left, rhs.List.First()) || Debug['N'] != 0 { break } // If the slice can be SSA'd, it'll be on the stack, -- 2.50.0