aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CodeGenTypes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CodeGen/CodeGenTypes.cpp')
-rw-r--r--lib/CodeGen/CodeGenTypes.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/CodeGen/CodeGenTypes.cpp b/lib/CodeGen/CodeGenTypes.cpp
index 751cd3a077..1544050155 100644
--- a/lib/CodeGen/CodeGenTypes.cpp
+++ b/lib/CodeGen/CodeGenTypes.cpp
@@ -593,12 +593,14 @@ void RecordOrganizer::layoutUnionFields() {
unsigned PrimaryEltNo = 0;
std::pair<uint64_t, unsigned> PrimaryElt =
CGT.getContext().getTypeInfo(FieldDecls[0]->getType());
- CGT.addFieldInfo(FieldDecls[0], 0);
+ if (FieldDecls[0]->isBitField())
+ placeBitField(FieldDecls[0]);
+ else
+ CGT.addFieldInfo(FieldDecls[0], 0);
unsigned Size = FieldDecls.size();
for(unsigned i = 1; i != Size; ++i) {
const FieldDecl *FD = FieldDecls[i];
- assert (!FD->isBitField() && "Bit fields are not yet supported");
std::pair<uint64_t, unsigned> EltInfo =
CGT.getContext().getTypeInfo(FD->getType());
@@ -611,7 +613,10 @@ void RecordOrganizer::layoutUnionFields() {
}
// In union, each field gets first slot.
- CGT.addFieldInfo(FD, 0);
+ if (FD->isBitField())
+ placeBitField(FD);
+ else
+ CGT.addFieldInfo(FD, 0);
}
std::vector<const llvm::Type*> Fields;