Skip to content

Commit b22d8f6

Browse files
committed
fixed nil slice to be considered nil
1 parent e4cbb19 commit b22d8f6

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

go/analysis/passes/nilness/nilness.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,8 +273,12 @@ func nilnessOf(stack []fact, v ssa.Value) nilness {
273273
*ssa.MakeClosure,
274274
*ssa.MakeInterface,
275275
*ssa.MakeMap,
276-
*ssa.MakeSlice,
277-
*ssa.Slice:
276+
*ssa.MakeSlice:
277+
return isnonnil
278+
case *ssa.Slice:
279+
if cons, ok := v.X.(*ssa.Const); ok && cons.IsNil() {
280+
return isnil
281+
}
278282
return isnonnil
279283
case *ssa.Const:
280284
if v.IsNil() {

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

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,6 @@ 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-
}
7874
return nil
7975
}
8076

@@ -134,7 +130,6 @@ func f9(x interface {
134130
b()
135131
c()
136132
}) {
137-
138133
x.b() // we don't catch this panic because we don't have any facts yet
139134
xx := interface {
140135
a()
@@ -159,6 +154,22 @@ func f9(x interface {
159154
}
160155
}
161156

157+
func f10() {
158+
s0 := make([]string, 0)
159+
if s0 == nil { // want "impossible condition: non-nil == nil"
160+
print(0)
161+
}
162+
163+
var s1 []string
164+
if s1 == nil { // want "tautological condition: nil == nil"
165+
print(0)
166+
}
167+
s2 := s1[:]
168+
if s2 == nil { // want "tautological condition: nil == nil"
169+
print(0)
170+
}
171+
}
172+
162173
func unknown() bool {
163174
return false
164175
}

0 commit comments

Comments
 (0)