/* { 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 ()); | |
} |