The importcycles method has not been useful since April 2016 when a large code deletion was performed.
The compiler itself provides some protection against import cycles, and the linker does import cycle detection in linksetup -> postorder.
For #57400
Change-Id: I3095bdb3f16a82ba25681bf4a20ceaa3c9613921
GitHub-Last-Rev:
87a46153b136db67675874ffe46e5881b9c756ce
GitHub-Pull-Request: golang/go#57462
Reviewed-on: https://go-review.googlesource.com/c/go/+/459475
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
adddynlib(ctxt, lib)
}
}
-
-type Pkg struct {
- mark bool
- checked bool
- path string
- impby []*Pkg
-}
-
-var pkgall []*Pkg
-
-func (p *Pkg) cycle() *Pkg {
- if p.checked {
- return nil
- }
-
- if p.mark {
- nerrors++
- fmt.Printf("import cycle:\n")
- fmt.Printf("\t%s\n", p.path)
- return p
- }
-
- p.mark = true
- for _, q := range p.impby {
- if bad := q.cycle(); bad != nil {
- p.mark = false
- p.checked = true
- fmt.Printf("\timports %s\n", p.path)
- if bad == p {
- return nil
- }
- return bad
- }
- }
-
- p.checked = true
- p.mark = false
- return nil
-}
-
-func importcycles() {
- for _, p := range pkgall {
- p.cycle()
- }
-}
// We've loaded all the code now.
ctxt.Loaded = true
- importcycles()
-
strictDupMsgCount = ctxt.loader.NStrictDupMsgs()
}