summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2014-02-17 21:56:01 +0000
committerAnders Carlsson <andersca@mac.com>2014-02-17 21:56:01 +0000
commit2950e56d0fb30123dc93a55dc92f5a903c2bec13 (patch)
treea3e6b1dcef211e47a62ba7bbaac66a1c531c5e90
parentc82e02dd25b36e5d05cd3644499a553709c9395d (diff)
downloadlibcxxabi_35a-2950e56d0fb30123dc93a55dc92f5a903c2bec13.tar.gz
Demangle Dc to decltype(auto) as per the Itanium C++ ABI spec.
git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@201533 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--src/cxa_demangle.cpp5
-rw-r--r--test/test_demangle.cpp1
2 files changed, 6 insertions, 0 deletions
diff --git a/src/cxa_demangle.cpp b/src/cxa_demangle.cpp
index 839aebe..d1661e8 100644
--- a/src/cxa_demangle.cpp
+++ b/src/cxa_demangle.cpp
@@ -352,6 +352,7 @@ parse_substitution(const char* first, const char* last, C& db)
// ::= Di # char32_t
// ::= Ds # char16_t
// ::= Da # auto (in dependent new-expressions)
+// ::= Dc # decltype(auto)
// ::= Dn # std::nullptr_t (i.e., decltype(nullptr))
// ::= u <source-name> # vendor extended type
@@ -487,6 +488,10 @@ parse_builtin_type(const char* first, const char* last, C& db)
db.names.push_back("auto");
first += 2;
break;
+ case 'c':
+ db.names.push_back("decltype(auto)");
+ first += 2;
+ break;
case 'n':
db.names.push_back("std::nullptr_t");
first += 2;
diff --git a/test/test_demangle.cpp b/test/test_demangle.cpp
index 2d9dd55..bb5b66d 100644
--- a/test/test_demangle.cpp
+++ b/test/test_demangle.cpp
@@ -29585,6 +29585,7 @@ const char* cases[][2] =
{"_ZNK1AIJ1Z1Y1XEEcv1BIJDpPT_EEIJS2_S1_S0_EEEv", "A<Z, Y, X>::operator B<X*, Y*, Z*><X, Y, Z>() const"},
{"_ZNK3Ncr6Silver7Utility6detail12CallOnThreadIZ53-[DeploymentSetupController handleManualServerEntry:]E3$_5EclIJEEEDTclclL_ZNS2_4getTIS4_EERT_vEEspclsr3stdE7forwardIT_Efp_EEEDpOSA_", "decltype(-[DeploymentSetupController handleManualServerEntry:]::$_5& Ncr::Silver::Utility::detail::getT<-[DeploymentSetupController handleManualServerEntry:]::$_5>()()(std::forward<-[DeploymentSetupController handleManualServerEntry:]::$_5>(fp))) Ncr::Silver::Utility::detail::CallOnThread<-[DeploymentSetupController handleManualServerEntry:]::$_5>::operator()<>(-[DeploymentSetupController handleManualServerEntry:]::$_5&&) const"},
{"_Zli2_xy", "operator\"\" _x(unsigned long long)"},
+ {"_Z1fIiEDcT_", "decltype(auto) f<int>(int)"},
};
const unsigned N = sizeof(cases) / sizeof(cases[0]);