// verifast_options{disable_overflow_check target:ILP32} extern void abort(void);//@ requires true; //@ ensures true; extern void __assert_fail(const char *, const char *, unsigned int, const char *) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); void reach_error() //@ requires false; //@ ensures true; { __assert_fail("0", "trex03-2.c", 3, "reach_error"); } void __VERIFIER_assert(int cond) //@ requires (cond != 0); //@ ensures (cond != 0); { if (!(cond)) { ERROR: {reach_error();abort();} } return; } unsigned int __VERIFIER_nondet_uint();//@ requires true; //@ ensures true; _Bool __VERIFIER_nondet_bool();//@ requires true; //@ ensures true; int main()//@ requires module(trex03_2__verifast_instrumented_modified, true); //@ ensures junk(); { unsigned int x1=__VERIFIER_nondet_uint(), x2=__VERIFIER_nondet_uint(), x3=__VERIFIER_nondet_uint(); unsigned int d1=1, d2=1, d3=1; _Bool c1=__VERIFIER_nondet_bool(), c2=__VERIFIER_nondet_bool(); while(x1>0 && x2>0 && x3>0)//@ invariant true; { if (c1) x1=x1-d1; else if (c2) x2=x2-d2; else x3=x3-d3; c1=__VERIFIER_nondet_bool(); c2=__VERIFIER_nondet_bool(); } __VERIFIER_assert(x1==0 || x2==0 || x3==0); return 0; }