// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-config suppress-inlined-defensive-checks=true -verify %s // Perform inline defensive checks. void idc(int *p) { if (p) ; } int test01(int *p) { if (p) ; return *p; // expected-warning {{Dereference of null pointer}} } int test02(int *p, int *x) { if (p) ; idc(p); if (x) ; return *p; // expected-warning {{Dereference of null pointer}} } int test03(int *p, int *x) { idc(p); if (p) ; return *p; // False negative } int deref04(int *p) { return *p; // expected-warning {{Dereference of null pointer}} } int test04(int *p) { if (p) ; idc(p); return deref04(p); } int test11(int *q, int *x) { int *p = q; if (q) ; if (x) ; return *p; // expected-warning{{Dereference of null pointer}} } int test12(int *q) { int *p = q; idc(q); return *p; } int test13(int *q) { int *p = q; idc(p); return *p; } int test21(int *q, int *x) { if (q) ; if (x) ; int *p = q; return *p; // expected-warning{{Dereference of null pointer}} } int test22(int *q, int *x) { idc(q); if (x) ; int *p = q; return *p; } int test23(int *q, int *x) { idc(q); if (x) ; int *p = q; if (!p) ; return *p; // False negative } void use(char *p) { if (!p) return; p[0] = 'a'; } void test24(char *buffer) { use(buffer); buffer[1] = 'b'; }