34using namespace SVFUtil;
46 p.set(
":timeout",
static_cast<unsigned>(600));
64 solver.add(
phi.getExpr() &&
rhs.getExpr());
66 z3::check_result
checkRes = solver.check();
70 z3::model
m = solver.get_model();
73 z3::func_decl
v =
m[
i];
77 solution.emplace(std::stoi(
v.name().str()),
78 m.get_const_interp(
v).get_numeral_int());
101 if (solver.reason_unknown() ==
"timeout")
120 p.set(
":timeout",
static_cast<unsigned>(600));
126 solver.add(
phi.getExpr() &&
rhs.getExpr());
128 z3::check_result
checkRes = solver.check();
132 z3::model
m = solver.get_model();
135 z3::func_decl
v =
m[
i];
139 solution.emplace(std::stoi(
v.name().str()),
140 m.get_const_interp(
v).get_numeral_int());
161 if (solver.reason_unknown() ==
"timeout")
183 for (
auto it =
domain.getVarToVal().begin();
207 if (interval.
isTop())
225 if (interval.
isTop())
240 Z3Expr res = (
v >= (
int)
it->second.getInterval().lb().getNumeral() &&
241 v <= (
int)
it->second.getInterval().ub().getNumeral());
319 for (
const auto&
item: ret)
353 for (
const auto&
item : ret)
390 z3::check_result
checkRes = solver.check();
394 z3::model
m = solver.get_model();
405 solver.add(
expr.getExpr());
407 if (solver.check() == z3::sat)
AbstractState bottom() const
Set all value bottom.
void joinWith(const AbstractState &other)
domain join with other, important! other widen this.
AbstractState top() const
Set all value top.
void meetWith(const AbstractState &other)
domain meet with other, important! other widen this.
static BoundedInt plus_infinity()
bool is_minus_infinity() const
s64_t getNumeral() const
Retrieves the numeral value of the BoundedInt object.
bool is_plus_infinity() const
s64_t getIntNumeral() const
static BoundedInt minus_infinity()
const BoundedInt & ub() const
Return the upper bound.
static IntervalValue top()
Create the IntervalValue [-inf, +inf].
const BoundedInt & lb() const
Return the lower bound.
Z3Expr gamma_hat(const AbstractState &exeState) const
Return Z3Expr according to valToValMap.
AbstractState RSY(const AbstractState &domain, const Z3Expr &phi)
AbstractState bilateral(const AbstractState &domain, const Z3Expr &phi, u32_t descend_check=0)
Map< u32_t, s32_t > BoxedOptSolver(const Z3Expr &phi, Map< u32_t, s32_t > &ret, Map< u32_t, s32_t > &low_values, Map< u32_t, s32_t > &high_values)
AbstractState beta(const Map< u32_t, s32_t > &sigma, const AbstractState &exeState) const
virtual Z3Expr toIntZ3Expr(u32_t varId) const
Return Z3 expression lazily based on SVFVar ID.
void updateMap(Map< u32_t, s32_t > &map, u32_t key, const s32_t &value)
AbstractState abstract_consequence(const AbstractState &lower, const AbstractState &upper, const AbstractState &domain) const
void decide_cpa_ext(const Z3Expr &phi, Map< u32_t, Z3Expr > &, Map< u32_t, s32_t > &, Map< u32_t, s32_t > &, Map< u32_t, s32_t > &, Map< u32_t, s32_t > &)
AbstractState BS(const AbstractState &domain, const Z3Expr &phi)
Z3Expr toIntVal(s32_t f) const
const z3::expr & getExpr() const
static z3::solver & getSolver()
Get z3 solver, singleton design here to make sure we only have one context.
static z3::context & getContext()
Get z3 context, singleton design here to make sure we only have one context.
llvm::IRBuilder IRBuilder