1// RUN: %clang_cc1 -analyze -analyzer-checker=core -verify %s 2// expected-no-diagnostics 3 4extern 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 10class ButterFly { 11private: 12 ButterFly() { } 13public: 14 int triggerderef() { 15 return 0; 16 } 17}; 18ButterFly *getInP(); 19class 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 } 38}; 39 40typedef const int *Ty; 41extern 42Ty notNullArg(Ty cf) __attribute__((nonnull)); 43typedef const void *CFTypeRef; 44extern Ty getTyVal(); 45inline 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} 50void radar13224271_caller() 51{ 52 Ty value; 53 radar13224271_callee(getTyVal(), value ); 54 notNullArg(value); // no-warning 55} 56 57struct Foo { 58 int *ptr; 59 Foo(int *p) { 60 *p = 1; // no-warning 61 } 62}; 63void idc(int *p3) { 64 if (p3) 65 ; 66} 67int *retNull() { 68 return 0; 69} 70void test(int *p1, int *p2) { 71 idc(p1); 72 Foo f(p1); 73}