forked from OSchip/llvm-project
[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. llvm-svn: 164623
This commit is contained in:
parent
db72e2fc37
commit
902f02db72
|
@ -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}}
|
||||
}
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue