| /* { dg-do run } */ |
| /* { dg-options "-O1" } */ |
| |
| static int __attribute__((noipa)) |
| get_5 (void) |
| { |
| return 5; |
| } |
| |
| static int __attribute__((noipa)) |
| verify_5 (int v) |
| { |
| if (v != 5) |
| __builtin_abort (); |
| } |
| |
| struct T |
| { |
| int w; |
| int a[4]; |
| }; |
| |
| struct S |
| { |
| int v; |
| int x; |
| struct T t[2]; |
| char alotofstuff[128]; |
| }; |
| |
| volatile int vol; |
| |
| void __attribute__((noipa)) |
| consume_t (struct T t) |
| { |
| vol = t.a[0]; |
| } |
| |
| int __attribute__((noipa)) |
| foo (int l1, int l2) |
| { |
| struct S s1, s2, s3; |
| int i, j; |
| |
| s1.v = get_5 (); |
| for (i = 0; i < l1; i++) |
| { |
| for (j = 0; j < l2; j++) |
| s1.t[i].a[j] = get_5 (); |
| consume_t(s1.t[i]); |
| } |
| |
| s2 = s1; |
| |
| s3 = s2; |
| for (i = 0; i < l1; i++) |
| for (j = 0; j < l2; j++) |
| verify_5 (s3.t[i].a[j]); |
| } |
| |
| int |
| main (int argc, char *argv[]) |
| { |
| foo (2, 4); |
| return 0; |
| } |