We had a situation come up here where things are like this (simplified, obviously):

c() { char x[1000000]; }
a() { b(); c(); }
b() { a(); c(); }

c() is a leaf. Without inlining, no problem. WIth c() inlined into a() and/or b(), a few mutually recursive calls to a() and b() blow out the stack. It's not clear the inliner should try to do anything about this, but I think it's worth discussing. The inliner can't detect the recursive loop in the general case, since it might be split across files, so the thing to do would be put some (target-OS-dependent) limit on local stack usage of the inlinee. Right now there's no such check.

Reply via email to