blob: 6da44d0c73fdd9bdc69753cd3d6c9428b546d4b5 [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 Kremenek584def72008-07-22 00:46:16 +000059int bar(int* p) __attribute__((nonnull));
60
61int f6(int *p) {
62 return !p ? bar(p) : *p; // expected-warning {{Null pointer passed as an argument to a 'nonnull' parameter}}
63}
64
Ted Kremenek22bda882008-07-31 20:31:27 +000065int* qux();
66
67int f7(int x) {
68
69 int* p = 0;
70
71 if (0 == x)
72 p = qux();
73
74 if (0 == x)
75 *p = 1; // no-warning
76
77 return x;
78}
79
Ted Kremenek584def72008-07-22 00:46:16 +000080