diff options
Diffstat (limited to 'lib/CodeGen/CGRecordLayoutBuilder.cpp')
-rw-r--r-- | lib/CodeGen/CGRecordLayoutBuilder.cpp | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/lib/CodeGen/CGRecordLayoutBuilder.cpp b/lib/CodeGen/CGRecordLayoutBuilder.cpp index 875f5c30c7..af6ca82f0c 100644 --- a/lib/CodeGen/CGRecordLayoutBuilder.cpp +++ b/lib/CodeGen/CGRecordLayoutBuilder.cpp @@ -146,7 +146,6 @@ void CGRecordLayoutBuilder::LayoutUnion(const RecordDecl *D) { const ASTRecordLayout &Layout = Types.getContext().getASTRecordLayout(D); - const FieldDecl *FD = 0; const llvm::Type *Ty = 0; uint64_t Size = 0; unsigned Align = 0; @@ -164,7 +163,11 @@ void CGRecordLayoutBuilder::LayoutUnion(const RecordDecl *D) { // Ignore zero sized bit fields. if (FieldSize == 0) continue; - } + + // Add the bit field info. + Types.addBitFieldInfo(*Field, 0, 0, FieldSize); + } else + Types.addFieldInfo(*Field, 0); const llvm::Type *FieldTy = Types.ConvertTypeForMemRecursive(Field->getType()); @@ -178,21 +181,12 @@ void CGRecordLayoutBuilder::LayoutUnion(const RecordDecl *D) { Ty = FieldTy; Align = FieldAlign; Size = FieldSize; - FD = *Field; } } // Now add our field. - if (FD) { + if (Ty) AppendField(0, Size, Ty); - - if (FD->isBitField()) { - uint64_t FieldSize = - FD->getBitWidth()->EvaluateAsInt(Types.getContext()).getZExtValue(); - Types.addBitFieldInfo(FD, 0, 0, FieldSize); - } else - Types.addFieldInfo(FD, 0); - } // Append tail padding. if (Layout.getSize() / 8 > Size) |