cmd/compile: enable -G=3 by default

This CL changes cmd/compile's -G flag's default from 0 to 3, which
enables use of the new types2 type checker and support for type
parameters. The old type checker is still available with
-gcflags=all=-G=0.

The CL also updates the regress test harness to account for the change
in default behavior (e.g., to expect known types2 changes/failures).
However, the -G=0 mode is still being tested for now.

Copy of CL 340914 by danscales@, minus the cmd/internal/objabi.AbsFile
change (handled instead by CL 343731) and rebased to master branch.

Updates #43651.

Change-Id: I1f62d6c0a3ff245e15c5c0e8f3d922129fdd4f29
Reviewed-on: https://go-review.googlesource.com/c/go/+/343732
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
Matthew Dempsky 2021-08-19 15:53:13 -07:00
parent 97d17dc023
commit c9912780ab
3 changed files with 18 additions and 14 deletions

View file

@ -140,6 +140,7 @@ type CmdFlags struct {
// ParseFlags parses the command-line flags into Flag.
func ParseFlags() {
Flag.G = 3
Flag.I = addImportDir
Flag.LowerC = 1

View file

@ -32,6 +32,10 @@ import (
"unicode"
)
// CompilerDefaultGLevel is the -G level used by default when not overridden by a
// command-line flag
const CompilerDefaultGLevel = 3
var (
verbose = flag.Bool("v", false, "verbose. if set, parallelism is set to 1.")
keep = flag.Bool("k", false, "keep. keep temporary directory.")
@ -340,13 +344,18 @@ type test struct {
}
// initExpectFail initializes t.expectFail based on the build+test
// configuration. It should only be called for tests known to use
// types2.
func (t *test) initExpectFail() {
// configuration.
func (t *test) initExpectFail(hasGFlag bool) {
if *force {
return
}
if t.glevel == 0 && !hasGFlag && !unifiedEnabled {
// tests should always pass when run w/o types2 (i.e., using the
// legacy typechecker, option -G=0).
return
}
failureSets := []map[string]bool{types2Failures}
// Note: gccgo supports more 32-bit architectures than this, but
@ -581,14 +590,14 @@ func init() { checkShouldTest() }
// over and over.
func (t *test) goGcflags() string {
flags := os.Getenv("GO_GCFLAGS")
if t.glevel != 0 {
if t.glevel != CompilerDefaultGLevel {
flags = fmt.Sprintf("%s -G=%v", flags, t.glevel)
}
return "-gcflags=all=" + flags
}
func (t *test) goGcflagsIsEmpty() bool {
return "" == os.Getenv("GO_GCFLAGS") && t.glevel == 0
return "" == os.Getenv("GO_GCFLAGS") && t.glevel == CompilerDefaultGLevel
}
var errTimeout = errors.New("command exceeded time limit")
@ -750,7 +759,7 @@ func (t *test) run() {
}
}
if hasGFlag && t.glevel != 0 {
if hasGFlag && t.glevel != CompilerDefaultGLevel {
// test provides explicit -G flag already; don't run again
if *verbose {
fmt.Printf("excl\t%s\n", t.goFileName())
@ -758,13 +767,7 @@ func (t *test) run() {
return false
}
if t.glevel == 0 && !hasGFlag && !unifiedEnabled {
// tests should always pass when run w/o types2 (i.e., using the
// legacy typechecker).
return true
}
t.initExpectFail()
t.initExpectFail(hasGFlag)
switch tool {
case Build, Run:

View file

@ -1,4 +1,4 @@
// compile -G
// compile -G=1
// Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style