"log"
"os"
"os/exec"
+ "path"
"path/filepath"
"regexp"
"strconv"
})
}
+// TODO: Remove when SSA codegen is used by default.
+func (t *tester) registerSSATest(pkg string) {
+ switch pkg {
+ // known failures due to GOGC=off
+ case "runtime", "runtime/pprof", "runtime/trace", "sync":
+ return
+ // TODO: fix these failures
+ case "math/big", "cmd/compile/internal/big":
+ return
+ }
+ t.tests = append(t.tests, distTest{
+ name: "go_test_ssa:" + pkg,
+ heading: "Testing packages with SSA codegen.",
+ fn: func() error {
+ args := []string{
+ "test",
+ "-short",
+ t.timeout(180 * 3), // SSA generates slower code right now
+ "-gcflags=" + os.Getenv("GO_GCFLAGS"),
+ }
+ if t.race {
+ args = append(args, "-race")
+ }
+ args = append(args, pkg)
+ cmd := exec.Command("go", args...)
+ cmd.Env = mergeEnvLists([]string{"GOSSAPKG=" + path.Base(pkg), "GOGC=off"}, os.Environ())
+ cmd.Stdout = os.Stdout
+ cmd.Stderr = os.Stderr
+ return cmd.Run()
+ },
+ })
+}
+
func (t *tester) registerRaceBenchTest(pkg string) {
testName := "go_test_bench:" + pkg
if t.runRx == nil || t.runRx.MatchString(testName) {
if strings.HasPrefix(name, "go_test_bench:") {
t.registerRaceBenchTest(strings.TrimPrefix(name, "go_test_bench:"))
}
+ if t.goarch == "amd64" && strings.HasPrefix(name, "go_test_ssa:") {
+ t.registerSSATest(strings.TrimPrefix(name, "go_test_ssa:"))
+ }
}
} else {
// Use a format string to only list packages and commands that have tests.
for _, pkg := range pkgs {
t.registerStdTest(pkg)
}
+ if t.goarch == "amd64" {
+ for _, pkg := range pkgs {
+ t.registerSSATest(pkg)
+ }
+ }
if t.race {
for _, pkg := range pkgs {
t.registerRaceBenchTest(pkg)