6aa1227400
This fixes a regression affecting the Intel compiler. Because that compiler defines __GNUC__ to match whatever version of GCC it finds on the host system, it might claim to be a brand new GCC despite not actually supporting all the built-ins that the latest GCC supports. This means the config checks for __GNUC__ don't work. Most recently this broke when r11-3569-g73ae6eb572515ad627b575a7fbdfdd47a4368e1c switched us from using __is_same_as to __is_same when __GNUC__ >= 11. Because __has_builtin is supported by all of GCC, Clang, and Intel we can use that to reliably detect whether a given built-in is supported, instead of hardcoding anything based on __GNUC__. The big caveat is that for versions of Clang <= 9.0.0 and for (as far as I can tell) all released versions of Intel icc, __has_builtin only evaluates to true for built-ins with a name starting "__builtin_". For __is_aggregate, __is_same, and __has_unique_object_representations it's necessary to use __is_identifier to check if it's a valid identifeir token instead. The solution used in this patch is to define _GLIBCXX_HAS_BUILTIN and use that instead of using __has_builtin directly. For compilers that define __is_identifier as well as __has_builtin we use both, so that if __has_builtin evaluates to false we try again using !__is_identifier. libstdc++-v3/ChangeLog: * include/bits/c++config (_GLIBCXX_HAS_BUILTIN): Define macro to work around different implementations of __has_builtin. (_GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP) (_GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE) (_GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED) (_GLIBCXX_HAVE_BUILTIN_IS_SAME, _GLIBCXX_HAVE_BUILTIN_LAUNDER): Define using _GLIBCXX_HAS_BUILTIN. |
||
---|---|---|
.. | ||
config | ||
doc | ||
include | ||
libsupc++ | ||
po | ||
python | ||
scripts | ||
src | ||
testsuite | ||
acinclude.m4 | ||
aclocal.m4 | ||
ChangeLog | ||
ChangeLog-1998 | ||
ChangeLog-1999 | ||
ChangeLog-2000 | ||
ChangeLog-2001 | ||
ChangeLog-2002 | ||
ChangeLog-2003 | ||
ChangeLog-2004 | ||
ChangeLog-2005 | ||
ChangeLog-2006 | ||
ChangeLog-2007 | ||
ChangeLog-2008 | ||
ChangeLog-2009 | ||
ChangeLog-2010 | ||
ChangeLog-2011 | ||
ChangeLog-2012 | ||
ChangeLog-2013 | ||
ChangeLog-2014 | ||
ChangeLog-2015 | ||
ChangeLog-2016 | ||
ChangeLog-2017 | ||
ChangeLog-2018 | ||
ChangeLog-2019 | ||
config.h.in | ||
configure | ||
configure.ac | ||
configure.host | ||
crossconfig.m4 | ||
fragment.am | ||
linkage.m4 | ||
Makefile.am | ||
Makefile.in | ||
README |
file: libstdc++-v3/README New users may wish to point their web browsers to the file index.html in the 'doc/html' subdirectory. It contains brief building instructions and notes on how to configure the library in interesting ways.