aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/gc
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-05-27 23:59:27 -0400
committerRuss Cox <rsc@golang.org>2014-05-27 23:59:27 -0400
commit8a2db409c4e08ec9a8d87bdcaea928083f6293fc (patch)
tree47f8300030ac3a0f0fa4c512f3d809fd346718f3 /src/cmd/gc
parentceb982e0049d7464413528ffab87ed0b34bfb56a (diff)
downloadgo-8a2db409c4e08ec9a8d87bdcaea928083f6293fc.tar.xz
cmd/gc: fix race compilation failure 'non-orig name'
CL 51010045 fixed the first one of these: cmd/gc: return canonical Node* from temp For historical reasons, temp was returning a copy of the created Node*, not the original Node*. This meant that if analysis recorded information in the returned node (for example, n->addrtaken = 1), the analysis would not show up on the original Node*, the one kept in fn->dcl and consulted during liveness bitmap creation. Correct this, and watch for it when setting addrtaken. Fixes #7083. R=khr, dave, minux.ma CC=golang-codereviews https://golang.org/cl/51010045 CL 53200043 fixed the second: cmd/gc: fix race build Missed this case in CL 51010045. TBR=khr CC=golang-codereviews https://golang.org/cl/53200043 This CL fixes the third. There are only three nod(OXXX, ...) calls in sinit.c, so maybe we're done. Embarassing that it took three CLs to find all three. Fixes #8028. LGTM=khr R=golang-codereviews, khr CC=golang-codereviews, iant https://golang.org/cl/100800046
Diffstat (limited to 'src/cmd/gc')
-rw-r--r--src/cmd/gc/sinit.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/cmd/gc/sinit.c b/src/cmd/gc/sinit.c
index e285352306..59804cd8d0 100644
--- a/src/cmd/gc/sinit.c
+++ b/src/cmd/gc/sinit.c
@@ -354,6 +354,7 @@ staticcopy(Node *l, Node *r, NodeList **out)
else {
ll = nod(OXXX, N, N);
*ll = n1;
+ ll->orig = ll; // completely separate copy
if(!staticassign(ll, e->expr, out)) {
// Requires computation, but we're
// copying someone else's computation.