blob: 3754b108ac660cd581c47756aa657fa5a84ec8d5 [file] [log] [blame]
/* Test volatile access to unaligned field. */
/* { dg-do run } */
/* { dg-options "-fstrict-volatile-bitfields" } */
extern void abort (void);
#define test_type unsigned long long
#define MAGIC 0x102030405060708ull
typedef struct s{
unsigned char Prefix;
test_type Type;
}__attribute((__packed__)) ss;
volatile ss v;
ss g;
void __attribute__((noinline))
foo (test_type u)
{
v.Type = u;
}
test_type __attribute__((noinline))
bar (void)
{
return v.Type;
}
int main()
{
test_type temp;
foo(MAGIC);
__builtin_memcpy(&g, (void *)&v, sizeof(g));
if (g.Type != MAGIC)
abort ();
g.Type = MAGIC;
__builtin_memcpy((void *)&v, &g, sizeof(v));
temp = bar();
if (temp != MAGIC)
abort ();
return 0;
}