[PATCH] D39584: [analyzer] [NFC] another very minor ExprEngineC refactoring
George Karpenkov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 2 18:07:20 PDT 2017
george.karpenkov created this revision.
Herald added subscribers: szepet, xazax.hun.
couldn't resist adding a function here.
I think this would be the last one.
https://reviews.llvm.org/D39584
Files:
lib/StaticAnalyzer/Core/ExprEngineC.cpp
Index: lib/StaticAnalyzer/Core/ExprEngineC.cpp
===================================================================
--- lib/StaticAnalyzer/Core/ExprEngineC.cpp
+++ lib/StaticAnalyzer/Core/ExprEngineC.cpp
@@ -20,6 +20,20 @@
using namespace ento;
using llvm::APSInt;
+/// If one of the operands is a location, conjure a symbol for the other
+/// one (offset) if it's unknown so that memory arithmetic always
+/// results in an ElementRegion.
+static void conjureOffsetSymbolOnLocation(
+ SVal &Symbol, SVal Other, Expr* Expression, SValBuilder &svalBuilder,
+ unsigned Count, const LocationContext *LCtx) {
+ QualType Ty = Expression->getType();
+ if (Other.getAs<Loc>() &&
+ Ty->isIntegralOrEnumerationType() &&
+ Symbol.isUnknown()) {
+ Symbol = svalBuilder.conjureSymbolVal(Expression, LCtx, Ty, Count);
+ }
+}
+
void ExprEngine::VisitBinaryOperator(const BinaryOperator* B,
ExplodedNode *Pred,
ExplodedNodeSet &Dst) {
@@ -63,24 +77,13 @@
StmtNodeBuilder Bldr(*it, Tmp2, *currBldrCtx);
if (B->isAdditiveOp()) {
- // If one of the operands is a location, conjure a symbol for the other
- // one (offset) if it's unknown so that memory arithmetic always
- // results in an ElementRegion.
// TODO: This can be removed after we enable history tracking with
// SymSymExpr.
unsigned Count = currBldrCtx->blockCount();
- if (LeftV.getAs<Loc>() &&
- RHS->getType()->isIntegralOrEnumerationType() &&
- RightV.isUnknown()) {
- RightV = svalBuilder.conjureSymbolVal(RHS, LCtx, RHS->getType(),
- Count);
- }
- if (RightV.getAs<Loc>() &&
- LHS->getType()->isIntegralOrEnumerationType() &&
- LeftV.isUnknown()) {
- LeftV = svalBuilder.conjureSymbolVal(LHS, LCtx, LHS->getType(),
- Count);
- }
+ conjureOffsetSymbolOnLocation(
+ RightV, LeftV, RHS, svalBuilder, Count, LCtx);
+ conjureOffsetSymbolOnLocation(
+ LeftV, RightV, LHS, svalBuilder, Count, LCtx);
}
// Although we don't yet model pointers-to-members, we do need to make
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D39584.121426.patch
Type: text/x-patch
Size: 2318 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20171103/645d5ea1/attachment.bin>
More information about the cfe-commits
mailing list