summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorArtem Dergachev <artem.dergachev@gmail.com>2018-07-17 00:42:35 +0000
committerArtem Dergachev <artem.dergachev@gmail.com>2018-07-17 00:42:35 +0000
commit35dbd0b1ff4b9c26a51fa8ae178f8799f3976f67 (patch)
tree40a3cb97f0d5c15d29744a46dce0cdb354b0c58a /clang/lib
parentd1163790c363bb47c4b072dc679522941ebf55ca (diff)
downloadbcm5719-llvm-35dbd0b1ff4b9c26a51fa8ae178f8799f3976f67.tar.gz
bcm5719-llvm-35dbd0b1ff4b9c26a51fa8ae178f8799f3976f67.zip
[analyzer] pr37802: Fix symbolic-pointer-to-boolean casts during load.
The canonical representation of pointer &SymRegion{$x} casted to boolean is "$x != 0", not "$x". Assertion added in r337227 catches that. Differential Revision: https://reviews.llvm.org/D48232 llvm-svn: 337228
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp b/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp
index c08cbb09ba8..7163e380e6c 100644
--- a/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp
+++ b/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp
@@ -159,7 +159,8 @@ SVal SimpleSValBuilder::evalCastFromLoc(Loc val, QualType castTy) {
return nonloc::SymbolVal(SymMgr.getExtentSymbol(FTR));
if (const SymbolicRegion *SymR = R->getSymbolicBase())
- return nonloc::SymbolVal(SymR->getSymbol());
+ return makeNonLoc(SymR->getSymbol(), BO_NE,
+ BasicVals.getZeroWithPtrWidth(), castTy);
// FALL-THROUGH
LLVM_FALLTHROUGH;
OpenPOWER on IntegriCloud