diff options
author | dim <dim@FreeBSD.org> | 2013-04-08 18:45:10 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2013-04-08 18:45:10 +0000 |
commit | c72c57c9e9b69944e3e009cd5e209634839581d3 (patch) | |
tree | 4fc2f184c499d106f29a386c452b49e5197bf63d /test/Analysis/inlining/inline-defensive-checks.c | |
parent | 5b20025c30d23d521e12c1f33ec8fa6b821952cd (diff) | |
download | FreeBSD-src-c72c57c9e9b69944e3e009cd5e209634839581d3.zip FreeBSD-src-c72c57c9e9b69944e3e009cd5e209634839581d3.tar.gz |
Vendor import of clang trunk r178860:
http://llvm.org/svn/llvm-project/cfe/trunk@178860
Diffstat (limited to 'test/Analysis/inlining/inline-defensive-checks.c')
-rw-r--r-- | test/Analysis/inlining/inline-defensive-checks.c | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/test/Analysis/inlining/inline-defensive-checks.c b/test/Analysis/inlining/inline-defensive-checks.c new file mode 100644 index 0000000..df3a8f2 --- /dev/null +++ b/test/Analysis/inlining/inline-defensive-checks.c @@ -0,0 +1,99 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-config suppress-inlined-defensive-checks=true -verify %s + +// Perform inline defensive checks. +void idc(int *p) { + if (p) + ; +} + +int test01(int *p) { + if (p) + ; + return *p; // expected-warning {{Dereference of null pointer}} +} + +int test02(int *p, int *x) { + if (p) + ; + idc(p); + if (x) + ; + return *p; // expected-warning {{Dereference of null pointer}} +} + +int test03(int *p, int *x) { + idc(p); + if (p) + ; + return *p; // False negative +} + +int deref04(int *p) { + return *p; // expected-warning {{Dereference of null pointer}} +} + +int test04(int *p) { + if (p) + ; + idc(p); + return deref04(p); +} + +int test11(int *q, int *x) { + int *p = q; + if (q) + ; + if (x) + ; + return *p; // expected-warning{{Dereference of null pointer}} +} + +int test12(int *q) { + int *p = q; + idc(q); + return *p; +} + +int test13(int *q) { + int *p = q; + idc(p); + return *p; +} + +int test21(int *q, int *x) { + if (q) + ; + if (x) + ; + int *p = q; + return *p; // expected-warning{{Dereference of null pointer}} +} + +int test22(int *q, int *x) { + idc(q); + if (x) + ; + int *p = q; + return *p; +} + +int test23(int *q, int *x) { + idc(q); + if (x) + ; + int *p = q; + if (!p) + ; + return *p; // False negative +} + +void use(char *p) { + if (!p) + return; + p[0] = 'a'; +} + +void test24(char *buffer) { + use(buffer); + buffer[1] = 'b'; +} |