]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: fix missing case checking for empty slice
authorMichael Matloob <matloob@golang.org>
Mon, 7 Aug 2023 21:03:43 +0000 (17:03 -0400)
committerMichael Matloob <matloob@golang.org>
Wed, 9 Aug 2023 17:34:46 +0000 (17:34 +0000)
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>

src/cmd/go/internal/list/list.go
src/cmd/go/testdata/script/list_issue_59905.txt

index 6a3ff0ebeb4f9912e5155cdd392e5b9e58b0fc2e..d9b09077c1ae1295d3865305e03c8ab4e30b594b 100644 (file)
@@ -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
index 74804625998501b2080da6e4df39d9049b41f172..48c40d0d14599b1df6e94e837f4cd24ec66ed5d6 100644 (file)
@@ -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
@@ -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