]> Cypherpunks repositories - gostls13.git/commit
[release-branch.go1.12] cmd/compile: copy volatile values before emitting write barri...
authorCherry Zhang <cherryyz@google.com>
Thu, 21 Mar 2019 17:40:28 +0000 (13:40 -0400)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 2 Apr 2019 05:05:37 +0000 (05:05 +0000)
commit8acc2ea68ba126c6f91afef2545fd6022b039c51
tree9d14fb0bd6effac1dc58e55393e53db379460324
parentec06e9ba4578d26fdb9c521d4042e3f9f7f42435
[release-branch.go1.12] cmd/compile: copy volatile values before emitting write barrier call

It is possible that a "volatile" value (one that can be clobbered
by preparing args of a call) to be used in multiple write barrier
calls. We used to copy the volatile value right before each call.
But this doesn't work if the value is used the second time, after
the first call where it is already clobbered. Copy it before
emitting any call.

Updates #30977.
Fixes #30996.

Change-Id: Iedcc91ad848d5ded547bf37a8359c125d32e994c
Reviewed-on: https://go-review.googlesource.com/c/go/+/168677
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
(cherry picked from commit f23c601bf9f66ef4a0d9d2dcd003b95e78fb28f8)
Reviewed-on: https://go-review.googlesource.com/c/go/+/168817
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/compile/internal/ssa/writebarrier.go
test/fixedbugs/issue30977.go [new file with mode: 0644]