From 941b3b77648bb307c71d29b81b03349584f876e6 Mon Sep 17 00:00:00 2001 From: Paul Jolly Date: Thu, 3 May 2018 08:42:45 +0100 Subject: [PATCH] cmd/go: fix go list -test where C is a dependency. Currently go list -test runtime/cgo fails with an index out of range error. This appears to be because the updating of import paths that happens as part of -test doesn't take into account the fact that the Internal.Imports of a package do not contain "C", whereas the public Imports do. Therefore we skip the public Import of "C" if it exists and continue. Change-Id: I5cdc8968890fa7e5da3e375718606037d3282754 Reviewed-on: https://go-review.googlesource.com/111175 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/cmd/go/go_test.go | 3 +++ src/cmd/go/internal/list/list.go | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index 2b2e17a71a..7fc2197a08 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -1946,6 +1946,9 @@ func TestGoListTest(t *testing.T) { tg.grepStdout(`^cmd/doc\.test$`, "missing cmd/doc test") tg.grepStdoutNot(`^cmd/dist\.test$`, "unexpected cmd/dist test") tg.grepStdoutNot(`^testing`, "unexpected testing") + + tg.run("list", "-test", "runtime/cgo") + tg.grepStdout(`^runtime/cgo$`, "missing runtime/cgo") } // Issue 4096. Validate the output of unsuccessful go install foo/quxx. diff --git a/src/cmd/go/internal/list/list.go b/src/cmd/go/internal/list/list.go index 4cd9846ce4..5b242a887a 100644 --- a/src/cmd/go/internal/list/list.go +++ b/src/cmd/go/internal/list/list.go @@ -318,8 +318,14 @@ func runList(cmd *base.Command, args []string) { } // Update import path lists to use new strings. for _, p := range all { + j := 0 for i := range p.Imports { - p.Imports[i] = p.Internal.Imports[i].ImportPath + // Internal skips "C" + if p.Imports[i] == "C" { + continue + } + p.Imports[i] = p.Internal.Imports[j].ImportPath + j++ } } // Recompute deps lists using new strings, from the leaves up.