mirror of
https://github.com/golang/go
synced 2024-11-22 20:24:47 -07:00
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:
parent
97d17dc023
commit
c9912780ab
@ -140,6 +140,7 @@ type CmdFlags struct {
|
|||||||
|
|
||||||
// ParseFlags parses the command-line flags into Flag.
|
// ParseFlags parses the command-line flags into Flag.
|
||||||
func ParseFlags() {
|
func ParseFlags() {
|
||||||
|
Flag.G = 3
|
||||||
Flag.I = addImportDir
|
Flag.I = addImportDir
|
||||||
|
|
||||||
Flag.LowerC = 1
|
Flag.LowerC = 1
|
||||||
|
29
test/run.go
29
test/run.go
@ -32,6 +32,10 @@ import (
|
|||||||
"unicode"
|
"unicode"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// CompilerDefaultGLevel is the -G level used by default when not overridden by a
|
||||||
|
// command-line flag
|
||||||
|
const CompilerDefaultGLevel = 3
|
||||||
|
|
||||||
var (
|
var (
|
||||||
verbose = flag.Bool("v", false, "verbose. if set, parallelism is set to 1.")
|
verbose = flag.Bool("v", false, "verbose. if set, parallelism is set to 1.")
|
||||||
keep = flag.Bool("k", false, "keep. keep temporary directory.")
|
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
|
// initExpectFail initializes t.expectFail based on the build+test
|
||||||
// configuration. It should only be called for tests known to use
|
// configuration.
|
||||||
// types2.
|
func (t *test) initExpectFail(hasGFlag bool) {
|
||||||
func (t *test) initExpectFail() {
|
|
||||||
if *force {
|
if *force {
|
||||||
return
|
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}
|
failureSets := []map[string]bool{types2Failures}
|
||||||
|
|
||||||
// Note: gccgo supports more 32-bit architectures than this, but
|
// Note: gccgo supports more 32-bit architectures than this, but
|
||||||
@ -581,14 +590,14 @@ func init() { checkShouldTest() }
|
|||||||
// over and over.
|
// over and over.
|
||||||
func (t *test) goGcflags() string {
|
func (t *test) goGcflags() string {
|
||||||
flags := os.Getenv("GO_GCFLAGS")
|
flags := os.Getenv("GO_GCFLAGS")
|
||||||
if t.glevel != 0 {
|
if t.glevel != CompilerDefaultGLevel {
|
||||||
flags = fmt.Sprintf("%s -G=%v", flags, t.glevel)
|
flags = fmt.Sprintf("%s -G=%v", flags, t.glevel)
|
||||||
}
|
}
|
||||||
return "-gcflags=all=" + flags
|
return "-gcflags=all=" + flags
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *test) goGcflagsIsEmpty() bool {
|
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")
|
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
|
// test provides explicit -G flag already; don't run again
|
||||||
if *verbose {
|
if *verbose {
|
||||||
fmt.Printf("excl\t%s\n", t.goFileName())
|
fmt.Printf("excl\t%s\n", t.goFileName())
|
||||||
@ -758,13 +767,7 @@ func (t *test) run() {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
if t.glevel == 0 && !hasGFlag && !unifiedEnabled {
|
t.initExpectFail(hasGFlag)
|
||||||
// tests should always pass when run w/o types2 (i.e., using the
|
|
||||||
// legacy typechecker).
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
t.initExpectFail()
|
|
||||||
|
|
||||||
switch tool {
|
switch tool {
|
||||||
case Build, Run:
|
case Build, Run:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// compile -G
|
// compile -G=1
|
||||||
|
|
||||||
// Copyright 2020 The Go Authors. All rights reserved.
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
|
Loading…
Reference in New Issue
Block a user