Commit aaabe3d8 authored by Kevin Vu's avatar Kevin Vu Committed by Russ Cox

cmd/compile/internal/gc: fix initialization logic

Also add relevant test.

Fixes #13343.

Change-Id: Ib1e65af1d643d501de89adee3618eddbf6c69c9e
Reviewed-on: https://go-review.googlesource.com/18159Reviewed-by: default avatarRuss Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 7e24e899
......@@ -124,10 +124,10 @@ func init1(n *Node, out **NodeList) {
}
case OAS2FUNC, OAS2MAPR, OAS2DOTTYPE, OAS2RECV:
if defn.Initorder != InitNotStarted {
if defn.Initorder == InitDone {
break
}
defn.Initorder = InitDone
defn.Initorder = InitPending
for l := defn.Rlist; l != nil; l = l.Next {
init1(l.N, out)
}
......@@ -135,6 +135,7 @@ func init1(n *Node, out **NodeList) {
Dump("nonstatic", defn)
}
*out = list(*out, defn)
defn.Initorder = InitDone
}
}
......
// errorcheck
// Copyright 2015 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 main
var (
a, b = f() // ERROR "initialization loop|depends upon itself"
c = b
)
func f() (int, int) {
return c, c
}
func main() {}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment