[PATCH] D45557: [Analyzer] Fix for SValBuilder expressions rearrangement
Artem Dergachev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 12 12:42:31 PDT 2018
NoQ added inline comments.
================
Comment at: lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp:443
return Sym->getType() == Ty &&
+ APSIntType(Int) == BV.getAPSIntType(Sym->getType()) &&
(!BinaryOperator::isComparisonOp(Op) ||
----------------
6. Therefore i conclude that this check should be moved to the branch around comment 3., and it'd become redundant here.
================
Comment at: lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp:455-456
// We expect everything to be of the same type - this type.
QualType SingleTy;
----------------
1. We have expected `LSym` to be of this type.
================
Comment at: lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp:469
Opts.shouldAggressivelySimplifyRelationalComparison()) {
SingleTy = LSym->getType();
if (ResultTy != SVB.getConditionType())
----------------
2. It holds on this branch.
================
Comment at: lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp:474
} else if (BinaryOperator::isAdditiveOp(Op)) {
SingleTy = ResultTy;
// Substracting unsigned integers is a nightmare.
----------------
3. But not necessarily on that branch.
================
Comment at: lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp:486
SymbolRef RSym = Rhs.getAsSymbol();
if (!RSym || RSym->getType() != SingleTy)
return None;
----------------
4. We check that `RSym` is of the correct type, but `LSym` remains unchecked.
================
Comment at: lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp:491
llvm::APSInt LInt, RInt;
std::tie(LSym, LInt) = decomposeSymbol(LSym, BV);
std::tie(RSym, RInt) = decomposeSymbol(RSym, BV);
----------------
5. Type of `LInt` here is guaranteed to be equal to the type of `LSym`, because that's how we construct symbols. Which was supposed to also be equal to `SingleTy`, but we didn't check for that.
https://reviews.llvm.org/D45557
More information about the cfe-commits
mailing list