Dealing with compilers that pretend to be GCC

Duncan Sands baldrick@free.fr
Sat Jan 21 13:55:00 GMT 2012


Hi Ludo,

>> For ICC, one can test __ICC. For instance, here's what we have in mpfr.h
>> (for the use of __builtin_constant_p and __extension__ ({ ... })):
>>
>> #if defined (__GNUC__)&&  !defined(__ICC)&&  !defined(__cplusplus)
>
> Yeah, but it’s a shame that those compilers define __GNUC__ without
> supporting 100% of the GNU C extensions.  With this approach, you would
> also need to add !defined for Clang, PGI, and probably others.

even GCC may not support 100% of the GCC extensions!  For example, you can
find hacked GCC's out there which disable nested function support by default
(I think Apple did this).  Even more problematic IMO than testing __GNUC__ is
code that tests for particular versions of GCC.  There are versions of GCC
which have backported features from more recent GCC's (eg: GNAT from Ada Core
Technologies is like this).  I've seen this cause problems with code that
includes different header files depending on the gcc version, since the
compiler doesn't have the expected set of header files.

Ciao, Duncan.



More information about the Gcc mailing list