From a5627e5c59e8c60905dc1cf138ad86e311723417 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Sun, 13 Nov 2016 20:43:38 +0000 Subject: [PATCH] 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 --- test/Demangle/lit.local.cfg | 1 - test/tools/llvm-cxxfilt/noargs.test | 10 +++++++ .../llvm-cxxfilt}/simple.test | 0 tools/llvm-cxxfilt/llvm-cxxfilt.cpp | 27 ++++++++++++------- 4 files changed, 27 insertions(+), 11 deletions(-) delete mode 100644 test/Demangle/lit.local.cfg create mode 100644 test/tools/llvm-cxxfilt/noargs.test rename test/{Demangle => tools/llvm-cxxfilt}/simple.test (100%) 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; } -- 2.40.0