diff options
| author | Russ Cox <rsc@golang.org> | 2014-05-27 23:59:27 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2014-05-27 23:59:27 -0400 |
| commit | 8a2db409c4e08ec9a8d87bdcaea928083f6293fc (patch) | |
| tree | 47f8300030ac3a0f0fa4c512f3d809fd346718f3 | |
| parent | ceb982e0049d7464413528ffab87ed0b34bfb56a (diff) | |
| download | go-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
| -rw-r--r-- | src/cmd/gc/sinit.c | 1 | ||||
| -rw-r--r-- | test/fixedbugs/issue8028.go | 27 |
2 files changed, 28 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. diff --git a/test/fixedbugs/issue8028.go b/test/fixedbugs/issue8028.go new file mode 100644 index 0000000000..7ceb902d41 --- /dev/null +++ b/test/fixedbugs/issue8028.go @@ -0,0 +1,27 @@ +// compile + +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Issue 8028. Used to fail in -race mode with "non-orig name" error. + +package p + +var ( + t2 = T{F, "s1"} + t1 = T{F, "s2"} + + tt = [...]T{t1, t2} +) + +type I interface{} + +type T struct { + F func() I + S string +} + +type E struct{} + +func F() I { return new(E) } |
