diff options
| author | Anders Carlsson <andersca@mac.com> | 2009-07-23 04:59:05 +0000 |
|---|---|---|
| committer | Anders Carlsson <andersca@mac.com> | 2009-07-23 04:59:05 +0000 |
| commit | f55922b8b8bb12a88738e04c81316dcefeda118d (patch) | |
| tree | f32ec44538b04144d1199d194cfb0731b1d21f6f | |
| parent | 02def54fa1dbb930cce9e9c3574d4f8b3890e8a0 (diff) | |
| download | bcm5719-llvm-f55922b8b8bb12a88738e04c81316dcefeda118d.tar.gz bcm5719-llvm-f55922b8b8bb12a88738e04c81316dcefeda118d.zip | |
Set field info for unions.
llvm-svn: 76856
| -rw-r--r-- | clang/lib/CodeGen/CGRecordLayoutBuilder.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp b/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp index 1631c43eb99..fa096bd6306 100644 --- a/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp +++ b/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp @@ -151,6 +151,7 @@ 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; @@ -182,12 +183,21 @@ void CGRecordLayoutBuilder::LayoutUnion(const RecordDecl *D) { Ty = FieldTy; Align = FieldAlign; Size = FieldSize; + FD = *Field; } } // Now add our field. - if (Ty) + if (FD) { AppendField(0, Size, Ty); + Types.addFieldInfo(FD, 0); + + if (FD->isBitField()) { + uint64_t FieldSize = + FD->getBitWidth()->EvaluateAsInt(Types.getContext()).getZExtValue(); + Types.addBitFieldInfo(FD, 0, FieldSize); + } + } // Append tail padding. if (Layout.getSize() / 8 > Size) |

