summaryrefslogtreecommitdiff
path: root/libcxxabi
diff options
context:
space:
mode:
Diffstat (limited to 'libcxxabi')
-rw-r--r--libcxxabi/src/demangle/ItaniumDemangle.h16
-rw-r--r--libcxxabi/test/test_demangle.pass.cpp4
2 files changed, 9 insertions, 11 deletions
diff --git a/libcxxabi/src/demangle/ItaniumDemangle.h b/libcxxabi/src/demangle/ItaniumDemangle.h
index 4122781beb59..b9d17060c04f 100644
--- a/libcxxabi/src/demangle/ItaniumDemangle.h
+++ b/libcxxabi/src/demangle/ItaniumDemangle.h
@@ -5741,14 +5741,16 @@ struct FloatData<double>
template <>
struct FloatData<long double>
{
-#if defined(__mips__) && defined(__mips_n64) || defined(__aarch64__) || \
- defined(__wasm__) || defined(__riscv) || defined(__loongarch__) || \
- defined(__ve__)
- static const size_t mangled_size = 32;
-#elif defined(__arm__) || defined(__mips__) || defined(__hexagon__)
- static const size_t mangled_size = 16;
+#if __LDBL_MANT_DIG__ == 113
+ static const size_t mangled_size = 32;
+#elif __LDBL_MANT_DIG__ == 53 || defined(_MSC_VER)
+ // MSVC doesn't define __LDBL_MANT_DIG__, but it has long double equal to
+ // regular double on all current architectures.
+ static const size_t mangled_size = 16;
+#elif __LDBL_MANT_DIG__ == 64
+ static const size_t mangled_size = 20;
#else
- static const size_t mangled_size = 20; // May need to be adjusted to 16 or 24 on other platforms
+#error Unknown size for __LDBL_MANT_DIG__
#endif
// `-0x1.ffffffffffffffffffffffffffffp+16383` + 'L' + '\0' == 42 bytes.
// 28 'f's * 4 bits == 112 bits, which is the number of mantissa bits.
diff --git a/libcxxabi/test/test_demangle.pass.cpp b/libcxxabi/test/test_demangle.pass.cpp
index e9c74f70a094..abaa787f5432 100644
--- a/libcxxabi/test/test_demangle.pass.cpp
+++ b/libcxxabi/test/test_demangle.pass.cpp
@@ -13,10 +13,6 @@
// dd8b266ef.
// UNSUPPORTED: using-built-library-before-llvm-20
-// Android's long double on x86[-64] is (64/128)-bits instead of Linux's usual
-// 80-bit format, and this demangling test is failing on it.
-// XFAIL: LIBCXX-ANDROID-FIXME && target={{i686|x86_64}}-{{.+}}-android{{.*}}
-
// XFAIL: win32-broken-printf-a-precision
#include "support/timer.h"