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
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.
--- /dev/null
+// 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) }