diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2023-06-30 11:07:35 +0100 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2023-06-30 15:35:02 +0100 |
commit | fe2651affa8c15624188bfd062fb894648743431 (patch) | |
tree | 5330912c016c8d8549df4358652f84d4ab01c556 /libstdc++-v3/config.h.in | |
parent | d083c8c808cae2c7acb46117374bb047b4c3afce (diff) | |
download | gcc-fe2651affa8c15624188bfd062fb894648743431.zip gcc-fe2651affa8c15624188bfd062fb894648743431.tar.gz gcc-fe2651affa8c15624188bfd062fb894648743431.tar.bz2 |
libstdc++: Fix iostream init for Clang on darwin [PR110432]
The __has_attribute(init_priority) check in <iostream> is true for Clang
on darwin, which means that user code including <iostream> thinks the
library will initialize the global streams. However, when libstdc++ is
built by GCC on darwin, the __has_attribute(init_priority) check is
false, which means that the library thinks that user code will do the
initialization when <iostream> is included. This means that the
initialization is never done.
Add an autoconf check so that the header and the library both make their
decision based on the static properties of GCC at build time, with a
consistent outcome.
As a belt and braces check, also do the initialization in <iostream> if
the compiler including that header doesn't support the attribute (even
if the library also containers the initialization). This might result in
redundant initialization done in <iostream>, but ensures the
initialization happens somewhere if there's any doubt about the
attribute working correctly due to missing linker support.
libstdc++-v3/ChangeLog:
PR libstdc++/110432
* acinclude.m4 (GLIBCXX_CHECK_INIT_PRIORITY): New.
* config.h.in: Regenerate.
* configure: Regenerate.
* configure.ac: Use GLIBCXX_CHECK_INIT_PRIORITY.
* include/std/iostream: Use new autoconf macro as well as
__has_attribute.
* src/c++98/ios_base_init.h: Use new autoconf macro instead of
__has_attribute.
Reviewed-by: Patrick Palka <ppalka@redhat.com>
Diffstat (limited to 'libstdc++-v3/config.h.in')
-rw-r--r-- | libstdc++-v3/config.h.in | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in index e156650..91eca6e 100644 --- a/libstdc++-v3/config.h.in +++ b/libstdc++-v3/config.h.in @@ -994,6 +994,9 @@ /* Define if get_nprocs is available in <sys/sysinfo.h>. */ #undef _GLIBCXX_USE_GET_NPROCS +/* Define if init_priority should be used for iostream initialization. */ +#undef _GLIBCXX_USE_INIT_PRIORITY_ATTRIBUTE + /* Define if LFS support is available. */ #undef _GLIBCXX_USE_LFS |