/* At file scope, all objects have static storage duration */
/* Both 'extern' and 'static' mean static storage duration */

/* Tentative definition */
/* External linkage */
int test1;

/* Definition */
/* External linkage */
int test2 = 42;

/* Tentative definition */
/* External linkage */
int test3;

/* Actual definition for the object on line 14 */
/* Still external linkage */
int test3 = 42;

/* Neither a tentative definition nor a definition */
/* External linkage */
extern int test4;

/* Neither a tentative definition nor a definition */
/* External linkage */
extern int test5;

/* Actual definition for the object on line 26 */
/* Still external linkage */
extern int test5 = 42;

/* Tentative definition */
/* Internal linkage */
static int test6;

/* Tentative definition */
/* Internal linkage */
static int test7;

/* Actual definition for the object on line 38 */
/* Still internal linkage */
static int test7 = 42;

/* Tentative definition */
/* Internal linkage */
static int test8;

/* Actual definition for the object on line 46 */
/* Still internal linkage, despite 'extern'! */
extern int test8 = 42;

int main(void) { return 0; }

/*
 * Since no other definition was given for 'test1', the
 * tentative definition on line 6 becomes the actual
 * definition with a zero value, equivalent to as if it
 * had been:

int test1 = 0;

 */

/*
 * Since no other definition was given for 'test6', the
 * tentative definition on line 34 becomes the actual
 * definition with a zero value, equivalent to as if it
 * had been:

static int test6 = 0;

 */