void abort() { }; void assume_abort_if_not(int cond) { if(!cond) {abort();} } /*@ requires ((cond != 0)) && (cond != 0); ensures ((cond != 0)) && (1); @*/ void __VERIFIER_assert(int cond) { if (!(cond)) { ERROR: {/*@ assert(0); */;abort();} } return; } int __VERIFIER_nondet_int(); int main() { unsigned int i,j,a,b; int flag = __VERIFIER_nondet_int(); a = 0; b = 0; j = 1; if (flag) { i = 0; } else { i = 1; } /*@ loop invariant (((flag == 0) || (((0 == (i % 2)) && (a == b)) && ((((long long) a + 1) % 4294967296) == ((((long long) b + j) + ((unsigned long long) i * 4294967295)) % 4294967296))))); @*/ while (__VERIFIER_nondet_int()) { a++; b += (j - i); i += 2; if (i%2 == 0) { j += 2; } else { j++; } } if (flag) { __VERIFIER_assert(a == b); } return 0; }