This reverts commit d618f1c3b12effd0c2bdb7d02108d3551f389d3d. This commit wasn't reviewed ahead of time and significant concerns were raised immediately after it landed. According to our developer policy this warrants immediate revert of the commit. https://llvm.org/docs/DeveloperPolicy.html#patch-reversion-policy Differential Revision: https://reviews.llvm.org/D155509
145 lines
3.8 KiB
C
145 lines
3.8 KiB
C
// RUN: %clang_cc1 -emit-llvm-only -triple i386-apple-darwin9 -fdump-record-layouts %s | FileCheck %s
|
|
// rdar://8823265
|
|
|
|
#pragma pack(1)
|
|
struct _one_ms {
|
|
short m:9; // size is 2
|
|
int q:27; // size is 6
|
|
short w:13; // size is 8
|
|
short e:3; // size is 8
|
|
char r:4; // size is 9
|
|
char t:7; // size is 10
|
|
short y:16; // size is 12
|
|
short u:1; // size is 14
|
|
char i:2; // size is 15
|
|
int a; // size is 19
|
|
char o:6; // size is 20
|
|
char s:2; // size is 20
|
|
short d:10; // size is 22
|
|
short f:4; // size is 22
|
|
char b; // size is 23
|
|
char g:1; // size is 24
|
|
short h:13; // size is 26
|
|
char j:8; // size is 27
|
|
char k:5; // size is 28
|
|
char c; // size is 29
|
|
int l:28; // size is 33
|
|
char z:7; // size is 34
|
|
int x:20; // size is 38
|
|
} __attribute__((__ms_struct__));
|
|
typedef struct _one_ms one_ms;
|
|
|
|
static int a1[(sizeof(one_ms) == 38) - 1];
|
|
|
|
#pragma pack(2)
|
|
struct _two_ms {
|
|
short m:9;
|
|
int q:27;
|
|
short w:13;
|
|
short e:3;
|
|
char r:4;
|
|
char t:7;
|
|
short y:16;
|
|
short u:1;
|
|
char i:2;
|
|
int a;
|
|
char o:6;
|
|
char s:2;
|
|
short d:10;
|
|
short f:4;
|
|
char b;
|
|
char g:1;
|
|
short h:13;
|
|
char j:8;
|
|
char k:5;
|
|
char c;
|
|
int l:28;
|
|
char z:7;
|
|
int x:20;
|
|
} __attribute__((__ms_struct__));
|
|
|
|
typedef struct _two_ms two_ms;
|
|
|
|
static int a2[(sizeof(two_ms) == 42) - 1];
|
|
|
|
#pragma pack(4)
|
|
struct _four_ms {
|
|
short m:9;
|
|
int q:27;
|
|
short w:13;
|
|
short e:3;
|
|
char r:4;
|
|
char t:7;
|
|
short y:16;
|
|
short u:1;
|
|
char i:2;
|
|
int a;
|
|
char o:6;
|
|
char s:2;
|
|
short d:10;
|
|
short f:4;
|
|
char b;
|
|
char g:1;
|
|
short h:13;
|
|
char j:8;
|
|
char k:5;
|
|
char c;
|
|
int l:28;
|
|
char z:7;
|
|
int x:20;
|
|
} __attribute__((__ms_struct__));
|
|
typedef struct _four_ms four_ms;
|
|
|
|
static int a4[(sizeof(four_ms) == 48) - 1];
|
|
|
|
#pragma pack(8)
|
|
struct _eight_ms {
|
|
short m:9;
|
|
int q:27;
|
|
short w:13;
|
|
short e:3;
|
|
char r:4;
|
|
char t:7;
|
|
short y:16;
|
|
short u:1;
|
|
char i:2;
|
|
int a;
|
|
char o:6;
|
|
char s:2;
|
|
short d:10;
|
|
short f:4;
|
|
char b;
|
|
char g:1;
|
|
short h:13;
|
|
char j:8;
|
|
char k:5;
|
|
char c;
|
|
int l:28;
|
|
char z:7;
|
|
int x:20;
|
|
} __attribute__((__ms_struct__));
|
|
|
|
typedef struct _eight_ms eight_ms;
|
|
|
|
static int a8[(sizeof(eight_ms) == 48) - 1];
|
|
|
|
// rdar://15926990
|
|
#pragma pack(2)
|
|
struct test0 {
|
|
unsigned long a : 8;
|
|
unsigned long b : 8;
|
|
unsigned long c : 8;
|
|
unsigned long d : 10;
|
|
unsigned long e : 1;
|
|
} __attribute__((__ms_struct__));
|
|
|
|
// CHECK: 0 | struct test0
|
|
// CHECK-NEXT: 0:0-7 | unsigned long a
|
|
// CHECK-NEXT: 1:0-7 | unsigned long b
|
|
// CHECK-NEXT: 2:0-7 | unsigned long c
|
|
// CHECK-NEXT: 4:0-9 | unsigned long d
|
|
// CHECK-NEXT: 5:2-2 | unsigned long e
|
|
// CHECK-NEXT: | [sizeof=8, align=2]
|
|
|
|
static int test0[(sizeof(struct test0) == 8) ? 1 : -1];
|