diff options
author | Xing Xue <xingxue@outlook.com> | 2020-04-15 16:59:06 +0300 |
---|---|---|
committer | Xing Xue <xingxue@outlook.com> | 2020-04-15 16:59:06 +0300 |
commit | 4578fa8a1cc39dbb6c2a47a5358b7e298d2a4c17 (patch) | |
tree | a8a1a35cfac6aec4d626f218891b5866ebb605b5 /libcxxabi | |
parent | 1242018033a7f1a3b4a1a830746afaa7b6719c07 (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.h | 6 |
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(); |