# compile_ext will fail if the buildtags that are enabled (or not enabled) for the # framepointer and fieldtrack experiments are not consistent with the value of # GOEXPSTRING (which comes from objabi.Expstring()). [short] skip go run m -- expt_main.go -- package main import ( "os" "strings" ) func main() { fp() ft() } func hasExpEntry(s string) bool { // script_test.go defines GOEXPSTRING to be the value of // objabi.Expstring(), which gives the enabled experiments baked into the // toolchain. g := os.Getenv("GOEXPSTRING") for _, f := range strings.Split(g, ",") { if f == s { return true } } return false } -- fp_off.go -- // +build !goexperiment.framepointer package main import ( "fmt" "os" ) func fp() { if hasExpEntry("framepointer") { fmt.Println("in !framepointer build, but objabi.Expstring() has 'framepointer'") os.Exit(1) } } -- fp_on.go -- // +build goexperiment.framepointer package main import ( "fmt" "os" ) func fp() { if !hasExpEntry("framepointer") { fmt.Println("in framepointer build, but objabi.Expstring() does not have 'framepointer', is", os.Getenv("GOEXPSTRING")) os.Exit(1) } } -- ft_off.go -- // +build !goexperiment.fieldtrack package main import ( "fmt" "os" ) func ft() { if hasExpEntry("fieldtrack") { fmt.Println("in !fieldtrack build, but objabi.Expstring() has 'fieldtrack'") os.Exit(1) } } -- ft_on.go -- // +build goexperiment.fieldtrack package main import ( "fmt" "os" ) func ft() { if !hasExpEntry("fieldtrack") { fmt.Println("in fieldtrack build, but objabi.Expstring() does not have 'fieldtrack', is", os.Getenv("GOEXPSTRING")) os.Exit(1) } } -- go.mod -- module m go 1.14