--- /dev/null
+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)
+
#include "llvm/Demangle/Demangle.h"
#include "llvm/Support/raw_ostream.h"
-
-#include <stdlib.h>
+#include <cstdlib>
+#include <iostream>
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;
}