summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/Memory.cpp
diff options
context:
space:
mode:
authorJordy Rose <jediknil@belkadan.com>2012-05-08 03:27:16 +0000
committerJordy Rose <jediknil@belkadan.com>2012-05-08 03:27:16 +0000
commit728be7f6ac6de4be9e3374c719bd5727be8381f1 (patch)
treef2df1da057a244c80953017ef3ef6935370749e9 /llvm/lib/Support/Memory.cpp
parent7e3c3ea341f8cc1430af3df5635fbf5fe92c58ae (diff)
downloadbcm5719-llvm-728be7f6ac6de4be9e3374c719bd5727be8381f1.tar.gz
bcm5719-llvm-728be7f6ac6de4be9e3374c719bd5727be8381f1.zip
[analyzer] Rework both constraint managers to handle mixed-type comparisons.
This involves keeping track of three separate types: the symbol type, the adjustment type, and the comparison type. For example, in "$x + 5 > 0ULL", if the type of $x is 'signed char', the adjustment type is 'int' and the comparison type is 'unsigned long long'. Most of the time these three types will be the same, but we should still do the right thing when the comparison value is out of range, and wraparound should be calculated in the adjustment type. This also re-disables an out-of-bounds test; we were extracting the symbol from non-additive SymIntExprs, but then throwing away the integer. Sorry for the large patch; both the basic and range constraint managers needed to be updated together, since they share code in SimpleConstraintManager. llvm-svn: 156361
Diffstat (limited to 'llvm/lib/Support/Memory.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud