[cfe-commits] r164623 - in /cfe/trunk/test/Analysis: bitwise-ops.c traversal-path-unification.c

Jordan Rose jordan_rose at apple.com
Tue Sep 25 12:03:09 PDT 2012


Author: jrose
Date: Tue Sep 25 14:03:09 2012
New Revision: 164623

URL: http://llvm.org/viewvc/llvm-project?rev=164623&view=rev
Log:
[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.

Added:
    cfe/trunk/test/Analysis/bitwise-ops.c
Modified:
    cfe/trunk/test/Analysis/traversal-path-unification.c

Added: cfe/trunk/test/Analysis/bitwise-ops.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/bitwise-ops.c?rev=164623&view=auto
==============================================================================
--- cfe/trunk/test/Analysis/bitwise-ops.c (added)
+++ cfe/trunk/test/Analysis/bitwise-ops.c Tue Sep 25 14:03:09 2012
@@ -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

Modified: cfe/trunk/test/Analysis/traversal-path-unification.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/traversal-path-unification.c?rev=164623&r1=164622&r2=164623&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/traversal-path-unification.c (original)
+++ cfe/trunk/test/Analysis/traversal-path-unification.c Tue Sep 25 14:03:09 2012
@@ -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();





More information about the cfe-commits mailing list