[PATCH] D40530: Factor out common code to Common/Strings.cpp.

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 27 18:07:56 PST 2017


LGTM

Thanks,
Rafael


Rui Ueyama via Phabricator via llvm-commits
<llvm-commits at lists.llvm.org> writes:

> ruiu updated this revision to Diff 124505.
> ruiu added a comment.
>
> - Address review comment
>
>
> https://reviews.llvm.org/D40530
>
> Files:
>   lld/COFF/Strings.cpp
>   lld/COFF/Strings.h
>   lld/COFF/Symbols.cpp
>   lld/Common/CMakeLists.txt
>   lld/Common/Strings.cpp
>   lld/ELF/Strings.cpp
>   lld/ELF/Strings.h
>   lld/ELF/SymbolTable.cpp
>   lld/ELF/Symbols.cpp
>   lld/include/lld/Common/Strings.h
>   lld/wasm/Strings.cpp
>   lld/wasm/Strings.h
>
> Index: lld/wasm/Strings.h
> ===================================================================
> --- lld/wasm/Strings.h
> +++ lld/wasm/Strings.h
> @@ -17,10 +17,6 @@
>  namespace lld {
>  namespace wasm {
>  
> -// Returns a demangled C++ symbol name. If Name is not a mangled
> -// name, it returns Optional::None.
> -llvm::Optional<std::string> demangle(llvm::StringRef Name);
> -
>  std::string displayName(llvm::StringRef Name);
>  
>  } // namespace wasm
> Index: lld/include/lld/Common/Strings.h
> ===================================================================
> --- lld/include/lld/Common/Strings.h
> +++ lld/include/lld/Common/Strings.h
> @@ -7,23 +7,17 @@
>  //
>  //===----------------------------------------------------------------------===//
>  
> -#ifndef LLD_WASM_STRINGS_H
> -#define LLD_WASM_STRINGS_H
> +#ifndef LLD_STRINGS_H
> +#define LLD_STRINGS_H
>  
>  #include "llvm/ADT/Optional.h"
>  #include "llvm/ADT/StringRef.h"
>  #include <string>
>  
>  namespace lld {
> -namespace wasm {
> -
>  // Returns a demangled C++ symbol name. If Name is not a mangled
>  // name, it returns Optional::None.
> -llvm::Optional<std::string> demangle(llvm::StringRef Name);
> -
> -std::string displayName(llvm::StringRef Name);
> -
> -} // namespace wasm
> -} // namespace lld
> +llvm::Optional<std::string> demangleItanium(llvm::StringRef Name);
> +}
>  
>  #endif
> Index: lld/ELF/Symbols.cpp
> ===================================================================
> --- lld/ELF/Symbols.cpp
> +++ lld/ELF/Symbols.cpp
> @@ -11,12 +11,12 @@
>  #include "InputFiles.h"
>  #include "InputSection.h"
>  #include "OutputSections.h"
> -#include "Strings.h"
>  #include "SyntheticSections.h"
>  #include "Target.h"
>  #include "Writer.h"
>  
>  #include "lld/Common/ErrorHandler.h"
> +#include "lld/Common/Strings.h"
>  #include "llvm/ADT/STLExtras.h"
>  #include "llvm/Support/Path.h"
>  #include <cstring>
> @@ -315,7 +315,7 @@
>  // Returns a symbol for an error message.
>  std::string lld::toString(const Symbol &B) {
>    if (Config->Demangle)
> -    if (Optional<std::string> S = demangle(B.getName()))
> +    if (Optional<std::string> S = demangleItanium(B.getName()))
>        return *S;
>    return B.getName();
>  }
> Index: lld/ELF/SymbolTable.cpp
> ===================================================================
> --- lld/ELF/SymbolTable.cpp
> +++ lld/ELF/SymbolTable.cpp
> @@ -21,6 +21,7 @@
>  #include "Symbols.h"
>  #include "SyntheticSections.h"
>  #include "lld/Common/ErrorHandler.h"
> +#include "lld/Common/Strings.h"
>  #include "llvm/ADT/STLExtras.h"
>  
>  using namespace llvm;
> @@ -632,7 +633,7 @@
>      for (Symbol *Sym : SymVector) {
>        if (!Sym->isDefined())
>          continue;
> -      if (Optional<std::string> S = demangle(Sym->getName()))
> +      if (Optional<std::string> S = demangleItanium(Sym->getName()))
>          (*DemangledSyms)[*S].push_back(Sym);
>        else
>          (*DemangledSyms)[Sym->getName()].push_back(Sym);
> Index: lld/ELF/Strings.h
> ===================================================================
> --- lld/ELF/Strings.h
> +++ lld/ELF/Strings.h
> @@ -66,10 +66,6 @@
>    std::vector<llvm::GlobPattern> Patterns;
>  };
>  
> -// Returns a demangled C++ symbol name. If Name is not a mangled
> -// name, it returns Optional::None.
> -llvm::Optional<std::string> demangle(StringRef Name);
> -
>  inline ArrayRef<uint8_t> toArrayRef(StringRef S) {
>    return {(const uint8_t *)S.data(), S.size()};
>  }
> Index: lld/ELF/Strings.cpp
> ===================================================================
> --- lld/ELF/Strings.cpp
> +++ lld/ELF/Strings.cpp
> @@ -60,21 +60,3 @@
>           std::all_of(S.begin() + 1, S.end(),
>                       [](char C) { return C == '_' || isAlnum(C); });
>  }
> -
> -// Returns the demangled C++ symbol name for Name.
> -Optional<std::string> elf::demangle(StringRef Name) {
> -  // itaniumDemangle can be used to demangle strings other than symbol
> -  // names which do not necessarily start with "_Z". Name can be
> -  // either a C or C++ symbol. Don't call itaniumDemangle if the name
> -  // does not look like a C++ symbol name to avoid getting unexpected
> -  // result for a C symbol that happens to match a mangled type name.
> -  if (!Name.startswith("_Z"))
> -    return None;
> -
> -  char *Buf = itaniumDemangle(Name.str().c_str(), nullptr, nullptr, nullptr);
> -  if (!Buf)
> -    return None;
> -  std::string S(Buf);
> -  free(Buf);
> -  return S;
> -}
> Index: lld/wasm/Strings.cpp
> ===================================================================
> --- lld/wasm/Strings.cpp
> +++ lld/wasm/Strings.cpp
> @@ -9,32 +9,14 @@
>  
>  #include "Strings.h"
>  #include "Config.h"
> +#include "lld/Common/Strings.h"
>  #include "llvm/ADT/StringRef.h"
> -#include "llvm/Demangle/Demangle.h"
>  
>  using namespace llvm;
>  
> -// Returns the demangled C++ symbol name for Name.
> -Optional<std::string> lld::wasm::demangle(StringRef Name) {
> -  // itaniumDemangle can be used to demangle strings other than symbol
> -  // names which do not necessarily start with "_Z". Name can be
> -  // either a C or C++ symbol. Don't call itaniumDemangle if the name
> -  // does not look like a C++ symbol name to avoid getting unexpected
> -  // result for a C symbol that happens to match a mangled type name.
> -  if (!Name.startswith("_Z"))
> -    return None;
> -
> -  char *Buf = itaniumDemangle(Name.str().c_str(), nullptr, nullptr, nullptr);
> -  if (!Buf)
> -    return None;
> -  std::string S(Buf);
> -  free(Buf);
> -  return S;
> -}
> -
>  std::string lld::wasm::displayName(StringRef Name) {
>    if (Config->Demangle)
> -    if (Optional<std::string> S = demangle(Name))
> +    if (Optional<std::string> S = demangleItanium(Name))
>        return "`" + *S + "'";
>    return Name;
>  }
> Index: lld/Common/Strings.cpp
> ===================================================================
> --- lld/Common/Strings.cpp
> +++ lld/Common/Strings.cpp
> @@ -7,15 +7,14 @@
>  //
>  //===----------------------------------------------------------------------===//
>  
> -#include "Strings.h"
> -#include "Config.h"
> -#include "llvm/ADT/StringRef.h"
> +#include "lld/Common/Strings.h"
>  #include "llvm/Demangle/Demangle.h"
>  
>  using namespace llvm;
> +using namespace lld;
>  
>  // Returns the demangled C++ symbol name for Name.
> -Optional<std::string> lld::wasm::demangle(StringRef Name) {
> +Optional<std::string> lld::demangleItanium(StringRef Name) {
>    // itaniumDemangle can be used to demangle strings other than symbol
>    // names which do not necessarily start with "_Z". Name can be
>    // either a C or C++ symbol. Don't call itaniumDemangle if the name
> @@ -31,10 +30,3 @@
>    free(Buf);
>    return S;
>  }
> -
> -std::string lld::wasm::displayName(StringRef Name) {
> -  if (Config->Demangle)
> -    if (Optional<std::string> S = demangle(Name))
> -      return "`" + *S + "'";
> -  return Name;
> -}
> Index: lld/Common/CMakeLists.txt
> ===================================================================
> --- lld/Common/CMakeLists.txt
> +++ lld/Common/CMakeLists.txt
> @@ -5,6 +5,7 @@
>  add_lld_library(lldCommon
>    ErrorHandler.cpp
>    Reproduce.cpp
> +  Strings.cpp
>    TargetOptionsCommandFlags.cpp
>    Threads.cpp
>    Version.cpp
> Index: lld/COFF/Symbols.cpp
> ===================================================================
> --- lld/COFF/Symbols.cpp
> +++ lld/COFF/Symbols.cpp
> @@ -21,7 +21,7 @@
>  
>  // Returns a symbol name for an error message.
>  std::string lld::toString(coff::Symbol &B) {
> -  if (Optional<std::string> S = coff::demangle(B.getName()))
> +  if (Optional<std::string> S = coff::demangleMSVC(B.getName()))
>      return ("\"" + *S + "\" (" + B.getName() + ")").str();
>    return B.getName();
>  }
> Index: lld/COFF/Strings.h
> ===================================================================
> --- lld/COFF/Strings.h
> +++ lld/COFF/Strings.h
> @@ -16,7 +16,7 @@
>  
>  namespace lld {
>  namespace coff {
> -llvm::Optional<std::string> demangle(llvm::StringRef S);
> +llvm::Optional<std::string> demangleMSVC(llvm::StringRef S);
>  }
>  }
>  
> Index: lld/COFF/Strings.cpp
> ===================================================================
> --- lld/COFF/Strings.cpp
> +++ lld/COFF/Strings.cpp
> @@ -20,7 +20,7 @@
>  using namespace lld::coff;
>  using namespace llvm;
>  
> -Optional<std::string> coff::demangle(StringRef S) {
> +Optional<std::string> coff::demangleMSVC(StringRef S) {
>  #if defined(_MSC_VER)
>    // UnDecorateSymbolName is not thread-safe, so we need a mutex.
>    static std::mutex Mu;
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list