From: Anders Carlsson Date: Thu, 23 Jul 2009 04:59:05 +0000 (+0000) Subject: Set field info for unions. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cfc6758b5f62514445eead673a46a69d70162526;p=clang Set field info for unions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76856 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGRecordLayoutBuilder.cpp b/lib/CodeGen/CGRecordLayoutBuilder.cpp index 1631c43eb9..fa096bd630 100644 --- a/lib/CodeGen/CGRecordLayoutBuilder.cpp +++ b/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)