]> granicus.if.org Git - clang/commitdiff
Add a LayoutBase member function. No functionality change.
authorAnders Carlsson <andersca@mac.com>
Sat, 4 Dec 2010 23:59:48 +0000 (23:59 +0000)
committerAnders Carlsson <andersca@mac.com>
Sat, 4 Dec 2010 23:59:48 +0000 (23:59 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120924 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGRecordLayoutBuilder.cpp

index 855552f960cd369a49ce3826087272d43cfe6908..4beaa82e5d6d8ff9da05c04a791117d8d36ba376 100644 (file)
@@ -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