[cfe-dev] Confused by constraints
Ben Laurie
benl at google.com
Wed May 13 23:12:01 PDT 2015
So, I have this:
Optional<DefinedSVal> V = ...;
ASTContext &Ctx = svalBuilder.getContext();
DefinedSVal Zero = svalBuilder.makeIntVal(0, Ctx.IntTy);
DefinedSVal One = svalBuilder.makeIntVal(1, Ctx.IntTy);
SVal isZero = svalBuilder.evalBinOp(state, BO_EQ, *V, Zero, Ctx.IntTy);
SVal isOne = svalBuilder.evalBinOp(state, BO_EQ, *V, One, Ctx.IntTy);
SVal check = svalBuilder.evalBinOp(state, BO_Or, isZero, isOne,
Ctx.IntTy);
ConstraintManager &CM = state->getStateManager().getConstraintManager();
ProgramStateRef stateZero, stateNotZero;
std::tie(stateZero, stateNotZero) = CM.assumeDual(state,
isZero.castAs<DefinedSVal>());
ProgramStateRef stateOne, stateNotOne;
std::tie(stateOne, stateNotOne) = CM.assumeDual(state,
isOne.castAs<DefinedSVal>());
ProgramStateRef right = CM.assume(state, check.castAs<DefinedSVal>(),
true);
Ignoring for a moment that I should not cast to DefinedSVal unless it
actually is defined, how come if that's executed on this snippet:
if (x > 1)
return x;
so V ends up being the x in the return statement, check is not defined,
even tho stateZero etc, are all defined and have values as you'd expect?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150514/202d5f82/attachment.html>
More information about the cfe-dev
mailing list