if(isblank(n) && n->curfn == N && n->defn != N && n->defn->initorder == InitNotStarted) {
// blank names initialization is part of init() but not
// when they are inside a function.
- n->defn->initorder = InitDone;
- if(debug['%']) dump("nonstatic", n->defn);
- *out = list(*out, n->defn);
+ break;
}
return;
}
init2(n->defn->right, out);
if(debug['j'])
print("%S\n", n->sym);
- if(!staticinit(n, out)) {
+ if(isblank(n) || !staticinit(n, out)) {
if(debug['%']) dump("nonstatic", n->defn);
*out = list(*out, n->defn);
}
--- /dev/null
+// run
+
+// Copyright 2013 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 5244: the init order computation uses the wrong
+// order for top-level blank identifier assignments.
+// The example used to panic because it tries calling a
+// nil function instead of assigning to f before.
+
+package main
+
+var f = func() int { return 1 }
+var _ = f() + g()
+var g = func() int { return 2 }
+
+func main() {}