mirror of
https://github.com/nArnoSNES/tcc-65816.git
synced 2024-12-28 08:30:35 +00:00
68 lines
961 B
C
68 lines
961 B
C
/* Test for bitfield alignment in structs and unions. */
|
|
/* { dg-do run { target pcc_bitfield_type_matters } } */
|
|
/* { dg-options "-O2" } */
|
|
|
|
extern void abort (void);
|
|
extern void exit (int);
|
|
|
|
typedef long la __attribute__((aligned (8)));
|
|
|
|
struct A
|
|
{
|
|
char a;
|
|
union UA
|
|
{
|
|
char x;
|
|
la y : 6;
|
|
} b;
|
|
char c;
|
|
} a;
|
|
|
|
struct B
|
|
{
|
|
char a;
|
|
union UB
|
|
{
|
|
char x;
|
|
long y : 6 /* __attribute__((aligned (8))) */;
|
|
} b;
|
|
char c;
|
|
} b;
|
|
|
|
struct C
|
|
{
|
|
char a;
|
|
struct UC
|
|
{
|
|
la y : 6;
|
|
} b;
|
|
char c;
|
|
} c;
|
|
|
|
struct D
|
|
{
|
|
char a;
|
|
struct UD
|
|
{
|
|
long y : 6 /* __attribute__((aligned (8))) */;
|
|
} b;
|
|
char c;
|
|
} d;
|
|
|
|
int main (void)
|
|
{
|
|
if (sizeof (a) != sizeof (b))
|
|
abort ();
|
|
if (sizeof (a) != sizeof (c))
|
|
abort ();
|
|
if (sizeof (a) != sizeof (d))
|
|
abort ();
|
|
if ((&a.c - &a.a) != (&b.c - &b.a))
|
|
abort ();
|
|
if ((&a.c - &a.a) != (&c.c - &c.a))
|
|
abort ();
|
|
if ((&a.c - &a.a) != (&d.c - &d.a))
|
|
abort ();
|
|
exit (0);
|
|
}
|