summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-8.c
blob: de1d5bb6240340805d95d3b4c6acd06f32020292 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/* { 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 ());
}