[llvm] r292467 - llvm-cxxfilt: filter out invalid manglings

Saleem Abdulrasool via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 19 14:12:10 PST 2017


Hi Hans,

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.

On Wed, Jan 18, 2017 at 7:09 PM Saleem Abdulrasool via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: compnerd
>
> Date: Wed Jan 18 20:58:46 2017
>
> New Revision: 292467
>
>
>
> URL: http://llvm.org/viewvc/llvm-project?rev=292467&view=rev
>
> Log:
>
> llvm-cxxfilt: filter out invalid manglings
>
>
>
> c++filt does not attempt to demangle symbols which do not match its
>
> expected format.  This means that the symbol must start with _Z or ___Z
>
> (block invocation function extension).  Any other symbols are returned
>
> as is.  Note that this is different from the behaviour of __cxa_demangle
>
> which will demangle fragments.
>
>
>
> Added:
>
>     llvm/trunk/test/tools/llvm-cxxfilt/invalid.test
>
> Modified:
>
>     llvm/trunk/tools/llvm-cxxfilt/llvm-cxxfilt.cpp
>
>
>
> Added: llvm/trunk/test/tools/llvm-cxxfilt/invalid.test
>
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cxxfilt/invalid.test?rev=292467&view=auto
>
>
> ==============================================================================
>
> --- llvm/trunk/test/tools/llvm-cxxfilt/invalid.test (added)
>
> +++ llvm/trunk/test/tools/llvm-cxxfilt/invalid.test Wed Jan 18 20:58:46
> 2017
>
> @@ -0,0 +1,6 @@
>
> +RUN: llvm-cxxfilt _Z1fi __Z1fi f ___ZSt1ff_block_invoke | FileCheck %s
>
> +
>
> +CHECK: f(int)
>
> +CHECK-NEXT: __Z1fi
>
> +CHECK-NEXT: f
>
> +CHECK-NEXT: invocation function for block in std::f(float)
>
>
>
> Modified: llvm/trunk/tools/llvm-cxxfilt/llvm-cxxfilt.cpp
>
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cxxfilt/llvm-cxxfilt.cpp?rev=292467&r1=292466&r2=292467&view=diff
>
>
> ==============================================================================
>
> --- llvm/trunk/tools/llvm-cxxfilt/llvm-cxxfilt.cpp (original)
>
> +++ llvm/trunk/tools/llvm-cxxfilt/llvm-cxxfilt.cpp Wed Jan 18 20:58:46 2017
>
> @@ -14,9 +14,12 @@
>
>
>
>  using namespace llvm;
>
>
>
> -static void demangle(llvm::raw_ostream &OS, const char *Mangled) {
>
> +static void demangle(llvm::raw_ostream &OS, const std::string &Mangled) {
>
>    int Status;
>
> -  char *Demangled = itaniumDemangle(Mangled, nullptr, nullptr, &Status);
>
> +  char *Demangled = nullptr;
>
> +  if ((Mangled.size() >= 2 && Mangled.compare(0, 2, "_Z")) ||
>
> +      (Mangled.size() >= 4 && Mangled.compare(0, 4, "___Z")))
>
> +    Demangled = itaniumDemangle(Mangled.c_str(), nullptr, nullptr,
> &Status);
>
>    OS << (Demangled ? Demangled : Mangled) << '\n';
>
>    free(Demangled);
>
>  }
>
> @@ -24,7 +27,7 @@ static void demangle(llvm::raw_ostream &
>
>  int main(int argc, char **argv) {
>
>    if (argc == 1)
>
>      for (std::string Mangled; std::getline(std::cin, Mangled);)
>
> -      demangle(llvm::outs(), Mangled.c_str());
>
> +      demangle(llvm::outs(), Mangled);
>
>    else
>
>      for (int I = 1; I < argc; ++I)
>
>        demangle(llvm::outs(), argv[I]);
>
>
>
>
>
> _______________________________________________
>
> llvm-commits mailing list
>
> llvm-commits at lists.llvm.org
>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170119/ae968c4e/attachment.html>


More information about the llvm-commits mailing list