From c4850c2aa4c281a352e228aafc51fb1e30dcad02 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Thu, 10 Feb 2011 23:59:36 +0000 Subject: Use raw_svector_ostream in more places in the mangler. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125321 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CodeGenModule.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'lib/CodeGen/CodeGenModule.cpp') diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 56bc31a858..2a057a1866 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -37,6 +37,7 @@ #include "llvm/Intrinsics.h" #include "llvm/LLVMContext.h" #include "llvm/ADT/Triple.h" +#include "llvm/Target/Mangler.h" #include "llvm/Target/TargetData.h" #include "llvm/Support/CallSite.h" #include "llvm/Support/ErrorHandling.h" @@ -263,16 +264,18 @@ llvm::StringRef CodeGenModule::getMangledName(GlobalDecl GD) { } llvm::SmallString<256> Buffer; + llvm::raw_svector_ostream Out(Buffer); if (const CXXConstructorDecl *D = dyn_cast(ND)) - getCXXABI().getMangleContext().mangleCXXCtor(D, GD.getCtorType(), Buffer); + getCXXABI().getMangleContext().mangleCXXCtor(D, GD.getCtorType(), Out); else if (const CXXDestructorDecl *D = dyn_cast(ND)) - getCXXABI().getMangleContext().mangleCXXDtor(D, GD.getDtorType(), Buffer); + getCXXABI().getMangleContext().mangleCXXDtor(D, GD.getDtorType(), Out); else if (const BlockDecl *BD = dyn_cast(ND)) - getCXXABI().getMangleContext().mangleBlock(BD, Buffer); + getCXXABI().getMangleContext().mangleBlock(BD, Out); else - getCXXABI().getMangleContext().mangleName(ND, Buffer); + getCXXABI().getMangleContext().mangleName(ND, Out); // Allocate space for the mangled name. + Out.flush(); size_t Length = Buffer.size(); char *Name = MangledNamesAllocator.Allocate(Length); std::copy(Buffer.begin(), Buffer.end(), Name); @@ -286,14 +289,15 @@ void CodeGenModule::getBlockMangledName(GlobalDecl GD, MangleBuffer &Buffer, const BlockDecl *BD) { MangleContext &MangleCtx = getCXXABI().getMangleContext(); const Decl *D = GD.getDecl(); + llvm::raw_svector_ostream Out(Buffer.getBuffer()); if (D == 0) - MangleCtx.mangleGlobalBlock(BD, Buffer.getBuffer()); + MangleCtx.mangleGlobalBlock(BD, Out); else if (const CXXConstructorDecl *CD = dyn_cast(D)) - MangleCtx.mangleCtorBlock(CD, GD.getCtorType(), BD, Buffer.getBuffer()); + MangleCtx.mangleCtorBlock(CD, GD.getCtorType(), BD, Out); else if (const CXXDestructorDecl *DD = dyn_cast(D)) - MangleCtx.mangleDtorBlock(DD, GD.getDtorType(), BD, Buffer.getBuffer()); + MangleCtx.mangleDtorBlock(DD, GD.getDtorType(), BD, Out); else - MangleCtx.mangleBlock(cast(D), BD, Buffer.getBuffer()); + MangleCtx.mangleBlock(cast(D), BD, Out); } llvm::GlobalValue *CodeGenModule::GetGlobalValue(llvm::StringRef Name) { -- cgit v1.2.3-70-g09d2