예제 #1
0
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);
}
예제 #2
0
파일: api.cpp 프로젝트: CHolmes3/z3
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);    
}