<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Jan 6, 2014 at 3:05 PM, Howard Hinnant <span dir="ltr"><<a href="mailto:hhinnant@apple.com" target="_blank">hhinnant@apple.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: hhinnant<br>
Date: Mon Jan 6 17:05:04 2014<br>
New Revision: 198643<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=198643&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=198643&view=rev</a><br>
Log:<br>
Implement demangling for user-defined operators.<br>
<br>
Modified:<br>
libcxxabi/trunk/src/cxa_demangle.cpp<br>
libcxxabi/trunk/test/test_demangle.cpp<br>
<br>
Modified: libcxxabi/trunk/src/cxa_demangle.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/src/cxa_demangle.cpp?rev=198643&r1=198642&r2=198643&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/src/cxa_demangle.cpp?rev=198643&r1=198642&r2=198643&view=diff</a><br>
==============================================================================<br>
--- libcxxabi/trunk/src/cxa_demangle.cpp (original)<br>
+++ libcxxabi/trunk/src/cxa_demangle.cpp Mon Jan 6 17:05:04 2014<br>
@@ -2277,6 +2277,7 @@ parse_type(const char* first, const char<br>
// ::= gt # ><br>
// ::= ix # []<br>
// ::= le # <=<br>
+// ::= li <source-name> # operator ""<br>
// ::= ls # <<<br>
// ::= lS # <<=<br>
// ::= lt # <<br>
@@ -2438,6 +2439,18 @@ parse_operator_name(const char* first, c<br>
db.names.push_back("operator<=");<br>
first += 2;<br>
break;<br>
+ case 'i':<br>
+ {<br>
+ const char* t = parse_source_name(first+2, last, db);<br>
+ if (t != first+2)<br>
+ {<br>
+ if (db.names.empty())<br>
+ return first;<br>
+ db.names.back().first.insert(0, "operator\"\" ");<br></blockquote><div><br></div><div>It would be more correct to use "operator\"\"" here (without the trailing space). This will generate an incorrect unmangled name for operator""if, which can only be written without the space.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+ first = t;<br>
+ }<br>
+ }<br>
+ break;<br>
case 's':<br>
db.names.push_back("operator<<");<br>
first += 2;<br>
<br>
Modified: libcxxabi/trunk/test/test_demangle.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/test_demangle.cpp?rev=198643&r1=198642&r2=198643&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/test_demangle.cpp?rev=198643&r1=198642&r2=198643&view=diff</a><br>
==============================================================================<br>
--- libcxxabi/trunk/test/test_demangle.cpp (original)<br>
+++ libcxxabi/trunk/test/test_demangle.cpp Mon Jan 6 17:05:04 2014<br>
@@ -29584,6 +29584,7 @@ const char* cases[][2] =<br>
{"_Z1fPKU11objcproto1A7NSArray", "f(NSArray<A> const*)"},<br>
{"_ZNK1AIJ1Z1Y1XEEcv1BIJDpPT_EEIJS2_S1_S0_EEEv", "A<Z, Y, X>::operator B<X*, Y*, Z*><X, Y, Z>() const"},<br>
{"_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"},<br>
+ {"_Zli2_xy", "operator\"\" _x(unsigned long long)"},<br>
};<br>
<br>
const unsigned N = sizeof(cases) / sizeof(cases[0]);<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div></div>