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  }