From 974d5364a643e107c4dea1df20293c67c32bfc04 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Fri, 10 Aug 2018 20:05:44 -0400 Subject: [PATCH] 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 TryBot-Result: Gobot Gobot Reviewed-by: Bryan C. Mills Reviewed-by: David du Colombier <0intro@gmail.com> --- src/cmd/go/internal/imports/scan.go | 7 +++++++ src/cmd/go/testdata/script/mod_patterns.txt | 4 ++++ 2 files changed, 11 insertions(+) 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 -- 2.50.0