diff options
| author | Keith Randall <khr@google.com> | 2017-12-04 13:30:13 -0800 |
|---|---|---|
| committer | Keith Randall <khr@golang.org> | 2017-12-04 21:45:40 +0000 |
| commit | 9d70b3ae04316c5753435dddee54fe7373502e09 (patch) | |
| tree | afaf25caa62d3e63275eb63417a87f8ca64865c2 | |
| parent | 509ffb94caae3fd53130d318c013cac38a179976 (diff) | |
| download | go-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.go | 2 |
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, |
