https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69865

--- Comment #4 from Bernd Edlinger <bernd.edlinger at hotmail dot de> ---
when working on a patch I noticed that there is something more...

that is if the preprocessor macro __GNUC_GNU_INLINE__ or __GNUC_STDC_INLINE__
is defined on C++.  Actually that is irrellevant to C++, but it can trigger
bugs in c++ headers for instance in gcc/cp/cfns.h:

we have there:

#ifdef __GNUC__
__inline
#endif
const char * libc_name_p (const char *, unsigned int);
...
#ifdef __GNUC__
__inline
#ifdef __GNUC_STDC_INLINE__
__attribute__ ((__gnu_inline__))
#endif
#endif
const char *
libc_name_p (register const char *str, register unsigned int len)

=> error: different attributes.

The status quo is:

if we do not sepecify -std= on the command line (implicitly -std=gnu++14)
we have __GNUC_GNU_INLINE__ defined.

but if we define -std=gnu++14 to -std=c++11 on the command line,
we have __GNUC_STDC_INLINE__ defined.

if we define -std=c++03 on the command line, we get __GNUC_GNU_INLINE__.

I think the c++ FE does nothing with the flag_gnu89_inline.

I dont know what the right fix is here:
a) define __GNUC_GNU_INLINE__ in C++

b) define __GNUC_STDC_INLINE__ in C++ and fix gcc/cp/cfns.h

c) define neither __GNUC_GNU_INLINE__ nor _GNUC_STDC_INLINE__  in C++


c feels right, but may break other things on other header files.
a feels wrong, this is what probably most header files expect.

Reply via email to