summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/RecordLayout.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2010-03-11 04:10:39 +0000
committerAnders Carlsson <andersca@mac.com>2010-03-11 04:10:39 +0000
commit6a84889d3faeec2cbf8c4cb4033e37af60bd8e9d (patch)
treec594a9269eb5b22cbf691ef1f7c883846256bbdb /clang/lib/AST/RecordLayout.cpp
parentf2fa75bdbb485b5a800039479afaa82a99af9b1b (diff)
Replace the class offset vectors in RecordLayoutBuilder with maps instead so we'll have faster lookup and so we can detect duplicates.
llvm-svn: 98231
Diffstat (limited to 'clang/lib/AST/RecordLayout.cpp')
-rw-r--r--clang/lib/AST/RecordLayout.cpp26
1 files changed, 11 insertions, 15 deletions
diff --git a/clang/lib/AST/RecordLayout.cpp b/clang/lib/AST/RecordLayout.cpp
index 68357450fb3c..ade2483722ef 100644
--- a/clang/lib/AST/RecordLayout.cpp
+++ b/clang/lib/AST/RecordLayout.cpp
@@ -38,17 +38,15 @@ ASTRecordLayout::ASTRecordLayout(ASTContext &Ctx, uint64_t size, unsigned alignm
// Constructor for C++ records.
ASTRecordLayout::ASTRecordLayout(ASTContext &Ctx,
- uint64_t size, unsigned alignment,
- uint64_t datasize,
- const uint64_t *fieldoffsets,
- unsigned fieldcount,
- uint64_t nonvirtualsize,
- unsigned nonvirtualalign,
- const PrimaryBaseInfo &PrimaryBase,
- const std::pair<const CXXRecordDecl *, uint64_t> *bases,
- unsigned numbases,
- const std::pair<const CXXRecordDecl *, uint64_t> *vbases,
- unsigned numvbases)
+ uint64_t size, unsigned alignment,
+ uint64_t datasize,
+ const uint64_t *fieldoffsets,
+ unsigned fieldcount,
+ uint64_t nonvirtualsize,
+ unsigned nonvirtualalign,
+ const PrimaryBaseInfo &PrimaryBase,
+ const BaseOffsetsMapTy& BaseOffsets,
+ const BaseOffsetsMapTy& VBaseOffsets)
: Size(size), DataSize(datasize), FieldOffsets(0), Alignment(alignment),
FieldCount(fieldcount), CXXInfo(new (Ctx) CXXRecordLayoutInfo)
{
@@ -60,10 +58,8 @@ ASTRecordLayout::ASTRecordLayout(ASTContext &Ctx,
CXXInfo->PrimaryBase = PrimaryBase;
CXXInfo->NonVirtualSize = nonvirtualsize;
CXXInfo->NonVirtualAlign = nonvirtualalign;
- for (unsigned i = 0; i != numbases; ++i)
- CXXInfo->BaseOffsets[bases[i].first] = bases[i].second;
- for (unsigned i = 0; i != numvbases; ++i)
- CXXInfo->VBaseOffsets[vbases[i].first] = vbases[i].second;
+ CXXInfo->BaseOffsets = BaseOffsets;
+ CXXInfo->VBaseOffsets = VBaseOffsets;
#ifndef NDEBUG
if (const CXXRecordDecl *PrimaryBase = getPrimaryBase()) {