aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2018-08-10 20:05:44 -0400
committerRuss Cox <rsc@golang.org>2018-08-17 14:41:26 +0000
commit974d5364a643e107c4dea1df20293c67c32bfc04 (patch)
treeb815dff96a26fde358ffe6b97f0f820b776c3323
parentc265c893de73727b3a54511acf0e3f60593c1fa6 (diff)
downloadgo-974d5364a643e107c4dea1df20293c67c32bfc04.tar.gz
go-974d5364a643e107c4dea1df20293c67c32bfc04.zip
cmd/go: ignore import "C" files in module loader in non-cgo mode
Obviously, including files that import "C" when cgo is disabled is wrong. The package load step correctly excludes them and finds no files at all, which then causes a failure. Fixes #26927. Change-Id: I00e6d6450e783d467d20bde99e91240ecb0db837 Reviewed-on: https://go-review.googlesource.com/129062 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com> Reviewed-by: David du Colombier <0intro@gmail.com>
-rw-r--r--src/cmd/go/internal/imports/scan.go7
-rw-r--r--src/cmd/go/testdata/script/mod_patterns.txt4
2 files changed, 11 insertions, 0 deletions
diff --git a/src/cmd/go/internal/imports/scan.go b/src/cmd/go/internal/imports/scan.go
index 095bb64a8d..bae6b934bc 100644
--- a/src/cmd/go/internal/imports/scan.go
+++ b/src/cmd/go/internal/imports/scan.go
@@ -37,6 +37,7 @@ func scanFiles(files []string, tags map[string]bool, explicitFiles bool) ([]stri
imports := make(map[string]bool)
testImports := make(map[string]bool)
numFiles := 0
+Files:
for _, name := range files {
r, err := os.Open(name)
if err != nil {
@@ -48,6 +49,12 @@ func scanFiles(files []string, tags map[string]bool, explicitFiles bool) ([]stri
if err != nil {
return nil, nil, fmt.Errorf("reading %s: %v", name, err)
}
+ // import "C" is implicit requirement of cgo tag
+ for _, path := range list {
+ if path == `"C"` && !tags["cgo"] && !tags["*"] {
+ continue Files
+ }
+ }
if !explicitFiles && !ShouldBuild(data, tags) {
continue
}
diff --git a/src/cmd/go/testdata/script/mod_patterns.txt b/src/cmd/go/testdata/script/mod_patterns.txt
index 36d738a867..a43fe82489 100644
--- a/src/cmd/go/testdata/script/mod_patterns.txt
+++ b/src/cmd/go/testdata/script/mod_patterns.txt
@@ -43,6 +43,10 @@ stdout example.com/m/useunsafe
[cgo] stdout example.com/m/useC
[!cgo] ! stdout example.com/m/useC
+env CGO_ENABLED=0
+go list -f '{{.ImportPath}}: {{.Match}}' all ... example.com/m/... ./... ./xyz...
+! stdout example.com/m/useC
+
-- m/go.mod --
module example.com/m