| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fdump-tree-dse2-details" } */ |
| /* { dg-final { scan-tree-dump-not "Deleted dead store" "dse2" } } */ |
| |
| struct foo { unsigned long bar; }; |
| |
| unsigned y; |
| |
| static int __attribute__ ((__noinline__, __noclone__)) |
| wrapped (struct foo *p, int i); |
| |
| static int wrapper (struct foo *p); |
| |
| static int __attribute__ ((__noclone__)) |
| wrapper (struct foo *p) { |
| return wrapped (p, 1); |
| } |
| |
| static int __attribute__ ((__noinline__, __noclone__)) |
| dind (struct foo **pp); |
| |
| int __attribute__ ((__noclone__, __no_reorder__)) |
| xfn () { |
| struct foo x = { 0xBADC0FFE }; |
| struct foo *p = &x; |
| return dind (&p); |
| } |
| |
| static int __attribute__ ((__noinline__, __no_reorder__)) |
| wrapped (struct foo *p, int i) { |
| return p->bar + i == y++; |
| } |
| |
| static int __attribute__ ((__noinline__, __noclone__, __no_reorder__)) |
| dind (struct foo **pp) { |
| wrapper (*pp); |
| return 0; |
| } |