nickdesaulniers created this revision.
nickdesaulniers added reviewers: erichkeane, MaskRay.
Herald added subscribers: pmatos, asb, hiraditya, arichardson, sbc100, emaste.
Herald added a reviewer: jhenderson.
Herald added projects: lld-macho, All.
Herald added a reviewer: lld-macho.
nickdesaulniers requested review of this revision.
Herald added subscribers: llvm-commits, cfe-commits, aheejin.
Herald added projects: clang, LLVM.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D148181

Files:
  clang/lib/CodeGen/CodeGenAction.cpp
  lld/COFF/Symbols.cpp
  lld/ELF/SymbolTable.cpp
  lld/ELF/Symbols.cpp
  lld/MachO/Symbols.cpp
  lld/wasm/Symbols.cpp
  llvm/include/llvm/Demangle/Demangle.h
  llvm/lib/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.cpp
  llvm/lib/DebugInfo/Symbolize/MarkupFilter.cpp
  llvm/lib/Demangle/Demangle.cpp
  llvm/lib/IR/DiagnosticInfo.cpp
  llvm/tools/llvm-nm/llvm-nm.cpp
  llvm/tools/llvm-objdump/ELFDump.cpp
  llvm/tools/llvm-readobj/ELFDumper.cpp
  llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp

Index: llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp
===================================================================
--- llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp
+++ llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp
@@ -107,7 +107,7 @@
   std::string OutputName = "'";
   OutputName += Name;
   OutputName += "'";
-  std::string DemangledName(demangle(Name.str()));
+  std::string DemangledName(demangle(Name));
   if (Name != DemangledName) {
     OutputName += " aka ";
     OutputName += DemangledName;
Index: llvm/tools/llvm-readobj/ELFDumper.cpp
===================================================================
--- llvm/tools/llvm-readobj/ELFDumper.cpp
+++ llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -908,7 +908,7 @@
 }
 
 static std::string maybeDemangle(StringRef Name) {
-  return opts::Demangle ? demangle(std::string(Name)) : Name.str();
+  return opts::Demangle ? demangle(Name) : Name.str();
 }
 
 template <typename ELFT>
Index: llvm/tools/llvm-objdump/ELFDump.cpp
===================================================================
--- llvm/tools/llvm-objdump/ELFDump.cpp
+++ llvm/tools/llvm-objdump/ELFDump.cpp
@@ -109,7 +109,7 @@
       if (!SymName)
         return SymName.takeError();
       if (Demangle)
-        Fmt << demangle(std::string(*SymName));
+        Fmt << demangle(*SymName);
       else
         Fmt << *SymName;
     }
Index: llvm/tools/llvm-nm/llvm-nm.cpp
===================================================================
--- llvm/tools/llvm-nm/llvm-nm.cpp
+++ llvm/tools/llvm-nm/llvm-nm.cpp
@@ -646,10 +646,10 @@
 
 static std::optional<std::string> demangleXCOFF(StringRef Name) {
   if (Name.empty() || Name[0] != '.')
-    return demangle(Name);
+    return ::demangle(Name);
 
   Name = Name.drop_front();
-  std::optional<std::string> DemangledName = demangle(Name);
+  std::optional<std::string> DemangledName = ::demangle(Name);
   if (DemangledName)
     return "." + *DemangledName;
   return std::nullopt;
@@ -658,7 +658,7 @@
 static std::optional<std::string> demangleMachO(StringRef Name) {
   if (!Name.empty() && Name[0] == '_')
     Name = Name.drop_front();
-  return demangle(Name);
+  return ::demangle(Name);
 }
 
 static bool symbolIsDefined(const NMSymbol &Sym) {
Index: llvm/lib/IR/DiagnosticInfo.cpp
===================================================================
--- llvm/lib/IR/DiagnosticInfo.cpp
+++ llvm/lib/IR/DiagnosticInfo.cpp
@@ -441,7 +441,7 @@
 }
 
 void DiagnosticInfoDontCall::print(DiagnosticPrinter &DP) const {
-  DP << "call to " << demangle(getFunctionName().str())
+  DP << "call to " << demangle(getFunctionName())
      << " marked \"dontcall-";
   if (getSeverity() == DiagnosticSeverity::DS_Error)
     DP << "error\"";
Index: llvm/lib/Demangle/Demangle.cpp
===================================================================
--- llvm/lib/Demangle/Demangle.cpp
+++ llvm/lib/Demangle/Demangle.cpp
@@ -26,9 +26,10 @@
          MangledName[1] == 'D';
 }
 
-std::string llvm::demangle(const std::string &MangledName) {
+std::string llvm::demangle(const StringRef MangledName) {
   std::string Result;
-  const char *S = MangledName.c_str();
+  std::string Copy = MangledName.str();
+  const char *S = Copy.data();
 
   if (nonMicrosoftDemangle(S, Result))
     return Result;
@@ -43,7 +44,7 @@
     return Result;
   }
 
-  return MangledName;
+  return Copy;
 }
 
 bool llvm::nonMicrosoftDemangle(const char *MangledName, std::string &Result) {
Index: llvm/lib/DebugInfo/Symbolize/MarkupFilter.cpp
===================================================================
--- llvm/lib/DebugInfo/Symbolize/MarkupFilter.cpp
+++ llvm/lib/DebugInfo/Symbolize/MarkupFilter.cpp
@@ -229,7 +229,7 @@
     return true;
 
   highlight();
-  OS << llvm::demangle(Node.Fields.front().str());
+  OS << llvm::demangle(Node.Fields.front());
   restoreColor();
   return true;
 }
Index: llvm/lib/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.cpp
===================================================================
--- llvm/lib/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.cpp
+++ llvm/lib/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.cpp
@@ -1605,7 +1605,7 @@
 
     // We don't have a way to see if the symbol is compiler generated. Use
     // the linkage name, to detect `scalar deleting destructor' functions.
-    std::string DemangledSymbol = demangle(std::string(LinkageName));
+    std::string DemangledSymbol = demangle(LinkageName);
     if (DemangledSymbol.find("scalar deleting dtor") != std::string::npos) {
       Function->setIsArtificial();
     } else {
Index: llvm/include/llvm/Demangle/Demangle.h
===================================================================
--- llvm/include/llvm/Demangle/Demangle.h
+++ llvm/include/llvm/Demangle/Demangle.h
@@ -9,6 +9,8 @@
 #ifndef LLVM_DEMANGLE_DEMANGLE_H
 #define LLVM_DEMANGLE_DEMANGLE_H
 
+#include "llvm/ADT/StringRef.h"
+
 #include <cstddef>
 #include <string>
 
@@ -68,7 +70,7 @@
 /// \param MangledName - reference to string to demangle.
 /// \returns - the demangled string, or a copy of the input string if no
 /// demangling occurred.
-std::string demangle(const std::string &MangledName);
+std::string demangle(const StringRef MangledName);
 
 bool nonMicrosoftDemangle(const char *MangledName, std::string &Result);
 
Index: lld/wasm/Symbols.cpp
===================================================================
--- lld/wasm/Symbols.cpp
+++ lld/wasm/Symbols.cpp
@@ -35,7 +35,7 @@
   if (name == "__main_argc_argv")
     return "main";
   if (wasm::config->demangle)
-    return demangle(name.str());
+    return demangle(name);
   return name.str();
 }
 
Index: lld/MachO/Symbols.cpp
===================================================================
--- lld/MachO/Symbols.cpp
+++ lld/MachO/Symbols.cpp
@@ -32,7 +32,7 @@
 static std::string maybeDemangleSymbol(StringRef symName) {
   if (config->demangle) {
     symName.consume_front("_");
-    return demangle(symName.str());
+    return demangle(symName);
   }
   return symName.str();
 }
Index: lld/ELF/Symbols.cpp
===================================================================
--- lld/ELF/Symbols.cpp
+++ lld/ELF/Symbols.cpp
@@ -46,7 +46,7 @@
 // Returns a symbol for an error message.
 static std::string maybeDemangleSymbol(StringRef symName) {
   if (elf::config->demangle)
-    return demangle(symName.str());
+    return demangle(symName);
   return symName.str();
 }
 
Index: lld/ELF/SymbolTable.cpp
===================================================================
--- lld/ELF/SymbolTable.cpp
+++ lld/ELF/SymbolTable.cpp
@@ -146,12 +146,12 @@
         StringRef name = sym->getName();
         size_t pos = name.find('@');
         if (pos == std::string::npos)
-          demangled = demangle(name.str());
+          demangled = demangle(name);
         else if (pos + 1 == name.size() || name[pos + 1] == '@')
-          demangled = demangle(name.substr(0, pos).str());
+          demangled = demangle(name.substr(0, pos));
         else
           demangled =
-              (demangle(name.substr(0, pos).str()) + name.substr(pos)).str();
+              (demangle(name.substr(0, pos)) + name.substr(pos)).str();
         (*demangledSyms)[demangled].push_back(sym);
       }
   }
Index: lld/COFF/Symbols.cpp
===================================================================
--- lld/COFF/Symbols.cpp
+++ lld/COFF/Symbols.cpp
@@ -38,9 +38,9 @@
     StringRef demangleInput = prefixless;
     if (ctx.config.machine == I386)
       demangleInput.consume_front("_");
-    std::string demangled = demangle(demangleInput.str());
+    std::string demangled = demangle(demangleInput);
     if (demangled != demangleInput)
-      return prefix + demangle(demangleInput.str());
+      return prefix + demangle(demangleInput);
     return (prefix + prefixless).str();
   }
   return std::string(symName);
Index: clang/lib/CodeGen/CodeGenAction.cpp
===================================================================
--- clang/lib/CodeGen/CodeGenAction.cpp
+++ clang/lib/CodeGen/CodeGenAction.cpp
@@ -634,7 +634,7 @@
   Diags.Report(*Loc, diag::warn_fe_frame_larger_than)
       << D.getStackSize()
       << D.getStackLimit()
-      << llvm::demangle(D.getFunction().getName().str());
+      << llvm::demangle(D.getFunction().getName());
   return true;
 }
 
@@ -648,7 +648,7 @@
 
   Diags.Report(*Loc, DiagID)
       << D.getResourceName() << D.getResourceSize() << D.getResourceLimit()
-      << llvm::demangle(D.getFunction().getName().str());
+      << llvm::demangle(D.getFunction().getName());
   return true;
 }
 
@@ -853,7 +853,7 @@
   Diags.Report(LocCookie, D.getSeverity() == DiagnosticSeverity::DS_Error
                               ? diag::err_fe_backend_error_attr
                               : diag::warn_fe_backend_warning_attr)
-      << llvm::demangle(D.getFunctionName().str()) << D.getNote();
+      << llvm::demangle(D.getFunctionName()) << D.getNote();
 }
 
 void BackendConsumer::MisExpectDiagHandler(
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to