Skip to content

Commit

Permalink
cmd/go: fix missing case checking for empty slice
Browse files Browse the repository at this point in the history
When we were comparing the first element of import stacks when sorting
depserrors we checked if the first stack was non empty, but not the
second one. Do the check for both stacks.

Fixes #61816
For #59905

Change-Id: Id5c11c2b1104eec93196a08c53372ee2ba97c701
Reviewed-on: https://go-review.googlesource.com/c/go/+/516739
Reviewed-by: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
  • Loading branch information
matloob committed Aug 9, 2023
1 parent 5b2ddfa commit 58447d7
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
3 changes: 3 additions & 0 deletions src/cmd/go/internal/list/list.go
Expand Up @@ -957,7 +957,10 @@ func collectDepsErrors(p *load.Package) {
if len(stkj) != 0 {
return true
}

return p.DepsErrors[i].Err.Error() < p.DepsErrors[j].Err.Error()
} else if len(stkj) == 0 {
return false
}
pathi, pathj := stki[len(stki)-1], stkj[len(stkj)-1]
return pathi < pathj
Expand Down
26 changes: 24 additions & 2 deletions src/cmd/go/testdata/script/list_issue_59905.txt
@@ -1,8 +1,13 @@
# Expect no panic
go list -f '{{if .DepsErrors}}{{.DepsErrors}}{{end}}' -export -e -deps
cmpenv stdout wanterr
cmpenv stdout wanterr_59905

-- wanterr --
# Expect no panic (Issue 61816)
cp level1b_61816.txt level1b/pkg.go
go list -f '{{if .DepsErrors}}{{.DepsErrors}}{{end}}' -export -e -deps
cmpenv stdout wanterr_61816

-- wanterr_59905 --
[# test/main/level1a
level1a${/}pkg.go:5:2: level2x redeclared in this block
level1a${/}pkg.go:4:2: other declaration of level2x
Expand All @@ -14,6 +19,23 @@ level1b${/}pkg.go:5:2: level2x redeclared in this block
level1b${/}pkg.go:5:2: "test/main/level1b/level2y" imported as level2x and not used
level1b${/}pkg.go:8:39: undefined: level2y
]
-- wanterr_61816 --
[level1b${/}pkg.go:4:2: package foo is not in std ($GOROOT${/}src${/}foo)]
[# test/main/level1a
level1a${/}pkg.go:5:2: level2x redeclared in this block
level1a${/}pkg.go:4:2: other declaration of level2x
level1a${/}pkg.go:5:2: "test/main/level1a/level2y" imported as level2x and not used
level1a${/}pkg.go:8:39: undefined: level2y
level1b${/}pkg.go:4:2: package foo is not in std ($GOROOT${/}src${/}foo)]
-- level1b_61816.txt --
package level1b

import (
"foo"
)

func Print() { println(level2x.Value, level2y.Value) }

-- go.mod --
module test/main

Expand Down

0 comments on commit 58447d7

Please sign in to comment.