void TritonToZ3Ast::operator()(triton::ast::BvaddNode& e) { Z3Result op1 = this->eval(*e.getChilds()[0]); Z3Result op2 = this->eval(*e.getChilds()[1]); z3::expr newexpr = to_expr(this->result.getContext(), Z3_mk_bvadd(this->result.getContext(), op1.getExpr(), op2.getExpr())); this->result.setExpr(newexpr); }
void test_bvneg() { Z3_config cfg = Z3_mk_config(); Z3_set_param_value(cfg,"MODEL","true"); Z3_context ctx = Z3_mk_context(cfg); { Z3_sort bv30 = Z3_mk_bv_sort(ctx, 30); Z3_ast x30 = Z3_mk_fresh_const(ctx, "x", bv30); Z3_ast fml = Z3_mk_eq(ctx, Z3_mk_int(ctx, -1, bv30), Z3_mk_bvadd(ctx, Z3_mk_int(ctx, 0, bv30), x30)); Z3_assert_cnstr(ctx, fml); Z3_lbool r = Z3_check(ctx); std::cout << r << "\n"; } { Z3_sort bv31 = Z3_mk_bv_sort(ctx, 31); Z3_ast x31 = Z3_mk_fresh_const(ctx, "x", bv31); Z3_ast fml = Z3_mk_eq(ctx, Z3_mk_int(ctx, -1, bv31), Z3_mk_bvadd(ctx, Z3_mk_int(ctx, 0, bv31), x31)); Z3_assert_cnstr(ctx, fml); Z3_lbool r = Z3_check(ctx); std::cout << r << "\n"; } { Z3_sort bv32 = Z3_mk_bv_sort(ctx, 32); Z3_ast x32 = Z3_mk_fresh_const(ctx, "x", bv32); Z3_ast fml = Z3_mk_eq(ctx, Z3_mk_int(ctx,-1, bv32), Z3_mk_bvadd(ctx, Z3_mk_int(ctx, 0, bv32), x32)); Z3_assert_cnstr(ctx, fml); Z3_lbool r = Z3_check(ctx); std::cout << r << "\n"; } Z3_del_config(cfg); Z3_del_context(ctx); }