diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-10-19 00:03:10 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-10-19 00:03:10 +0000 |
commit | afefe97e1c97dd4f04761b5412e34feced0d065a (patch) | |
tree | 6697c09167e6a7f488fa244e31664a3d35467b36 /clang/test/CodeGen/const-init.c | |
parent | 090a237f2981d7059073439f4fe159cbd7ab3389 (diff) | |
download | bcm5719-llvm-afefe97e1c97dd4f04761b5412e34feced0d065a.tar.gz bcm5719-llvm-afefe97e1c97dd4f04761b5412e34feced0d065a.zip |
CodeGen: ConstStructBuilder must verify packed constraints after padding
Before, ConstStructBuilder::AppendBytes would check packed constraints
prior to padding being added before the field's offset. However, adding
this padding might force our struct to be packed. Because we wouldn't
check *after* adding padding, ConstStructBuilder would be in an
inconsistent state leading to a crash.
This fixes PR21300.
llvm-svn: 220153
Diffstat (limited to 'clang/test/CodeGen/const-init.c')
-rw-r--r-- | clang/test/CodeGen/const-init.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/clang/test/CodeGen/const-init.c b/clang/test/CodeGen/const-init.c index 7d7ccae370d..ccc6604c456 100644 --- a/clang/test/CodeGen/const-init.c +++ b/clang/test/CodeGen/const-init.c @@ -159,3 +159,14 @@ void g29() { static int b[1] = { "asdf" }; // expected-warning {{incompatible pointer to integer conversion initializing 'int' with an expression of type 'char [5]'}} static int c[1] = { L"a" }; } + +// PR21300 +void g30() { +#pragma pack(1) + static struct { + int : 1; + int x; + } a = {}; + // CHECK: @g30.a = internal global %struct.anon.1 <{ i8 undef, i32 0 }>, align 1 +#pragma pack() +} |