aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Randall <khr@google.com>2017-12-04 13:30:13 -0800
committerKeith Randall <khr@golang.org>2017-12-04 21:45:40 +0000
commit9d70b3ae04316c5753435dddee54fe7373502e09 (patch)
treeafaf25caa62d3e63275eb63417a87f8ca64865c2
parent509ffb94caae3fd53130d318c013cac38a179976 (diff)
downloadgo-9d70b3ae04316c5753435dddee54fe7373502e09.tar.xz
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 <khr@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: David Chase <drchase@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
-rw-r--r--src/cmd/compile/internal/gc/ssa.go2
1 files changed, 1 insertions, 1 deletions
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,