| /* PR target/52991 */ |
| /* { dg-do run { target i?86-*-* x86_64-*-* } } */ |
| |
| struct S { |
| int a : 2; |
| __attribute__((aligned (8))) int b : 2; |
| int c : 28; |
| __attribute__((aligned (16))) int d : 2; |
| int e : 30; |
| } __attribute__((ms_struct)); |
| |
| struct S s; |
| |
| int |
| main () |
| { |
| int i; |
| if (sizeof (s) != 32) |
| __builtin_abort (); |
| s.a = -1; |
| for (i = 0; i < 32; ++i) |
| if (((char *) &s)[i] != (i ? 0 : 3)) |
| __builtin_abort (); |
| s.a = 0; |
| s.b = -1; |
| for (i = 0; i < 32; ++i) |
| if (((char *) &s)[i] != (i ? 0 : 12)) |
| __builtin_abort (); |
| s.b = 0; |
| s.c = -1; |
| for (i = 0; i < 32; ++i) |
| if (((signed char *) &s)[i] != (i > 3 ? 0 : (i ? -1 : -16))) |
| __builtin_abort (); |
| s.c = 0; |
| s.d = -1; |
| for (i = 0; i < 32; ++i) |
| if (((signed char *) &s)[i] != (i == 16 ? 3 : 0)) |
| __builtin_abort (); |
| s.d = 0; |
| s.e = -1; |
| for (i = 0; i < 32; ++i) |
| if (((signed char *) &s)[i] != ((i < 16 || i > 19) ? 0 : (i == 16 ? -4 : -1))) |
| __builtin_abort (); |
| return 0; |
| } |