https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114262
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to LIU Hao from comment #4) > The only difference between the C99 `extern inline` and C++ `extern inline` > is that the C++ external definition is COMDAT. Well not really. comdat changes heurstics here though. The reason being C++ inline functions are most likely smaller and should really be inlined. This is all heurstics of inlining and figuring out locally in the TU that it might not be called in another TU or not. Note GCC has not retuned its -Os heurstics for a long time because it has been decent enough for most folks and corner cases like this is almost never come up.