llvm-project/clang/test/CodeGen/ms_struct-bitfield-init.c

69 lines
1.0 KiB
C

// RUN: %clang_cc1 -emit-llvm-only -triple x86_64-apple-darwin9 %s
// rdar://8823265
extern void abort(void);
#define ATTR __attribute__((__ms_struct__))
struct
{
char foo;
long : 0;
char : 0;
int : 0;
char bar;
} ATTR t1 = {'a', 'b'};
struct
{
char bar0;
long : 0;
int : 0;
char bar1;
char bar2;
long : 0;
char bar3;
char bar4;
char : 0;
char bar5;
char bar6;
char : 0;
char bar7;
char bar8;
} ATTR t2 = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'};
struct {
int : 0;
int i1;
int : 0;
int i2;
int : 0;
int i3;
int : 0;
int i4;
} t3 = {1,2,3,4};
int main() {
if (sizeof(t1) != 2)
abort();
if (t1.foo != 'a')
abort();
if (t1.bar != 'b')
abort();
t1.foo = 'c';
t1.bar = 'd';
if (t1.foo != 'c')
abort();
if (t1.bar != 'd')
abort();
if (sizeof(t2) != 9)
abort();
if (t2.bar0 != 'a' || t2.bar8 != 'i')
abort();
if (sizeof(t3) != 16)
abort();
if (t3.i1 != 1 || t3.i4 != 4)
abort();
return 0;
}