]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.regabi] cmd/compile: type check externdcl earlier
authorMatthew Dempsky <mdempsky@google.com>
Mon, 14 Dec 2020 07:01:34 +0000 (23:01 -0800)
committerMatthew Dempsky <mdempsky@google.com>
Tue, 15 Dec 2020 07:16:12 +0000 (07:16 +0000)
The next CL requires externdcl to be type checked earlier, but this
causes toolstash -cmp to complain because it causes src.PosBases to
get added in a different order. So split out into a separate CL.

Change-Id: Icab4eadd3fa8acffbd3e980bd8100924378351b3
Reviewed-on: https://go-review.googlesource.com/c/go/+/277732
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
src/cmd/compile/internal/gc/main.go

index 368fe1fcab2335483795499bdb90a16262fcf947..fa4dba4935c776e2eb48e0dbab51b4bafaef8ac2 100644 (file)
@@ -282,9 +282,18 @@ func Main(archInit func(*Arch)) {
                        fcount++
                }
        }
-       // With all types checked, it's now safe to verify map keys. One single
-       // check past phase 9 isn't sufficient, as we may exit with other errors
-       // before then, thus skipping map key errors.
+
+       // Phase 3.11: Check external declarations.
+       // TODO(mdempsky): This should be handled when type checking their
+       // corresponding ODCL nodes.
+       timings.Start("fe", "typecheck", "externdcls")
+       for i, n := range externdcl {
+               if n.Op() == ir.ONAME {
+                       externdcl[i] = typecheck(externdcl[i], ctxExpr)
+               }
+       }
+
+       // Phase 3.14: With all user code type-checked, it's now safe to verify map keys.
        checkMapKeys()
        base.ExitIfErrors()
 
@@ -418,18 +427,6 @@ func Main(archInit func(*Arch)) {
                base.Flag.GenDwarfInl = 0
        }
 
-       // Phase 9: Check external declarations.
-       timings.Start("be", "externaldcls")
-       for i, n := range externdcl {
-               if n.Op() == ir.ONAME {
-                       externdcl[i] = typecheck(externdcl[i], ctxExpr)
-               }
-       }
-       // Check the map keys again, since we typechecked the external
-       // declarations.
-       checkMapKeys()
-       base.ExitIfErrors()
-
        // Write object data to disk.
        timings.Start("be", "dumpobj")
        dumpdata()