Use correct alignment and size for references in records as well.
authorAnders Carlsson <andersca@mac.com>
Fri, 10 Apr 2009 05:31:15 +0000 (05:31 +0000)
committerAnders Carlsson <andersca@mac.com>
Fri, 10 Apr 2009 05:31:15 +0000 (05:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68769 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ASTContext.cpp

index ef4ff1526e5892da61fdbb99b6d91f94ae1bcecd..25ab97e7c7ecd2d8aa7098844490e4ad2ee6fa5a 100644 (file)
@@ -580,6 +580,10 @@ void ASTRecordLayout::LayoutField(const FieldDecl *FD, unsigned FieldNo,
       FieldSize = 0;
       const ArrayType* ATy = Context.getAsArrayType(FD->getType());
       FieldAlign = Context.getTypeAlign(ATy->getElementType());
+    } else if (const ReferenceType *RT = FD->getType()->getAsReferenceType()) {
+      unsigned AS = RT->getPointeeType().getAddressSpace();
+      FieldSize = Context.Target.getPointerWidth(AS);
+      FieldAlign = Context.Target.getPointerAlign(AS);
     } else {
       std::pair<uint64_t, unsigned> FieldInfo = 
         Context.getTypeInfo(FD->getType());