summaryrefslogtreecommitdiff
path: root/test/fixedbugs
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
commita8849f346ffb2f2e4c297c3327fa1fa01fe191e9 (patch)
tree29160dc677a56d9b571e996ced1e9377a80e6048 /test/fixedbugs
parent356480413cb73a7d68ced56a358284ff0803aa24 (diff)
downloadgo-a8849f346ffb2f2e4c297c3327fa1fa01fe191e9.tar.gz
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 issue 7083. R=khr, dave, minux.ma CC=golang-codereviews https://codereview.appspot.com/51010045 CL 53200043 fixed the second: cmd/gc: fix race build Missed this case in CL 51010045. TBR=khr CC=golang-codereviews https://codereview.appspot.com/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 issue 8028. LGTM=khr R=golang-codereviews, khr CC=golang-codereviews, iant https://codereview.appspot.com/100800046
Diffstat (limited to 'test/fixedbugs')
-rw-r--r--test/fixedbugs/issue8028.go27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/fixedbugs/issue8028.go b/test/fixedbugs/issue8028.go
new file mode 100644
index 000000000..7ceb902d4
--- /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) }