diff options
| author | Anders Carlsson <andersca@mac.com> | 2009-09-22 00:04:45 +0000 |
|---|---|---|
| committer | Anders Carlsson <andersca@mac.com> | 2009-09-22 00:04:45 +0000 |
| commit | d6020c321a72da21f9763960033be735d4e8b5e8 (patch) | |
| tree | 4c474045cf3745b1ea4e8d19ce4b4d11df40adf0 /clang/lib | |
| parent | 9dd450bb781484ca4b870529f89842541045c153 (diff) | |
| download | bcm5719-llvm-d6020c321a72da21f9763960033be735d4e8b5e8.tar.gz bcm5719-llvm-d6020c321a72da21f9763960033be735d4e8b5e8.zip | |
Record layout builder cleanup.
llvm-svn: 82502
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/AST/RecordLayoutBuilder.cpp | 23 | ||||
| -rw-r--r-- | clang/lib/AST/RecordLayoutBuilder.h | 10 |
2 files changed, 11 insertions, 22 deletions
diff --git a/clang/lib/AST/RecordLayoutBuilder.cpp b/clang/lib/AST/RecordLayoutBuilder.cpp index 598bd261d74..e60b307d3bb 100644 --- a/clang/lib/AST/RecordLayoutBuilder.cpp +++ b/clang/lib/AST/RecordLayoutBuilder.cpp @@ -198,8 +198,7 @@ void ASTRecordLayoutBuilder::LayoutVirtualBases(const CXXRecordDecl *RD, // Mark it so we don't lay it out twice. mark.insert(Base); assert (IndirectPrimary.count(Base) && "IndirectPrimary was wrong"); - VBases.push_back(Base); - VBaseOffsets.push_back(Offset); + VBases.push_back(std::make_pair(Base, Offset)); } else if (IndirectPrimary.count(Base)) { // Someone else will eventually lay this out. ; @@ -210,7 +209,7 @@ void ASTRecordLayoutBuilder::LayoutVirtualBases(const CXXRecordDecl *RD, // Mark it so we don't lay it out twice. mark.insert(Base); LayoutVirtualBase(Base); - BaseOffset = *(VBaseOffsets.end()-1); + BaseOffset = VBases.back().second; } } if (Base->getNumVBases()) { @@ -236,13 +235,10 @@ void ASTRecordLayoutBuilder::LayoutBaseNonVirtually(const CXXRecordDecl *RD, Size = (Size + (BaseAlign-1)) & ~(BaseAlign-1); // Add base class offsets. - if (IsVirtualBase) { - VBases.push_back(RD); - VBaseOffsets.push_back(Size); - } else { - Bases.push_back(RD); - BaseOffsets.push_back(Size); - } + if (IsVirtualBase) + VBases.push_back(std::make_pair(RD, Size)); + else + Bases.push_back(std::make_pair(RD, Size)); #if 0 // And now add offsets for all our primary virtual bases as well, so @@ -469,11 +465,6 @@ ASTRecordLayoutBuilder::ComputeLayout(ASTContext &Ctx, // FIXME: IsPODForThePurposeOfLayout should be stored in the record layout. bool IsPODForThePurposeOfLayout = cast<CXXRecordDecl>(D)->isPOD(); - assert(Builder.Bases.size() == Builder.BaseOffsets.size() && - "Base offsets vector must be same size as bases vector!"); - assert(Builder.VBases.size() == Builder.VBaseOffsets.size() && - "Base offsets vector must be same size as bases vector!"); - // FIXME: This should be done in FinalizeLayout. uint64_t DataSize = IsPODForThePurposeOfLayout ? Builder.Size : Builder.NextOffset; @@ -488,10 +479,8 @@ ASTRecordLayoutBuilder::ComputeLayout(ASTContext &Ctx, Builder.PrimaryBase, Builder.PrimaryBaseWasVirtual, Builder.Bases.data(), - Builder.BaseOffsets.data(), Builder.Bases.size(), Builder.VBases.data(), - Builder.VBaseOffsets.data(), Builder.VBases.size()); } diff --git a/clang/lib/AST/RecordLayoutBuilder.h b/clang/lib/AST/RecordLayoutBuilder.h index efaa2eeb981..39adc29022d 100644 --- a/clang/lib/AST/RecordLayoutBuilder.h +++ b/clang/lib/AST/RecordLayoutBuilder.h @@ -40,11 +40,11 @@ class ASTRecordLayoutBuilder { const CXXRecordDecl *PrimaryBase; bool PrimaryBaseWasVirtual; - llvm::SmallVector<const CXXRecordDecl *, 4> Bases; - llvm::SmallVector<uint64_t, 4> BaseOffsets; - - llvm::SmallVector<const CXXRecordDecl *, 4> VBases; - llvm::SmallVector<uint64_t, 4> VBaseOffsets; + typedef llvm::SmallVector<std::pair<const CXXRecordDecl *, + uint64_t>, 4> BaseOffsetsTy; + + BaseOffsetsTy Bases; + BaseOffsetsTy VBases; ASTRecordLayoutBuilder(ASTContext &Ctx); |

