aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/dist/test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/dist/test.go')
-rw-r--r--src/cmd/dist/test.go49
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" {