1 | // RUN: %clang_analyze_cc1 -w -analyzer-checker=core,nullability\ |
2 | // RUN: -analyzer-output=text -verify %s |
3 | // RUN: %clang_analyze_cc1 -w -analyzer-checker=core,nullability\ |
4 | // RUN: -analyzer-output=text -verify %s -fobjc-arc |
5 | |
6 | #if !__has_feature(objc_arc) |
7 | // expected-no-diagnostics |
8 | #endif |
9 | |
10 | |
11 | #define nil ((id)0) |
12 | |
13 | @interface Param |
14 | @end |
15 | |
16 | @interface Base |
17 | - (void)foo:(Param *_Nonnull)param; |
18 | @end |
19 | |
20 | @interface Derived : Base |
21 | @end |
22 | |
23 | @implementation Derived |
24 | - (void)foo:(Param *)param { |
25 | // FIXME: Why do we not emit the warning under ARC? |
26 | [super foo:param]; |
27 | #if __has_feature(objc_arc) |
28 | // expected-warning@-2{{nil passed to a callee that requires a non-null 1st parameter}} |
29 | // expected-note@-3 {{nil passed to a callee that requires a non-null 1st parameter}} |
30 | #endif |
31 | |
32 | [self foo:nil]; |
33 | #if __has_feature(objc_arc) |
34 | // expected-note@-2{{Calling 'foo:'}} |
35 | // expected-note@-3{{Passing nil object reference via 1st parameter 'param'}} |
36 | #endif |
37 | } |
38 | @end |
39 | |
40 | |