aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGRecordLayoutBuilder.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-07-23 04:59:05 +0000
committerAnders Carlsson <andersca@mac.com>2009-07-23 04:59:05 +0000
commitcfc6758b5f62514445eead673a46a69d70162526 (patch)
treeb929dbed6ed75e2add41d4aabfb0ba6d4e237890 /lib/CodeGen/CGRecordLayoutBuilder.cpp
parent20d6d0474efc662924c4ca00a3511aac3782c4b0 (diff)
Set field info for unions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76856 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGRecordLayoutBuilder.cpp')
-rw-r--r--lib/CodeGen/CGRecordLayoutBuilder.cpp12
1 files changed, 11 insertions, 1 deletions
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)