forked from OSchip/llvm-project
Packed unions should be packed. Fixes an assert Daniel reported.
llvm-svn: 80808
This commit is contained in:
parent
7bd37b47c8
commit
09a3774cd3
|
@ -28,14 +28,13 @@ using namespace CodeGen;
|
||||||
|
|
||||||
void CGRecordLayoutBuilder::Layout(const RecordDecl *D) {
|
void CGRecordLayoutBuilder::Layout(const RecordDecl *D) {
|
||||||
Alignment = Types.getContext().getASTRecordLayout(D).getAlignment() / 8;
|
Alignment = Types.getContext().getASTRecordLayout(D).getAlignment() / 8;
|
||||||
|
Packed = D->hasAttr<PackedAttr>();
|
||||||
|
|
||||||
if (D->isUnion()) {
|
if (D->isUnion()) {
|
||||||
LayoutUnion(D);
|
LayoutUnion(D);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Packed = D->hasAttr<PackedAttr>();
|
|
||||||
|
|
||||||
if (LayoutFields(D))
|
if (LayoutFields(D))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
// RUN: clang-cc -triple x86_64-apple-darwin10 -emit-llvm %s -o %t &&
|
||||||
|
|
||||||
|
// RUN: grep "struct._attrs = type <{ i32, i8 }>" %t &&
|
||||||
|
typedef struct _attrs {
|
||||||
|
unsigned file_attributes;
|
||||||
|
unsigned char filename_length;
|
||||||
|
} __attribute__((__packed__)) attrs;
|
||||||
|
|
||||||
|
// RUN: grep "union._attr_union = type <{ i32, i8 }>" %t
|
||||||
|
typedef union _attr_union {
|
||||||
|
attrs file_attrs;
|
||||||
|
unsigned owner_id;
|
||||||
|
} __attribute__((__packed__)) attr_union;
|
||||||
|
|
||||||
|
attr_union u;
|
||||||
|
|
Loading…
Reference in New Issue