mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +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:
|
case OAS2FUNC, OAS2MAPR, OAS2DOTTYPE, OAS2RECV:
|
||||||
if defn.Initorder != InitNotStarted {
|
if defn.Initorder == InitDone {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
defn.Initorder = InitDone
|
defn.Initorder = InitPending
|
||||||
for l := defn.Rlist; l != nil; l = l.Next {
|
for l := defn.Rlist; l != nil; l = l.Next {
|
||||||
init1(l.N, out)
|
init1(l.N, out)
|
||||||
}
|
}
|
||||||
|
|
@ -135,6 +135,7 @@ func init1(n *Node, out **NodeList) {
|
||||||
Dump("nonstatic", defn)
|
Dump("nonstatic", defn)
|
||||||
}
|
}
|
||||||
*out = list(*out, 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…
Add table
Add a link
Reference in a new issue