]> Cypherpunks repositories - gostls13.git/commitdiff
gc: diagnose init loop involving func
authorRuss Cox <rsc@golang.org>
Sat, 11 Feb 2012 04:10:45 +0000 (23:10 -0500)
committerRuss Cox <rsc@golang.org>
Sat, 11 Feb 2012 04:10:45 +0000 (23:10 -0500)
Fixes #2295.

R=ken2
CC=golang-dev
https://golang.org/cl/5655057

src/cmd/gc/sinit.c
test/fixedbugs/bug413.go [new file with mode: 0644]

index 0cf21e2bbe414262c4c29f64f351137c5a66dc97..c8796f8b76a11ff52a4d6287b6f514d7b0874af0 100644 (file)
@@ -65,7 +65,7 @@ init1(Node *n, NodeList **out)
                if(nerrors > 0)
                        errorexit();
 
-               print("initialization loop:\n");
+               print("%L: initialization loop:\n", n->lineno);
                for(l=initlist;; l=l->next) {
                        if(l->next == nil)
                                break;
@@ -106,7 +106,7 @@ init1(Node *n, NodeList **out)
                        break;
                */
                        if(1) {
-                               init1(n->defn->right, out);
+                               init2(n->defn->right, out);
                                if(debug['j'])
                                        print("%S\n", n->sym);
                                if(!staticinit(n, out)) {
diff --git a/test/fixedbugs/bug413.go b/test/fixedbugs/bug413.go
new file mode 100644 (file)
index 0000000..32b7efc
--- /dev/null
@@ -0,0 +1,11 @@
+// errchk $G $D/$F.go
+
+// Copyright 2012 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.
+
+package p
+
+func f(i int) int { return i }
+
+var i = func() int {a := f(i); return a}()  // ERROR "initialization loop"
\ No newline at end of file