--- /dev/null
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+func f()
+func leaf()
+
+var f1called, f2called, f3called bool
+
+func main() {
+ f()
+ if !f1called {
+ panic("f1 not called")
+ }
+ if !f2called {
+ panic("f2 not called")
+ }
+ leaf()
+ if !f3called {
+ panic("f3 not called")
+ }
+}
+
+func f1() { f1called = true }
+func f2() { f2called = true }
+func f3() { f3called = true }
+
+func unreachable() {
+ panic("unreachable function called")
+}
action = "rundir"
case "cmpout":
action = "run" // the run case already looks for <dir>/<test>.out files
- case "compile", "compiledir", "build", "builddir", "run", "buildrun", "runoutput", "rundir", "asmcheck":
+ case "compile", "compiledir", "build", "builddir", "buildrundir", "run", "buildrun", "runoutput", "rundir", "asmcheck":
// nothing to do
case "errorcheckandrundir":
wantError = false // should be no error if also will run
t.err = err
}
- case "builddir":
+ case "builddir", "buildrundir":
// Build an executable from all the .go and .s files in a subdirectory.
useTmp = true
longdir := filepath.Join(cwd, t.goDirName())
t.err = err
break
}
- cmd = []string{"go", "tool", "link", "all.a"}
+ cmd = []string{"go", "tool", "link", "-o", "a.exe", "all.a"}
_, err = runcmd(cmd...)
if err != nil {
t.err = err
break
}
+ if action == "buildrundir" {
+ cmd = append(findExecCmd(), filepath.Join(t.tempDir, "a.exe"))
+ out, err := runcmd(cmd...)
+ if err != nil {
+ t.err = err
+ break
+ }
+ if strings.Replace(string(out), "\r\n", "\n", -1) != t.expectedOutput() {
+ t.err = fmt.Errorf("incorrect output\n%s", out)
+ }
+ }
case "buildrun": // build binary, then run binary, instead of go run. Useful for timeout tests where failure mode is infinite loop.
// TODO: not supported on NaCl