From 305d93ef84aed971145b3aa1bce1f9f389bc90c0 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Sun, 13 Dec 2020 23:01:34 -0800 Subject: [PATCH] [dev.regabi] cmd/compile: type check externdcl earlier 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 Run-TryBot: Matthew Dempsky TryBot-Result: Go Bot Reviewed-by: Russ Cox --- src/cmd/compile/internal/gc/main.go | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/cmd/compile/internal/gc/main.go b/src/cmd/compile/internal/gc/main.go index 368fe1fcab2..fa4dba4935c 100644 --- a/src/cmd/compile/internal/gc/main.go +++ b/src/cmd/compile/internal/gc/main.go @@ -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()