github.com/cockroachdb/tools@v0.0.0-20230222021103-a6d27438930d/go/analysis/passes/nilness/testdata/src/d/d.go (about) 1 package d 2 3 type message interface{ PR() } 4 5 func noparam() { 6 var messageT message 7 messageT.PR() // want "nil dereference in dynamic method call" 8 } 9 10 func paramNonnil[T message]() { 11 var messageT T 12 messageT.PR() // cannot conclude messageT is nil. 13 } 14 15 func instance() { 16 // buildssa.BuilderMode does not include InstantiateGenerics. 17 paramNonnil[message]() // no warning is expected as param[message] id not built. 18 } 19 20 func param[T interface { 21 message 22 ~*int | ~chan int 23 }]() { 24 var messageT T // messageT is nil. 25 messageT.PR() // nil receiver may be okay. See param[nilMsg]. 26 } 27 28 type nilMsg chan int 29 30 func (m nilMsg) PR() { 31 if m == nil { 32 print("not an error") 33 } 34 } 35 36 var G func() = param[nilMsg] // no warning 37 38 func allNillable[T ~*int | ~chan int]() { 39 var x, y T // both are nillable and are nil. 40 if x != y { // want "impossible condition: nil != nil" 41 print("unreachable") 42 } 43 } 44 45 func notAll[T ~*int | ~chan int | ~int]() { 46 var x, y T // neither are nillable due to ~int 47 if x != y { // no warning 48 print("unreachable") 49 } 50 } 51 52 func noninvoke[T ~func()]() { 53 var x T 54 x() // want "nil dereference in dynamic function call" 55 }