diff options
Diffstat (limited to 'src/cmd/dist/test.go')
-rw-r--r-- | src/cmd/dist/test.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go index ee521f81ba..7c8f1ea46d 100644 --- a/src/cmd/dist/test.go +++ b/src/cmd/dist/test.go @@ -556,6 +556,55 @@ func (t *tester) registerTests() { }) } + // morestack tests. We only run these on in long-test mode + // (with GO_TEST_SHORT=false) because the runtime test is + // already quite long and mayMoreStackMove makes it about + // twice as slow. + if !t.compileOnly && short() == "false" { + // hooks is the set of maymorestack hooks to test with. + hooks := []string{"mayMoreStackPreempt", "mayMoreStackMove"} + // pkgs is the set of test packages to run. + pkgs := []string{"runtime", "reflect", "sync"} + // hookPkgs is the set of package patterns to apply + // the maymorestack hook to. + hookPkgs := []string{"runtime/...", "reflect", "sync"} + // unhookPkgs is the set of package patterns to + // exclude from hookPkgs. + unhookPkgs := []string{"runtime/testdata/..."} + for _, hook := range hooks { + // Construct the build flags to use the + // maymorestack hook in the compiler and + // assembler. We pass this via the GOFLAGS + // environment variable so that it applies to + // both the test itself and to binaries built + // by the test. + goFlagsList := []string{} + for _, flag := range []string{"-gcflags", "-asmflags"} { + for _, hookPkg := range hookPkgs { + goFlagsList = append(goFlagsList, flag+"="+hookPkg+"=-d=maymorestack=runtime."+hook) + } + for _, unhookPkg := range unhookPkgs { + goFlagsList = append(goFlagsList, flag+"="+unhookPkg+"=") + } + } + goFlags := strings.Join(goFlagsList, " ") + + for _, pkg := range pkgs { + pkg := pkg + testName := hook + ":" + pkg + t.tests = append(t.tests, distTest{ + name: testName, + heading: "maymorestack=" + hook, + fn: func(dt *distTest) error { + cmd := t.addCmd(dt, "src", t.goTest(), t.timeout(600), pkg, "-short") + setEnv(cmd, "GOFLAGS", goFlags) + return nil + }, + }) + } + } + } + // This test needs its stdout/stderr to be terminals, so we don't run it from cmd/go's tests. // See issue 18153. if goos == "linux" { |