summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/compile/20040214-2.c
blob: 352d5a5d7641cb00031b982cb060599528a91560 (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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/* http://gcc.gnu.org/ml/gcc-patches/2004-02/msg01307.html */

typedef struct xdef xdef;
struct xdef
{
  char xtyp;
  xdef *next;
  int y;
};

extern void b ();
extern void *foo (void *bar);
extern void *foo2 (void *bar1, void *bar2);
extern void *qwe;

static void
c (xdef * xp)
{
  b (xp);
}
static void
a (xdef ** xpp)
{
  xdef *xp;
  xp = *xpp;

  foo (xp);
  xp = foo2 (xp, qwe);
  b (xp->next);
  foo (xp);
  if (xp->y)
  {
    foo (xp);
    if (xp)
    {
      xdef *p = foo2 (xp, qwe);
      foo2 (xp, p);
      xp = foo (p);
    }
    else
    {
      foo2 (foo(*xpp), *xpp);
    }
  }
  *xpp = foo2 (xpp, qwe);
}

void
b (xdef ** xpp)
{
  xdef *xp = *xpp;
  if (!xp)
    return;
  if (xp->xtyp == 0)
    a (xpp);
  c (xp);
}