aboutsummaryrefslogtreecommitdiff
path: root/test/linkmain_run.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2015-12-17 15:10:25 -0500
committerRuss Cox <rsc@golang.org>2015-12-17 20:59:51 +0000
commitc7b1ef9918893ca58eb36f60c9e8a28371c5325e (patch)
treef763ca9108f1f9fce85a83ed5d5fec919e2d3bfa /test/linkmain_run.go
parent2f08bd96a0f291450c0f8cd41741fa475309cfc4 (diff)
downloadgo-c7b1ef9918893ca58eb36f60c9e8a28371c5325e.tar.gz
go-c7b1ef9918893ca58eb36f60c9e8a28371c5325e.zip
cmd/link: reject non-package main toplevel.a file, remove dead code
The test for non-package main top-level inputs is done while parsing the export data. Issue #13468 happened because we were not parsing the export data when using compiler-generated archives (that is, when using go tool compile -pack). Fix this by parsing the export data even for archives. However, that turns up a different problem: the export data check reports (one assumes spurious) skew errors now, because it has not been run since Go 1.2. (Go 1.3 was the first release to use go tool compile -pack.) Since the code hasn't run since Go 1.2, it can't be that important. Since it doesn't work today, just delete it. Figuring out how to make this code work with Robert's export format was one of the largest remaining TODOs for that format. Now we don't have to. Fixes #13468 and makes the world a better place. Change-Id: I40a4b284cf140d49d48b714bd80762d6889acdb9 Reviewed-on: https://go-review.googlesource.com/17976 Reviewed-by: Robert Griesemer <gri@golang.org>
Diffstat (limited to 'test/linkmain_run.go')
-rw-r--r--test/linkmain_run.go65
1 files changed, 65 insertions, 0 deletions
diff --git a/test/linkmain_run.go b/test/linkmain_run.go
new file mode 100644
index 0000000000..a5d2c79b26
--- /dev/null
+++ b/test/linkmain_run.go
@@ -0,0 +1,65 @@
+// +build !nacl
+// run
+
+// Copyright 2014 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.
+
+// Run the sinit test.
+
+package main
+
+import (
+ "fmt"
+ "os"
+ "os/exec"
+ "strings"
+)
+
+func cleanup() {
+ os.Remove("linkmain.o")
+ os.Remove("linkmain.a")
+ os.Remove("linkmain1.o")
+ os.Remove("linkmain1.a")
+ os.Remove("linkmain.exe")
+}
+
+func run(cmdline string) {
+ args := strings.Fields(cmdline)
+ cmd := exec.Command(args[0], args[1:]...)
+ out, err := cmd.CombinedOutput()
+ if err != nil {
+ fmt.Printf("$ %s\n", strings.Join(args, " "))
+ fmt.Println(string(out))
+ fmt.Println(err)
+ cleanup()
+ os.Exit(1)
+ }
+}
+
+func runFail(args ...string) {
+ cmd := exec.Command(args[0], args[1:]...)
+ out, err := cmd.CombinedOutput()
+ if err == nil {
+ fmt.Printf("$ %s\n", strings.Join(args, " "))
+ fmt.Println(string(out))
+ fmt.Println("SHOULD HAVE FAILED!")
+ cleanup()
+ os.Exit(1)
+ }
+}
+
+func main() {
+ // helloworld.go is package main
+ run("go tool compile -o linkmain.o helloworld.go")
+ run("go tool compile -pack -o linkmain.a helloworld.go")
+ run("go tool link -o linkmain.exe linkmain.o")
+ run("go tool link -o linkmain.exe linkmain.a")
+
+ // linkmain.go is not
+ run("go tool compile -o linkmain.o linkmain.go")
+ run("go tool compile -pack -o linkmain.a linkmain.go")
+ runFail("go tool link -o linkmain.exe linkmain1.o")
+ runFail("go tool link -o linkmain.exe linkmain1.a")
+ cleanup()
+}