inline-defensive-checks.c revision cc5dbdae70c6eb2423921f52a35ba4686d2969cf
1// RUN: %clang_cc1 -analyze -analyzer-checker=core -verify %s 2 3// Perform inline defensive checks. 4void idc(int *p) { 5 if (p) 6 ; 7} 8 9int test01(int *p) { 10 if (p) 11 ; 12 return *p; // expected-warning {{Dereference of null pointer}} 13} 14 15int test02(int *p, int *x) { 16 if (p) 17 ; 18 idc(p); 19 if (x) 20 ; 21 return *p; // expected-warning {{Dereference of null pointer}} 22} 23 24int test03(int *p, int *x) { 25 idc(p); 26 if (p) 27 ; 28 return *p; // False negative 29} 30 31int deref04(int *p) { 32 return *p; // expected-warning {{Dereference of null pointer}} 33} 34 35int test04(int *p) { 36 if (p) 37 ; 38 idc(p); 39 return deref04(p); 40} 41 42int test11(int *q, int *x) { 43 int *p = q; 44 if (q) 45 ; 46 if (x) 47 ; 48 return *p; // expected-warning{{Dereference of null pointer}} 49} 50 51int test12(int *q) { 52 int *p = q; 53 idc(q); 54 return *p; 55} 56 57int test13(int *q) { 58 int *p = q; 59 idc(p); 60 return *p; 61} 62 63int test21(int *q, int *x) { 64 if (q) 65 ; 66 if (x) 67 ; 68 int *p = q; 69 return *p; // expected-warning{{Dereference of null pointer}} 70} 71 72int test22(int *q, int *x) { 73 idc(q); 74 if (x) 75 ; 76 int *p = q; 77 return *p; 78} 79 80int test23(int *q, int *x) { 81 idc(q); 82 if (x) 83 ; 84 int *p = q; 85 if (!p) 86 ; 87 return *p; // False negative 88} 89 90void use(char *p) { 91 if (!p) 92 return; 93 p[0] = 'a'; 94} 95 96void test24(char *buffer) { 97 use(buffer); 98 buffer[1] = 'b'; 99} 100