From: Jonathan Wakely Date: Thu, 20 Jan 2022 11:18:34 +0000 (+0000) Subject: libstdc++: Use Clang attribute instead of __constinit X-Git-Tag: basepoints/gcc-13~1544 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=109f8af3d3c5424f103ceef5d77f5a447fb931ce;p=thirdparty%2Fgcc.git libstdc++: Use Clang attribute instead of __constinit Clang doesn't support the __constinit extension that we use pre-C++20, but it does have its own equivalent attribute that can be used instead. This makes it a little easier to use Clang to build libstdc++ (which isn't supported. but is sometimes attempted for esoteric targets). libstdc++-v3/ChangeLog: * src/c++11/cxx11-ios_failure.cc (__constinit): Define as equivalent attribute for Clang. * src/c++11/future.cc (__constinit): Likewise. * src/c++11/system_error.cc (__constinit): Likewise. * src/c++17/memory_resource.cc (__constinit): Likewise. --- diff --git a/libstdc++-v3/src/c++11/cxx11-ios_failure.cc b/libstdc++-v3/src/c++11/cxx11-ios_failure.cc index ba4b1413bf9c..14a7f9cfcb1c 100644 --- a/libstdc++-v3/src/c++11/cxx11-ios_failure.cc +++ b/libstdc++-v3/src/c++11/cxx11-ios_failure.cc @@ -42,6 +42,10 @@ # error This file should not be compiled for this configuration. #endif +#if __has_cpp_attribute(clang::require_constant_initialization) +# define __constinit [[clang::require_constant_initialization]] +#endif + namespace { struct io_error_category final : std::error_category diff --git a/libstdc++-v3/src/c++11/future.cc b/libstdc++-v3/src/c++11/future.cc index 488ff17a1e6f..c52c057ba1d4 100644 --- a/libstdc++-v3/src/c++11/future.cc +++ b/libstdc++-v3/src/c++11/future.cc @@ -25,6 +25,10 @@ #include #include +#if __has_cpp_attribute(clang::require_constant_initialization) +# define __constinit [[clang::require_constant_initialization]] +#endif + namespace { struct future_error_category final : public std::error_category diff --git a/libstdc++-v3/src/c++11/system_error.cc b/libstdc++-v3/src/c++11/system_error.cc index 789f2b45382b..7b1a5a20637d 100644 --- a/libstdc++-v3/src/c++11/system_error.cc +++ b/libstdc++-v3/src/c++11/system_error.cc @@ -37,6 +37,10 @@ #include #endif +#if __has_cpp_attribute(clang::require_constant_initialization) +# define __constinit [[clang::require_constant_initialization]] +#endif + namespace { using std::string; diff --git a/libstdc++-v3/src/c++17/memory_resource.cc b/libstdc++-v3/src/c++17/memory_resource.cc index 5cdb35df2cd0..bb6334c96947 100644 --- a/libstdc++-v3/src/c++17/memory_resource.cc +++ b/libstdc++-v3/src/c++17/memory_resource.cc @@ -32,6 +32,10 @@ # include // std::__exchange #endif +#if __has_cpp_attribute(clang::require_constant_initialization) +# define __constinit [[clang::require_constant_initialization]] +#endif + namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION