gc: diagnose init loop involving func
Fixes #2295.
R=ken2
CC=golang-dev
https://golang.org/cl/5655057
diff --git a/src/cmd/gc/sinit.c b/src/cmd/gc/sinit.c
index 0cf21e2..c8796f8 100644
--- a/src/cmd/gc/sinit.c
+++ b/src/cmd/gc/sinit.c
@@ -65,7 +65,7 @@
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 @@
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
index 0000000..32b7efc
--- /dev/null
+++ b/test/fixedbugs/bug413.go
@@ -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