extern void abort (void); static max; static void __attribute__((noinline)) storemax (int i) { if (i > max) max = i; } static int CallFunctionRec(int (*fun)(int depth), int depth) { if (!fun(depth)) { return 0; } if (depth < 10) { CallFunctionRec(fun, depth + 1); } return 1; } static int CallFunction(int (*fun)(int depth)) { return CallFunctionRec(fun, 1) && !fun(0); } static int callback(int depth) { storemax (depth); return depth != 0; } int main() { CallFunction(callback); if (max != 10) abort (); return 0; }