Comment by weebull
10 months ago
Those pathological cases are really what inlining is for, with the exception of any tiny recursive functions that can't be tail call optimised.
10 months ago
Those pathological cases are really what inlining is for, with the exception of any tiny recursive functions that can't be tail call optimised.
Yes, inlining (and LTO can take it a notch or two higher) does away with the problem altogether, however the number of projects that default to «-Os» (or even to «-O2») to build a release product is substantial to large.
There is also a significant number of projects that go to great lengths to force-override CFLAGS/CXXFLAGS (usually with «-O2 -g» or even with «-O») or make it extraordinary difficult to change the project's default CFLAGS, for no apparent reasons which eliminates a number of advanced optimisations in builds with default build settings.