| /* testing the correct usage of flexible array members in unions |
| and alone in structures: initialization */ |
| /* { dg-do run } */ |
| /* { dg-options "-O2" } */ |
| |
| union with_fam_1 { |
| int a; |
| int b[]; |
| } with_fam_1_v = {.b = {1, 2, 3, 4}}; |
| |
| union with_fam_2 { |
| int a; |
| char b[]; |
| } with_fam_2_v = {.a = 0x1f2f3f4f}; |
| |
| union with_fam_3 { |
| unsigned char a[]; |
| int b[]; |
| } with_fam_3_v = {.b = {0x1f2f3f4f, 0x5f6f7f8f}}; |
| |
| struct only_fam { |
| int b[]; |
| } only_fam_v = {{7, 11}}; |
| |
| struct only_fam_2 { |
| unsigned int : 2; |
| unsigned int : 3; |
| int b[]; |
| } only_fam_2_v = {{7, 11}}; |
| |
| #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ |
| #define WITH_FAM_2_V_B0 0x4f |
| #define WITH_FAM_2_V_B3 0x1f |
| #define WITH_FAM_3_V_A0 0x4f |
| #define WITH_FAM_3_V_A7 0x5f |
| #else |
| #define WITH_FAM_2_V_B0 0x1f |
| #define WITH_FAM_2_V_B3 0x4f |
| #define WITH_FAM_3_V_A0 0x1f |
| #define WITH_FAM_3_V_A7 0x8f |
| #endif |
| |
| int main () |
| { |
| if (with_fam_1_v.b[3] != 4 |
| || with_fam_1_v.b[0] != 1) |
| __builtin_abort (); |
| if (with_fam_2_v.b[3] != WITH_FAM_2_V_B3 |
| || with_fam_2_v.b[0] != WITH_FAM_2_V_B0) |
| __builtin_abort (); |
| if (with_fam_3_v.a[0] != WITH_FAM_3_V_A0 |
| || with_fam_3_v.a[7] != WITH_FAM_3_V_A7) |
| __builtin_abort (); |
| if (only_fam_v.b[0] != 7 |
| || only_fam_v.b[1] != 11) |
| __builtin_abort (); |
| if (only_fam_2_v.b[0] != 7 |
| || only_fam_2_v.b[1] != 11) |
| __builtin_abort (); |
| |
| return 0; |
| } |
| |