8 type T struct{ x *int }
10 func fn1() *int { return nil }
11 func fn2() (int, *int, int) { return 0, nil, 0 }
13 func fn3() (int, error) { return 0, nil }
14 func fn4() error { return nil }
16 func gen1() interface{} {
17 // don't flag, returning a concrete value
21 func gen2() interface{} {
22 // don't flag, returning a concrete value
26 func gen3() interface{} {
27 // flag, always returns a typed value
32 func gen4() (int, interface{}, *int) {
33 // flag ret[1], always a typed value
38 func gen5() interface{} {
39 // flag, propagate gen3
43 func gen6(b bool) interface{} {
44 // don't flag, sometimes returns untyped nil
53 func gen7() interface{} {
54 // flag, always returns a typed value
58 func gen8(x *int) interface{} {
66 func gen9() interface{} {
72 func gen10() interface{} {
80 // This is a tricky one. we should flag this, because it never
81 // returns a nil error, but if errors.New could return untyped
82 // nils, then we shouldn't flag it. we need to consider the
83 // implementation of the called function.
86 func gen11() interface{} {
87 // don't flag, we sometimes return untyped nil
95 func gen12(b bool) interface{} {
96 // flag, all branches return typed nils
106 func gen13() interface{} {
107 // flag, always returns a typed value
112 func gen14(ch chan *int) interface{} {
117 func gen15() interface{} {
123 var g *int = new(int)
125 func gen16() interface{} {
126 // don't flag. returning a global is akin to returning &T{}.
130 func gen17(x interface{}) interface{} {
138 func gen18() (int, error) {
142 return 0, errors.New("yo")
147 func gen19() (out interface{}) {
155 func gen20() (out interface{}) {
165 return (*exec.Error)(nil)
170 func gen22() interface{} {
180 _ = gen3() == nil // want `never true`
183 _ = r2 == nil // want `never true`
186 _ = gen5() == nil // want `never true`
187 _ = gen6(false) == nil
188 _ = gen7() == nil // want `never true`
189 _ = gen8(nil) == nil // want `never true`
190 _ = gen9() == nil // want `never true`
191 _ = gen10() == nil // want `never true`
193 _ = gen12(true) == nil // want `never true`
194 _ = gen13() == nil // want `never true`
195 _ = gen14(nil) == nil // want `never true`
196 _ = gen15() == nil // want `never true`
198 _ = gen17(nil) == nil
206 _ = gen22() == nil // want `never true`