From: Alp Toker Date: Tue, 3 Jun 2014 02:13:57 +0000 (+0000) Subject: Eliminate redundant MangleBuffer class X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0e64e0d4fd7c5ae535ba8805c21146a9414f19b3;p=platform%2Fupstream%2Fllvm.git 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. llvm-svn: 210058 --- diff --git a/clang/include/clang/AST/Mangle.h b/clang/include/clang/AST/Mangle.h index e740836..a8d1199 100644 --- a/clang/include/clang/AST/Mangle.h +++ b/clang/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/clang/lib/CodeGen/CGBlocks.cpp b/clang/lib/CodeGen/CGBlocks.cpp index 21896da..71a2447 100644 --- a/clang/lib/CodeGen/CGBlocks.cpp +++ b/clang/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/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp index 1869c1c..7cf9cb2 100644 --- a/clang/lib/CodeGen/CGDecl.cpp +++ b/clang/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/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index f42e67d..b0e08a2 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/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/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h index c54f6de..ef18957 100644 --- a/clang/lib/CodeGen/CodeGenModule.h +++ b/clang/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);