diff options
author | Anders Carlsson <andersca@mac.com> | 2009-07-23 22:52:34 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-07-23 22:52:34 +0000 |
commit | 085395426c3412b3d0d3fd89c8b004733005ff1d (patch) | |
tree | e104a95f60ad6089b12cddb807e98085a110fab7 /clang/lib | |
parent | 9620889f67f531244a809aae676ac899406ae284 (diff) | |
download | bcm5719-llvm-085395426c3412b3d0d3fd89c8b004733005ff1d.tar.gz bcm5719-llvm-085395426c3412b3d0d3fd89c8b004733005ff1d.zip |
Don't just store the field/bit field info one field, do it for all fields in the union.
llvm-svn: 76907
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/CodeGen/CGRecordLayoutBuilder.cpp | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp b/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp index 875f5c30c7b..af6ca82f0c4 100644 --- a/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp +++ b/clang/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) |