From: Saleem Abdulrasool Date: Sun, 13 Nov 2016 20:43:38 +0000 (+0000) Subject: llvm-cxxfilt: support reading from stdin X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a5627e5c59e8c60905dc1cf138ad86e311723417;p=llvm 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286777 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Demangle/lit.local.cfg b/test/Demangle/lit.local.cfg deleted file mode 100644 index df9b335dd13..00000000000 --- a/test/Demangle/lit.local.cfg +++ /dev/null @@ -1 +0,0 @@ -config.suffixes = ['.test'] diff --git a/test/tools/llvm-cxxfilt/noargs.test b/test/tools/llvm-cxxfilt/noargs.test new file mode 100644 index 00000000000..71262d20059 --- /dev/null +++ b/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/test/Demangle/simple.test b/test/tools/llvm-cxxfilt/simple.test similarity index 100% rename from test/Demangle/simple.test rename to test/tools/llvm-cxxfilt/simple.test diff --git a/tools/llvm-cxxfilt/llvm-cxxfilt.cpp b/tools/llvm-cxxfilt/llvm-cxxfilt.cpp index 07b0e4e54ae..80a54bbf63d 100644 --- a/tools/llvm-cxxfilt/llvm-cxxfilt.cpp +++ b/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; }