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 }