// verifast_options{disable_overflow_check target:ILP32}
extern void abort(void);
//@ requires true;
//@ ensures true;
void reach_error()
//@ requires false;
//@ ensures true;
{}
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_10x0_1__verifast_instrumented, true);
//@ ensures junk();
{
    //@ open_module(); 
  int a = 10;
  int b = 0;
  int result = sum(a, b);
  if (result != a + b) {
    ERROR: {reach_error();abort();}
  }
 return 0; }