1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fno-tree-dce -fno-tree-ccp -fno-tree-copy-prop -fno-tree-dominator-opts" } */
3 
4 /* This caused the compiler to enter an infinite loop if copies are not
5    fully propagated.   The options are to disable copy propagation and
6    thus expose the bug.   */
7 
8 int foo (void);
9 
10 struct A {
11   struct B {
12     struct B *n;
13   } *p;
14 };
15 
baz(struct A * a)16 static inline void baz (struct A *a)
17 {
18   a->p = a->p->n;
19 }
20 
bar(struct A a)21 void bar (struct A a)
22 {
23   while (foo ())
24     baz (&a);
25   while (foo ());
26 }
27