| /* PR91038 */ |
| /* { dg-do run } */ |
| /* { dg-options "-O2 -Wunused-variable" } */ |
| |
| |
| #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) |
| |
| struct lbm { |
| |
| int D; |
| const int* DQ; |
| |
| } D2Q9 = { 2, |
| (const int*)&(const int[9][2]){ |
| { 0, 0 }, |
| { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 }, |
| { 1, 1 }, { -1, 1 }, { -1, -1 }, { 1, -1 }, |
| } |
| }; |
| |
| void zouhe_left(void) |
| { |
| __auto_type xx = (*({ int N = 2; struct lbm __x = D2Q9; ((const int(*)[9][N])__x.DQ); })); |
| |
| if (1 != xx[1][0]) |
| __builtin_abort(); |
| |
| if (2 != ARRAY_SIZE(xx[1])) |
| __builtin_abort(); |
| |
| if (1 != (*({ int N = 2; struct lbm __x = D2Q9; ((const int(*)[9][N])__x.DQ); }))[1][0]) |
| __builtin_abort(); |
| |
| if (2 != ARRAY_SIZE(*({ int N = 2; struct lbm __x = D2Q9; ((const int(*)[9][N])__x.DQ); })[1])) |
| __builtin_abort(); |
| } |
| |
| int main() |
| { |
| zouhe_left(); |
| return 0; |
| } |
| |
| |