[llvm] 34598fd - [llvm][ItaniumDemangle] Use __LDBL_MANT_DIG__ for configuring demangling of long doubles (#135968)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 16 09:05:32 PDT 2025
Author: Michael Buch
Date: 2025-04-16T18:05:27+02:00
New Revision: 34598fdadc06bd3b21aa97342dda05ecd9233912
URL: https://github.com/llvm/llvm-project/commit/34598fdadc06bd3b21aa97342dda05ecd9233912
DIFF: https://github.com/llvm/llvm-project/commit/34598fdadc06bd3b21aa97342dda05ecd9233912.diff
LOG: [llvm][ItaniumDemangle] Use __LDBL_MANT_DIG__ for configuring demangling of long doubles (#135968)
Syncing in the changes from
https://github.com/llvm/llvm-project/pull/134976 using the
`cp-to-llvm.sh` script.
Added:
Modified:
llvm/include/llvm/Demangle/ItaniumDemangle.h
Removed:
################################################################################
diff --git a/llvm/include/llvm/Demangle/ItaniumDemangle.h b/llvm/include/llvm/Demangle/ItaniumDemangle.h
index b0363c1a7a786..28fdfc5eff1b6 100644
--- a/llvm/include/llvm/Demangle/ItaniumDemangle.h
+++ b/llvm/include/llvm/Demangle/ItaniumDemangle.h
@@ -38,8 +38,10 @@
DEMANGLE_NAMESPACE_BEGIN
template <class T, size_t N> class PODSmallVector {
- static_assert(std::is_trivial<T>::value,
- "T is required to be a trivial type");
+ static_assert(std::is_trivially_copyable<T>::value,
+ "T is required to be a trivially copyable type");
+ static_assert(std::is_trivially_default_constructible<T>::value,
+ "T is required to be trivially default constructible");
T *First = nullptr;
T *Last = nullptr;
T *Cap = nullptr;
@@ -5739,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 || __LDBL_MANT_DIG__ == 106
+ 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.
More information about the llvm-commits
mailing list