void abort() { }; /*@ requires (1); ensures ((((((\result == ((long long) 2 + m)) && (2 == n)) || ((\result <= m) && (((long long) n + m) <= \result))) || ((\result == ((long long) m + 1)) && (n == 1))) || (2 < n))); @*/ int sum(int n, int m) { if (n <= 0) { return m + n; } else { return sum(n - 1, m + 1); } } int main() { int a = 2; int b = 3; int result = sum(a, b); if (result != a + b) { ERROR: {/*@ assert(0); */;abort();} } }