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:
Chris Lattner 2010-04-16 21:02:32 +00:00
Родитель cdb30b4159
Коммит d39a0d6119
2 изменённых файлов: 6 добавлений и 1 удалений

Просмотреть файл

@ -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 = {};