honnef.co/go/tools@v0.4.7/staticcheck/testdata/src/example.com/CheckAllocationNilCheck/CheckAllocationNilCheck.go (about) 1 package pkg 2 3 type T struct { 4 Field func() 5 } 6 7 func (T) Method() {} 8 9 func gen() *int { return nil } 10 11 func fn1() { 12 var a *int 13 b := new(int) 14 c := make([]byte, 0) 15 var t T 16 var pt *T 17 d := t.Field 18 e := t.Method 19 f := &t.Field 20 g := fn1 21 h := &T{} 22 i := gen() 23 j := func() {} 24 k := make(map[string]int) 25 var slice []byte 26 l := slice[:0] 27 var m []byte 28 if true { 29 m = []byte{} 30 } else { 31 m = []byte{} 32 } 33 n := m[:0] 34 o := &pt.Field 35 36 if a != nil { 37 } 38 if b != nil { //@ diag(`always true`) 39 } 40 if b == nil { //@ diag(`never true`) 41 } 42 if c != nil { //@ diag(`always true`) 43 } 44 if d != nil { // field value could be anything 45 } 46 if e != nil { //@ diag(`contains a function`) 47 } 48 if f != nil { //@ diag(`always true`) 49 } 50 if g != nil { //@ diag(`contains a function`) 51 } 52 if h != nil { //@ diag(`always true`) 53 } 54 if &a != nil { // already flagged by SA4022 55 } 56 if (&T{}).Method != nil { //@ diag(`always true`) 57 } 58 if (&T{}) != nil { // already flagged by SA4022 59 } 60 if i != nil { // just a function return value 61 } 62 if fn1 != nil { //@ diag(`functions are never nil`) 63 } 64 if j != nil { //@ diag(`contains a function`) 65 } 66 if k != nil { //@ diag(`always true`) 67 } 68 if l != nil { // slicing a nil slice yields nil 69 } 70 if m != nil { //@ diag(`always true`) 71 } 72 if n != nil { //@ diag(`always true`) 73 } 74 if o != nil { // in &pt.Field, pt might be nil 75 } 76 } 77 78 func fn2() { 79 x := new(int) 80 if true { 81 x = nil 82 } 83 if x != nil { 84 } 85 }