]> granicus.if.org Git - llvm/commitdiff
Revert "[llvm-cxxfilt] Split and demangle stdin input on certain non-alphanumerics."
authorMatt Davis <Matthew.Davis@sony.com>
Wed, 27 Feb 2019 19:52:02 +0000 (19:52 +0000)
committerMatt Davis <Matthew.Davis@sony.com>
Wed, 27 Feb 2019 19:52:02 +0000 (19:52 +0000)
This reverts commit 5cd5f8f2563395f8767f94604eb4c4bea8dcbea0.
The test passes on linux, but fails on the windows build-bots.

This test failure seems to be a quoting issue between my test and
FileCheck on Windows.  I'm reverting this patch until I can replicate
and fix in my Windows environment.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355021 91177308-0d34-0410-b5e6-96231b3b80d8

test/tools/llvm-cxxfilt/delimiters.test [deleted file]
tools/llvm-cxxfilt/llvm-cxxfilt.cpp

diff --git a/test/tools/llvm-cxxfilt/delimiters.test b/test/tools/llvm-cxxfilt/delimiters.test
deleted file mode 100644 (file)
index e13e9f0..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-RUN: echo ',,_Z3Foo!' \
-RUN:      '_Z3Foo"'   \
-RUN:      '_Z3Foo#'   \
-RUN:      '_Z3Foo%'   \
-RUN:      '_Z3Foo&'   \
-RUN:      "_Z3Foo'"   \
-RUN:      '_Z3Foo('   \
-RUN:      '_Z3Foo)'   \
-RUN:      '_Z3Foo*'   \
-RUN:      '_Z3Foo+'   \
-RUN:      '_Z3Foo,'   \
-RUN:      '_Z3Foo-'   \
-RUN:      '_Z3Foo/'   \
-RUN:      '_Z3Foo:'   \
-RUN:      '_Z3Foo;'   \
-RUN:      '_Z3Foo<'   \
-RUN:      '_Z3Foo='   \
-RUN:      '_Z3Foo>'   \
-RUN:      '_Z3Foo?'   \
-RUN:      '_Z3Foo@'   \
-RUN:      '_Z3Foo['   \
-RUN:      '_Z3Foo\'   \
-RUN:      '_Z3Foo]'   \
-RUN:      '_Z3Foo^'   \
-RUN:      '_Z3Foo`'   \
-RUN:      '_Z3Foo{'   \
-RUN:      '_Z3Foo|'   \
-RUN:      '_Z3Foo}'   \
-RUN:      '_Z3Foo~,,' \
-RUN:      '_Z3Foo,,_Z3Bar::_Z3Baz  _Z3Foo,_Z3Bar:_Z3Baz' \
-RUN:      '_Z3Foo$ ._Z3Foo' | llvm-cxxfilt | FileCheck %s
-
-CHECK: ,,Foo!
-CHECK: Foo"
-CHECK: Foo#
-CHECK: Foo%
-CHECK: Foo&
-CHECK: Foo'
-CHECK: Foo(
-CHECK: Foo)
-CHECK: Foo*
-CHECK: Foo+
-CHECK: Foo,
-CHECK: Foo-
-CHECK: Foo/
-CHECK: Foo:
-CHECK: Foo;
-CHECK: Foo<
-CHECK: Foo=
-CHECK: Foo>
-CHECK: Foo?
-CHECK: Foo@
-CHECK: Foo[
-CHECK: Foo\
-CHECK: Foo]
-CHECK: Foo^
-CHECK: Foo`
-CHECK: Foo{
-CHECK: Foo|
-CHECK: Foo}
-CHECK: Foo~,,
-CHECK: Foo,,Bar::Baz  Foo,Bar:Baz
-CHECK: _Z3Foo$ ._Z3Foo
index a082dc7cfe85122f143e8b9d363327a93703d1fb..e0850444d6f444a6c5ec9af362a54d9d4ca1a910 100644 (file)
@@ -78,50 +78,19 @@ static std::string demangle(llvm::raw_ostream &OS, const std::string &Mangled) {
   return Result;
 }
 
-// Split 'Source' on any character that fails to pass 'IsLegalChar'.  The
-// returned vector consists of pairs where 'first' is the delimited word, and
-// 'second' are the delimiters following that word.
-static void SplitStringDelims(
-    StringRef Source,
-    SmallVectorImpl<std::pair<StringRef, StringRef>> &OutFragments,
-    function_ref<bool(char)> IsLegalChar) {
-  // The beginning of the input string.
-  const auto Head = Source.begin();
-
-  // Obtain any leading delimiters.
-  auto Start = std::find_if(Head, Source.end(), IsLegalChar);
-  if (Start != Head)
-    OutFragments.push_back({"", Source.slice(0, Start - Head)});
-
-  // Capture each word and the delimiters following that word.
-  while (Start != Source.end()) {
-    Start = std::find_if(Start, Source.end(), IsLegalChar);
-    auto End = std::find_if_not(Start, Source.end(), IsLegalChar);
-    auto DEnd = std::find_if(End, Source.end(), IsLegalChar);
-    OutFragments.push_back({Source.slice(Start - Head, End - Head),
-                            Source.slice(End - Head, DEnd - Head)});
-    Start = DEnd;
-  }
-}
-
-// This returns true if 'C' is a character that can show up in an
-// Itanium-mangled string.
-static bool IsLegalItaniumChar(char C) {
-  // Itanium CXX ABI [External Names]p5.1.1:
-  // '$' and '.' in mangled names are reserved for private implementations.
-  return isalnum(C) || C == '.' || C == '$' || C == '_';
-}
-
 // If 'Split' is true, then 'Mangled' is broken into individual words and each
 // word is demangled.  Otherwise, the entire string is treated as a single
 // mangled item.  The result is output to 'OS'.
 static void demangleLine(llvm::raw_ostream &OS, StringRef Mangled, bool Split) {
   std::string Result;
   if (Split) {
-    SmallVector<std::pair<StringRef, StringRef>, 16> Words;
-    SplitStringDelims(Mangled, Words, IsLegalItaniumChar);
-    for (const auto &Word : Words)
-      Result += demangle(OS, Word.first) + Word.second.str();
+    SmallVector<StringRef, 16> Words;
+    SplitString(Mangled, Words);
+    for (auto Word : Words)
+      Result += demangle(OS, Word) + ' ';
+    // Remove the trailing space character.
+    if (Result.back() == ' ')
+      Result.pop_back();
   } else
     Result = demangle(OS, Mangled);
   OS << Result << '\n';