tg.grepStderr("relative tmpdir", "wrong error")
}
}
+
+// Issue 24704.
+func TestLinkerTmpDirIsDeleted(t *testing.T) {
+ tg := testgo(t)
+ defer tg.cleanup()
+ tg.parallel()
+ tg.tempFile("a.go", `package main; import "C"; func main() {}`)
+ tg.run("build", "-ldflags", "-v", "-o", os.DevNull, tg.path("a.go"))
+ // Find line that has "host link:" in linker output.
+ stderr := tg.getStderr()
+ var hostLinkLine string
+ for _, line := range strings.Split(stderr, "\n") {
+ if !strings.Contains(line, "host link:") {
+ continue
+ }
+ hostLinkLine = line
+ break
+ }
+ if hostLinkLine == "" {
+ t.Fatal(`fail to find with "host link:" string in linker output`)
+ }
+ // Find parameter, like "/tmp/go-link-408556474/go.o" inside of
+ // "host link:" line, and extract temp directory /tmp/go-link-408556474
+ // out of it.
+ tmpdir := hostLinkLine
+ i := strings.Index(tmpdir, `go.o"`)
+ if i == -1 {
+ t.Fatalf(`fail to find "go.o" in "host link:" line %q`, hostLinkLine)
+ }
+ tmpdir = tmpdir[:i-1]
+ i = strings.LastIndex(tmpdir, `"`)
+ if i == -1 {
+ t.Fatalf(`fail to find " in "host link:" line %q`, hostLinkLine)
+ }
+ tmpdir = tmpdir[i+1:]
+ // Verify that temp directory has been removed.
+ _, err := os.Stat(tmpdir)
+ if err == nil {
+ t.Fatalf("temp directory %q has not been removed", tmpdir)
+ }
+ if !os.IsNotExist(err) {
+ t.Fatalf("Stat(%q) returns unexpected error: %v", tmpdir, err)
+ }
+}