diff options
| author | Anders Carlsson <andersca@mac.com> | 2010-05-29 17:42:25 +0000 | 
|---|---|---|
| committer | Anders Carlsson <andersca@mac.com> | 2010-05-29 17:42:25 +0000 | 
| commit | bb0e6787b09ec9437bfd01debb8c1d740a7244ab (patch) | |
| tree | 0ecaf54c04c19f9ab0a7f83ad7e23d506fac4be4 /clang/lib/AST/RecordLayoutBuilder.cpp | |
| parent | e3c24c7033eeaab0774b4e2acce34b88bc446c97 (diff) | |
| download | bcm5719-llvm-bb0e6787b09ec9437bfd01debb8c1d740a7244ab.tar.gz bcm5719-llvm-bb0e6787b09ec9437bfd01debb8c1d740a7244ab.zip  | |
Change RecordLayoutBuilder::LayoutNonVirtualBase to take a BaseSubobjectInfo. No functionality change.
llvm-svn: 105103
Diffstat (limited to 'clang/lib/AST/RecordLayoutBuilder.cpp')
| -rw-r--r-- | clang/lib/AST/RecordLayoutBuilder.cpp | 29 | 
1 files changed, 19 insertions, 10 deletions
diff --git a/clang/lib/AST/RecordLayoutBuilder.cpp b/clang/lib/AST/RecordLayoutBuilder.cpp index 28e244fd9a4..cc29832c60c 100644 --- a/clang/lib/AST/RecordLayoutBuilder.cpp +++ b/clang/lib/AST/RecordLayoutBuilder.cpp @@ -569,7 +569,7 @@ class RecordLayoutBuilder {    void LayoutNonVirtualBases(const CXXRecordDecl *RD);    /// LayoutNonVirtualBase - Lays out a single non-virtual base. -  void LayoutNonVirtualBase(const CXXRecordDecl *Base); +  void LayoutNonVirtualBase(const BaseSubobjectInfo *Base);    void AddPrimaryVirtualBaseOffsets(const CXXRecordDecl *RD, uint64_t Offset,                                      const CXXRecordDecl *MostDerivedClass); @@ -886,8 +886,14 @@ RecordLayoutBuilder::LayoutNonVirtualBases(const CXXRecordDecl *RD) {        VisitedVirtualBases.insert(PrimaryBase);        LayoutVirtualBase(PrimaryBase); -    } else -      LayoutNonVirtualBase(PrimaryBase); +    } else { +      BaseSubobjectInfo *PrimaryBaseInfo =  +        NonVirtualBaseInfo.lookup(PrimaryBase); +      assert(PrimaryBaseInfo &&  +             "Did not find base info for non-virtual primary base!"); + +      LayoutNonVirtualBase(PrimaryBaseInfo); +    }    }    // Now lay out the non-virtual bases. @@ -898,25 +904,28 @@ RecordLayoutBuilder::LayoutNonVirtualBases(const CXXRecordDecl *RD) {      if (I->isVirtual())        continue; -    const CXXRecordDecl *Base = +    const CXXRecordDecl *BaseDecl =        cast<CXXRecordDecl>(I->getType()->getAs<RecordType>()->getDecl());      // Skip the primary base. -    if (Base == PrimaryBase && !PrimaryBaseIsVirtual) +    if (BaseDecl == PrimaryBase && !PrimaryBaseIsVirtual)        continue;      // Lay out the base. -    LayoutNonVirtualBase(Base); +    BaseSubobjectInfo *BaseInfo = NonVirtualBaseInfo.lookup(BaseDecl); +    assert(BaseInfo && "Did not find base info for non-virtual base!"); + +    LayoutNonVirtualBase(BaseInfo);    }  } -void RecordLayoutBuilder::LayoutNonVirtualBase(const CXXRecordDecl *Base) { +void RecordLayoutBuilder::LayoutNonVirtualBase(const BaseSubobjectInfo *Base) {    // Layout the base. -  uint64_t Offset = LayoutBase(Base, /*BaseIsVirtual=*/false); +  uint64_t Offset = LayoutBase(Base->Class, /*BaseIsVirtual=*/false);    // Add its base class offset. -  if (!Bases.insert(std::make_pair(Base, Offset)).second) -    assert(false && "Added same base offset more than once!"); +  assert(!Bases.count(Base->Class) && "base offset already exists!"); +  Bases.insert(std::make_pair(Base->Class, Offset));  }  void  | 

