aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CGVTables.cpp
diff options
context:
space:
mode:
authorKen Dyck <kd@kendyck.com>2011-03-31 00:56:47 +0000
committerKen Dyck <kd@kendyck.com>2011-03-31 00:56:47 +0000
commit47e1e54343db0ea84cafadf31a86cedeea18e031 (patch)
treee99f36e806be2ace2aa165ee783b1ae974a75851 /clang/lib/CodeGen/CGVTables.cpp
parent3b17a865bb99b92e08f173e45928b42146ca9492 (diff)
downloadllvm-47e1e54343db0ea84cafadf31a86cedeea18e031.zip
llvm-47e1e54343db0ea84cafadf31a86cedeea18e031.tar.gz
llvm-47e1e54343db0ea84cafadf31a86cedeea18e031.tar.bz2
Convert the OffsetInLayoutClass parameter of
VCallAndVBaseOffsetBuilder::AddVBaseOffsets() to CharUnits. No change in functionality intended. llvm-svn: 128600
Diffstat (limited to 'clang/lib/CodeGen/CGVTables.cpp')
-rw-r--r--clang/lib/CodeGen/CGVTables.cpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/clang/lib/CodeGen/CGVTables.cpp b/clang/lib/CodeGen/CGVTables.cpp
index db4b689..e4c01c7 100644
--- a/clang/lib/CodeGen/CGVTables.cpp
+++ b/clang/lib/CodeGen/CGVTables.cpp
@@ -749,7 +749,8 @@ private:
void AddVCallOffsets(BaseSubobject Base, CharUnits VBaseOffset);
/// AddVBaseOffsets - Add vbase offsets for the given class.
- void AddVBaseOffsets(const CXXRecordDecl *Base, uint64_t OffsetInLayoutClass);
+ void AddVBaseOffsets(const CXXRecordDecl *Base,
+ CharUnits OffsetInLayoutClass);
/// getCurrentOffsetOffset - Get the current vcall or vbase offset offset in
/// bytes, relative to the vtable address point.
@@ -821,7 +822,7 @@ VCallAndVBaseOffsetBuilder::AddVCallAndVBaseOffsets(BaseSubobject Base,
PrimaryBaseIsVirtual, RealBaseOffset);
}
- AddVBaseOffsets(Base.getBase(), Context.toBits(RealBaseOffset));
+ AddVBaseOffsets(Base.getBase(), RealBaseOffset);
// We only want to add vcall offsets for virtual bases.
if (BaseIsVirtual)
@@ -913,8 +914,9 @@ void VCallAndVBaseOffsetBuilder::AddVCallOffsets(BaseSubobject Base,
}
}
-void VCallAndVBaseOffsetBuilder::AddVBaseOffsets(const CXXRecordDecl *RD,
- uint64_t OffsetInLayoutClass) {
+void
+VCallAndVBaseOffsetBuilder::AddVBaseOffsets(const CXXRecordDecl *RD,
+ CharUnits OffsetInLayoutClass) {
const ASTRecordLayout &LayoutClassLayout =
Context.getASTRecordLayout(LayoutClass);
@@ -926,10 +928,8 @@ void VCallAndVBaseOffsetBuilder::AddVBaseOffsets(const CXXRecordDecl *RD,
// Check if this is a virtual base that we haven't visited before.
if (I->isVirtual() && VisitedVirtualBases.insert(BaseDecl)) {
- // FIXME: We shouldn't use / 8 here.
- int64_t Offset =
- (int64_t)(LayoutClassLayout.getVBaseClassOffsetInBits(BaseDecl) -
- OffsetInLayoutClass) / 8;
+ CharUnits Offset =
+ LayoutClassLayout.getVBaseClassOffset(BaseDecl) - OffsetInLayoutClass;
// Add the vbase offset offset.
assert(!VBaseOffsetOffsets.count(BaseDecl) &&
@@ -938,7 +938,8 @@ void VCallAndVBaseOffsetBuilder::AddVBaseOffsets(const CXXRecordDecl *RD,
int64_t VBaseOffsetOffset = getCurrentOffsetOffset();
VBaseOffsetOffsets.insert(std::make_pair(BaseDecl, VBaseOffsetOffset));
- Components.push_back(VTableComponent::MakeVBaseOffset(Offset));
+ Components.push_back(
+ VTableComponent::MakeVBaseOffset(Offset.getQuantity()));
}
// Check the base class looking for more vbase offsets.