1 /* Test volatile access to unaligned field. */ 2 /* { dg-do run } */ 3 /* { dg-require-effective-target size32plus } */ 4 /* { dg-options "-fstrict-volatile-bitfields" } */ 5 6 extern void abort (void); 7 8 #define test_type unsigned int 9 #define MAGIC 0x1020304u 10 11 typedef struct s{ 12 unsigned char Prefix; 13 test_type Type; 14 }__attribute((__packed__)) ss; 15 16 volatile ss v; 17 ss g; 18 19 void __attribute__((noinline)) foo(test_type u)20foo (test_type u) 21 { 22 v.Type = u; 23 } 24 25 test_type __attribute__((noinline)) bar(void)26bar (void) 27 { 28 return v.Type; 29 } 30 main()31int main() 32 { 33 test_type temp; 34 foo(MAGIC); 35 __builtin_memcpy(&g, (void *)&v, sizeof(g)); 36 if (g.Type != MAGIC) 37 abort (); 38 39 g.Type = MAGIC; 40 __builtin_memcpy((void *)&v, &g, sizeof(v)); 41 temp = bar(); 42 if (temp != MAGIC) 43 abort (); 44 return 0; 45 } 46