https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111643
--- Comment #4 from Lukas Grätz <lukas.gra...@tu-darmstadt.de> --- Sorry, just to clarify, whether I understood your two comments correctly. Should foo() be inlined in the following example because flatten works recursively? void foo (void) { // CODE } int bar_original (void) { // CODE foo(); // CODE } __attribute__((flatten)) int bar (void) { // INSTRUMENTATION CAN GO HERE return bar_original(); } I thought that according to the documentation of flatten, foo() would not be affected by the flatten attribute of bar(). It says: "For a function marked with this attribute, every call inside this function is inlined, if possible." The call to foo() is not directly inside the function bar(). Only if bar_original() had also the __attribute__((flatten)), I would expect foo() to be made inline in bar() because of recursive flatten. Of course, it could still be inlined because some heuristics...