================ @@ -2808,27 +2825,63 @@ void ExprEngine::processBranch(const Stmt *Condition, std::tie(StTrue, StFalse) = *KnownCondValueAssumption; else { assert(!isa<ObjCForCollectionStmt>(Condition)); + // TODO: instead of this shortcut perhaps it would be better to "rejoin" + // the common execution path with + // StTrue = StFalse = PrevState; builder.generateNode(PrevState, true, PredN); builder.generateNode(PrevState, false, PredN); continue; } if (StTrue && StFalse) assert(!isa<ObjCForCollectionStmt>(Condition)); + const Expr *EagerlyAssumeExpr = + PrevState->get<LastEagerlyAssumeAssumptionAt>(); + const Expr *ConditionExpr = dyn_cast<Expr>(Condition); + if (ConditionExpr) + ConditionExpr = ConditionExpr->IgnoreParenCasts(); ---------------- NagyDonat wrote:
I'm skipping casts to ensure consistent behavior between the `eagerly-assume=true` (default) and the `eagerly-assume=false` case. Perhaps this question warrants more investigation, I'll think about it and maybe add a few new testcases. https://github.com/llvm/llvm-project/pull/109804 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits