Skip to content

Commit a81247d

Browse files
committed
test assignable arrays
1 parent b24aed9 commit a81247d

File tree

3 files changed

+159
-0
lines changed

3 files changed

+159
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump %s | FileCheck %s
2+
3+
// CHECK-LABEL: arr_assign1
4+
// CHECK: CompoundStmt 0x{{[0-9a-f]+}} {{.*}}
5+
// CHECK: DeclStmt 0x{{[0-9a-f]+}} {{.*}}
6+
// CHECK: VarDecl [[A:0x[0-9a-f]+]] {{.*}} col:7 used Arr 'int[2]' cinit
7+
// CHECK: InitListExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2]'
8+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 0
9+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 1
10+
// CHECK: DeclStmt 0x{{[0-9a-f]+}} {{.*}}
11+
// CHECK: VarDecl [[B:0x[0-9a-f]+]] {{.*}} col:7 used Arr2 'int[2]' cinit
12+
// CHECK: InitListExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2]'
13+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 0
14+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 0
15+
// CHECK: BinaryOperator 0x{{[0-9a-f]+}} {{.*}} 'int[2]' lvalue '='
16+
// CHECK: DeclRefExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2]' lvalue Var [[A]] 'Arr' 'int[2]'
17+
// CHECK: DeclRefExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2]' lvalue Var [[B]] 'Arr2' 'int[2]'
18+
void arr_assign1() {
19+
int Arr[2] = {0, 1};
20+
int Arr2[2] = {0, 0};
21+
Arr = Arr2;
22+
}
23+
24+
// CHECK-LABEL: arr_assign2
25+
// CHECK: CompoundStmt 0x{{[0-9a-f]+}} {{.*}}
26+
// CHECK: DeclStmt 0x{{[0-9a-f]+}} {{.*}}
27+
// CHECK: VarDecl [[A:0x[0-9a-f]+]] {{.*}} col:7 used Arr 'int[2]' cinit
28+
// CHECK: InitListExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2]'
29+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 0
30+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 1
31+
// CHECK: DeclStmt 0x{{[0-9a-f]+}} {{.*}}
32+
// CHECK: VarDecl [[B:0x[0-9a-f]+]] {{.*}} col:7 used Arr2 'int[2]' cinit
33+
// CHECK: InitListExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2]'
34+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 0
35+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 0
36+
// CHECK: DeclStmt 0x{{[0-9a-f]+}} {{.*}}
37+
// CHECK: VarDecl [[C:0x[0-9a-f]+]] {{.*}} col:7 used Arr3 'int[2]' cinit
38+
// CHECK: InitListExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2]'
39+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 2
40+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 2
41+
// CHECK: BinaryOperator 0x{{[0-9a-f]+}} {{.*}} 'int[2]' lvalue '='
42+
// CHECK: DeclRefExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2]' lvalue Var [[A]] 'Arr' 'int[2]'
43+
// CHECK: BinaryOperator 0x{{[0-9a-f]+}} {{.*}} 'int[2]' lvalue '='
44+
// CHECK: DeclRefExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2]' lvalue Var [[B]] 'Arr2' 'int[2]'
45+
// CHECK: DeclRefExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2]' lvalue Var [[C]] 'Arr3' 'int[2]'
46+
void arr_assign2() {
47+
int Arr[2] = {0, 1};
48+
int Arr2[2] = {0, 0};
49+
int Arr3[2] = {2, 2};
50+
Arr = Arr2 = Arr3;
51+
}
52+
53+
// CHECK-LABEL: arr_assign3
54+
// CHECK: CompoundStmt 0x{{[0-9a-f]+}} {{.*}}
55+
// CHECK: DeclStmt 0x{{[0-9a-f]+}} {{.*}}
56+
// CHECK: VarDecl [[A:0x[0-9a-f]+]] {{.*}} col:7 used Arr 'int[2][2]' cinit
57+
// CHECK: InitListExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2][2]'
58+
// CHECK: InitListExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2]'
59+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 0
60+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 1
61+
// CHECK: InitListExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2]'
62+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 2
63+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 3
64+
// CHECK: DeclStmt 0x{{[0-9a-f]+}} {{.*}}
65+
// CHECK: VarDecl [[B:0x[0-9a-f]+]] {{.*}} col:7 used Arr2 'int[2][2]' cinit
66+
// CHECK: InitListExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2][2]'
67+
// CHECK: InitListExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2]'
68+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 0
69+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 0
70+
// CHECK: InitListExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2]'
71+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 1
72+
// CHECK: IntegerLiteral 0x{{[0-9a-f]+}} {{.*}} 'int' 1
73+
// CHECK: BinaryOperator 0x{{[0-9a-f]+}} {{.*}} 'int[2][2]' lvalue '='
74+
// CHECK: DeclRefExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2][2]' lvalue Var [[A]] 'Arr' 'int[2][2]'
75+
// CHECK: DeclRefExpr 0x{{[0-9a-f]+}} {{.*}} 'int[2][2]' lvalue Var [[B]] 'Arr2' 'int[2][2]'
76+
void arr_assign3() {
77+
int Arr[2][2] = {{0, 1}, {2, 3}};
78+
int Arr2[2][2] = {{0, 0}, {1, 1}};
79+
Arr = Arr2;
80+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -emit-llvm -disable-llvm-passes -o - %s | FileCheck %s --enable-var-scope
2+
3+
// CHECK-LABEL: define void {{.*}}arr_assign1
4+
// CHECK: [[Arr:%.*]] = alloca [2 x i32], align 4
5+
// CHECK: [[Arr2:%.*]] = alloca [2 x i32], align 4
6+
// CHECK: [[Tmp:%.*]] = alloca [2 x i32], align 4
7+
// CHECK: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Arr]], ptr align 4 {{@.*}}, i32 8, i1 false)
8+
// CHECK: call void @llvm.memset.p0.i32(ptr align 4 [[Arr2]], i8 0, i32 8, i1 false)
9+
// CHECK: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Arr]], ptr align 4 [[Arr2]], i32 8, i1 false)
10+
// CHECK: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Tmp]], ptr align 4 [[Arr]], i32 8, i1 false)
11+
// CHECK: ret void
12+
void arr_assign1() {
13+
int Arr[2] = {0, 1};
14+
int Arr2[2] = {0, 0};
15+
Arr = Arr2;
16+
}
17+
18+
// CHECK-LABEL: define void {{.*}}arr_assign2
19+
// CHECK: [[Arr:%.*]] = alloca [2 x i32], align 4
20+
// CHECK: [[Arr2:%.*]] = alloca [2 x i32], align 4
21+
// CHECK: [[Arr3:%.*]] = alloca [2 x i32], align 4
22+
// CHECK: [[Tmp:%.*]] = alloca [2 x i32], align 4
23+
// CHECK: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Arr]], ptr align 4 {{@.*}}, i32 8, i1 false)
24+
// CHECK: call void @llvm.memset.p0.i32(ptr align 4 [[Arr2]], i8 0, i32 8, i1 false)
25+
// CHECK: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Arr3]], ptr align 4 {{@.*}}, i32 8, i1 false)
26+
// CHECK: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Arr2]], ptr align 4 [[Arr3]], i32 8, i1 false)
27+
// CHECK: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Arr]], ptr align 4 [[Arr2]], i32 8, i1 false)
28+
// CHECK: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Tmp]], ptr align 4 [[Arr]], i32 8, i1 false)
29+
// CHECK: ret void
30+
void arr_assign2() {
31+
int Arr[2] = {0, 1};
32+
int Arr2[2] = {0, 0};
33+
int Arr3[2] = {3, 4};
34+
Arr = Arr2 = Arr3;
35+
}
36+
37+
// CHECK-LABEL: define void {{.*}}arr_assign3
38+
// CHECK: [[Arr3:%.*]] = alloca [2 x [2 x i32]], align 4
39+
// CHECK: [[Arr4:%.*]] = alloca [2 x [2 x i32]], align 4
40+
// CHECK: [[Tmp:%.*]] = alloca [2 x [2 x i32]], align 4
41+
// CHECK: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Arr3]], ptr align 4 {{@.*}}, i32 16, i1 false)
42+
// CHECK: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Arr4]], ptr align 4 {{@.*}}, i32 16, i1 false)
43+
// CHECK: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Arr3]], ptr align 4 [[Arr4]], i32 16, i1 false)
44+
// CHECK: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Tmp]], ptr align 4 [[Arr3]], i32 16, i1 false)
45+
// CHECK: ret void
46+
void arr_assign3() {
47+
int Arr2[2][2] = {{0, 0}, {1, 1}};
48+
int Arr3[2][2] = {{1, 1}, {0, 0}};
49+
Arr2 = Arr3;
50+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// RUN: %clang_cc1 -finclude-default-header -triple dxil-pc-shadermodel6.6-library %s -verify
2+
3+
void test_wrong_size1() {
4+
int Arr[2] = {0, 1};
5+
int Arr2[3] = {1, 2, 0};
6+
Arr = Arr2;
7+
// expected-error@-1 {{assigning to 'int[2]' from incompatible type 'int[3]'}}
8+
}
9+
10+
void test_wrong_size2() {
11+
int Arr[2] = {0, 1};
12+
int Arr2[3] = {1, 2, 0};
13+
Arr2 = Arr;
14+
// expected-error@-1 {{assigning to 'int[3]' from incompatible type 'int[2]'}}
15+
}
16+
17+
void test_wrong_size3() {
18+
int Arr[2][2] = {{0, 1}, {2, 3}};
19+
int Arr2[2] = {4, 5};
20+
Arr = Arr2;
21+
// expected-error@-1 {{assigning to 'int[2][2]' from incompatible type 'int[2]'}}
22+
}
23+
24+
void test_wrong_size4() {
25+
int Arr[2][2] = {{0, 1}, {2, 3}};
26+
int Arr2[2] = {4, 5};
27+
Arr2 = Arr;
28+
// expected-error@-1 {{assigning to 'int[2]' from incompatible type 'int[2][2]'}}
29+
}

0 commit comments

Comments
 (0)