/* TAGS: c sym */ /* VERIFY_OPTS: --symbolic --sequential -o nofail:malloc */ /* CC_OPTS: */ // Source: Credited to Anubhav Gupta // appears in Ranjit Jhala, Ken McMillan: "A Practical and Complete Approach // to Predicate Refinement", TACAS 2006 extern void __VERIFIER_error(void); extern void __VERIFIER_assume(int); void __VERIFIER_assert(int cond) { if (!(cond)) { ERROR: __VERIFIER_error(); } return; } extern int __VERIFIER_nondet_int(void); // V: small.10 CC_OPT: -DNUM=10 // V: small.100 CC_OPT: -DNUM=100 TAGS: big // V: big.1000 CC_OPT: -DNUM=1000 TAGS: big // V: big.10000 CC_OPT: -DNUM=10000 TAGS: big // V: big.100000 CC_OPT: -DNUM=100000 TAGS: big int main() { int i, j; i = __VERIFIER_nondet_int(); j = __VERIFIER_nondet_int(); if (!(i >= 0 && j >= 0)) return 0; if (i >= NUM || j >= NUM) return 0; int x = i; int y = j; while(x != 0) { x--; y--; } if (i == j) { __VERIFIER_assert(y == 0); } return 0; }