Skip to content

Commit e4cbb19

Browse files
committed
go/analysis/passes/nilness: fixed slice not being considered as non-nil
The slice produced by `s := []T{}` or `s := make([]T, 0)` will always be non-nil. But, nilness could not detect it, so I fixed it. Fixes golang/go#45177
1 parent d8aeb16 commit e4cbb19

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

go/analysis/passes/nilness/nilness.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,8 @@ func nilnessOf(stack []fact, v ssa.Value) nilness {
273273
*ssa.MakeClosure,
274274
*ssa.MakeInterface,
275275
*ssa.MakeMap,
276-
*ssa.MakeSlice:
276+
*ssa.MakeSlice,
277+
*ssa.Slice:
277278
return isnonnil
278279
case *ssa.Const:
279280
if v.IsNil() {

go/analysis/passes/nilness/testdata/src/a/a.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ func f3() error {
7171
if ch != nil { // want "tautological condition: non-nil != nil"
7272
print(0)
7373
}
74+
slice := make([]string, 0)
75+
if slice == nil { // want "impossible condition: non-nil == nil"
76+
print(0)
77+
}
7478
return nil
7579
}
7680

0 commit comments

Comments
 (0)