blob: 06f67da45a677003f7d05028e500cfd5d4fc6e3b [file] [log] [blame]
Ted Kremenekd71ed262008-04-10 22:16:52 +00001// RUN: clang -checker-simple -verify %s
Ted Kremenek2f54af42008-04-02 16:54:39 +00002
Ted Kremenek0fe33bc2008-04-22 21:10:18 +00003#include<stdint.h>
4
Ted Kremenek2f54af42008-04-02 16:54:39 +00005void f1(int *p) {
6 if (p) *p = 1;
7 else *p = 0; // expected-warning{{ereference}}
8}
Ted Kremenekb9ab6902008-04-21 23:44:17 +00009
10struct foo_struct {
11 int x;
12};
13
14int f2(struct foo_struct* p) {
15
16 if (p)
17 p->x = 1;
18
Ted Kremenek3603d732008-04-21 23:45:26 +000019 return p->x++; // expected-warning{{Dereference of null pointer.}}
Ted Kremenekb9ab6902008-04-21 23:44:17 +000020}
Ted Kremenek9704eac2008-04-22 04:56:55 +000021
22int f3(char* x) {
23
24 int i = 2;
25
26 if (x)
27 return x[i - 1];
28
29 return x[i+1]; // expected-warning{{Dereference of null pointer.}}
30}
31
Ted Kremeneke2013f52008-04-29 23:25:09 +000032int f3_b(char* x) {
33
34 int i = 2;
35
36 if (x)
37 return x[i - 1];
38
39 return x[i+1]++; // expected-warning{{Dereference of null pointer.}}
40}
41
Ted Kremenek0fe33bc2008-04-22 21:10:18 +000042int f4(int *p) {
43
Daniel Dunbar4489fe12008-08-05 00:07:51 +000044 uintptr_t x = (uintptr_t) p;
Ted Kremenek0fe33bc2008-04-22 21:10:18 +000045
46 if (x)
47 return 1;
48
49 int *q = (int*) x;
50 return *q; // expected-warning{{Dereference of null pointer.}}
Ted Kremeneka5488462008-04-22 21:39:21 +000051}
52
53int f5() {
54
55 char *s = "hello world";
56 return s[0]; // no-warning
57}
58
Ted Kremenek7fb43c12008-09-01 19:57:52 +000059int bar(int* p, int q) __attribute__((nonnull));
Ted Kremenek584def72008-07-22 00:46:16 +000060
61int f6(int *p) {
Ted Kremenek7fb43c12008-09-01 19:57:52 +000062 return !p ? bar(p, 1) // expected-warning {{Null pointer passed as an argument to a 'nonnull' parameter}}
63 : bar(p, 0); // no-warning
64}
Ted Kremenek584def72008-07-22 00:46:16 +000065
Ted Kremenek22bda882008-07-31 20:31:27 +000066int* qux();
67
68int f7(int x) {
69
70 int* p = 0;
71
72 if (0 == x)
73 p = qux();
74
75 if (0 == x)
76 *p = 1; // no-warning
77
78 return x;
79}
80
Ted Kremenekdd463b82008-08-16 00:45:40 +000081int f8(int *p, int *q) {
82 if (!p)
83 if (p)
84 *p = 1; // no-warning
85
86 if (q)
87 if (!q)
88 *q = 1; // no-warning
89}