зеркало из https://github.com/microsoft/clang-1.git
fix a bogus assertion exposed by a recent change: packing the
struct may cause it to shrink more than one byte. Before my recent changes we compiled the new test into: %0 = type { [6 x i8] } @x = global %0 { [6 x i8] undef }, align 2 ; <%0*> [#uses=0] which is obviously bogus. Now we compile it into: %0 = type <{ i32, i8, i8 }> @x = global %0 zeroinitializer, align 2 ; <%0*> [#uses=0] Where the last byte only is tail padding. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101536 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
cdb30b4159
Коммит
d39a0d6119
|
@ -372,7 +372,7 @@ bool ConstStructBuilder::Build(InitListExpr *ILE) {
|
|||
assert(!Packed && "Size mismatch!");
|
||||
|
||||
ConvertStructToPacked();
|
||||
assert(NextFieldOffsetInBytes == LayoutSizeInBytes &&
|
||||
assert(NextFieldOffsetInBytes <= LayoutSizeInBytes &&
|
||||
"Converting to packed did not help!");
|
||||
}
|
||||
|
||||
|
|
|
@ -84,3 +84,8 @@ struct test7s { int a; int b; } test7[] = {
|
|||
{4},
|
||||
};
|
||||
|
||||
// rdar://7872531
|
||||
#pragma pack(push, 2)
|
||||
struct test8s { int f0; char f1; } test8g = {};
|
||||
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче