// 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", "sum_20x0-2.c", 3, "reach_error"); } int sum(int n, int m) //@ requires true; //@ ensures (result == (n + m)); { if (n <= 0) { return m + n; } else { return sum(n - 1, m + 1); } } int main(void) //@ requires module(sum_20x0_2__verifast_instrumented_modified, true); //@ ensures junk(); { int a = 20; int b = 0; int result = sum(a, b); if (result != a + b) { ERROR: {reach_error();abort();} } }