aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Rose <jordan_rose@apple.com>2012-09-25 19:03:09 +0000
committerJordan Rose <jordan_rose@apple.com>2012-09-25 19:03:09 +0000
commitbf7f77ac1cd1f31fc6bf2072327eeee7baed5c6a (patch)
treea9d8a81f6b8b6dd3363fbec07e70b5ee7175c2bc
parent0073a5c7ce38e98365c00921316030627b3d129f (diff)
[analyzer] Add tests for symbolic expression liveness.
There are very few tests here because SValBuilder is fairly aggressive about not building SymExprs that we can't evaluate, which saves memory and CPU but also makes it very much tied to the current constraint manager. We should probably scale back here and let things decay to UnknownVal later on. bitwise-ops.c tests that for the SymExprs we do create, we persist our assumptions about them. traversal-path-unification.c tests that we do clean out constraints on arbitrary SymExprs once they have actually died. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164623 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--test/Analysis/bitwise-ops.c14
-rw-r--r--test/Analysis/traversal-path-unification.c9
2 files changed, 22 insertions, 1 deletions
diff --git a/test/Analysis/bitwise-ops.c b/test/Analysis/bitwise-ops.c
new file mode 100644
index 0000000000..bf282eca27
--- /dev/null
+++ b/test/Analysis/bitwise-ops.c
@@ -0,0 +1,14 @@
+// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -verify %s
+
+void clang_analyzer_eval(int);
+#define CHECK(expr) if (!(expr)) return; clang_analyzer_eval(expr)
+
+void testPersistentConstraints(int x, int y) {
+ // Sanity check
+ CHECK(x); // expected-warning{{TRUE}}
+ CHECK(x & 1); // expected-warning{{TRUE}}
+
+ // False positives due to SValBuilder giving up on certain kinds of exprs.
+ CHECK(1 - x); // expected-warning{{UNKNOWN}}
+ CHECK(x & y); // expected-warning{{UNKNOWN}}
+} \ No newline at end of file
diff --git a/test/Analysis/traversal-path-unification.c b/test/Analysis/traversal-path-unification.c
index 0a45f48a01..f53d2ff9fe 100644
--- a/test/Analysis/traversal-path-unification.c
+++ b/test/Analysis/traversal-path-unification.c
@@ -1,12 +1,19 @@
// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.DumpTraversal %s | FileCheck %s
+// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.DumpTraversal -DUSE_EXPR %s | FileCheck %s
int a();
int b();
int c();
+#ifdef USE_EXPR
+#define CHECK(x) ((x) & 1)
+#else
+#define CHECK(x) (x)
+#endif
+
void testRemoveDeadBindings() {
int i = a();
- if (i)
+ if (CHECK(i))
a();
else
b();