From: Austin Clements Date: Wed, 17 Mar 2021 16:22:58 +0000 (-0400) Subject: cmd/internal/objabi,runtime: simplify sys.GOEXPERIMENT parsing X-Git-Tag: go1.17beta1~1052 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=095ba225973152734b0722e7c5758accb2639c15;p=gostls13.git cmd/internal/objabi,runtime: simplify sys.GOEXPERIMENT parsing Previously, the runtime had to understand the full syntax of the GOEXPERIMENT environment variable. Now, sys.GOEXPERIMENT is the pre-processed experiment list produced by objabi, so we can simplify the runtime parser. Change-Id: I0d113a4347dde50a35b8b1f2b0110c88fe802921 Reviewed-on: https://go-review.googlesource.com/c/go/+/303049 Trust: Austin Clements Run-TryBot: Austin Clements TryBot-Result: Go Bot Reviewed-by: Cherry Zhang --- diff --git a/src/cmd/internal/objabi/util.go b/src/cmd/internal/objabi/util.go index 9fbe6490e0..2a33f0d84a 100644 --- a/src/cmd/internal/objabi/util.go +++ b/src/cmd/internal/objabi/util.go @@ -171,6 +171,7 @@ func init() { } // Set GOEXPERIMENT to the parsed and canonicalized set of experiments. + // This format must be parseable by runtime.haveexperiment. GOEXPERIMENT = expList() } @@ -184,7 +185,7 @@ func init() { var FramePointerEnabled = GOARCH == "amd64" || GOARCH == "arm64" func addexp(s string) { - // Could do general integer parsing here, but the runtime.haveexperiment doesn't yet. + // We could do general integer parsing here, but there's no need yet. v, vb := 1, true name := s if len(name) > 2 && name[:2] == "no" { diff --git a/src/runtime/proc.go b/src/runtime/proc.go index 9ebfe70883..a666f86abc 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -6027,6 +6027,9 @@ func setMaxThreads(in int) (out int) { } func haveexperiment(name string) bool { + // GOEXPERIMENT is a comma-separated list of enabled + // experiments. It's not the raw environment variable, but a + // pre-processed list from cmd/internal/objabi. x := sys.GOEXPERIMENT for x != "" { xname := "" @@ -6039,9 +6042,6 @@ func haveexperiment(name string) bool { if xname == name { return true } - if len(xname) > 2 && xname[:2] == "no" && xname[2:] == name { - return false - } } return false }