diff options
author | Anders Carlsson <andersca@mac.com> | 2014-02-17 21:56:01 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2014-02-17 21:56:01 +0000 |
commit | 3e107b3bd8cb0b51330a39b8fc7f5fb64584069d (patch) | |
tree | e1ad68ee0052d94c054594e529cb0f5ff87bbfd9 | |
parent | 8b7258bdb3d371a59e1e84e3c417b76a2c0dc003 (diff) | |
download | bcm5719-llvm-3e107b3bd8cb0b51330a39b8fc7f5fb64584069d.tar.gz bcm5719-llvm-3e107b3bd8cb0b51330a39b8fc7f5fb64584069d.zip |
Demangle Dc to decltype(auto) as per the Itanium C++ ABI spec.
llvm-svn: 201533
-rw-r--r-- | libcxxabi/src/cxa_demangle.cpp | 5 | ||||
-rw-r--r-- | libcxxabi/test/test_demangle.cpp | 1 |
2 files changed, 6 insertions, 0 deletions
diff --git a/libcxxabi/src/cxa_demangle.cpp b/libcxxabi/src/cxa_demangle.cpp index 839aebec1c4..d1661e8942b 100644 --- a/libcxxabi/src/cxa_demangle.cpp +++ b/libcxxabi/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/libcxxabi/test/test_demangle.cpp b/libcxxabi/test/test_demangle.cpp index 2d9dd55abd4..bb5b66d25f9 100644 --- a/libcxxabi/test/test_demangle.cpp +++ b/libcxxabi/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]); |