From: Saleem Abdulrasool Date: Sun, 13 Nov 2016 20:43:38 +0000 (+0000) Subject: llvm-cxxfilt: support reading from stdin X-Git-Tag: llvmorg-4.0.0-rc1~4721 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7091820a969ed3503806e28dae371d1b11a9da6d;p=platform%2Fupstream%2Fllvm.git llvm-cxxfilt: support reading from stdin `c++filt` when given no arguments runs as a REPL, decoding each line as a decorated name. Unify the test structure to be more uniform, with the tests for llvm-cxxfilt living under test/tools/llvm-cxxfilt. llvm-svn: 286777 --- diff --git a/llvm/test/Demangle/lit.local.cfg b/llvm/test/Demangle/lit.local.cfg deleted file mode 100644 index df9b335..0000000 --- a/llvm/test/Demangle/lit.local.cfg +++ /dev/null @@ -1 +0,0 @@ -config.suffixes = ['.test'] diff --git a/llvm/test/tools/llvm-cxxfilt/noargs.test b/llvm/test/tools/llvm-cxxfilt/noargs.test new file mode 100644 index 0000000..71262d2 --- /dev/null +++ b/llvm/test/tools/llvm-cxxfilt/noargs.test @@ -0,0 +1,10 @@ +RUN: sed -n 's/^STDIN: //p' %s | llvm-cxxfilt | FileCheck %s + +STDIN: _Znw +STDIN: _Znwj +STDIN: _Znwm + +CHECK: operator new +CHECK: operator new(unsigned int) +CHECK: operator new(unsigned long) + diff --git a/llvm/test/Demangle/simple.test b/llvm/test/tools/llvm-cxxfilt/simple.test similarity index 100% rename from llvm/test/Demangle/simple.test rename to llvm/test/tools/llvm-cxxfilt/simple.test diff --git a/llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp b/llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp index 07b0e4e..80a54bb 100644 --- a/llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp +++ b/llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp @@ -9,18 +9,25 @@ #include "llvm/Demangle/Demangle.h" #include "llvm/Support/raw_ostream.h" - -#include +#include +#include using namespace llvm; +static void demangle(llvm::raw_ostream &OS, const char *Mangled) { + int Status; + char *Demangled = itaniumDemangle(Mangled, nullptr, nullptr, &Status); + OS << (Demangled ? Demangled : Mangled) << '\n'; + free(Demangled); +} + int main(int argc, char **argv) { - for (int I = 1; I < argc; ++I) { - const char *Mangled = argv[I]; - int Status; - char *Demangled = itaniumDemangle(Mangled, nullptr, nullptr, &Status); - llvm::outs() << (Demangled ? Demangled : Mangled) << '\n'; - free(Demangled); - } - return 0; + if (argc == 1) + for (std::string Mangled; std::getline(std::cin, Mangled);) + demangle(llvm::outs(), Mangled.c_str()); + else + for (int I = 1; I < argc; ++I) + demangle(llvm::outs(), argv[I]); + + return EXIT_SUCCESS; }