| /* PR libstdc++/88101 */ |
| |
| struct S { char a; short b; char c; }; |
| |
| __attribute__((noipa)) void |
| foo (int m, int n, int o) |
| { |
| long double a1[m]; |
| long double a2[m]; |
| struct S b1[m][n]; |
| struct S b2[m][n]; |
| struct S c1[m][n][o]; |
| struct S c2[m][n][o]; |
| int i, j, k; |
| __builtin_memset (&a1, 0, sizeof (a1)); |
| __builtin_memset (&a2, ~0, sizeof (a2)); |
| __builtin_memset (&b1, 0, sizeof (b1)); |
| __builtin_memset (&b2, ~0, sizeof (b2)); |
| __builtin_memset (&c1, 0, sizeof (c1)); |
| __builtin_memset (&c2, ~0, sizeof (c2)); |
| for (i = 0; i < m; i++) |
| { |
| a1[i] = 13.132L; |
| a2[i] = 13.132L; |
| for (j = 0; j < n; j++) |
| { |
| b1[i][j].a = -1; |
| b1[i][j].b = -1; |
| b1[i][j].c = -1; |
| b2[i][j].a = -1; |
| b2[i][j].b = -1; |
| b2[i][j].c = -1; |
| for (k = 0; k < o; k++) |
| { |
| c1[i][j][k].a = -1; |
| c1[i][j][k].b = -1; |
| c1[i][j][k].c = -1; |
| c2[i][j][k].a = -1; |
| c2[i][j][k].b = -1; |
| c2[i][j][k].c = -1; |
| } |
| } |
| } |
| __builtin_clear_padding (&a2); |
| __builtin_clear_padding (&b2); |
| __builtin_clear_padding (&c2); |
| if (__builtin_memcmp (&a1, &a2, sizeof (a1)) |
| || __builtin_memcmp (&b1, &b2, sizeof (b1)) |
| || __builtin_memcmp (&c1, &c2, sizeof (c1))) |
| __builtin_abort (); |
| } |
| |
| int |
| main () |
| { |
| foo (5, 3, 4); |
| foo (17, 2, 1); |
| return 0; |
| } |