]> granicus.if.org Git - clang/commit
[analyzer] Construct a SymExpr even when the constraint solver cannot
authorAnna Zaks <ganna@apple.com>
Tue, 1 May 2012 21:10:26 +0000 (21:10 +0000)
committerAnna Zaks <ganna@apple.com>
Tue, 1 May 2012 21:10:26 +0000 (21:10 +0000)
commite2241cbb0455a60ba27d6c4b9d601ffef3ed103f
tree47272326c9e21833382e29d15cc9b1ba8331762c
parent4e31b4d6cf25029aa280d691e9023359c0ef4204
[analyzer] Construct a SymExpr even when the constraint solver cannot
reason about the expression.

This essentially keeps more history about how symbolic values were
constructed. As an optimization, previous to this commit, we only kept
the history if one of the symbols was tainted, but it's valuable keep
the history around for other purposes as well: it allows us to avoid
constructing conjured symbols.

Specifically, we need to identify the value of ptr as
ElementRegion (result of pointer arithmetic) in the following code.
However, before this commit '(2-x)' evaluated to Unknown value, and as
the result, 'p + (2-x)' evaluated to Unknown value as well.

int *p = malloc(sizeof(int));
ptr = p + (2-x);

This change brings 2% slowdown on sqlite. Fixes radar://11329382.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@155944 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h
lib/StaticAnalyzer/Core/SValBuilder.cpp
lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp
test/Analysis/malloc.c