John McCall 4a39ab8078 Emit the globals, metadata, etc. associated with static variables even when
they're unreachable.  This matters because (if they're POD, or if this is C)
the scope containing the variable might be reachable even if the variable
isn't.  Fixes PR7044.

llvm-svn: 103052
2010-05-04 20:45:42 +00:00

42 lines
799 B
C

// RUN: %clang_cc1 -triple i386-pc-linux-gnu -emit-llvm -o %t %s
// RUN: grep "g.b = internal global i8. getelementptr" %t
struct AStruct {
int i;
char *s;
double d;
};
void f() {
static int i = 42;
static int is[] = { 1, 2, 3, 4 };
static char* str = "forty-two";
static char* strs[] = { "one", "two", "three", "four" };
static struct AStruct myStruct = { 1, "two", 3.0 };
}
void g() {
static char a[10];
static char *b = a;
}
struct s { void *p; };
void foo(void) {
static struct s var = {((void*)&((char*)0)[0])};
}
// RUN: grep "f1.l0 = internal global i32 ptrtoint (i32 ()\* @f1 to i32)" %t
int f1(void) { static int l0 = (unsigned) f1; }
// PR7044
char *f2(char key) {
switch (key) {
static char _msg[40];
case '\014':
return _msg;
}
return 0;
}