// RUN: clang-cc -emit-llvm %s -o %t

int A[10] = { 1,2,3,4,5 };


extern int x[];
void foo() { x[0] = 1; }
int x[10];
void bar() { x[0] = 1; }


extern int y[];
void *g = y;

int latin_ptr2len (char *p);
int (*mb_ptr2len) (char *p) = latin_ptr2len;


char string[8] = "string";   // extend init
char string2[4] = "string";  // truncate init

char *test(int c) {
 static char buf[10];
 static char *bufptr = buf;

 return c ? buf : bufptr;
}


_Bool booltest = 0;
void booltest2() {
  static _Bool booltest3 = 4;
}

// Scalars in braces.
static int a = { 1 };

// References to enums.
enum {
	EnumA, EnumB
};

int c[] = { EnumA, EnumB };

// Binary operators
int d[] = { EnumA | EnumB };

// PR1968
static int array[];
static int array[4];

