aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CodeGen/CodeGenTypes.cpp3
-rw-r--r--test/CodeGen/2008-02-08-bitfield-bug.c9
2 files changed, 11 insertions, 1 deletions
diff --git a/CodeGen/CodeGenTypes.cpp b/CodeGen/CodeGenTypes.cpp
index bed01eeb61..d293b4f081 100644
--- a/CodeGen/CodeGenTypes.cpp
+++ b/CodeGen/CodeGenTypes.cpp
@@ -573,5 +573,6 @@ void RecordOrganizer::placeBitField(const FieldDecl *FD) {
CGT.addBitFieldInfo(FD, 0, BitFieldSize);
Cursor = (Idx + 1) * TySize + BitFieldSize;
}
- addPaddingFields(Cursor);
+ if (Cursor > llvmSize)
+ addPaddingFields(Cursor);
}
diff --git a/test/CodeGen/2008-02-08-bitfield-bug.c b/test/CodeGen/2008-02-08-bitfield-bug.c
new file mode 100644
index 0000000000..1a9c266fe7
--- /dev/null
+++ b/test/CodeGen/2008-02-08-bitfield-bug.c
@@ -0,0 +1,9 @@
+// RUN: clang %s -emit-llvm
+
+struct test {
+ unsigned a:1;
+ unsigned b:1;
+};
+
+struct test *t;
+