From: Jonathan Wakely Date: Thu, 20 Jun 2024 12:28:08 +0000 (+0100) Subject: libstdc++: Fix __cpp_lib_chrono for old std::string ABI X-Git-Tag: basepoints/gcc-16~8019 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f906b107634bfac29676e7fcf364d0ca7ceed666;p=thirdparty%2Fgcc.git libstdc++: Fix __cpp_lib_chrono for old std::string ABI The header is incomplete for the old std::string ABI, because std::chrono::tzdb is only defined for the new ABI. The feature test macro advertising full C++20 support should not be defined for the old ABI. libstdc++-v3/ChangeLog: * include/bits/version.def (chrono): Add cxx11abi = yes. * include/bits/version.h: Regenerate. * testsuite/std/time/syn_c++20.cc: Adjust expected value for the feature test macro. --- diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def index 683b967d54b..42cdef2f526 100644 --- a/libstdc++-v3/include/bits/version.def +++ b/libstdc++-v3/include/bits/version.def @@ -574,6 +574,7 @@ ftms = { v = 201907; cxxmin = 20; hosted = yes; + cxx11abi = yes; // std::chrono::tzdb requires cxx11 std::string }; values = { v = 201611; diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h index 4850041c0a3..1eaf3733bc2 100644 --- a/libstdc++-v3/include/bits/version.h +++ b/libstdc++-v3/include/bits/version.h @@ -639,7 +639,7 @@ #undef __glibcxx_want_boyer_moore_searcher #if !defined(__cpp_lib_chrono) -# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED +# if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED # define __glibcxx_chrono 201907L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono) # define __cpp_lib_chrono 201907L diff --git a/libstdc++-v3/testsuite/std/time/syn_c++20.cc b/libstdc++-v3/testsuite/std/time/syn_c++20.cc index f0b86199e9d..4a527262e9d 100644 --- a/libstdc++-v3/testsuite/std/time/syn_c++20.cc +++ b/libstdc++-v3/testsuite/std/time/syn_c++20.cc @@ -20,9 +20,16 @@ #include +// std::chrono::tzdb is not defined for the old std::string ABI. +#if _GLIBCXX_USE_CXX_ABI +# define EXPECTED_VALUE 201907L +#else +# define EXPECTED_VALUE 201611L +#endif + #ifndef __cpp_lib_chrono # error "Feature test macro for chrono is missing in " -#elif __cpp_lib_chrono < 201907L +#elif __cpp_lib_chrono < EXPECTED_VALUE # error "Feature test macro for chrono has wrong value in " #endif @@ -94,7 +101,7 @@ namespace __gnu_test using std::chrono::make12; using std::chrono::make24; -#if _GLIBCXX_USE_CXX11_ABI +#if __cpp_lib_chrono >= 201803L using std::chrono::tzdb; using std::chrono::tzdb_list; using std::chrono::get_tzdb;