xref: /aosp_15_r20/external/toolchain-utils/go/patch/go-1.11.2/go2.patch (revision 760c253c1ed00ce9abd48f8546f08516e57485fe)
1*760c253cSXin Lidiff --git test/run.go test/run.go
2*760c253cSXin Liindex ad38d420c9..e2b93d35da 100644
3*760c253cSXin Li--- test/run.go
4*760c253cSXin Li+++ test/run.go
5*760c253cSXin Li@@ -36,13 +36,13 @@ 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
13*760c253cSXin Li 	shard  = flag.Int("shard", 0, "shard index to run. Only applicable if -shards is non-zero.")
14*760c253cSXin Li 	shards = flag.Int("shards", 0, "number of shards. If 0, all tests are run. This is used by the continuous build.")
15*760c253cSXin Li )
16*760c253cSXin Li+	target         = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
17*760c253cSXin Li
18*760c253cSXin Li var (
19*760c253cSXin Li 	goos, goarch string
20*760c253cSXin Li@@ -207,25 +207,19 @@ func goFiles(dir string) []string {
21*760c253cSXin Li type runCmd func(...string) ([]byte, error)
22*760c253cSXin Li
23*760c253cSXin Li func compileFile(runcmd runCmd, longname string, flags []string) (out []byte, err error) {
24*760c253cSXin Li-	cmd := []string{goTool(), "tool", "compile", "-e"}
25*760c253cSXin Li+	cmd := []string{findGoCmd, "tool", "compile", "-e"}
26*760c253cSXin Li 	cmd = append(cmd, flags...)
27*760c253cSXin Li-	if *linkshared {
28*760c253cSXin Li-		cmd = append(cmd, "-dynlink", "-installsuffix=dynlink")
29*760c253cSXin Li-	}
30*760c253cSXin Li 	cmd = append(cmd, longname)
31*760c253cSXin Li 	return runcmd(cmd...)
32*760c253cSXin Li }
33*760c253cSXin Li
34*760c253cSXin Li func compileInDir(runcmd runCmd, dir string, flags []string, localImports bool, names ...string) (out []byte, err error) {
35*760c253cSXin Li-	cmd := []string{goTool(), "tool", "compile", "-e"}
36*760c253cSXin Li+	cmd := []string{findGoCmd(), "tool", "compile", "-e"}
37*760c253cSXin Li 	if localImports {
38*760c253cSXin Li 		// Set relative path for local imports and import search path to current dir.
39*760c253cSXin Li 		cmd = append(cmd, "-D", ".", "-I", ".")
40*760c253cSXin Li 	}
41*760c253cSXin Li 	cmd = append(cmd, flags...)
42*760c253cSXin Li-	if *linkshared {
43*760c253cSXin Li-		cmd = append(cmd, "-dynlink", "-installsuffix=dynlink")
44*760c253cSXin Li-	}
45*760c253cSXin Li 	for _, name := range names {
46*760c253cSXin Li 		cmd = append(cmd, filepath.Join(dir, name))
47*760c253cSXin Li 	}
48*760c253cSXin Li@@ -234,15 +228,28 @@ func compileInDir(runcmd runCmd, dir string, flags []string, localImports bool,
49*760c253cSXin Li
50*760c253cSXin Li func linkFile(runcmd runCmd, goname string) (err error) {
51*760c253cSXin Li 	pfile := strings.Replace(goname, ".go", ".o", -1)
52*760c253cSXin Li-	cmd := []string{goTool(), "tool", "link", "-w", "-o", "a.exe", "-L", "."}
53*760c253cSXin Li+	cmd := []string{findGoCmd(), "tool", "link", "-w", "-o", "a.exe", "-L", "."}
54*760c253cSXin Li 	if *linkshared {
55*760c253cSXin Li 		cmd = append(cmd, "-linkshared", "-installsuffix=dynlink")
56*760c253cSXin Li 	}
57*760c253cSXin Li 	cmd = append(cmd, pfile)
58*760c253cSXin Li-	_, err = runcmd(cmd...)
59*760c253cSXin Li+	_, err = runcmd(findGoCmd(), "tool", "link", "-w", "-o", "a.exe", "-L", ".", pfile)
60*760c253cSXin Li 	return
61*760c253cSXin Li }
62*760c253cSXin Li
63*760c253cSXin Li+
64*760c253cSXin Li+func goRun(runcmd runCmd, flags []string, goname string, args ...string) (out []byte, err error) {
65*760c253cSXin Li+        cmd := []string{findGoCmd(), "run", goGcflags()}
66*760c253cSXin Li+        if len(findExecCmd()) > 0 {
67*760c253cSXin Li+                cmd = append(cmd, "-exec")
68*760c253cSXin Li+                cmd = append(cmd, findExecCmd()...)
69*760c253cSXin Li+        }
70*760c253cSXin Li+        cmd = append(cmd, flags...)
71*760c253cSXin Li+        cmd = append(cmd, goname)
72*760c253cSXin Li+        cmd = append(cmd, args...)
73*760c253cSXin Li+        return runcmd(cmd...)
74*760c253cSXin Li+}
75*760c253cSXin Li+
76*760c253cSXin Li // skipError describes why a test was skipped.
77*760c253cSXin Li type skipError string
78*760c253cSXin Li
79*760c253cSXin Li@@ -646,7 +653,7 @@ func (t *test) run() {
80*760c253cSXin Li 		// Fail if wantError is true and compilation was successful and vice versa.
81*760c253cSXin Li 		// Match errors produced by gc against errors in comments.
82*760c253cSXin Li 		// TODO(gri) remove need for -C (disable printing of columns in error messages)
83*760c253cSXin Li-		cmdline := []string{goTool(), "tool", "compile", "-C", "-e", "-o", "a.o"}
84*760c253cSXin Li+		cmdline := []string{findGoCmd(), "tool", "compile", "-C", "-e", "-o", "a.o"}
85*760c253cSXin Li 		// No need to add -dynlink even if linkshared if we're just checking for errors...
86*760c253cSXin Li 		cmdline = append(cmdline, flags...)
87*760c253cSXin Li 		cmdline = append(cmdline, long)
88*760c253cSXin Li@@ -773,7 +780,7 @@ func (t *test) run() {
89*760c253cSXin Li
90*760c253cSXin Li 	case "build":
91*760c253cSXin Li 		// Build Go file.
92*760c253cSXin Li-		_, err := runcmd(goTool(), "build", goGcflags(), "-o", "a.exe", long)
93*760c253cSXin Li+		_, err := runcmd(findGoCmd(), "build", goGcflags(), "-o", "a.exe", long)
94*760c253cSXin Li 		if err != nil {
95*760c253cSXin Li 			t.err = err
96*760c253cSXin Li 		}
97*760c253cSXin Li@@ -799,7 +806,7 @@ func (t *test) run() {
98*760c253cSXin Li
99*760c253cSXin Li 		}
100*760c253cSXin Li 		var objs []string
101*760c253cSXin Li-		cmd := []string{goTool(), "tool", "compile", "-e", "-D", ".", "-I", ".", "-o", "go.o"}
102*760c253cSXin Li+		cmd := []string{findGoCmd(), "tool", "compile", "-e", "-D", ".", "-I", ".", "-o", "go.o"}
103*760c253cSXin Li 		if len(asms) > 0 {
104*760c253cSXin Li 			cmd = append(cmd, "-asmhdr", "go_asm.h")
105*760c253cSXin Li 		}
106*760c253cSXin Li@@ -813,7 +820,7 @@ func (t *test) run() {
107*760c253cSXin Li 		}
108*760c253cSXin Li 		objs = append(objs, "go.o")
109*760c253cSXin Li 		if len(asms) > 0 {
110*760c253cSXin Li-			cmd = []string{goTool(), "tool", "asm", "-e", "-I", ".", "-o", "asm.o"}
111*760c253cSXin Li+			cmd = []string{findGoCmd(), "tool", "asm", "-e", "-I", ".", "-o", "asm.o"}
112*760c253cSXin Li 			for _, file := range asms {
113*760c253cSXin Li 				cmd = append(cmd, filepath.Join(longdir, file.Name()))
114*760c253cSXin Li 			}
115*760c253cSXin Li@@ -857,14 +864,14 @@ func (t *test) run() {
116*760c253cSXin Li 			}
117*760c253cSXin Li 			objs = append(objs, "asm.o")
118*760c253cSXin Li 		}
119*760c253cSXin Li-		cmd = []string{goTool(), "tool", "pack", "c", "all.a"}
120*760c253cSXin Li+		cmd = []string{findGoCmd(), "tool", "pack", "c", "all.a"}
121*760c253cSXin Li 		cmd = append(cmd, objs...)
122*760c253cSXin Li 		_, err = runcmd(cmd...)
123*760c253cSXin Li 		if err != nil {
124*760c253cSXin Li 			t.err = err
125*760c253cSXin Li 			break
126*760c253cSXin Li 		}
127*760c253cSXin Li-		cmd = []string{goTool(), "tool", "link", "-o", "a.exe", "all.a"}
128*760c253cSXin Li+		cmd = []string{findGoCmd(), "tool", "link", "-o", "a.exe", "all.a"}
129*760c253cSXin Li 		_, err = runcmd(cmd...)
130*760c253cSXin Li 		if err != nil {
131*760c253cSXin Li 			t.err = err
132*760c253cSXin Li@@ -886,10 +893,7 @@ func (t *test) run() {
133*760c253cSXin Li 		// Build an executable from Go file, then run it, verify its output.
134*760c253cSXin Li 		// Useful for timeout tests where failure mode is infinite loop.
135*760c253cSXin Li 		// TODO: not supported on NaCl
136*760c253cSXin Li-		cmd := []string{goTool(), "build", goGcflags(), "-o", "a.exe"}
137*760c253cSXin Li-		if *linkshared {
138*760c253cSXin Li-			cmd = append(cmd, "-linkshared")
139*760c253cSXin Li-		}
140*760c253cSXin Li+		cmd := []string{findGoCmd(), "build", goGcflags(), "-o", "a.exe"}
141*760c253cSXin Li 		longdirgofile := filepath.Join(filepath.Join(cwd, t.dir), t.gofile)
142*760c253cSXin Li 		cmd = append(cmd, flags...)
143*760c253cSXin Li 		cmd = append(cmd, longdirgofile)
144*760c253cSXin Li@@ -898,8 +902,13 @@ func (t *test) run() {
145*760c253cSXin Li 			t.err = err
146*760c253cSXin Li 			return
147*760c253cSXin Li 		}
148*760c253cSXin Li-		cmd = []string{"./a.exe"}
149*760c253cSXin Li-		out, err = runcmd(append(cmd, args...)...)
150*760c253cSXin Li+		cmd = []string{}
151*760c253cSXin Li+                if len(findExecCmd()) > 0 {
152*760c253cSXin Li+                        cmd = append(cmd, findExecCmd()...)
153*760c253cSXin Li+                }
154*760c253cSXin Li+                cmd = append(cmd, "./a.exe")
155*760c253cSXin Li+
156*760c253cSXin Li+ 		out, err = runcmd(append(cmd, args...)...)
157*760c253cSXin Li 		if err != nil {
158*760c253cSXin Li 			t.err = err
159*760c253cSXin Li 			return
160*760c253cSXin Li@@ -914,38 +923,7 @@ func (t *test) run() {
161*760c253cSXin Li 		// otherwise build an executable and run it.
162*760c253cSXin Li 		// Verify the output.
163*760c253cSXin Li 		useTmp = false
164*760c253cSXin Li-		var out []byte
165*760c253cSXin Li-		var err error
166*760c253cSXin Li-		if len(flags)+len(args) == 0 && goGcflags() == "" && !*linkshared {
167*760c253cSXin Li-			// If we're not using special go command flags,
168*760c253cSXin Li-			// skip all the go command machinery.
169*760c253cSXin Li-			// This avoids any time the go command would
170*760c253cSXin Li-			// spend checking whether, for example, the installed
171*760c253cSXin Li-			// package runtime is up to date.
172*760c253cSXin Li-			// Because we run lots of trivial test programs,
173*760c253cSXin Li-			// the time adds up.
174*760c253cSXin Li-			pkg := filepath.Join(t.tempDir, "pkg.a")
175*760c253cSXin Li-			if _, err := runcmd(goTool(), "tool", "compile", "-o", pkg, t.goFileName()); err != nil {
176*760c253cSXin Li-				t.err = err
177*760c253cSXin Li-				return
178*760c253cSXin Li-			}
179*760c253cSXin Li-			exe := filepath.Join(t.tempDir, "test.exe")
180*760c253cSXin Li-			cmd := []string{goTool(), "tool", "link", "-s", "-w"}
181*760c253cSXin Li-			cmd = append(cmd, "-o", exe, pkg)
182*760c253cSXin Li-			if _, err := runcmd(cmd...); err != nil {
183*760c253cSXin Li-				t.err = err
184*760c253cSXin Li-				return
185*760c253cSXin Li-			}
186*760c253cSXin Li-			out, err = runcmd(append([]string{exe}, args...)...)
187*760c253cSXin Li-		} else {
188*760c253cSXin Li-			cmd := []string{goTool(), "run", goGcflags()}
189*760c253cSXin Li-			if *linkshared {
190*760c253cSXin Li-				cmd = append(cmd, "-linkshared")
191*760c253cSXin Li-			}
192*760c253cSXin Li-			cmd = append(cmd, flags...)
193*760c253cSXin Li-			cmd = append(cmd, t.goFileName())
194*760c253cSXin Li-			out, err = runcmd(append(cmd, args...)...)
195*760c253cSXin Li-		}
196*760c253cSXin Li+		out, err := goRun(runcmd, flags, t.goFileName(), args...)
197*760c253cSXin Li 		if err != nil {
198*760c253cSXin Li 			t.err = err
199*760c253cSXin Li 			return
200*760c253cSXin Li@@ -962,12 +940,7 @@ func (t *test) run() {
201*760c253cSXin Li 			<-rungatec
202*760c253cSXin Li 		}()
203*760c253cSXin Li 		useTmp = false
204*760c253cSXin Li-		cmd := []string{goTool(), "run", goGcflags()}
205*760c253cSXin Li-		if *linkshared {
206*760c253cSXin Li-			cmd = append(cmd, "-linkshared")
207*760c253cSXin Li-		}
208*760c253cSXin Li-		cmd = append(cmd, t.goFileName())
209*760c253cSXin Li-		out, err := runcmd(append(cmd, args...)...)
210*760c253cSXin Li+		out, err := goRun(runcmd, nil, t.goFileName(), args...)
211*760c253cSXin Li 		if err != nil {
212*760c253cSXin Li 			t.err = err
213*760c253cSXin Li 			return
214*760c253cSXin Li@@ -977,12 +950,7 @@ func (t *test) run() {
215*760c253cSXin Li 			t.err = fmt.Errorf("write tempfile:%s", err)
216*760c253cSXin Li 			return
217*760c253cSXin Li 		}
218*760c253cSXin Li-		cmd = []string{goTool(), "run", goGcflags()}
219*760c253cSXin Li-		if *linkshared {
220*760c253cSXin Li-			cmd = append(cmd, "-linkshared")
221*760c253cSXin Li-		}
222*760c253cSXin Li-		cmd = append(cmd, tfile)
223*760c253cSXin Li-		out, err = runcmd(cmd...)
224*760c253cSXin Li+		out, err = goRun(runcmd, nil, tfile)
225*760c253cSXin Li 		if err != nil {
226*760c253cSXin Li 			t.err = err
227*760c253cSXin Li 			return
228*760c253cSXin Li@@ -995,12 +963,7 @@ func (t *test) run() {
229*760c253cSXin Li 		// Run Go file and write its output into temporary Go file.
230*760c253cSXin Li 		// Compile and errorCheck generated Go file.
231*760c253cSXin Li 		useTmp = false
232*760c253cSXin Li-		cmd := []string{goTool(), "run", goGcflags()}
233*760c253cSXin Li-		if *linkshared {
234*760c253cSXin Li-			cmd = append(cmd, "-linkshared")
235*760c253cSXin Li-		}
236*760c253cSXin Li-		cmd = append(cmd, t.goFileName())
237*760c253cSXin Li-		out, err := runcmd(append(cmd, args...)...)
238*760c253cSXin Li+		out, err := goRun(runcmd, nil, t.goFileName(), args...)
239*760c253cSXin Li 		if err != nil {
240*760c253cSXin Li 			t.err = err
241*760c253cSXin Li 			return
242*760c253cSXin Li@@ -1011,7 +974,7 @@ func (t *test) run() {
243*760c253cSXin Li 			t.err = fmt.Errorf("write tempfile:%s", err)
244*760c253cSXin Li 			return
245*760c253cSXin Li 		}
246*760c253cSXin Li-		cmdline := []string{goTool(), "tool", "compile", "-e", "-o", "a.o"}
247*760c253cSXin Li+		cmdline := []string{findGoCmd(), "tool", "compile", "-e", "-o", "a.o"}
248*760c253cSXin Li 		cmdline = append(cmdline, flags...)
249*760c253cSXin Li 		cmdline = append(cmdline, tfile)
250*760c253cSXin Li 		out, err = runcmd(cmdline...)
251*760c253cSXin Li@@ -1038,6 +1001,11 @@ func findExecCmd() []string {
252*760c253cSXin Li 		return execCmd
253*760c253cSXin Li 	}
254*760c253cSXin Li 	execCmd = []string{} // avoid work the second time
255*760c253cSXin Li+        if *target != "" {
256*760c253cSXin Li+                execCmd = []string{"go_" + *target + "_exec"}
257*760c253cSXin Li+                return execCmd
258*760c253cSXin Li+        }
259*760c253cSXin Li+
260*760c253cSXin Li 	if goos == runtime.GOOS && goarch == runtime.GOARCH {
261*760c253cSXin Li 		return execCmd
262*760c253cSXin Li 	}
263*760c253cSXin Li@@ -1048,6 +1016,14 @@ func findExecCmd() []string {
264*760c253cSXin Li 	return execCmd
265*760c253cSXin Li }
266*760c253cSXin Li
267*760c253cSXin Li+func findGoCmd() string {
268*760c253cSXin Li+        if *target != "" {
269*760c253cSXin Li+                return "go_" + *target
270*760c253cSXin Li+        }
271*760c253cSXin Li+        return "go"
272*760c253cSXin Li+}
273*760c253cSXin Li+
274*760c253cSXin Li+
275*760c253cSXin Li func (t *test) String() string {
276*760c253cSXin Li 	return filepath.Join(t.dir, t.gofile)
277*760c253cSXin Li }
278