volatile int x; void __attribute__((noinline)) sink() { x++; /* break here */ } void __attribute__((noinline)) func3() { sink(); /* tail */ } void __attribute__((disable_tail_calls, noinline)) func2() { func3(); /* regular */ } void __attribute__((noinline)) func1() { func2(); /* tail */ } int __attribute__((disable_tail_calls)) main() { func1(); /* regular */ return 0; }