From: Ian Lance Taylor Date: Thu, 12 Aug 2021 22:51:26 +0000 (-0700) Subject: cmd/go: don't fail in ToSymbolFunc when using -n X-Git-Tag: go1.19beta1~339 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=a971499a6234d94b5be93b573de64d1b4f36654e;p=gostls13.git cmd/go: don't fail in ToSymbolFunc when using -n CL 214429, among other things, created gccgo_link_c.txt as a copy of a test formerly in go_test.go, but accidentally did so incorrectly: it used -r instead of -n. This was not noticed because the new test also incorrectly used [gccgo] when it should have used [exec:gccgo]. Fixing both of those, and also fixing the test to use a go.mod file, revealed that "go build -n -compiler gccgo" doesn't work, because it passes a non-existent tmpdir to pkgpath.ToSymbolFunc. This CL fixes that too. Change-Id: Id89296803b55412af3bd87aab992f32e26dbce0e Reviewed-on: https://go-review.googlesource.com/c/go/+/341969 Auto-Submit: Ian Lance Taylor Reviewed-by: Bryan Mills Run-TryBot: Ian Lance Taylor Reviewed-by: Ian Lance Taylor Run-TryBot: Ian Lance Taylor TryBot-Result: Gopher Robot --- diff --git a/src/cmd/go/internal/work/gccgo.go b/src/cmd/go/internal/work/gccgo.go index cfd9bcc0c2..d37b8df07b 100644 --- a/src/cmd/go/internal/work/gccgo.go +++ b/src/cmd/go/internal/work/gccgo.go @@ -605,7 +605,11 @@ var gccgoToSymbolFunc func(string) string func (tools gccgoToolchain) gccgoCleanPkgpath(b *Builder, p *load.Package) string { gccgoToSymbolFuncOnce.Do(func() { - fn, err := pkgpath.ToSymbolFunc(tools.compiler(), b.WorkDir) + tmpdir := b.WorkDir + if cfg.BuildN { + tmpdir = os.TempDir() + } + fn, err := pkgpath.ToSymbolFunc(tools.compiler(), tmpdir) if err != nil { fmt.Fprintf(os.Stderr, "cmd/go: %v\n", err) base.SetExitStatus(2) diff --git a/src/cmd/go/testdata/script/gccgo_link_c.txt b/src/cmd/go/testdata/script/gccgo_link_c.txt index 422adea93d..b9a4c70b7e 100644 --- a/src/cmd/go/testdata/script/gccgo_link_c.txt +++ b/src/cmd/go/testdata/script/gccgo_link_c.txt @@ -2,15 +2,17 @@ # cmd/cgo: undefined reference when linking a C-library using gccgo [!cgo] skip -[!gccgo] skip +[!exec:gccgo] skip -go build -r -compiler gccgo cgoref +go build -n -compiler gccgo stderr 'gccgo.*\-L [^ ]*alibpath \-lalib' # make sure that Go-inline "#cgo LDFLAGS:" ("-L alibpath -lalib") passed to gccgo linking stage --- cgoref/cgoref.go -- +-- go.mod -- +module m +-- cgoref.go -- package main // #cgo LDFLAGS: -L alibpath -lalib // void f(void) {} import "C" -func main() { C.f() } \ No newline at end of file +func main() { C.f() }