diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2011-09-26 01:57:04 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2011-09-26 01:57:04 +0000 |
commit | ab172b5858d80af7254be7547980b5b9bf86e4e5 (patch) | |
tree | d7be57a250d3e42c88fea37962b3b845104bfe2f /lib/CodeGen/CGVTables.cpp | |
parent | 9984d12729206c9c8d8009ed7eaab5be18c7ce89 (diff) |
Have CodeGenVTables::GenerateConstructionVTable use VTableLayout
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140509 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGVTables.cpp')
-rw-r--r-- | lib/CodeGen/CGVTables.cpp | 28 |
1 files changed, 10 insertions, 18 deletions
diff --git a/lib/CodeGen/CGVTables.cpp b/lib/CodeGen/CGVTables.cpp index c753ce20a8..c4ea1df6ab 100644 --- a/lib/CodeGen/CGVTables.cpp +++ b/lib/CodeGen/CGVTables.cpp @@ -3048,13 +3048,13 @@ CodeGenVTables::GenerateConstructionVTable(const CXXRecordDecl *RD, bool BaseIsVirtual, llvm::GlobalVariable::LinkageTypes Linkage, VTableAddressPointsMapTy& AddressPoints) { - VTableBuilder Builder(VTContext, Base.getBase(), - Base.getBaseOffset(), - /*MostDerivedClassIsVirtual=*/BaseIsVirtual, RD); + llvm::OwningPtr<VTableLayout> VTLayout( + VTContext.createConstructionVTableLayout(Base.getBase(), + Base.getBaseOffset(), + BaseIsVirtual, RD)); // Add the address points. - AddressPoints.insert(Builder.address_points_begin(), - Builder.address_points_end()); + AddressPoints = VTLayout->getAddressPoints(); // Get the mangled construction vtable name. llvm::SmallString<256> OutName; @@ -3067,7 +3067,7 @@ CodeGenVTables::GenerateConstructionVTable(const CXXRecordDecl *RD, llvm::Type *Int8PtrTy = llvm::Type::getInt8PtrTy(CGM.getLLVMContext()); llvm::ArrayType *ArrayType = - llvm::ArrayType::get(Int8PtrTy, Builder.getNumVTableComponents()); + llvm::ArrayType::get(Int8PtrTy, VTLayout->getNumVTableComponents()); // Create the variable that will hold the construction vtable. llvm::GlobalVariable *VTable = @@ -3077,21 +3077,13 @@ CodeGenVTables::GenerateConstructionVTable(const CXXRecordDecl *RD, // V-tables are always unnamed_addr. VTable->setUnnamedAddr(true); - // Add the thunks. - VTableContext::VTableThunksTy VTableThunks; - VTableThunks.append(Builder.vtable_thunks_begin(), - Builder.vtable_thunks_end()); - - // Sort them. - std::sort(VTableThunks.begin(), VTableThunks.end()); - // Create and set the initializer. llvm::Constant *Init = CreateVTableInitializer(Base.getBase(), - Builder.vtable_component_begin(), - Builder.getNumVTableComponents(), - VTableThunks.begin(), - VTableThunks.size()); + VTLayout->vtable_component_begin(), + VTLayout->getNumVTableComponents(), + VTLayout->vtable_thunk_begin(), + VTLayout->getNumVTableThunks()); VTable->setInitializer(Init); return VTable; |