/* Test globals used and unused within different parts of a program */

/* FIXME: This testcase should be automated */

#include <stdlib.h>

extern void exit_dummy(int*);

static int** G;
static int N, M;

void
foo(int *Z)          /* accesses globals printf and format string, and */
{                    /* N = alloca(int) from test() */
  if (Z == 0) exit_dummy(Z);            /* call to external function */
  ++*Z;
  printf("N = %d\n", *Z);
}

void leaf2(int* Y)
{
  if (Y == 0) exit_dummy(Y);            /* second call to external function */
}

void
test(int* X)         /* accesses global G */
{                    /* allocates G = malloc(int*) and N = alloca(int) */
  if (X == 0)
    X = &N;
  G = (int**) alloca(sizeof(int*));
  *G = &N;
  **G = 10;
  foo(*G);
  leaf2(*G);
  *X = **G;
  /* free(G); */
}

int
main()               /* only accesses global N */
{
  /* N = 0; */
  test(0 /*&N*/);
  return 0;
}
