diff options
author | Anders Carlsson <andersca@mac.com> | 2010-10-31 21:01:46 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2010-10-31 21:01:46 +0000 |
commit | 376bda924ac92462a22d6a22ea65d8c1bb8f26f3 (patch) | |
tree | 91acf2577c1690244167115053f46cdaee13d44f /lib/AST/RecordLayoutBuilder.cpp | |
parent | 5c5a764fcd256df6f6cfbce5cdd2a2dfb2c45e95 (diff) |
Baby steps towards using only CharUnits for base class offsets in ASTRecordLayout. Start by storing the offsets in CharUnits in the ASTRecordLayout object.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117869 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/RecordLayoutBuilder.cpp')
-rw-r--r-- | lib/AST/RecordLayoutBuilder.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/AST/RecordLayoutBuilder.cpp b/lib/AST/RecordLayoutBuilder.cpp index 35f6d9957e..73d534391c 100644 --- a/lib/AST/RecordLayoutBuilder.cpp +++ b/lib/AST/RecordLayoutBuilder.cpp @@ -565,7 +565,7 @@ protected: /// out is virtual. bool PrimaryBaseIsVirtual; - typedef llvm::DenseMap<const CXXRecordDecl *, uint64_t> BaseOffsetsMapTy; + typedef llvm::DenseMap<const CXXRecordDecl *, CharUnits> BaseOffsetsMapTy; /// Bases - base classes and their offsets in the record. BaseOffsetsMapTy Bases; @@ -992,10 +992,12 @@ RecordLayoutBuilder::LayoutNonVirtualBases(const CXXRecordDecl *RD) { void RecordLayoutBuilder::LayoutNonVirtualBase(const BaseSubobjectInfo *Base) { // Layout the base. uint64_t Offset = LayoutBase(Base); + CharUnits OffsetInChars = + CharUnits::fromQuantity(Offset / Context.getCharWidth()); // Add its base class offset. assert(!Bases.count(Base->Class) && "base offset already exists!"); - Bases.insert(std::make_pair(Base->Class, Offset)); + Bases.insert(std::make_pair(Base->Class, OffsetInChars)); AddPrimaryVirtualBaseOffsets(Base, Offset); } @@ -1015,8 +1017,10 @@ RecordLayoutBuilder::AddPrimaryVirtualBaseOffsets(const BaseSubobjectInfo *Info, // Add the offset. assert(!VBases.count(Info->PrimaryVirtualBaseInfo->Class) && "primary vbase offset already exists!"); + CharUnits OffsetInChars = + CharUnits::fromQuantity(Offset / Context.getCharWidth()); VBases.insert(std::make_pair(Info->PrimaryVirtualBaseInfo->Class, - Offset)); + OffsetInChars)); // Traverse the primary virtual base. AddPrimaryVirtualBaseOffsets(Info->PrimaryVirtualBaseInfo, Offset); @@ -1089,10 +1093,12 @@ void RecordLayoutBuilder::LayoutVirtualBase(const BaseSubobjectInfo *Base) { // Layout the base. uint64_t Offset = LayoutBase(Base); + CharUnits OffsetInChars = + CharUnits::fromQuantity(Offset / Context.getCharWidth()); // Add its base class offset. assert(!VBases.count(Base->Class) && "vbase offset already exists!"); - VBases.insert(std::make_pair(Base->Class, Offset)); + VBases.insert(std::make_pair(Base->Class, OffsetInChars)); AddPrimaryVirtualBaseOffsets(Base, Offset); } |