From: Anders Carlsson Date: Sat, 4 Dec 2010 23:59:48 +0000 (+0000) Subject: Add a LayoutBase member function. No functionality change. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=860453c4b4768e99d72f5833771c508e6ef00cc6;p=clang Add a LayoutBase member function. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120924 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGRecordLayoutBuilder.cpp b/lib/CodeGen/CGRecordLayoutBuilder.cpp index 855552f960..4beaa82e5d 100644 --- a/lib/CodeGen/CGRecordLayoutBuilder.cpp +++ b/lib/CodeGen/CGRecordLayoutBuilder.cpp @@ -106,6 +106,9 @@ private: /// Returns false if the operation failed because the struct is not packed. bool LayoutFields(const RecordDecl *D); + /// Layout a single base, virtual or non-virtual + void LayoutBase(const CXXRecordDecl *BaseDecl, uint64_t BaseOffset); + /// LayoutVirtualBase - layout a single virtual base. void LayoutVirtualBase(const CXXRecordDecl *BaseDecl, uint64_t BaseOffset); @@ -490,6 +493,21 @@ void CGRecordLayoutBuilder::LayoutUnion(const RecordDecl *D) { AppendPadding(Layout.getSize() / 8, Align); } +void CGRecordLayoutBuilder::LayoutBase(const CXXRecordDecl *BaseDecl, + uint64_t BaseOffset) { + CheckZeroInitializable(BaseDecl); + + const ASTRecordLayout &Layout = + Types.getContext().getASTRecordLayout(BaseDecl); + + uint64_t NonVirtualSize = Layout.getNonVirtualSize(); + + AppendPadding(BaseOffset / 8, 1); + + // FIXME: Actually use a better type than [sizeof(BaseDecl) x i8] when we can. + AppendBytes(NonVirtualSize / 8); +} + void CGRecordLayoutBuilder::LayoutVirtualBase(const CXXRecordDecl *BaseDecl, uint64_t BaseOffset) { @@ -504,13 +522,12 @@ CGRecordLayoutBuilder::LayoutVirtualBase(const CXXRecordDecl *BaseDecl, uint64_t NonVirtualSize = Layout.getNonVirtualSize(); - // FIXME: Actually use a better type than [sizeof(BaseDecl) x i8] when we can. AppendPadding(BaseOffset / 8, 1); - // FIXME: Add the vbase field info. - + // FIXME: Actually use a better type than [sizeof(BaseDecl) x i8] when we can. AppendBytes(NonVirtualSize / 8); + // FIXME: Add the vbase field info. } /// LayoutVirtualBases - layout the non-virtual bases of a record decl. @@ -548,20 +565,10 @@ void CGRecordLayoutBuilder::LayoutNonVirtualBase(const CXXRecordDecl *BaseDecl, if (BaseDecl->isEmpty()) return; - CheckZeroInitializable(BaseDecl); - - const ASTRecordLayout &Layout = - Types.getContext().getASTRecordLayout(BaseDecl); + LayoutBase(BaseDecl, BaseOffset); - uint64_t NonVirtualSize = Layout.getNonVirtualSize(); - - // FIXME: Actually use a better type than [sizeof(BaseDecl) x i8] when we can. - AppendPadding(BaseOffset / 8, 1); - // Append the base field. - LLVMNonVirtualBases.push_back(LLVMBaseInfo(BaseDecl, FieldTypes.size())); - - AppendBytes(NonVirtualSize / 8); + LLVMNonVirtualBases.push_back(LLVMBaseInfo(BaseDecl, FieldTypes.size() - 1)); } void