Anna Zaks | 5497d1a | 2013-03-09 03:23:19 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -analyze -analyzer-checker=core -verify %s |
| 2 | // expected-no-diagnostics |
| 3 | |
Anna Zaks | 2672a4c | 2013-03-14 22:31:56 +0000 | [diff] [blame^] | 4 | extern void __assert_fail (__const char *__assertion, __const char *__file, |
| 5 | unsigned int __line, __const char *__function) |
| 6 | __attribute__ ((__noreturn__)); |
| 7 | #define assert(expr) \ |
| 8 | ((expr) ? (void)(0) : __assert_fail (#expr, __FILE__, __LINE__, __func__)) |
| 9 | |
Anna Zaks | 5497d1a | 2013-03-09 03:23:19 +0000 | [diff] [blame] | 10 | class ButterFly { |
| 11 | private: |
| 12 | ButterFly() { } |
| 13 | public: |
| 14 | int triggerderef() { |
| 15 | return 0; |
| 16 | } |
| 17 | }; |
| 18 | ButterFly *getInP(); |
| 19 | class X{ |
| 20 | ButterFly *p; |
| 21 | void setP(ButterFly *inP) { |
| 22 | if(inP) |
| 23 | ; |
| 24 | p = inP; |
| 25 | }; |
| 26 | void subtest1() { |
| 27 | ButterFly *inP = getInP(); |
| 28 | setP(inP); |
| 29 | } |
| 30 | int subtest2() { |
| 31 | int c = p->triggerderef(); // no-warning |
| 32 | return c; |
| 33 | } |
| 34 | int test() { |
| 35 | subtest1(); |
| 36 | return subtest2(); |
| 37 | } |
Anna Zaks | 2672a4c | 2013-03-14 22:31:56 +0000 | [diff] [blame^] | 38 | }; |
| 39 | |
| 40 | typedef const int *Ty; |
| 41 | extern |
| 42 | Ty notNullArg(Ty cf) __attribute__((nonnull)); |
| 43 | typedef const void *CFTypeRef; |
| 44 | extern Ty getTyVal(); |
| 45 | inline void radar13224271_callee(Ty def, Ty& result ) { |
| 46 | result = def; |
| 47 | // Clearly indicates that result cannot be 0 if def is not NULL. |
| 48 | assert( (result != 0) || (def == 0) ); |
| 49 | } |
| 50 | void radar13224271_caller() |
| 51 | { |
| 52 | Ty value; |
| 53 | radar13224271_callee(getTyVal(), value ); |
| 54 | notNullArg(value); // no-warning |
| 55 | } |