| /* { dg-do compile } */ | |
| /* { dg-options "-O2 -fno-tree-dce -fno-tree-ccp -fno-tree-copy-prop -fno-tree-dominator-opts" } */ | |
| /* This caused the compiler to enter an infinite loop if copies are not | |
| fully propagated. The options are to disable copy propagation and | |
| thus expose the bug. */ | |
| int foo (void); | |
| struct A { | |
| struct B { | |
| struct B *n; | |
| } *p; | |
| }; | |
| static inline void baz (struct A *a) | |
| { | |
| a->p = a->p->n; | |
| } | |
| void bar (struct A a) | |
| { | |
| while (foo ()) | |
| baz (&a); | |
| while (foo ()); | |
| } |