forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			118 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
| // RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s
 | |
| 
 | |
| void f1() {
 | |
|   // Scalars in braces.
 | |
|   int a = { 1 };
 | |
| }
 | |
| 
 | |
| void f2() {
 | |
|   int a[2][2] = { { 1, 2 }, { 3, 4 } };
 | |
|   int b[3][3] = { { 1, 2 }, { 3, 4 } };
 | |
|   int *c[2] = { &a[1][1], &b[2][2] };
 | |
|   int *d[2][2] = { {&a[1][1], &b[2][2]}, {&a[0][0], &b[1][1]} };
 | |
|   int *e[3][3] = { {&a[1][1], &b[2][2]}, {&a[0][0], &b[1][1]} };
 | |
|   char ext[3][3] = {".Y",".U",".V"};
 | |
| }
 | |
| 
 | |
| typedef void (* F)(void);
 | |
| extern void foo(void);
 | |
| struct S { F f; };
 | |
| void f3() {
 | |
|   struct S a[1] = { { foo } };
 | |
| }
 | |
| 
 | |
| // Constants
 | |
| // CHECK: @g3 = constant i32 10
 | |
| // CHECK: @f4.g4 = internal constant i32 12
 | |
| const int g3 = 10;
 | |
| int f4() {
 | |
|   static const int g4 = 12;
 | |
|   return g4;
 | |
| }
 | |
| 
 | |
| // PR6537
 | |
| typedef union vec3 {
 | |
|   struct { double x, y, z; };
 | |
|   double component[3];
 | |
| } vec3;
 | |
| vec3 f5(vec3 value) {
 | |
|   return (vec3) {{
 | |
|     .x = value.x
 | |
|   }};
 | |
| }
 | |
| 
 | |
| // rdar://problem/8154689
 | |
| void f6() {
 | |
|   int x;
 | |
|   long ids[] = { (long) &x };  
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| // CHECK: @test7 = global{{.*}}{ i32 0, [4 x i8] c"bar\00" }
 | |
| // PR8217
 | |
| struct a7 {
 | |
|   int  b;
 | |
|   char v[];
 | |
| };
 | |
| 
 | |
| struct a7 test7 = { .b = 0, .v = "bar" };
 | |
| 
 | |
| 
 | |
| // PR279 comment #3
 | |
| char test8(int X) {
 | |
|   char str[100000] = "abc"; // tail should be memset.
 | |
|   return str[X];
 | |
| // CHECK: @test8(
 | |
| // CHECK: call void @llvm.memset
 | |
| // CHECK: store i8 97
 | |
| // CHECK: store i8 98
 | |
| // CHECK: store i8 99
 | |
| }
 | |
| 
 | |
| void bar(void*);
 | |
| 
 | |
| // PR279
 | |
| int test9(int X) {
 | |
|   int Arr[100] = { X };     // Should use memset
 | |
|   bar(Arr);
 | |
| // CHECK: @test9
 | |
| // CHECK: call void @llvm.memset
 | |
| // CHECK-NOT: store i32 0
 | |
| // CHECK: call void @bar
 | |
| }
 | |
| 
 | |
| struct a {
 | |
|   int a, b, c, d, e, f, g, h, i, j, k, *p;
 | |
| };
 | |
| 
 | |
| struct b {
 | |
|   struct a a,b,c,d,e,f,g;
 | |
| };
 | |
| 
 | |
| int test10(int X) {
 | |
|   struct b S = { .a.a = X, .d.e = X, .f.e = 0, .f.f = 0, .f.p = 0 };
 | |
|   bar(&S);
 | |
| 
 | |
|   // CHECK: @test10
 | |
|   // CHECK: call void @llvm.memset
 | |
|   // CHECK-NOT: store i32 0
 | |
|   // CHECK: call void @bar
 | |
| }
 | |
| 
 | |
| 
 | |
| // PR9257
 | |
| struct test11S {
 | |
|   int A[10];
 | |
| };
 | |
| void test11(struct test11S *P) {
 | |
|   *P = (struct test11S) { .A = { [0 ... 3] = 4 } };
 | |
|   // CHECK: @test11
 | |
|   // CHECK: store i32 4
 | |
|   // CHECK: store i32 4
 | |
|   // CHECK: store i32 4
 | |
|   // CHECK: store i32 4
 | |
|   // CHECK: ret void
 | |
| }
 |