blob: 26ad029845ee6edf58e459725e60d98303b4b696 [file] [log] [blame]
# 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