blob: 964b3e455068103aa7a274b0c27d43dc32f8669c [file] [log] [blame]
Ted Kremenekb1983ba2008-04-10 22:16:52 +00001// RUN: clang -checker-simple -verify %s
Ted Kremenek97bfee82008-04-02 16:54:39 +00002
Ted Kremenekfe1a0b12008-04-22 21:10:18 +00003#include<stdint.h>
4
Ted Kremenek97bfee82008-04-02 16:54:39 +00005void f1(int *p) {
6 if (p) *p = 1;
7 else *p = 0; // expected-warning{{ereference}}
8}
Ted Kremenek64216482008-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 Kremenek1792bc42008-04-21 23:45:26 +000019 return p->x++; // expected-warning{{Dereference of null pointer.}}
Ted Kremenek64216482008-04-21 23:44:17 +000020}
Ted Kremenek58fe0eb2008-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 Kremenek62d8edb2008-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 Kremenekfe1a0b12008-04-22 21:10:18 +000042int f4(int *p) {
43
44 uintptr_t x = p;
45
46 if (x)
47 return 1;
48
49 int *q = (int*) x;
50 return *q; // expected-warning{{Dereference of null pointer.}}
Ted Kremenekbe621292008-04-22 21:39:21 +000051}
52
53int f5() {
54
55 char *s = "hello world";
56 return s[0]; // no-warning
57}
58
Ted Kremenekbbafa5b2008-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
65