[clang] [llvm] [analyzer] Fix _BitInt support & casting behavior for Z3 symbolic execution (PR #210525)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Jul 19 02:43:33 PDT 2026
================
@@ -750,10 +729,8 @@ void ExprEngine::VisitLogicalExpr(const BinaryOperator* B, ExplodedNode *Pred,
// We evaluate "RHSVal != 0" expression which result in 0 if the value is
// known to be false, 1 if the value is known to be true and a new symbol
// when the assumption is unknown.
- nonloc::ConcreteInt Zero(getBasicVals().getValue(0, B->getType()));
- X = evalBinOp(N->getState(), BO_NE,
- svalBuilder.evalCast(RHSVal, B->getType(), RHS->getType()),
- Zero, B->getType());
+ X = evalBinOp(N->getState(), BO_NE, RHSVal,
+ svalBuilder.makeZeroVal(RHS->getType()), B->getType());
----------------
rdevshp wrote:
I dropped the cast because it incorrectly truncated RHSVal and caused the test to say `FALSE` for the Z3 solver. I have added the test for the normal range solver.
https://github.com/llvm/llvm-project/pull/210525
More information about the cfe-commits
mailing list