diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2021-03-23 13:08:32 +0000 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2021-03-23 15:00:43 +0000 |
commit | baef0cffb58be7f5d9aeac6313ea9d8becc017b1 (patch) | |
tree | 8943b72597aa8babe8b313b9313837ac7240b62e | |
parent | 831f9f768eb1fbf9a31d9a89591188b1487b6376 (diff) | |
download | gcc-baef0cffb58be7f5d9aeac6313ea9d8becc017b1.zip gcc-baef0cffb58be7f5d9aeac6313ea9d8becc017b1.tar.gz gcc-baef0cffb58be7f5d9aeac6313ea9d8becc017b1.tar.bz2 |
libstdc++: Disable "ALT128" long double support for Clang
Clang does not currently support the __ibm128 type [1] and only supports
the __ieee128 type in the unreleased 12.0.0 version [2]. That means it
is not possible to provide support for -mabi=ieeelongdouble with Clang
in an ABI compatible way (as we do for GCC by defining new facets and
other types in the __gnu_cxx_ldbl128 namespace).
By preventing the definition of _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT when
compiling with Clang, all uses of __ibm128 and __ieee128 types will be
disabled. This can be revisited in future when Clang supports the types
(and provides a way to detect that support using the preprocessor).
[1] https://reviews.llvm.org/D93377
[2] https://reviews.llvm.org/D97846
libstdc++-v3/ChangeLog:
* include/bits/c++config (_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT):
Do not define when compiling with Clang.
-rw-r--r-- | libstdc++-v3/include/bits/c++config | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index b57ff33..72ec919 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -425,9 +425,12 @@ _GLIBCXX_END_NAMESPACE_VERSION // GLIBCXX_ABI Deprecated // Define if compatibility should be provided for -mlong-double-64. #undef _GLIBCXX_LONG_DOUBLE_COMPAT + // Define if compatibility should be provided for alternative 128-bit long -// double formats. +// double formats. Not possible for Clang until __ibm128 is supported. +#ifndef __clang__ #undef _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT +#endif // Inline namespaces for long double 128 modes. #if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \ |