| /* { dg-do compile { target fpic } } */ |
| /* { dg-options "-fPIC -g -O2 -w" } */ |
| /* var-tracking failed to clobber the reg holding v at the asm insn, |
| so v ended up bound to an intermediate PIC expression. */ |
| |
| struct A { unsigned a1; char a2[15]; }; |
| struct B { long b1; unsigned char b2; long b3; }; |
| struct C { void *c1; unsigned c2; unsigned c3; }; |
| |
| static struct A v1; |
| struct A *const v2 = &v1; |
| |
| static inline |
| int foo (void) |
| { |
| int *v; |
| __asm__ __volatile__ ("" : "=r" (v)); |
| return v[1]; |
| } |
| |
| static void |
| bar (struct C *x) |
| { |
| if (x->c2 == x->c3 && x->c1) |
| f1 (foo (), x->c1, x->c3 * sizeof (x->c1[0])); |
| } |
| |
| void |
| baz (struct B *y) |
| { |
| int i; |
| const char *j; |
| char *k; |
| char x[64]; |
| for (i = 0; i < sizeof (struct B); i++, y) |
| { |
| switch (y->b2) |
| { |
| case 0x20: |
| if (__builtin_strchr (j, '=')) |
| continue; |
| } |
| switch (y->b2) |
| { |
| case 0x80: |
| bar (&x); |
| f2 (y->b3); |
| case 0x2e: |
| case 0x4e: |
| break; |
| default: |
| if (v2->a1) |
| f2 (y->b2); |
| } |
| k[0] = '\0'; |
| if (v2->a1) |
| f2 (y->b1); |
| } |
| } |