llvm-project/clang/test/CodeGen/ms_struct-bitfield-init.c
Aaron Ballman adc402bf3d Use functions with prototypes when appropriate; NFC
A significant number of our tests in C accidentally use functions
without prototypes. This patch converts the function signatures to have
a prototype for the situations where the test is not specific to K&R C
declarations. e.g.,

  void func();

becomes

  void func(void);

This is the eleventh batch of tests being updated (there are a
significant number of other tests left to be updated).
2022-02-15 16:06:43 -05:00

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(void) {
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;
}