aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2020-12-31 23:39:15 -0800
committerMatthew Dempsky <mdempsky@google.com>2021-01-01 10:52:27 +0000
commit3a4474cdfda0096b5d88c769f81ad81d6f0168c7 (patch)
tree9001f7614e140a0d3992583802b9a6a57e1198d0
parent0f1d2129c4c294a895480b79eeab8d22c07ac573 (diff)
downloadgo-3a4474cdfda0096b5d88c769f81ad81d6f0168c7.tar.gz
go-3a4474cdfda0096b5d88c769f81ad81d6f0168c7.zip
[dev.regabi] cmd/compile: some more manual shuffling
More minor reshuffling of passes. Passes toolstash -cmp. Change-Id: I22633b3741f668fc5ee8579d7d610035ed57df1f Reviewed-on: https://go-review.googlesource.com/c/go/+/280975 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>
-rw-r--r--src/cmd/compile/internal/gc/abiutils_test.go2
-rw-r--r--src/cmd/compile/internal/gc/main.go26
-rw-r--r--src/cmd/compile/internal/noder/noder.go14
-rw-r--r--src/cmd/compile/internal/typecheck/dcl.go2
-rw-r--r--src/cmd/compile/internal/typecheck/syms.go7
-rw-r--r--src/cmd/compile/internal/typecheck/typecheck.go7
-rw-r--r--src/cmd/compile/internal/typecheck/universe.go4
7 files changed, 29 insertions, 33 deletions
diff --git a/src/cmd/compile/internal/gc/abiutils_test.go b/src/cmd/compile/internal/gc/abiutils_test.go
index d535a6a34b..6fd0af1b1f 100644
--- a/src/cmd/compile/internal/gc/abiutils_test.go
+++ b/src/cmd/compile/internal/gc/abiutils_test.go
@@ -38,7 +38,7 @@ func TestMain(m *testing.M) {
base.Ctxt.Bso = bufio.NewWriter(os.Stdout)
types.PtrSize = ssagen.Arch.LinkArch.PtrSize
types.RegSize = ssagen.Arch.LinkArch.RegSize
- typecheck.Init()
+ typecheck.InitUniverse()
os.Exit(m.Run())
}
diff --git a/src/cmd/compile/internal/gc/main.go b/src/cmd/compile/internal/gc/main.go
index 603619eb5a..df6a9d8e45 100644
--- a/src/cmd/compile/internal/gc/main.go
+++ b/src/cmd/compile/internal/gc/main.go
@@ -200,23 +200,15 @@ func Main(archInit func(*ssagen.ArchInfo)) {
base.AutogeneratedPos = makePos(src.NewFileBase("<autogenerated>", "<autogenerated>"), 1, 0)
- typecheck.Init()
+ typecheck.InitUniverse()
- // Parse input.
- base.Timer.Start("fe", "parse")
- lines := noder.ParseFiles(flag.Args())
- ssagen.CgoSymABIs()
- base.Timer.Stop()
- base.Timer.AddEvent(int64(lines), "lines")
- dwarfgen.RecordPackageName()
+ // Parse and typecheck input.
+ noder.LoadPackage(flag.Args())
- // Typecheck.
- noder.Package()
+ dwarfgen.RecordPackageName()
+ ssagen.CgoSymABIs()
- // With all user code typechecked, it's now safe to verify unused dot imports.
- noder.CheckDotImports()
- base.ExitIfErrors()
- // Phase 6: Compute Addrtaken for names.
+ // Compute Addrtaken for names.
// We need to wait until typechecking is done so that when we see &x[i]
// we know that x has its address taken if x is an array, but not if x is a slice.
// We compute Addrtaken in bulk here.
@@ -227,7 +219,7 @@ func Main(archInit func(*ssagen.ArchInfo)) {
}
typecheck.IncrementalAddrtaken = true
- // Phase 7: Eliminate some obviously dead code.
+ // Eliminate some obviously dead code.
// Must happen after typechecking.
for _, n := range typecheck.Target.Decls {
if n.Op() == ir.ODCLFUNC {
@@ -235,7 +227,7 @@ func Main(archInit func(*ssagen.ArchInfo)) {
}
}
- // Phase 8: Decide how to capture closed variables.
+ // Decide how to capture closed variables.
// This needs to run before escape analysis,
// because variables captured by value do not escape.
base.Timer.Start("fe", "capturevars")
@@ -256,6 +248,7 @@ func Main(archInit func(*ssagen.ArchInfo)) {
// otherwise lazily when used or re-exported.
typecheck.AllImportedBodies()
}
+
// Build init task.
if initTask := pkginit.Task(); initTask != nil {
typecheck.Export(initTask)
@@ -311,6 +304,7 @@ func Main(archInit func(*ssagen.ArchInfo)) {
// Prepare for SSA compilation.
// This must be before peekitabs, because peekitabs
// can trigger function compilation.
+ typecheck.InitRuntime()
ssagen.InitConfig()
// Just before compilation, compile itabs found on
diff --git a/src/cmd/compile/internal/noder/noder.go b/src/cmd/compile/internal/noder/noder.go
index 40569af317..29bfde3ff2 100644
--- a/src/cmd/compile/internal/noder/noder.go
+++ b/src/cmd/compile/internal/noder/noder.go
@@ -25,6 +25,20 @@ import (
"cmd/internal/src"
)
+func LoadPackage(filenames []string) {
+ base.Timer.Start("fe", "parse")
+ lines := ParseFiles(filenames)
+ base.Timer.Stop()
+ base.Timer.AddEvent(int64(lines), "lines")
+
+ // Typecheck.
+ Package()
+
+ // With all user code typechecked, it's now safe to verify unused dot imports.
+ CheckDotImports()
+ base.ExitIfErrors()
+}
+
// ParseFiles concurrently parses files into *syntax.File structures.
// Each declaration in every *syntax.File is converted to a syntax tree
// and its root represented by *Node is appended to Target.Decls.
diff --git a/src/cmd/compile/internal/typecheck/dcl.go b/src/cmd/compile/internal/typecheck/dcl.go
index fd55f472ab..daec9848d0 100644
--- a/src/cmd/compile/internal/typecheck/dcl.go
+++ b/src/cmd/compile/internal/typecheck/dcl.go
@@ -15,7 +15,7 @@ import (
"cmd/internal/src"
)
-var DeclContext ir.Class // PEXTERN/PAUTO
+var DeclContext ir.Class = ir.PEXTERN // PEXTERN/PAUTO
func DeclFunc(sym *types.Sym, tfn ir.Ntype) *ir.Func {
if tfn.Op() != ir.OTFUNC {
diff --git a/src/cmd/compile/internal/typecheck/syms.go b/src/cmd/compile/internal/typecheck/syms.go
index f0e230432a..2251062e16 100644
--- a/src/cmd/compile/internal/typecheck/syms.go
+++ b/src/cmd/compile/internal/typecheck/syms.go
@@ -65,11 +65,9 @@ func Lookup(name string) *types.Sym {
// so that the compiler can generate calls to them,
// but does not make them visible to user code.
func InitRuntime() {
+ base.Timer.Start("fe", "loadsys")
types.Block = 1
- inimport = true
- TypecheckAllowed = true
-
typs := runtimeTypes()
for _, d := range &runtimeDecls {
sym := ir.Pkgs.Runtime.Lookup(d.name)
@@ -83,9 +81,6 @@ func InitRuntime() {
base.Fatalf("unhandled declaration tag %v", d.tag)
}
}
-
- TypecheckAllowed = false
- inimport = false
}
// LookupRuntimeFunc looks up Go function name in package runtime. This function
diff --git a/src/cmd/compile/internal/typecheck/typecheck.go b/src/cmd/compile/internal/typecheck/typecheck.go
index 4c6ac21fc6..c8d82443a1 100644
--- a/src/cmd/compile/internal/typecheck/typecheck.go
+++ b/src/cmd/compile/internal/typecheck/typecheck.go
@@ -31,13 +31,6 @@ var (
NeedRuntimeType = func(*types.Type) {}
)
-func Init() {
- initUniverse()
- DeclContext = ir.PEXTERN
- base.Timer.Start("fe", "loadsys")
- InitRuntime()
-}
-
func AssignExpr(n ir.Node) ir.Node { return typecheck(n, ctxExpr|ctxAssign) }
func Expr(n ir.Node) ir.Node { return typecheck(n, ctxExpr) }
func Stmt(n ir.Node) ir.Node { return typecheck(n, ctxStmt) }
diff --git a/src/cmd/compile/internal/typecheck/universe.go b/src/cmd/compile/internal/typecheck/universe.go
index 054f094cd3..f1e7ed4273 100644
--- a/src/cmd/compile/internal/typecheck/universe.go
+++ b/src/cmd/compile/internal/typecheck/universe.go
@@ -90,8 +90,8 @@ var unsafeFuncs = [...]struct {
{"Sizeof", ir.OSIZEOF},
}
-// initUniverse initializes the universe block.
-func initUniverse() {
+// InitUniverse initializes the universe block.
+func InitUniverse() {
if types.PtrSize == 0 {
base.Fatalf("typeinit before betypeinit")
}