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 | 1c593c6a38529ef7f785147873940f68148dd992 (patch) | |
tree | 50b24dc87648483f6a5b83f6c659505416bfef1e /clang/lib/CodeGen | |
parent | 085095f1ac9de5a4ab90b861445eb14a5c7cd159 (diff) | |
download | bcm5719-llvm-1c593c6a38529ef7f785147873940f68148dd992.tar.gz bcm5719-llvm-1c593c6a38529ef7f785147873940f68148dd992.zip |
Have CodeGenVTables::GenerateConstructionVTable use VTableLayout
llvm-svn: 140509
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGVTables.cpp | 28 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGVTables.h | 4 |
2 files changed, 14 insertions, 18 deletions
diff --git a/clang/lib/CodeGen/CGVTables.cpp b/clang/lib/CodeGen/CGVTables.cpp index c753ce20a85..c4ea1df6abd 100644 --- a/clang/lib/CodeGen/CGVTables.cpp +++ b/clang/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; diff --git a/clang/lib/CodeGen/CGVTables.h b/clang/lib/CodeGen/CGVTables.h index 2691b436114..44b9804215d 100644 --- a/clang/lib/CodeGen/CGVTables.h +++ b/clang/lib/CodeGen/CGVTables.h @@ -257,6 +257,10 @@ public: return AddressPoint; } + + const AddressPointsMapTy &getAddressPoints() const { + return AddressPoints; + } }; class VTableContext { |