Viewing file: pr89546.c (1.07 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-do run } */ /* { dg-options "-O" } */
struct I { int i; };
struct A { struct I i1; struct I i2; struct I i3; };
struct B { struct I i0; struct A a; };
struct C { struct I i00; struct B b; };
volatile int v;
void __attribute__((noipa)) consume_i (struct I i) { v = i.i; }
void __attribute__((noipa)) consume_a (struct A a) { v = a.i1.i; }
void __attribute__((noipa)) consume_b (struct B b) { v = b.a.i1.i; }
void __attribute__((noipa)) consume_c (struct C c) { v = c.b.a.i1.i; }
int __attribute__((noipa)) foo (struct I input) { struct I i1, i2, i3; struct A a1, a2, a3; struct B b1; struct C c;
i1 = input; a1.i1 = i1; b1.a = a1;
i2.i = 1; b1.i0 = i2;
c.b = b1;
a2 = c.b.a; a3 = a2; i3 = a3.i1;
int t = c.b.i0.i; a2.i3.i = 4; consume_i (i1); consume_i (i2); consume_b (b1); consume_a (a1); consume_a (a2); consume_a (a3); consume_c (c);
return i3.i + t; }
int main (int argc, char *argv[]) { struct I s; s.i = 1234; int i = foo (s); if (i != 1235) __builtin_abort (); return 0; }
|