https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62282
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|REOPENED |RESOLVED Resolution|--- |INVALID --- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Dmitry Petrov from comment #9) > Jakub, so you telling that different behaviour of gcc and g++ is ok in this > case? Yes. > With gcc inline + gnu_inline does not yields undefined references. C++ has one inline semantics, C99 another one (different from C++), GNU89 another one. So, why do you expect some consistency? The gnu_inline attribute allows to tweak what semantics it is. In C99 mode, where since 4.3 the default is the C99 semantics, gnu_inline attribute tells the compiler to use GNU89 inline semantics anyway. That semantics is about all of inline, extern inline, static inline and various combinations of those on duplicate declarations/definitions. In C++ mode, all we needed was the GNU89 extern inline semantics, so the gnu_inline attribute in C++ is about that. > And before you advice me to not use such constructions in my code, please > note that problem appears in gperf output. So people have to use ugly #undef > workarounds or even more ugly sed tricks or just don't use gperf's C output > with g++ when debugging. Why don't you emit it conditional on __cpluplus macro or similar? Which of the above mentioned semantics you want for your inlines? > And I'm sorry to be that insistent but > >G++ 4.3 was the first release to support gnu_inline attribute in C++ > is not true: g++-4.1 supported gnu_inline at some point: > http://www.redhat.com/archives/fedora-extras-commits/2007-September/msg00089. > html 4.1 doesn't support it in C++ mode, only some vendor compilers like 4.1-RH (perhaps others) have some changes backported. Vanilla 4.1 was the first gcc version to support it in C mode though.