*nils*nils* $ cat > test.c int g(int x); int f(int x) {return (x == 0 ? x : g(x));} int main() {return (g(1000000000));} *nils*nils* $ gcc -O2 -c test.c *nils*nils* $ cat > test2.c int f(int x); int g(int x) {return f(x-1);} *nils*nils* $ gcc -O2 -c test2.c *nils*nils* $ gcc -O2 test.o test2.o *nils*nils* $ ./a.out *nils*nils* $