llvm-6502/test/Analysis/DSGraph/globals.c

46 lines
920 B
C
Raw Normal View History

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