mirror of
https://github.com/golang/go
synced 2024-11-05 18:36:08 +00:00
cmd/compile/internal/gc: fix initialization logic
Also add relevant test. Fixes #13343. Change-Id: Ib1e65af1d643d501de89adee3618eddbf6c69c9e Reviewed-on: https://go-review.googlesource.com/18159 Reviewed-by: Russ Cox <rsc@golang.org> Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
7e24e89944
commit
aaabe3d849
2 changed files with 21 additions and 2 deletions
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
18
test/fixedbugs/bug13343.go
Normal file
18
test/fixedbugs/bug13343.go
Normal file
|
@ -0,0 +1,18 @@
|
|||
// 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() {}
|
Loading…
Reference in a new issue