]> Cypherpunks.ru repositories - gostls13.git/blobdiff - src/internal/buildcfg/exp.go
[dev.typeparams] all: merge master (37f9a8f) into dev.typeparams
[gostls13.git] / src / internal / buildcfg / exp.go
index e78f98799918c472aab1c9e53a3d0fd90293547f..e87b6221f1eae2f47f683df8191537aa19aabc8f 100644 (file)
@@ -18,7 +18,7 @@ import (
 //
 // (This is not necessarily the set of experiments the compiler itself
 // was built with.)
-var Experiment goexperiment.Flags = parseExperiments()
+var Experiment goexperiment.Flags = parseExperiments(GOARCH)
 
 var regabiSupported = GOARCH == "amd64" || GOARCH == "arm64"
 var regabiDeveloping = false
@@ -41,7 +41,7 @@ var experimentBaseline = goexperiment.Flags{
 // Note: must agree with runtime.framepointer_enabled.
 var FramePointerEnabled = GOARCH == "amd64" || GOARCH == "arm64"
 
-func parseExperiments() goexperiment.Flags {
+func parseExperiments(goarch string) goexperiment.Flags {
        // Start with the statically enabled set of experiments.
        flags := experimentBaseline
 
@@ -96,11 +96,11 @@ func parseExperiments() goexperiment.Flags {
        }
 
        // regabiwrappers is always enabled on amd64.
-       if GOARCH == "amd64" {
+       if goarch == "amd64" {
                flags.RegabiWrappers = true
        }
        // regabi is only supported on amd64 and arm64.
-       if GOARCH != "amd64" && GOARCH != "arm64" {
+       if goarch != "amd64" && goarch != "arm64" {
                flags.RegabiWrappers = false
                flags.RegabiReflect = false
                flags.RegabiArgs = false
@@ -161,3 +161,10 @@ func EnabledExperiments() []string {
 func AllExperiments() []string {
        return expList(&Experiment, nil, true)
 }
+
+// UpdateExperiments updates the Experiment global based on a new GOARCH value.
+// This is only required for cmd/go, which can change GOARCH after
+// program startup due to use of "go env -w".
+func UpdateExperiments(goarch string) {
+       Experiment = parseExperiments(goarch)
+}