/* 
  an example from llreve:
  http://formal.iti.kit.edu/projects/improve/reve/
*/
/* extern int __mark(int); */
int f1(int m, int n) {
    int r;
    int x;
    x = 0;
    r = 0;
    if (m == 0) {
        r = n + 1;
    } else {
        if (m > 0 && n == 0) {
            /* __mark(23); */
            r = f1(m - 1, 1);
        } else {
            /* __mark(42); */
            x = f1(m, n - 1);
            r = f1(m - 1, x);
        }
    }
    return r;
}

int f2(int m, int n) {
    int r;
    int x;
    x = 0;
    r = 0;
    if (m > 0 && n == 0) {
        /* __mark(23); */
        r = f2(m - 1, 1);
    } else {
        if (m == 0) {
            r = n + 1;
        } else {
            /* __mark(42); */
            x = f2(m, n - 1);
            r = f2(m - 1, x);
        }
    }
    return r;
}
