]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: detect duplicate importing earlier
authorKeith Randall <khr@golang.org>
Fri, 5 Mar 2021 17:50:28 +0000 (09:50 -0800)
committerKeith Randall <khr@golang.org>
Tue, 9 Mar 2021 18:33:42 +0000 (18:33 +0000)
Change-Id: I05ba944e189a884b727e40a9526d212612c3e923
Reviewed-on: https://go-review.googlesource.com/c/go/+/299770
Trust: Keith Randall <khr@golang.org>
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Dan Scales <danscales@google.com>
src/cmd/compile/internal/typecheck/func.go
src/cmd/compile/internal/typecheck/iimport.go

index 6e2354c2810174deab5071079fd4f103ef9b79d9..367df8e9f40650599986043c30a3f26e5471772f 100644 (file)
@@ -108,6 +108,9 @@ var inTypeCheckInl bool
 // Lazy typechecking of imported bodies. For local functions, CanInline will set ->typecheck
 // because they're a copy of an already checked body.
 func ImportedBody(fn *ir.Func) {
+       if fn.Inl.Body != nil {
+               return
+       }
        lno := ir.SetPos(fn.Nname)
 
        // When we load an inlined body, we need to allow OADDR
@@ -151,14 +154,6 @@ func ImportedBody(fn *ir.Func) {
        inTypeCheckInl = false
        ir.CurFunc = savefn
 
-       // During ImportBody (which imports fn.Func.Inl.Body),
-       // declarations are added to fn.Func.Dcl by funcBody(). Move them
-       // to fn.Func.Inl.Dcl for consistency with how local functions
-       // behave. (Append because ImportedBody may be called multiple
-       // times on same fn.)
-       fn.Inl.Dcl = append(fn.Inl.Dcl, fn.Dcl...)
-       fn.Dcl = nil
-
        base.Pos = lno
 }
 
index d7c118b631da3658f2b230d3965979d2e27d3081..5c57373b66fe2a9ec9a54846c9a4ecec0ae6ffb8 100644 (file)
@@ -63,7 +63,7 @@ func expandDecl(n ir.Node) ir.Node {
 
 func ImportBody(fn *ir.Func) {
        if fn.Inl.Body != nil {
-               return
+               base.Fatalf("%v already has inline body", fn)
        }
 
        r := importReaderFor(fn.Nname.Sym(), inlineImporter)