]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.regabi] cmd/compile: check for recursive import in ImportBody
authorMatthew Dempsky <mdempsky@google.com>
Sun, 27 Dec 2020 19:26:12 +0000 (11:26 -0800)
committerMatthew Dempsky <mdempsky@google.com>
Mon, 28 Dec 2020 08:09:20 +0000 (08:09 +0000)
After earlier importer refactorings, most of the importer is now
reentrant, so we don't need to guard against it at Resolve. The only
remaining part that is still not reentrant is inline body importing,
so move the recursive-import check there.

Passes toolstash -cmp.

Change-Id: Ia828f880a03e6125b102668c12a155d4c253d26b
Reviewed-on: https://go-review.googlesource.com/c/go/+/280515
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
src/cmd/compile/internal/typecheck/iimport.go
src/cmd/compile/internal/typecheck/typecheck.go

index cf2cf8749215f646fa431308bd68b9c3d5f7aeae..546ddcba79295f3775de49b84600a79c3fac3b52 100644 (file)
@@ -71,7 +71,12 @@ func ImportBody(fn *ir.Func) {
                base.Fatalf("missing import reader for %v", fn)
        }
 
+       if inimport {
+               base.Fatalf("recursive inimport")
+       }
+       inimport = true
        r.doInline(fn)
+       inimport = false
 }
 
 func importReaderFor(sym *types.Sym, importers map[*types.Sym]iimporterAndOffset) *importReader {
index dabfee3bf9ca7dbcf8355dca01bf41f70dcd3cf3..e23c249ff2b90465e7cb29c32e6bd2209a87411d 100644 (file)
@@ -251,13 +251,7 @@ func Resolve(n ir.Node) (res ir.Node) {
                        }
                }
 
-               if inimport {
-                       base.Fatalf("recursive inimport")
-               }
-               inimport = true
-               n = expandDecl(n)
-               inimport = false
-               return n
+               return expandDecl(n)
        }
 
        r := ir.AsNode(n.Sym().Def)