extern int __VERIFIER_nondet_int(); void abort() { }; /*@ requires (1); ensures (((((((((3 == \result) && (x == 3)) || ((2 == \result) && (x == 2))) || ((5 == \result) && (5 == x))) || ((\result == 1) && (x == 1))) || ((x == 4) && (4 == \result))) || ((\result == 0) && (x == 0))) || (5 < x))); @*/ int id(int x) { if (x==0) return 0; return id(x-1) + 1; } int main() { int input = 5; int result = id(input); if (result != 5) { ERROR: {/*@ assert(0); */;abort();} } }