[libcxx-commits] [libcxx] 2302365 - [libc++] Replace __ppc64__ with __powerpc64__ and fix is_iec559 for non-ibm128

Fangrui Song via libcxx-commits libcxx-commits at lists.llvm.org
Tue Nov 22 13:33:40 PST 2022


Author: Fangrui Song
Date: 2022-11-22T13:33:34-08:00
New Revision: 23023654be6c3c77a2a90611d19ea76788492704

URL: https://github.com/llvm/llvm-project/commit/23023654be6c3c77a2a90611d19ea76788492704
DIFF: https://github.com/llvm/llvm-project/commit/23023654be6c3c77a2a90611d19ea76788492704.diff

LOG: [libc++] Replace __ppc64__ with __powerpc64__ and fix is_iec559 for non-ibm128

The lowercase `__ppc64__` is not defined by non-darwin powerpc64 GCC, therefore
it lures users to write code which is not portable to GCC. Migrate to
`__powerpc64__` in preparation for undefining `__ppc64__`. `__powerpc64__` is
much more common than `__PPC64__`.

Update alignment_of.pass.cpp to use 1 unconditionally:
on powerpc-unknown-linux-gnu `alignof(bool) = _Alignof(bool) = __alignof(bool) = 1`.
The value 4 might be derived from an ancient Clang.

Change is_iec559 to true when long double uses uses IEEE 754 quadruple or double
precision (i.e. not ibm128).

Reviewed By: #libc, thesamesam, ldionne

Differential Revision: https://reviews.llvm.org/D137513

Added: 
    

Modified: 
    libcxx/include/limits
    libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp
    libcxx/test/std/utilities/meta/meta.unary.prop.query/alignment_of.pass.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/include/limits b/libcxx/include/limits
index 3e074185702c8..ee8249fa3eff1 100644
--- a/libcxx/include/limits
+++ b/libcxx/include/limits
@@ -428,7 +428,7 @@ protected:
     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
 
-#if (defined(__ppc__) || defined(__ppc64__))
+#if defined(__powerpc__) && defined(__LONG_DOUBLE_IBM128__)
     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
 #else
     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;

diff  --git a/libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp b/libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp
index 37f217ee84898..4fb19fe3eea85 100644
--- a/libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp
@@ -50,7 +50,7 @@ int main(int, char**)
 #endif
     test<float, true>();
     test<double, true>();
-#if (defined(__ppc__) || defined(__ppc64__))
+#if defined(__powerpc__) && defined(__LONG_DOUBLE_IBM128__)
     test<long double, false>();
 #else
     test<long double, true>();

diff  --git a/libcxx/test/std/utilities/meta/meta.unary.prop.query/alignment_of.pass.cpp b/libcxx/test/std/utilities/meta/meta.unary.prop.query/alignment_of.pass.cpp
index 9f93e1f8b4ef9..a1c24b745b441 100644
--- a/libcxx/test/std/utilities/meta/meta.unary.prop.query/alignment_of.pass.cpp
+++ b/libcxx/test/std/utilities/meta/meta.unary.prop.query/alignment_of.pass.cpp
@@ -47,15 +47,8 @@ int main(int, char**)
     test_alignment_of<const int*, sizeof(intptr_t)>();
     test_alignment_of<char[3], 1>();
     test_alignment_of<int, 4>();
-    // The test case below is a hack. It's hard to detect what golden value
-    // we should expect. In most cases it should be 8. But in i386 builds
-    // with Clang >= 8 or GCC >= 8 the value is '4'.
     test_alignment_of<double, TEST_ALIGNOF(double)>();
-#if (defined(__ppc__) && !defined(__ppc64__) && !defined(_AIX))
-    test_alignment_of<bool, 4>();   // 32-bit PPC has four byte bool, except on AIX.
-#else
     test_alignment_of<bool, 1>();
-#endif
     test_alignment_of<unsigned, 4>();
 
   return 0;


        


More information about the libcxx-commits mailing list