From 5b88d78753d21e9f9215933233007b3aee722c62 Mon Sep 17 00:00:00 2001 From: duckdoom5 Date: Thu, 6 Feb 2025 18:40:43 +0100 Subject: [PATCH] Remove llvm backend mangeling --- src/CppParser/ASTNameMangler.cpp | 33 ++++++++++---------------------- src/CppParser/ASTNameMangler.h | 2 +- src/CppParser/Parser.cpp | 2 +- 3 files changed, 12 insertions(+), 25 deletions(-) diff --git a/src/CppParser/ASTNameMangler.cpp b/src/CppParser/ASTNameMangler.cpp index d7bb20f0..e79c4f7d 100644 --- a/src/CppParser/ASTNameMangler.cpp +++ b/src/CppParser/ASTNameMangler.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -34,8 +35,8 @@ namespace { } ASTNameMangler::ASTNameMangler(ASTContext& Ctx) - : MC(Ctx.createMangleContext()) - , DL(Ctx.getTargetInfo().getDataLayoutString()) + : DL(Ctx.getTargetInfo().getDataLayoutString()) + , MC(Ctx.createMangleContext()) { } @@ -50,16 +51,14 @@ std::string ASTNameMangler::GetName(const Decl* D) { bool ASTNameMangler::WriteName(const Decl* D, raw_ostream& OS) { // First apply frontend mangling. - SmallString<128> FrontendBuf; - llvm::raw_svector_ostream FrontendBufOS(FrontendBuf); if (auto* FD = dyn_cast(D)) { if (FD->isDependentContext()) return true; - if (WriteFuncOrVarName(FD, FrontendBufOS)) + if (WriteFuncOrVarName(FD, OS)) return true; } else if (auto* VD = dyn_cast(D)) { - if (WriteFuncOrVarName(VD, FrontendBufOS)) + if (WriteFuncOrVarName(VD, OS)) return true; } else if (auto* MD = dyn_cast(D)) { @@ -68,14 +67,12 @@ bool ASTNameMangler::WriteName(const Decl* D, raw_ostream& OS) { return false; } else if (auto* ID = dyn_cast(D)) { - WriteObjCClassName(ID, FrontendBufOS); + WriteObjCClassName(ID, OS); } else { return true; } - // Now apply backend mangling. - llvm::Mangler::getNameWithPrefix(OS, FrontendBufOS.str(), DL); return false; } @@ -90,12 +87,7 @@ std::string ASTNameMangler::GetMangledStructor(const NamedDecl* ND, unsigned Str GD = GlobalDecl(DD, static_cast(StructorType)); MC->mangleName(GD, FOS); - std::string BackendBuf; - llvm::raw_string_ostream BOS(BackendBuf); - - llvm::Mangler::getNameWithPrefix(BOS, FrontendBuf, DL); - - return BackendBuf; + return FrontendBuf; } std::string ASTNameMangler::GetMangledThunk(const CXXMethodDecl* MD, const ThunkInfo& T, bool /*ElideOverrideInfo*/) { @@ -105,12 +97,7 @@ std::string ASTNameMangler::GetMangledThunk(const CXXMethodDecl* MD, const Thunk // TODO: Enable `ElideOverrideInfo` param if clang is updated to 19 MC->mangleThunk(MD, T, /*ElideOverrideInfo,*/ FOS); - std::string BackendBuf; - llvm::raw_string_ostream BOS(BackendBuf); - - llvm::Mangler::getNameWithPrefix(BOS, FrontendBuf, DL); - - return BackendBuf; + return FrontendBuf; } bool ASTNameMangler::WriteFuncOrVarName(const NamedDecl* D, raw_ostream& OS) const @@ -125,9 +112,9 @@ bool ASTNameMangler::WriteFuncOrVarName(const NamedDecl* D, raw_ostream& OS) con GlobalDecl GD; if (const auto* CtorD = dyn_cast(D)) - GD = GlobalDecl(CtorD, Ctor_Complete); + GD = GlobalDecl(CtorD, Ctor_Base); else if (const auto* DtorD = dyn_cast(D)) - GD = GlobalDecl(DtorD, Dtor_Complete); + GD = GlobalDecl(DtorD, Dtor_Base); else if (D->hasAttr()) GD = GlobalDecl(cast(D)); else diff --git a/src/CppParser/ASTNameMangler.h b/src/CppParser/ASTNameMangler.h index acd8e14d..93099cb7 100644 --- a/src/CppParser/ASTNameMangler.h +++ b/src/CppParser/ASTNameMangler.h @@ -43,8 +43,8 @@ private: std::string GetMangledThunk(const clang::CXXMethodDecl* MD, const clang::ThunkInfo& T, bool ElideOverrideInfo); bool WriteFuncOrVarName(const clang::NamedDecl* D, llvm::raw_ostream& OS) const; - std::unique_ptr MC; llvm::DataLayout DL; + std::unique_ptr MC; }; } diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index 5ab3b02a..a2db0e2c 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -507,7 +507,7 @@ std::string Parser::GetDeclMangledName(const clang::Decl* D) const return {}; // Mangled names are not meaningful for locals, and may not be well-defined - // in the case of VLAs. + // in the case of VLAs. auto* VD = dyn_cast(ND); if (VD && VD->hasLocalStorage()) return {};