]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix noopt builder, weird append case
authorKeith Randall <khr@google.com>
Mon, 4 Dec 2017 21:30:13 +0000 (13:30 -0800)
committerKeith Randall <khr@golang.org>
Mon, 4 Dec 2017 21:45:40 +0000 (21:45 +0000)
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>

src/cmd/compile/internal/gc/ssa.go

index 36dd1a4be4f7567f0e68ba58664f1ae2d7555ac5..fe062da409595efcfd4e55baeabe9d1777caa5ac 100644 (file)
@@ -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,