3 type X struct{ f, g int }
7 print(x.f) // want "nil dereference in field selection"
17 x.f = 1 // want "nil dereference in field selection"
18 y.f = 1 // want "nil dereference in field selection"
22 if f == nil { // want "tautological condition: nil == nil"
23 go f() // want "nil dereference in dynamic function call"
25 // This block is unreachable,
26 // so we don't report an error for the
27 // nil dereference in the call.
32 func f2(ptr *[3]int, i interface{}) {
38 print(ptr[:]) // want "nil dereference in slice operation"
39 *ptr = [3]int{} // want "nil dereference in store"
40 print(*ptr) // want "nil dereference in load"
42 if ptr != nil { // want "impossible condition: nil != nil"
43 // Dominated by ptr==nil and ptr!=nil,
44 // this block is unreachable.
45 // We do not report errors within it.
51 print(i.(interface{ f() }))
53 print(i.(interface{ f() })) // want "nil dereference in type assertion"
64 if err != nil && err.Error() == "foo" { // want "impossible condition: nil != nil"
68 if ch == nil { // want "impossible condition: non-nil == nil"
71 if ch != nil { // want "tautological condition: non-nil != nil"
77 func h(err error, b bool) {
80 } else if err != nil {
87 if err := g(); err != nil {
100 panic(nil) // want "panic with nil value"
105 panic(err) // want "panic with nil value"
114 panic(err) // want "panic with nil value"
118 func bad() (*X, error) {
124 v, _ := e.(interface{})
128 func f9(x interface {
134 x.b() // we don't catch this panic because we don't have any facts yet
142 x.c() // want "nil dereference in dynamic method call"
143 xx.b() // want "nil dereference in dynamic method call"
144 xxx := interface{ a() }(xx)
145 xxx.a() // want "nil dereference in dynamic method call"
148 panic(x) // want "panic with nil value"
151 panic(xx) // want "panic with nil value"
154 panic(xxx) // want "panic with nil value"
158 func unknown() bool {