| # 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 |