From f4a3e28941ed4c5d03e77cd90330b90869f59e33 Mon Sep 17 00:00:00 2001 From: Alp Toker Date: Tue, 3 Jun 2014 02:13:57 +0000 Subject: [PATCH] Eliminate redundant MangleBuffer class The only remaining user didn't actually use the non-dynamic storage facility this class provides. The std::string is transitional and likely to be StringRefized shortly. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@210058 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/Mangle.h | 27 --------------------------- lib/CodeGen/CGBlocks.cpp | 8 +++----- lib/CodeGen/CGDecl.cpp | 7 ++----- lib/CodeGen/CodeGenModule.cpp | 10 +++++++--- lib/CodeGen/CodeGenModule.h | 4 +--- 5 files changed, 13 insertions(+), 43 deletions(-) diff --git a/include/clang/AST/Mangle.h b/include/clang/AST/Mangle.h index e740836bb2..a8d119971b 100644 --- a/include/clang/AST/Mangle.h +++ b/include/clang/AST/Mangle.h @@ -36,33 +36,6 @@ namespace clang { struct ThunkInfo; class VarDecl; -/// MangleBuffer - a convenient class for storing a name which is -/// either the result of a mangling or is a constant string with -/// external memory ownership. -class MangleBuffer { -public: - void setString(StringRef Ref) { - String = Ref; - } - - SmallVectorImpl &getBuffer() { - return Buffer; - } - - StringRef getString() const { - if (!String.empty()) return String; - return Buffer.str(); - } - - operator StringRef() const { - return getString(); - } - -private: - StringRef String; - SmallString<256> Buffer; -}; - /// MangleContext - Context for tracking state which persists across multiple /// calls to the C++ name mangler. class MangleContext { diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp index 21896da349..71a2447cb5 100644 --- a/lib/CodeGen/CGBlocks.cpp +++ b/lib/CodeGen/CGBlocks.cpp @@ -1127,11 +1127,9 @@ CodeGenFunction::GenerateBlockFunction(GlobalDecl GD, llvm::FunctionType *fnLLVMType = CGM.getTypes().GetFunctionType(fnInfo); - MangleBuffer name; - CGM.getBlockMangledName(GD, name, blockDecl); - llvm::Function *fn = - llvm::Function::Create(fnLLVMType, llvm::GlobalValue::InternalLinkage, - name.getString(), &CGM.getModule()); + std::string name = CGM.getBlockMangledName(GD, blockDecl); + llvm::Function *fn = llvm::Function::Create( + fnLLVMType, llvm::GlobalValue::InternalLinkage, name, &CGM.getModule()); CGM.SetInternalFunctionAttributes(blockDecl, fn, fnInfo); // Begin generating the function. diff --git a/lib/CodeGen/CGDecl.cpp b/lib/CodeGen/CGDecl.cpp index 1869c1c27a..7cf9cb2417 100644 --- a/lib/CodeGen/CGDecl.cpp +++ b/lib/CodeGen/CGDecl.cpp @@ -159,11 +159,8 @@ static std::string GetStaticDeclName(CodeGenFunction &CGF, const VarDecl &D, // Better be in a block declared in global scope. const NamedDecl *ND = cast(&D); const DeclContext *DC = ND->getDeclContext(); - if (const BlockDecl *BD = dyn_cast(DC)) { - MangleBuffer Name; - CGM.getBlockMangledName(GlobalDecl(), Name, BD); - ContextName = Name.getString(); - } + if (const BlockDecl *BD = dyn_cast(DC)) + ContextName = CGM.getBlockMangledName(GlobalDecl(), BD); else llvm_unreachable("Unknown context for block static var decl"); } else if (const FunctionDecl *FD = dyn_cast(CGF.CurFuncDecl)) { diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index f42e67de0e..b0e08a2c65 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -489,11 +489,13 @@ StringRef CodeGenModule::getMangledName(GlobalDecl GD) { return Str; } -void CodeGenModule::getBlockMangledName(GlobalDecl GD, MangleBuffer &Buffer, - const BlockDecl *BD) { +std::string CodeGenModule::getBlockMangledName(GlobalDecl GD, + const BlockDecl *BD) { MangleContext &MangleCtx = getCXXABI().getMangleContext(); const Decl *D = GD.getDecl(); - llvm::raw_svector_ostream Out(Buffer.getBuffer()); + + std::string Buffer; + llvm::raw_string_ostream Out(Buffer); if (!D) MangleCtx.mangleGlobalBlock(BD, dyn_cast_or_null(initializedGlobalDecl.getDecl()), Out); @@ -503,6 +505,8 @@ void CodeGenModule::getBlockMangledName(GlobalDecl GD, MangleBuffer &Buffer, MangleCtx.mangleDtorBlock(DD, GD.getDtorType(), BD, Out); else MangleCtx.mangleBlock(cast(D), BD, Out); + + return Out.str(); } llvm::GlobalValue *CodeGenModule::GetGlobalValue(StringRef Name) { diff --git a/lib/CodeGen/CodeGenModule.h b/lib/CodeGen/CodeGenModule.h index c54f6dea52..ef18957e3d 100644 --- a/lib/CodeGen/CodeGenModule.h +++ b/lib/CodeGen/CodeGenModule.h @@ -71,7 +71,6 @@ class CodeGenOptions; class DiagnosticsEngine; class AnnotateAttr; class CXXDestructorDecl; -class MangleBuffer; class Module; namespace CodeGen { @@ -937,8 +936,7 @@ public: bool AttrOnCallSite); StringRef getMangledName(GlobalDecl GD); - void getBlockMangledName(GlobalDecl GD, MangleBuffer &Buffer, - const BlockDecl *BD); + std::string getBlockMangledName(GlobalDecl GD, const BlockDecl *BD); void EmitTentativeDefinition(const VarDecl *D); -- 2.40.0