xref: /aosp_15_r20/external/toolchain-utils/go/patch/go-1.10.3/go2.patch (revision 760c253c1ed00ce9abd48f8546f08516e57485fe)
1*760c253cSXin Lidiff --git test/run.go test/run.go
2*760c253cSXin Liindex 22ec7576f8..ac5d3c3e8d 100644
3*760c253cSXin Li--- test/run.go
4*760c253cSXin Li+++ test/run.go
5*760c253cSXin Li@@ -39,9 +39,9 @@ var (
6*760c253cSXin Li 	summary        = flag.Bool("summary", false, "show summary of results")
7*760c253cSXin Li 	showSkips      = flag.Bool("show_skips", false, "show skipped tests")
8*760c253cSXin Li 	runSkips       = flag.Bool("run_skips", false, "run skipped tests (ignore skip and build tags)")
9*760c253cSXin Li-	linkshared     = flag.Bool("linkshared", false, "")
10*760c253cSXin Li 	updateErrors   = flag.Bool("update_errors", false, "update error messages in test file based on compiler output")
11*760c253cSXin Li 	runoutputLimit = flag.Int("l", defaultRunOutputLimit(), "number of parallel runoutput tests to run")
12*760c253cSXin Li+        target         = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
13*760c253cSXin Li
14*760c253cSXin Li 	shard  = flag.Int("shard", 0, "shard index to run. Only applicable if -shards is non-zero.")
15*760c253cSXin Li 	shards = flag.Int("shards", 0, "number of shards. If 0, all tests are run. This is used by the continuous build.")
16*760c253cSXin Li@@ -194,21 +194,15 @@ func goFiles(dir string) []string {
17*760c253cSXin Li type runCmd func(...string) ([]byte, error)
18*760c253cSXin Li
19*760c253cSXin Li func compileFile(runcmd runCmd, longname string, flags []string) (out []byte, err error) {
20*760c253cSXin Li-	cmd := []string{"go", "tool", "compile", "-e"}
21*760c253cSXin Li+	cmd := []string{findGoCmd(), "tool", "compile", "-e"}
22*760c253cSXin Li 	cmd = append(cmd, flags...)
23*760c253cSXin Li-	if *linkshared {
24*760c253cSXin Li-		cmd = append(cmd, "-dynlink", "-installsuffix=dynlink")
25*760c253cSXin Li-	}
26*760c253cSXin Li 	cmd = append(cmd, longname)
27*760c253cSXin Li 	return runcmd(cmd...)
28*760c253cSXin Li }
29*760c253cSXin Li
30*760c253cSXin Li func compileInDir(runcmd runCmd, dir string, flags []string, names ...string) (out []byte, err error) {
31*760c253cSXin Li-	cmd := []string{"go", "tool", "compile", "-e", "-D", ".", "-I", "."}
32*760c253cSXin Li+	cmd := []string{findGoCmd(), "tool", "compile", "-e", "-D", ".", "-I", "."}
33*760c253cSXin Li 	cmd = append(cmd, flags...)
34*760c253cSXin Li-	if *linkshared {
35*760c253cSXin Li-		cmd = append(cmd, "-dynlink", "-installsuffix=dynlink")
36*760c253cSXin Li-	}
37*760c253cSXin Li 	for _, name := range names {
38*760c253cSXin Li 		cmd = append(cmd, filepath.Join(dir, name))
39*760c253cSXin Li 	}
40*760c253cSXin Li@@ -217,15 +211,24 @@ func compileInDir(runcmd runCmd, dir string, flags []string, names ...string) (o
41*760c253cSXin Li
42*760c253cSXin Li func linkFile(runcmd runCmd, goname string) (err error) {
43*760c253cSXin Li 	pfile := strings.Replace(goname, ".go", ".o", -1)
44*760c253cSXin Li-	cmd := []string{"go", "tool", "link", "-w", "-o", "a.exe", "-L", "."}
45*760c253cSXin Li-	if *linkshared {
46*760c253cSXin Li-		cmd = append(cmd, "-linkshared", "-installsuffix=dynlink")
47*760c253cSXin Li-	}
48*760c253cSXin Li-	cmd = append(cmd, pfile)
49*760c253cSXin Li-	_, err = runcmd(cmd...)
50*760c253cSXin Li+	cmd := []string{findGoCmd, "tool", "link", "-w", "-o", "a.exe", "-L", "."}
51*760c253cSXin Li+	_, err = runcmd(findGoCmd(), "tool", "link", "-w", "-o", "a.exe", "-L", ".", pfile)
52*760c253cSXin Li 	return
53*760c253cSXin Li }
54*760c253cSXin Li
55*760c253cSXin Li+
56*760c253cSXin Li+func goRun(runcmd runCmd, flags []string, goname string, args ...string) (out []byte, err error) {
57*760c253cSXin Li+        cmd := []string{findGoCmd(), "run", goGcflags()}
58*760c253cSXin Li+        if len(findExecCmd()) > 0 {
59*760c253cSXin Li+                cmd = append(cmd, "-exec")
60*760c253cSXin Li+                cmd = append(cmd, findExecCmd()...)
61*760c253cSXin Li+        }
62*760c253cSXin Li+        cmd = append(cmd, flags...)
63*760c253cSXin Li+        cmd = append(cmd, goname)
64*760c253cSXin Li+        cmd = append(cmd, args...)
65*760c253cSXin Li+        return runcmd(cmd...)
66*760c253cSXin Li+}
67*760c253cSXin Li+
68*760c253cSXin Li // skipError describes why a test was skipped.
69*760c253cSXin Li type skipError string
70*760c253cSXin Li
71*760c253cSXin Li@@ -595,7 +598,7 @@ func (t *test) run() {
72*760c253cSXin Li
73*760c253cSXin Li 	case "errorcheck":
74*760c253cSXin Li 		// TODO(gri) remove need for -C (disable printing of columns in error messages)
75*760c253cSXin Li-		cmdline := []string{"go", "tool", "compile", "-C", "-e", "-o", "a.o"}
76*760c253cSXin Li+		cmdline := []string{findGoCmd(), "tool", "compile", "-C", "-e", "-o", "a.o"}
77*760c253cSXin Li 		// No need to add -dynlink even if linkshared if we're just checking for errors...
78*760c253cSXin Li 		cmdline = append(cmdline, flags...)
79*760c253cSXin Li 		cmdline = append(cmdline, long)
80*760c253cSXin Li@@ -709,7 +712,7 @@ func (t *test) run() {
81*760c253cSXin Li 		}
82*760c253cSXin Li
83*760c253cSXin Li 	case "build":
84*760c253cSXin Li-		_, err := runcmd("go", "build", goGcflags(), "-o", "a.exe", long)
85*760c253cSXin Li+		_, err := runcmd(findGoCmd(), "build", goGcflags(), "-o", "a.exe", long)
86*760c253cSXin Li 		if err != nil {
87*760c253cSXin Li 			t.err = err
88*760c253cSXin Li 		}
89*760c253cSXin Li@@ -735,7 +738,7 @@ func (t *test) run() {
90*760c253cSXin Li
91*760c253cSXin Li 		}
92*760c253cSXin Li 		var objs []string
93*760c253cSXin Li-		cmd := []string{"go", "tool", "compile", "-e", "-D", ".", "-I", ".", "-o", "go.o"}
94*760c253cSXin Li+		cmd := []string{findGoCmd(), "tool", "compile", "-e", "-D", ".", "-I", ".", "-o", "go.o"}
95*760c253cSXin Li 		if len(asms) > 0 {
96*760c253cSXin Li 			cmd = append(cmd, "-asmhdr", "go_asm.h")
97*760c253cSXin Li 		}
98*760c253cSXin Li@@ -749,7 +752,7 @@ func (t *test) run() {
99*760c253cSXin Li 		}
100*760c253cSXin Li 		objs = append(objs, "go.o")
101*760c253cSXin Li 		if len(asms) > 0 {
102*760c253cSXin Li-			cmd = []string{"go", "tool", "asm", "-e", "-I", ".", "-o", "asm.o"}
103*760c253cSXin Li+			cmd = []string{findGoCmd(), "tool", "asm", "-e", "-I", ".", "-o", "asm.o"}
104*760c253cSXin Li 			for _, file := range asms {
105*760c253cSXin Li 				cmd = append(cmd, filepath.Join(longdir, file.Name()))
106*760c253cSXin Li 			}
107*760c253cSXin Li@@ -760,14 +763,14 @@ func (t *test) run() {
108*760c253cSXin Li 			}
109*760c253cSXin Li 			objs = append(objs, "asm.o")
110*760c253cSXin Li 		}
111*760c253cSXin Li-		cmd = []string{"go", "tool", "pack", "c", "all.a"}
112*760c253cSXin Li+		cmd = []string{findGoCmd(), "tool", "pack", "c", "all.a"}
113*760c253cSXin Li 		cmd = append(cmd, objs...)
114*760c253cSXin Li 		_, err = runcmd(cmd...)
115*760c253cSXin Li 		if err != nil {
116*760c253cSXin Li 			t.err = err
117*760c253cSXin Li 			break
118*760c253cSXin Li 		}
119*760c253cSXin Li-		cmd = []string{"go", "tool", "link", "all.a"}
120*760c253cSXin Li+		cmd = []string{findGoCmd(), "tool", "link", "-o", "a.exe", "all.a"}
121*760c253cSXin Li 		_, err = runcmd(cmd...)
122*760c253cSXin Li 		if err != nil {
123*760c253cSXin Li 			t.err = err
124*760c253cSXin Li@@ -777,10 +780,7 @@ func (t *test) run() {
125*760c253cSXin Li 	case "buildrun": // build binary, then run binary, instead of go run. Useful for timeout tests where failure mode is infinite loop.
126*760c253cSXin Li 		// TODO: not supported on NaCl
127*760c253cSXin Li 		useTmp = true
128*760c253cSXin Li-		cmd := []string{"go", "build", goGcflags(), "-o", "a.exe"}
129*760c253cSXin Li-		if *linkshared {
130*760c253cSXin Li-			cmd = append(cmd, "-linkshared")
131*760c253cSXin Li-		}
132*760c253cSXin Li+		cmd := []string{findGoCmd(), "build", goGcflags(), "-o", "a.exe"}
133*760c253cSXin Li 		longdirgofile := filepath.Join(filepath.Join(cwd, t.dir), t.gofile)
134*760c253cSXin Li 		cmd = append(cmd, flags...)
135*760c253cSXin Li 		cmd = append(cmd, longdirgofile)
136*760c253cSXin Li@@ -789,7 +789,12 @@ func (t *test) run() {
137*760c253cSXin Li 			t.err = err
138*760c253cSXin Li 			return
139*760c253cSXin Li 		}
140*760c253cSXin Li-		cmd = []string{"./a.exe"}
141*760c253cSXin Li+                cmd = []string{}
142*760c253cSXin Li+                if len(findExecCmd()) > 0 {
143*760c253cSXin Li+                        cmd = append(cmd, findExecCmd()...)
144*760c253cSXin Li+                }
145*760c253cSXin Li+                cmd = append(cmd, "./a.exe")
146*760c253cSXin Li+
147*760c253cSXin Li 		out, err = runcmd(append(cmd, args...)...)
148*760c253cSXin Li 		if err != nil {
149*760c253cSXin Li 			t.err = err
150*760c253cSXin Li@@ -802,38 +807,7 @@ func (t *test) run() {
151*760c253cSXin Li
152*760c253cSXin Li 	case "run":
153*760c253cSXin Li 		useTmp = false
154*760c253cSXin Li-		var out []byte
155*760c253cSXin Li-		var err error
156*760c253cSXin Li-		if len(flags)+len(args) == 0 && goGcflags() == "" && !*linkshared {
157*760c253cSXin Li-			// If we're not using special go command flags,
158*760c253cSXin Li-			// skip all the go command machinery.
159*760c253cSXin Li-			// This avoids any time the go command would
160*760c253cSXin Li-			// spend checking whether, for example, the installed
161*760c253cSXin Li-			// package runtime is up to date.
162*760c253cSXin Li-			// Because we run lots of trivial test programs,
163*760c253cSXin Li-			// the time adds up.
164*760c253cSXin Li-			pkg := filepath.Join(t.tempDir, "pkg.a")
165*760c253cSXin Li-			if _, err := runcmd("go", "tool", "compile", "-o", pkg, t.goFileName()); err != nil {
166*760c253cSXin Li-				t.err = err
167*760c253cSXin Li-				return
168*760c253cSXin Li-			}
169*760c253cSXin Li-			exe := filepath.Join(t.tempDir, "test.exe")
170*760c253cSXin Li-			cmd := []string{"go", "tool", "link", "-s", "-w"}
171*760c253cSXin Li-			cmd = append(cmd, "-o", exe, pkg)
172*760c253cSXin Li-			if _, err := runcmd(cmd...); err != nil {
173*760c253cSXin Li-				t.err = err
174*760c253cSXin Li-				return
175*760c253cSXin Li-			}
176*760c253cSXin Li-			out, err = runcmd(append([]string{exe}, args...)...)
177*760c253cSXin Li-		} else {
178*760c253cSXin Li-			cmd := []string{"go", "run", goGcflags()}
179*760c253cSXin Li-			if *linkshared {
180*760c253cSXin Li-				cmd = append(cmd, "-linkshared")
181*760c253cSXin Li-			}
182*760c253cSXin Li-			cmd = append(cmd, flags...)
183*760c253cSXin Li-			cmd = append(cmd, t.goFileName())
184*760c253cSXin Li-			out, err = runcmd(append(cmd, args...)...)
185*760c253cSXin Li-		}
186*760c253cSXin Li+		out, err := goRun(runcmd, flags, t.goFileName(), args...)
187*760c253cSXin Li 		if err != nil {
188*760c253cSXin Li 			t.err = err
189*760c253cSXin Li 			return
190*760c253cSXin Li@@ -848,12 +822,7 @@ func (t *test) run() {
191*760c253cSXin Li 			<-rungatec
192*760c253cSXin Li 		}()
193*760c253cSXin Li 		useTmp = false
194*760c253cSXin Li-		cmd := []string{"go", "run", goGcflags()}
195*760c253cSXin Li-		if *linkshared {
196*760c253cSXin Li-			cmd = append(cmd, "-linkshared")
197*760c253cSXin Li-		}
198*760c253cSXin Li-		cmd = append(cmd, t.goFileName())
199*760c253cSXin Li-		out, err := runcmd(append(cmd, args...)...)
200*760c253cSXin Li+		out, err := goRun(runcmd, nil, t.goFileName(), args...)
201*760c253cSXin Li 		if err != nil {
202*760c253cSXin Li 			t.err = err
203*760c253cSXin Li 			return
204*760c253cSXin Li@@ -863,12 +832,7 @@ func (t *test) run() {
205*760c253cSXin Li 			t.err = fmt.Errorf("write tempfile:%s", err)
206*760c253cSXin Li 			return
207*760c253cSXin Li 		}
208*760c253cSXin Li-		cmd = []string{"go", "run", goGcflags()}
209*760c253cSXin Li-		if *linkshared {
210*760c253cSXin Li-			cmd = append(cmd, "-linkshared")
211*760c253cSXin Li-		}
212*760c253cSXin Li-		cmd = append(cmd, tfile)
213*760c253cSXin Li-		out, err = runcmd(cmd...)
214*760c253cSXin Li+		out, err = goRun(runcmd, nil, tfile)
215*760c253cSXin Li 		if err != nil {
216*760c253cSXin Li 			t.err = err
217*760c253cSXin Li 			return
218*760c253cSXin Li@@ -879,12 +843,7 @@ func (t *test) run() {
219*760c253cSXin Li
220*760c253cSXin Li 	case "errorcheckoutput":
221*760c253cSXin Li 		useTmp = false
222*760c253cSXin Li-		cmd := []string{"go", "run", goGcflags()}
223*760c253cSXin Li-		if *linkshared {
224*760c253cSXin Li-			cmd = append(cmd, "-linkshared")
225*760c253cSXin Li-		}
226*760c253cSXin Li-		cmd = append(cmd, t.goFileName())
227*760c253cSXin Li-		out, err := runcmd(append(cmd, args...)...)
228*760c253cSXin Li+		out, err := goRun(runcmd, nil, t.goFileName(), args...)
229*760c253cSXin Li 		if err != nil {
230*760c253cSXin Li 			t.err = err
231*760c253cSXin Li 			return
232*760c253cSXin Li@@ -895,7 +854,7 @@ func (t *test) run() {
233*760c253cSXin Li 			t.err = fmt.Errorf("write tempfile:%s", err)
234*760c253cSXin Li 			return
235*760c253cSXin Li 		}
236*760c253cSXin Li-		cmdline := []string{"go", "tool", "compile", "-e", "-o", "a.o"}
237*760c253cSXin Li+		cmdline := []string{findGoCmd(), "tool", "compile", "-e", "-o", "a.o"}
238*760c253cSXin Li 		cmdline = append(cmdline, flags...)
239*760c253cSXin Li 		cmdline = append(cmdline, tfile)
240*760c253cSXin Li 		out, err = runcmd(cmdline...)
241*760c253cSXin Li@@ -922,6 +881,11 @@ func findExecCmd() []string {
242*760c253cSXin Li 		return execCmd
243*760c253cSXin Li 	}
244*760c253cSXin Li 	execCmd = []string{} // avoid work the second time
245*760c253cSXin Li+        if *target != "" {
246*760c253cSXin Li+                execCmd = []string{"go_" + *target + "_exec"}
247*760c253cSXin Li+                return execCmd
248*760c253cSXin Li+        }
249*760c253cSXin Li+
250*760c253cSXin Li 	if goos == runtime.GOOS && goarch == runtime.GOARCH {
251*760c253cSXin Li 		return execCmd
252*760c253cSXin Li 	}
253*760c253cSXin Li@@ -932,6 +896,14 @@ func findExecCmd() []string {
254*760c253cSXin Li 	return execCmd
255*760c253cSXin Li }
256*760c253cSXin Li
257*760c253cSXin Li+func findGoCmd() string {
258*760c253cSXin Li+        if *target != "" {
259*760c253cSXin Li+                return "go_" + *target
260*760c253cSXin Li+        }
261*760c253cSXin Li+        return "go"
262*760c253cSXin Li+}
263*760c253cSXin Li+
264*760c253cSXin Li+
265*760c253cSXin Li func (t *test) String() string {
266*760c253cSXin Li 	return filepath.Join(t.dir, t.gofile)
267*760c253cSXin Li }
268