aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2021-04-14 13:25:31 -0400
committerRuss Cox <rsc@golang.org>2021-04-16 03:16:55 +0000
commitd26fc68aa10dc8eda5ccdcc80d790e7df2fd9823 (patch)
tree13fa355e29d55de5b536f56fa85e4073a0a00025 /src/cmd
parentcf2396c70e7213570c69ca155203c25c960cc10c (diff)
downloadgo-d26fc68aa10dc8eda5ccdcc80d790e7df2fd9823.tar.xz
cmd/internal/objabi,test: use correct GOEXPERIMENT build tags in test/run.go
Currently, run.go sets GOEXPERIMENT build tags based on the *difference* from the baseline experiment configuration, rather than the absolute experiment configuration. This differs from cmd/go. As a result, if we set a baseline configuration and don't override it with a GOEXPERIMENT setting, run.go won't set any GOEXPERIMENT build tags, instead of setting the tags corresponding to the baseline configuration. Fix this by making compile -V=goexperiment produce the full GOEXPERIMENT configuration, which run.go can then use to set exactly the right set of build tags. For #40724. Change-Id: Ieda6ea62f1a1fabbe8d749d6d09c198fd5ca8377 Reviewed-on: https://go-review.googlesource.com/c/go/+/310171 Trust: Austin Clements <austin@google.com> Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/internal/objabi/exp.go11
-rw-r--r--src/cmd/internal/objabi/flag.go14
2 files changed, 16 insertions, 9 deletions
diff --git a/src/cmd/internal/objabi/exp.go b/src/cmd/internal/objabi/exp.go
index 9eb3e431b3..3371c6c8f8 100644
--- a/src/cmd/internal/objabi/exp.go
+++ b/src/cmd/internal/objabi/exp.go
@@ -108,8 +108,9 @@ func parseExperiments() goexperiment.Flags {
// expList returns the list of lower-cased experiment names for
// experiments that differ from base. base may be nil to indicate no
-// experiments.
-func expList(exp, base *goexperiment.Flags) []string {
+// experiments. If all is true, then include all experiment flags,
+// regardless of base.
+func expList(exp, base *goexperiment.Flags, all bool) []string {
var list []string
rv := reflect.ValueOf(exp).Elem()
var rBase reflect.Value
@@ -124,7 +125,7 @@ func expList(exp, base *goexperiment.Flags) []string {
if base != nil {
baseVal = rBase.Field(i).Bool()
}
- if val != baseVal {
+ if all || val != baseVal {
if val {
list = append(list, name)
} else {
@@ -140,11 +141,11 @@ func expList(exp, base *goexperiment.Flags) []string {
// GOEXPERIMENT is exactly what a user would set on the command line
// to get the set of enabled experiments.
func GOEXPERIMENT() string {
- return strings.Join(expList(&Experiment, &experimentBaseline), ",")
+ return strings.Join(expList(&Experiment, &experimentBaseline, false), ",")
}
// EnabledExperiments returns a list of enabled experiments, as
// lower-cased experiment names.
func EnabledExperiments() []string {
- return expList(&Experiment, nil)
+ return expList(&Experiment, nil, false)
}
diff --git a/src/cmd/internal/objabi/flag.go b/src/cmd/internal/objabi/flag.go
index 6a8a69116d..9fcab4cc85 100644
--- a/src/cmd/internal/objabi/flag.go
+++ b/src/cmd/internal/objabi/flag.go
@@ -93,10 +93,16 @@ func (versionFlag) Set(s string) error {
p := ""
- // If the enabled experiments differ from the defaults,
- // include that difference.
- if goexperiment := GOEXPERIMENT(); goexperiment != "" {
- p = " X:" + goexperiment
+ if s == "goexperiment" {
+ // test/run.go uses this to discover the full set of
+ // experiment tags. Report everything.
+ p = " X:" + strings.Join(expList(&Experiment, nil, true), ",")
+ } else {
+ // If the enabled experiments differ from the defaults,
+ // include that difference.
+ if goexperiment := GOEXPERIMENT(); goexperiment != "" {
+ p = " X:" + goexperiment
+ }
}
// The go command invokes -V=full to get a unique identifier