| // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-config suppress-null-return-paths=false -verify %s |
| // RUN: %clang_cc1 -analyze -analyzer-checker=core -verify -DSUPPRESSED=1 %s |
| // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-config avoid-suppressing-null-argument-paths=true -DSUPPRESSED=1 -DNULL_ARGS=1 -verify %s |
| |
| #ifdef SUPPRESSED |
| // expected-no-diagnostics |
| #endif |
| |
| @interface PointerWrapper |
| - (int *)getPtr; |
| - (id)getObject; |
| @end |
| |
| id getNil() { |
| return 0; |
| } |
| |
| void testNilReceiverHelperA(int *x) { |
| *x = 1; |
| #ifndef SUPPRESSED |
| // expected-warning@-2 {{Dereference of null pointer}} |
| #endif |
| } |
| |
| void testNilReceiverHelperB(int *x) { |
| *x = 1; |
| #ifndef SUPPRESSED |
| // expected-warning@-2 {{Dereference of null pointer}} |
| #endif |
| } |
| |
| void testNilReceiver(int coin) { |
| id x = getNil(); |
| if (coin) |
| testNilReceiverHelperA([x getPtr]); |
| else |
| testNilReceiverHelperB([[x getObject] getPtr]); |
| } |