summaryrefslogtreecommitdiff
path: root/clang/test/CodeGen/staticinit.c
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/CodeGen/staticinit.c')
-rw-r--r--clang/test/CodeGen/staticinit.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/clang/test/CodeGen/staticinit.c b/clang/test/CodeGen/staticinit.c
new file mode 100644
index 0000000..8c5cdd0
--- /dev/null
+++ b/clang/test/CodeGen/staticinit.c
@@ -0,0 +1,41 @@
+// 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;
+}