blob: a91d6a3daff72cd7f3a184879715bd562e255c3e [file] [log] [blame]
Anna Zaks8d7c8a42013-03-02 03:20:52 +00001// 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}