During interface layout, don't forget super class.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52035 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp
index 4a1fb39..d8e2c06 100644
--- a/lib/AST/ASTContext.cpp
+++ b/lib/AST/ASTContext.cpp
@@ -405,10 +405,22 @@
 
   // Allocate and assign into ASTRecordLayouts here.  The "Entry" reference can
   // be invalidated (dangle) if the ASTRecordLayouts hashtable is inserted into.
-  ASTRecordLayout *NewEntry = new ASTRecordLayout();
+  ASTRecordLayout *NewEntry = NULL;
+  unsigned FieldCount = D->ivar_size();
+  if (ObjCInterfaceDecl *SD = D->getSuperClass()) {
+    FieldCount++;
+    const ASTRecordLayout &SL = getASTObjCInterfaceLayout(SD);
+    unsigned Alignment = SL.getAlignment();
+    uint64_t Size = SL.getSize();
+    NewEntry = new ASTRecordLayout(Size, Alignment);
+    NewEntry->InitializeLayout(FieldCount);
+    NewEntry->SetFieldOffset(0, 0); // Super class is at the beginning of the layout.
+  } else {
+    NewEntry = new ASTRecordLayout();
+    NewEntry->InitializeLayout(FieldCount);
+  }
   Entry = NewEntry;
 
-  NewEntry->InitializeLayout(D->ivar_size());
   bool IsPacked = D->getAttr<PackedAttr>();
 
   if (const AlignedAttr *AA = D->getAttr<AlignedAttr>())