Home | History | Annotate | Download | only in inlining
      1 // RUN: %clang_cc1 -analyze -analyzer-checker=core -verify %s
      2 // expected-no-diagnostics
      3 
      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 
     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 	}
     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 }
     56 
     57 struct Foo {
     58 	int *ptr;
     59 	Foo(int *p)  {
     60 		*p = 1; // no-warning
     61 	}
     62 };
     63 void idc(int *p3) {
     64   if (p3)
     65     ;
     66 }
     67 int *retNull() {
     68   return 0;
     69 }
     70 void test(int *p1, int *p2) {
     71   idc(p1);
     72 	Foo f(p1);
     73 }