Index: lib/StaticAnalyzer/Core/ExprEngineC.cpp =================================================================== --- lib/StaticAnalyzer/Core/ExprEngineC.cpp +++ lib/StaticAnalyzer/Core/ExprEngineC.cpp @@ -60,6 +60,7 @@ if (!B->isAssignmentOp()) { StmtNodeBuilder Bldr(*it, Tmp2, *currBldrCtx); + unsigned Count = currBldrCtx->blockCount(); if (B->isAdditiveOp()) { // If one of the operands is a location, conjure a symbol for the other @@ -67,7 +68,6 @@ // results in an ElementRegion. // TODO: This can be removed after we enable history tracking with // SymSymExpr. - unsigned Count = currBldrCtx->blockCount(); if (LeftV.getAs() && RHS->getType()->isIntegralOrEnumerationType() && RightV.isUnknown()) { @@ -91,10 +91,8 @@ // Process non-assignments except commas or short-circuited // logical expressions (LAnd and LOr). SVal Result = evalBinOp(state, Op, LeftV, RightV, B->getType()); - if (Result.isUnknown()) { - Bldr.generateNode(B, *it, state); - continue; - } + if (Result.isUnknown() && B->isComparisonOp()) + Result = svalBuilder.conjureSymbolVal(B, LCtx, B->getType(), Count); state = state->BindExpr(B, LCtx, Result); Bldr.generateNode(B, *it, state);