<div>Hi Hans,</div><div><br></div><div>Would it be possible to merge this into the release branch as well?  It only impacts the tool and corrects the behavior so I believe it to be low impact.</div><div><br><div class="gmail_quote"><div>On Wed, Jan 18, 2017 at 7:09 PM Saleem Abdulrasool via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: compnerd<br class="gmail_msg"><br>Date: Wed Jan 18 20:58:46 2017<br class="gmail_msg"><br>New Revision: 292467<br class="gmail_msg"><br><br class="gmail_msg"><br>URL: <a href="http://llvm.org/viewvc/llvm-project?rev=292467&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=292467&view=rev</a><br class="gmail_msg"><br>Log:<br class="gmail_msg"><br>llvm-cxxfilt: filter out invalid manglings<br class="gmail_msg"><br><br class="gmail_msg"><br>c++filt does not attempt to demangle symbols which do not match its<br class="gmail_msg"><br>expected format.  This means that the symbol must start with _Z or ___Z<br class="gmail_msg"><br>(block invocation function extension).  Any other symbols are returned<br class="gmail_msg"><br>as is.  Note that this is different from the behaviour of __cxa_demangle<br class="gmail_msg"><br>which will demangle fragments.<br class="gmail_msg"><br><br class="gmail_msg"><br>Added:<br class="gmail_msg"><br>    llvm/trunk/test/tools/llvm-cxxfilt/invalid.test<br class="gmail_msg"><br>Modified:<br class="gmail_msg"><br>    llvm/trunk/tools/llvm-cxxfilt/llvm-cxxfilt.cpp<br class="gmail_msg"><br><br class="gmail_msg"><br>Added: llvm/trunk/test/tools/llvm-cxxfilt/invalid.test<br class="gmail_msg"><br>URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cxxfilt/invalid.test?rev=292467&view=auto" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cxxfilt/invalid.test?rev=292467&view=auto</a><br class="gmail_msg"><br>==============================================================================<br class="gmail_msg"><br>--- llvm/trunk/test/tools/llvm-cxxfilt/invalid.test (added)<br class="gmail_msg"><br>+++ llvm/trunk/test/tools/llvm-cxxfilt/invalid.test Wed Jan 18 20:58:46 2017<br class="gmail_msg"><br>@@ -0,0 +1,6 @@<br class="gmail_msg"><br>+RUN: llvm-cxxfilt _Z1fi __Z1fi f ___ZSt1ff_block_invoke | FileCheck %s<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+CHECK: f(int)<br class="gmail_msg"><br>+CHECK-NEXT: __Z1fi<br class="gmail_msg"><br>+CHECK-NEXT: f<br class="gmail_msg"><br>+CHECK-NEXT: invocation function for block in std::f(float)<br class="gmail_msg"><br><br class="gmail_msg"><br>Modified: llvm/trunk/tools/llvm-cxxfilt/llvm-cxxfilt.cpp<br class="gmail_msg"><br>URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cxxfilt/llvm-cxxfilt.cpp?rev=292467&r1=292466&r2=292467&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cxxfilt/llvm-cxxfilt.cpp?rev=292467&r1=292466&r2=292467&view=diff</a><br class="gmail_msg"><br>==============================================================================<br class="gmail_msg"><br>--- llvm/trunk/tools/llvm-cxxfilt/llvm-cxxfilt.cpp (original)<br class="gmail_msg"><br>+++ llvm/trunk/tools/llvm-cxxfilt/llvm-cxxfilt.cpp Wed Jan 18 20:58:46 2017<br class="gmail_msg"><br>@@ -14,9 +14,12 @@<br class="gmail_msg"><br><br class="gmail_msg"><br> using namespace llvm;<br class="gmail_msg"><br><br class="gmail_msg"><br>-static void demangle(llvm::raw_ostream &OS, const char *Mangled) {<br class="gmail_msg"><br>+static void demangle(llvm::raw_ostream &OS, const std::string &Mangled) {<br class="gmail_msg"><br>   int Status;<br class="gmail_msg"><br>-  char *Demangled = itaniumDemangle(Mangled, nullptr, nullptr, &Status);<br class="gmail_msg"><br>+  char *Demangled = nullptr;<br class="gmail_msg"><br>+  if ((Mangled.size() >= 2 && Mangled.compare(0, 2, "_Z")) ||<br class="gmail_msg"><br>+      (Mangled.size() >= 4 && Mangled.compare(0, 4, "___Z")))<br class="gmail_msg"><br>+    Demangled = itaniumDemangle(Mangled.c_str(), nullptr, nullptr, &Status);<br class="gmail_msg"><br>   OS << (Demangled ? Demangled : Mangled) << '\n';<br class="gmail_msg"><br>   free(Demangled);<br class="gmail_msg"><br> }<br class="gmail_msg"><br>@@ -24,7 +27,7 @@ static void demangle(llvm::raw_ostream &<br class="gmail_msg"><br> int main(int argc, char **argv) {<br class="gmail_msg"><br>   if (argc == 1)<br class="gmail_msg"><br>     for (std::string Mangled; std::getline(std::cin, Mangled);)<br class="gmail_msg"><br>-      demangle(llvm::outs(), Mangled.c_str());<br class="gmail_msg"><br>+      demangle(llvm::outs(), Mangled);<br class="gmail_msg"><br>   else<br class="gmail_msg"><br>     for (int I = 1; I < argc; ++I)<br class="gmail_msg"><br>       demangle(llvm::outs(), argv[I]);<br class="gmail_msg"><br><br class="gmail_msg"><br><br class="gmail_msg"><br>_______________________________________________<br class="gmail_msg"><br>llvm-commits mailing list<br class="gmail_msg"><br><a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg"><br><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="gmail_msg"><br></blockquote></div></div>