Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dotnet/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXing Xue <xingxue@outlook.com>2020-04-15 16:59:06 +0300
committerXing Xue <xingxue@outlook.com>2020-04-15 16:59:06 +0300
commit4578fa8a1cc39dbb6c2a47a5358b7e298d2a4c17 (patch)
treea8a1a35cfac6aec4d626f218891b5866ebb605b5 /libcxxabi
parent1242018033a7f1a3b4a1a830746afaa7b6719c07 (diff)
[demangler] PPC and S390: Fix parsing of e-prefixed long double literals
Summary: This patch is to fix the parsing of long double literals encoded with the e prefix on PowerPC and S390. For both PowerPC and S390, type code e is used for 64-bit long double literals and g is used for 128-bit long double literals. libcxxabi test case test_demangle.pass.cpp fails without the fix. Authored by: xingxue-ibm Reviewers: hubert.reinterpretcast, jasonliu, erik.pilkington, uweigand, mclow.li sts, libc++abi Reviewed by: hubert.reinterpretcast, erik.pilkington Differential Revision: https://reviews.llvm.org/D74163
Diffstat (limited to 'libcxxabi')
-rw-r--r--libcxxabi/src/demangle/ItaniumDemangle.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/libcxxabi/src/demangle/ItaniumDemangle.h b/libcxxabi/src/demangle/ItaniumDemangle.h
index 376e0efea423..85694d9e93a1 100644
--- a/libcxxabi/src/demangle/ItaniumDemangle.h
+++ b/libcxxabi/src/demangle/ItaniumDemangle.h
@@ -4225,7 +4225,13 @@ Node *AbstractManglingParser<Derived, Alloc>::parseExprPrimary() {
return getDerived().template parseFloatingLiteral<double>();
case 'e':
++First;
+#if defined(__powerpc__) || defined(__s390__)
+ // Handle cases where long doubles encoded with e have the same size
+ // and representation as doubles.
+ return getDerived().template parseFloatingLiteral<double>();
+#else
return getDerived().template parseFloatingLiteral<long double>();
+#endif
case '_':
if (consumeIf("_Z")) {
Node *R = getDerived().parseEncoding();