github.com/amarpal/go-tools@v0.0.0-20240422043104-40142f59f616/analysis/facts/nilness/testdata/src/example.com/Nilness/Nilness.go (about)

     1  package pkg
     2  
     3  import "errors"
     4  
     5  type T struct{ f *int }
     6  type T2 T
     7  
     8  func fn1() *T {
     9  	if true {
    10  		return nil
    11  	}
    12  	return &T{}
    13  }
    14  
    15  func fn2() *T { // want fn2:`never returns nil: \[never\]`
    16  	return &T{}
    17  }
    18  
    19  func fn3() *T { // want fn3:`never returns nil: \[never\]`
    20  	return new(T)
    21  }
    22  
    23  func fn4() *T { // want fn4:`never returns nil: \[never\]`
    24  	return fn3()
    25  }
    26  
    27  func fn5() *T {
    28  	return fn1()
    29  }
    30  
    31  func fn6() *T2 { // want fn6:`never returns nil: \[never\]`
    32  	return (*T2)(fn4())
    33  }
    34  
    35  func fn7() interface{} {
    36  	return nil
    37  }
    38  
    39  func fn8() interface{} { // want fn8:`never returns nil: \[never\]`
    40  	return 1
    41  }
    42  
    43  func fn9() []int { // want fn9:`never returns nil: \[never\]`
    44  	x := []int{}
    45  	y := x[:1]
    46  	return y
    47  }
    48  
    49  func fn10(x []int) []int {
    50  	return x[:1]
    51  }
    52  
    53  func fn11(x *T) *T {
    54  	return x
    55  }
    56  
    57  func fn12(x *T) *int {
    58  	return x.f
    59  }
    60  
    61  func fn13() *int { // want fn13:`never returns nil: \[never\]`
    62  	return new(int)
    63  }
    64  
    65  func fn14() []int { // want fn14:`never returns nil: \[never\]`
    66  	return make([]int, 0)
    67  }
    68  
    69  func fn15() []int { // want fn15:`never returns nil: \[never\]`
    70  	return []int{}
    71  }
    72  
    73  func fn16() []int {
    74  	return nil
    75  }
    76  
    77  func fn17() error {
    78  	if true {
    79  		return errors.New("")
    80  	}
    81  	return nil
    82  }
    83  
    84  func fn18() (err error) { // want fn18:`never returns nil: \[never\]`
    85  	for {
    86  		if err = fn17(); err != nil {
    87  			return
    88  		}
    89  	}
    90  }
    91  
    92  var x *int
    93  
    94  func fn19() *int { // want fn19:`never returns nil: \[global\]`
    95  	return x
    96  }
    97  
    98  func fn20() *int {
    99  	if true {
   100  		return x
   101  	}
   102  	return nil
   103  }
   104  
   105  func fn27[T ~struct{ F int }]() T {
   106  	return T{0}
   107  }
   108  
   109  func fn28[T [8]int]() T {
   110  	return T{}
   111  }
   112  
   113  func fn29[T []int]() T { // want fn29:`never returns nil: \[never\]`
   114  	return T{}
   115  }