]> granicus.if.org Git - clang/commitdiff
Convert RecordLayout::Alignment to CharUnits from bit units. No change in
authorKen Dyck <kd@kendyck.com>
Tue, 15 Feb 2011 02:32:40 +0000 (02:32 +0000)
committerKen Dyck <kd@kendyck.com>
Tue, 15 Feb 2011 02:32:40 +0000 (02:32 +0000)
functionality intended.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125549 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/RecordLayout.h
lib/AST/ASTContext.cpp
lib/AST/RecordLayout.cpp
lib/AST/RecordLayoutBuilder.cpp
lib/CodeGen/CGRecordLayoutBuilder.cpp

index f4c2733a41b7e597ca1f0c69e905cc7b68794333..d7bab80afc5e79c6d6f9dc40d942e7f5106060f7 100644 (file)
@@ -42,8 +42,8 @@ class ASTRecordLayout {
   /// FieldOffsets - Array of field offsets in bits.
   uint64_t *FieldOffsets;
 
-  // Alignment - Alignment of record in bits.
-  unsigned Alignment;
+  // Alignment - Alignment of record in characters.
+  CharUnits Alignment;
 
   // FieldCount - Number of fields.
   unsigned FieldCount;
@@ -82,14 +82,14 @@ class ASTRecordLayout {
 
   friend class ASTContext;
 
-  ASTRecordLayout(const ASTContext &Ctx, CharUnits size, unsigned alignment,
+  ASTRecordLayout(const ASTContext &Ctx, CharUnits size, CharUnits alignment,
                   CharUnits datasize, const uint64_t *fieldoffsets,
                   unsigned fieldcount);
 
   // Constructor for C++ records.
   typedef CXXRecordLayoutInfo::BaseOffsetsMapTy BaseOffsetsMapTy;
   ASTRecordLayout(const ASTContext &Ctx,
-                  CharUnits size, unsigned alignment, CharUnits datasize,
+                  CharUnits size, CharUnits alignment, CharUnits datasize,
                   const uint64_t *fieldoffsets, unsigned fieldcount,
                   CharUnits nonvirtualsize, CharUnits nonvirtualalign,
                   CharUnits SizeOfLargestEmptySubobject,
@@ -106,8 +106,8 @@ class ASTRecordLayout {
   void operator=(const ASTRecordLayout&); // DO NOT IMPLEMENT
 public:
 
-  /// getAlignment - Get the record alignment in bits.
-  unsigned getAlignment() const { return Alignment; }
+  /// getAlignment - Get the record alignment in characters.
+  CharUnits getAlignment() const { return Alignment; }
 
   /// getSize - Get the record size in characters.
   CharUnits getSize() const { return Size; }
index dcbfd9deec50c4dfce0f4202f535a46c38e62d2e..94f3b3372758ab984c7c58010a37e0869d145ed2 100644 (file)
@@ -632,7 +632,7 @@ CharUnits ASTContext::getDeclAlign(const Decl *D, bool RefAsPointee) const {
       const ASTRecordLayout &layout = getASTRecordLayout(field->getParent());
 
       // Start with the record's overall alignment.
-      unsigned fieldAlign = layout.getAlignment();
+      unsigned fieldAlign = toBits(layout.getAlignment());
 
       // Use the GCD of that and the offset within the record.
       uint64_t offset = layout.getFieldOffset(field->getFieldIndex());
@@ -848,7 +848,7 @@ ASTContext::getTypeInfo(const Type *T) const {
     const ObjCInterfaceType *ObjCI = cast<ObjCInterfaceType>(T);
     const ASTRecordLayout &Layout = getASTObjCInterfaceLayout(ObjCI->getDecl());
     Width = toBits(Layout.getSize());
-    Align = Layout.getAlignment();
+    Align = toBits(Layout.getAlignment());
     break;
   }
   case Type::Record:
@@ -867,7 +867,7 @@ ASTContext::getTypeInfo(const Type *T) const {
     const RecordType *RT = cast<RecordType>(TT);
     const ASTRecordLayout &Layout = getASTRecordLayout(RT->getDecl());
     Width = toBits(Layout.getSize());
-    Align = Layout.getAlignment();
+    Align = toBits(Layout.getAlignment());
     break;
   }
 
index a6e31a7e088e971f917576a23a51223d3fca0dc8..035c48fd08271bdcdfd1750f3d04012e5365a815 100644 (file)
@@ -28,7 +28,7 @@ void ASTRecordLayout::Destroy(ASTContext &Ctx) {
 }
 
 ASTRecordLayout::ASTRecordLayout(const ASTContext &Ctx, CharUnits size,
-                                 unsigned alignment, CharUnits datasize,
+                                 CharUnits alignment, CharUnits datasize,
                                  const uint64_t *fieldoffsets,
                                  unsigned fieldcount)
   : Size(size), DataSize(datasize), FieldOffsets(0), Alignment(alignment),
@@ -41,7 +41,7 @@ ASTRecordLayout::ASTRecordLayout(const ASTContext &Ctx, CharUnits size,
 
 // Constructor for C++ records.
 ASTRecordLayout::ASTRecordLayout(const ASTContext &Ctx,
-                                 CharUnits size, unsigned alignment,
+                                 CharUnits size, CharUnits alignment,
                                  CharUnits datasize,
                                  const uint64_t *fieldoffsets,
                                  unsigned fieldcount,
index 7117a02d65988de1d039b4437edfc701cf37ef44..a9f9f108e70a1d58f5de9757d0448f84862abab8 100644 (file)
@@ -1203,7 +1203,7 @@ void RecordLayoutBuilder::Layout(const ObjCInterfaceDecl *D) {
   if (ObjCInterfaceDecl *SD = D->getSuperClass()) {
     const ASTRecordLayout &SL = Context.getASTObjCInterfaceLayout(SD);
 
-    UpdateAlignment(SL.getAlignment());
+    UpdateAlignment(Context.toBits(SL.getAlignment()));
 
     // We start laying out ivars not at the end of the superclass
     // structure, but at the next byte following the last field.
@@ -1683,7 +1683,8 @@ ASTContext::getASTRecordLayout(const RecordDecl *D) const {
 
     CharUnits RecordSize = toCharUnitsFromBits(Builder->Size);
     NewEntry =
-      new (*this) ASTRecordLayout(*this, RecordSize, Builder->Alignment,
+      new (*this) ASTRecordLayout(*this, RecordSize, 
+                                  toCharUnitsFromBits(Builder->Alignment),
                                   toCharUnitsFromBits(DataSize), 
                                   Builder->FieldOffsets.data(),
                                   Builder->FieldOffsets.size(),
@@ -1700,7 +1701,8 @@ ASTContext::getASTRecordLayout(const RecordDecl *D) const {
     CharUnits RecordSize = toCharUnitsFromBits(Builder.Size);
 
     NewEntry =
-      new (*this) ASTRecordLayout(*this, RecordSize, Builder.Alignment,
+      new (*this) ASTRecordLayout(*this, RecordSize, 
+                                  toCharUnitsFromBits(Builder.Alignment),
                                   toCharUnitsFromBits(Builder.Size),
                                   Builder.FieldOffsets.data(),
                                   Builder.FieldOffsets.size());
@@ -1760,7 +1762,8 @@ ASTContext::getObjCLayout(const ObjCInterfaceDecl *D,
   CharUnits RecordSize = toCharUnitsFromBits(Builder.Size);
 
   const ASTRecordLayout *NewEntry =
-    new (*this) ASTRecordLayout(*this, RecordSize, Builder.Alignment,
+    new (*this) ASTRecordLayout(*this, RecordSize, 
+                                toCharUnitsFromBits(Builder.Alignment),
                                 toCharUnitsFromBits(Builder.DataSize),
                                 Builder.FieldOffsets.data(),
                                 Builder.FieldOffsets.size());
@@ -1859,7 +1862,7 @@ static void DumpCXXRecordLayout(llvm::raw_ostream &OS,
 
   OS << "  sizeof=" << Layout.getSize().getQuantity();
   OS << ", dsize=" << Layout.getDataSize().getQuantity();
-  OS << ", align=" << Layout.getAlignment() / 8 << '\n';
+  OS << ", align=" << Layout.getAlignment().getQuantity() << '\n';
   OS << "  nvsize=" << Layout.getNonVirtualSize().getQuantity();
   OS << ", nvalign=" << Layout.getNonVirtualAlign().getQuantity() << '\n';
   OS << '\n';
@@ -1880,7 +1883,7 @@ void ASTContext::DumpRecordLayout(const RecordDecl *RD,
   OS << "<ASTRecordLayout\n";
   OS << "  Size:" << toBits(Info.getSize()) << "\n";
   OS << "  DataSize:" << toBits(Info.getDataSize()) << "\n";
-  OS << "  Alignment:" << Info.getAlignment() << "\n";
+  OS << "  Alignment:" << toBits(Info.getAlignment()) << "\n";
   OS << "  FieldOffsets: [";
   for (unsigned i = 0, e = Info.getFieldCount(); i != e; ++i) {
     if (i) OS << ", ";
index 4d928409a25837319a96612567f9f68d140ed52d..aaff7fc9f78ae47113087ff26b55d2a9cef29ebc 100644 (file)
@@ -177,7 +177,8 @@ public:
 }
 
 void CGRecordLayoutBuilder::Layout(const RecordDecl *D) {
-  Alignment = Types.getContext().getASTRecordLayout(D).getAlignment() / 8;
+  Alignment = 
+    Types.getContext().getASTRecordLayout(D).getAlignment().getQuantity();
   Packed = D->hasAttr<PackedAttr>();
 
   if (D->isUnion()) {
@@ -301,7 +302,7 @@ CGBitFieldInfo CGBitFieldInfo::MakeInfo(CodeGenTypes &Types,
   const RecordDecl *RD = FD->getParent();
   const ASTRecordLayout &RL = Types.getContext().getASTRecordLayout(RD);
   uint64_t ContainingTypeSizeInBits = Types.getContext().toBits(RL.getSize());
-  unsigned ContainingTypeAlign = RL.getAlignment();
+  unsigned ContainingTypeAlign = Types.getContext().toBits(RL.getAlignment());
 
   return MakeInfo(Types, FD, FieldOffset, FieldSize, ContainingTypeSizeInBits,
                   ContainingTypeAlign);
@@ -476,7 +477,7 @@ void CGRecordLayoutBuilder::LayoutUnion(const RecordDecl *D) {
   if (Ty) {
     AppendField(0, Ty);
 
-    if (getTypeAlignment(Ty) > Layout.getAlignment() / 8) {
+    if (getTypeAlignment(Ty) > Layout.getAlignment().getQuantity()) {
       // We need a packed struct.
       Packed = true;
       Align = 1;