Skip to content

Commit afa7505

Browse files
committed
C++: expand test for aggregate literals to include more nesting
1 parent 4abdeda commit afa7505

File tree

6 files changed

+123
-16
lines changed

6 files changed

+123
-16
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
struct someStruct {
2-
int i;
3-
int j;
4-
};
1+
struct someStruct {
2+
int i;
3+
int j;
4+
};
55

66
struct someOtherStruct {
77
int a;
@@ -13,27 +13,90 @@ union someUnion {
1313
double d;
1414
};
1515

16-
void f(int x, int y) {
17-
struct someStruct sInit1 = {
18-
.i = x + x,
19-
.j = y - y,
20-
};
16+
void f(int x, int y) {
17+
struct someStruct sInit1 = {
18+
.i = x + x,
19+
.j = y - y,
20+
};
2121

22-
struct someStruct sInit2 = { x + x, y - y };
22+
struct someStruct sInit2 = { x + x, y - y };
2323

24-
struct someStruct ss[] = {{x + x, y - y}, {x * x, y / y}};
24+
struct someStruct ss[] = {{x + x, y - y}, {x * x, y / y}};
2525

2626
struct someStruct sInit3 = { x };
2727

28-
// struct someStruct sInit4 = { .j = y }; Currently fails. Initializes 'i' with 'y' as well.
28+
struct someStruct sInit4 = { .j = y };
2929

3030
int aInit1[2] = { x, y };
3131

3232
int aInit2[2] = { x };
3333

34-
// int aInit3[2] = { [1] = y }; Currently fails. Initializes [0] with 'y' as well.
34+
int aInit3[2] = { [1] = y };
3535

3636
union someUnion uInit1 = { x };
37-
// union someUnion uInit2 = { .n = x }; Currently fails. Initializes .d with 'x' as well.
38-
// union someUnion uInit3 = { .d = 5.0 }; Currently fails. Initializes .n with '5.0' as well.
37+
union someUnion uInit2 = { .n = x };
38+
union someUnion uInit3 = { .d = 5.0 };
39+
}
40+
41+
struct complexStruct {
42+
struct someStruct sss[3];
43+
int as[3];
44+
struct someOtherStruct soss[3];
45+
int z;
46+
};
47+
48+
void g(int x, int y) {
49+
// Nested aggregate designated initializers
50+
struct complexStruct complexInit1 = {
51+
.as = {
52+
[2] = x,
53+
[0] = y,
54+
x+y // as[1]
55+
},
56+
.z = 42,
57+
.soss = {
58+
[1] = {
59+
.a = x+y,
60+
.b = x-y
61+
},
62+
[0] = {
63+
.b = x*y,
64+
.a = x/y
65+
}
66+
// soss[2] is value initializaed
67+
}
68+
// sss is value initialized
69+
};
70+
71+
// Nested aggregate non-designated initializers
72+
struct complexStruct complexInit2 = {
73+
{ // sss
74+
{ // sss[0]
75+
x, // sss[0].i
76+
y // sss[0].j
77+
},
78+
{ // sss[1]
79+
x+1, // sss[1].i
80+
// sss[1].j is value initialized
81+
}
82+
// ss[2] is value initialized
83+
},
84+
{ // as
85+
99, // as[0]
86+
x*y // as[1]
87+
// as[2] is value initialized
88+
},
89+
{ // soss
90+
{ // soss[0]
91+
123, // soss[0].a
92+
y+1 // soss[0].b
93+
},
94+
{ // soss[1]
95+
x, // soss[1].a
96+
// soss[1].b is value initialized
97+
}
98+
// soss[2] is value initialized
99+
}
100+
// z is value initialized
101+
};
39102
}

cpp/ql/test/library-tests/literals/aggregate_literals/aggregate_literals_cpp.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ union UnionWithMethods {
2222
void Init(int x, int y, int z) {
2323
StructWithBitfields s1 = { x, y, z };
2424
StructWithBitfields s2 = { x, y }; // s2.c is value initialized
25-
25+
StructWithBitfields s3 = {}; // s3 is value initialized
2626
UnionWithMethods u1 = { x };
2727
UnionWithMethods u2 = {};
2828
}

cpp/ql/test/library-tests/literals/aggregate_literals/arrays.expected

+12
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,15 @@
33
| aggregate_literals.c:30:20:30:28 | {...} | file://:0:0:0:0 | int[2] | 0 | aggregate_literals.c:30:23:30:23 | x |
44
| aggregate_literals.c:30:20:30:28 | {...} | file://:0:0:0:0 | int[2] | 1 | aggregate_literals.c:30:26:30:26 | y |
55
| aggregate_literals.c:32:20:32:25 | {...} | file://:0:0:0:0 | int[2] | 0 | aggregate_literals.c:32:23:32:23 | x |
6+
| aggregate_literals.c:34:20:34:31 | {...} | file://:0:0:0:0 | int[2] | 1 | aggregate_literals.c:34:29:34:29 | y |
7+
| aggregate_literals.c:51:11:55:5 | {...} | file://:0:0:0:0 | int[3] | 0 | aggregate_literals.c:53:13:53:13 | y |
8+
| aggregate_literals.c:51:11:55:5 | {...} | file://:0:0:0:0 | int[3] | 1 | aggregate_literals.c:54:7:54:9 | ... + ... |
9+
| aggregate_literals.c:51:11:55:5 | {...} | file://:0:0:0:0 | int[3] | 2 | aggregate_literals.c:52:13:52:13 | x |
10+
| aggregate_literals.c:57:13:67:5 | {...} | file://:0:0:0:0 | someOtherStruct[3] | 0 | aggregate_literals.c:62:13:65:7 | {...} |
11+
| aggregate_literals.c:57:13:67:5 | {...} | file://:0:0:0:0 | someOtherStruct[3] | 1 | aggregate_literals.c:58:13:61:7 | {...} |
12+
| aggregate_literals.c:73:5:83:5 | {...} | file://:0:0:0:0 | someStruct[3] | 0 | aggregate_literals.c:74:7:77:7 | {...} |
13+
| aggregate_literals.c:73:5:83:5 | {...} | file://:0:0:0:0 | someStruct[3] | 1 | aggregate_literals.c:78:7:81:7 | {...} |
14+
| aggregate_literals.c:84:5:88:5 | {...} | file://:0:0:0:0 | int[3] | 0 | aggregate_literals.c:85:7:85:8 | 99 |
15+
| aggregate_literals.c:84:5:88:5 | {...} | file://:0:0:0:0 | int[3] | 1 | aggregate_literals.c:86:7:86:9 | ... * ... |
16+
| aggregate_literals.c:89:5:99:5 | {...} | file://:0:0:0:0 | someOtherStruct[3] | 0 | aggregate_literals.c:90:7:93:7 | {...} |
17+
| aggregate_literals.c:89:5:99:5 | {...} | file://:0:0:0:0 | someOtherStruct[3] | 1 | aggregate_literals.c:94:7:97:7 | {...} |
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
11
| aggregate_literals.c:32:20:32:25 | {...} | file://:0:0:0:0 | int[2] | 1 |
2+
| aggregate_literals.c:34:20:34:31 | {...} | file://:0:0:0:0 | int[2] | 0 |
3+
| aggregate_literals.c:57:13:67:5 | {...} | file://:0:0:0:0 | someOtherStruct[3] | 2 |
4+
| aggregate_literals.c:73:5:83:5 | {...} | file://:0:0:0:0 | someStruct[3] | 2 |
5+
| aggregate_literals.c:84:5:88:5 | {...} | file://:0:0:0:0 | int[3] | 2 |
6+
| aggregate_literals.c:89:5:99:5 | {...} | file://:0:0:0:0 | someOtherStruct[3] | 2 |

cpp/ql/test/library-tests/literals/aggregate_literals/classes.expected

+19
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,26 @@
77
| aggregate_literals.c:24:47:24:60 | {...} | aggregate_literals.c:1:8:1:17 | someStruct | aggregate_literals.c:2:9:2:9 | i | aggregate_literals.c:24:48:24:52 | ... * ... |
88
| aggregate_literals.c:24:47:24:60 | {...} | aggregate_literals.c:1:8:1:17 | someStruct | aggregate_literals.c:3:9:3:9 | j | aggregate_literals.c:24:55:24:59 | ... / ... |
99
| aggregate_literals.c:26:31:26:36 | {...} | aggregate_literals.c:1:8:1:17 | someStruct | aggregate_literals.c:2:9:2:9 | i | aggregate_literals.c:26:34:26:34 | x |
10+
| aggregate_literals.c:28:31:28:41 | {...} | aggregate_literals.c:1:8:1:17 | someStruct | aggregate_literals.c:3:9:3:9 | j | aggregate_literals.c:28:39:28:39 | y |
1011
| aggregate_literals.c:36:29:36:34 | {...} | aggregate_literals.c:11:7:11:15 | someUnion | aggregate_literals.c:12:9:12:9 | n | aggregate_literals.c:36:32:36:32 | x |
12+
| aggregate_literals.c:37:29:37:39 | {...} | aggregate_literals.c:11:7:11:15 | someUnion | aggregate_literals.c:12:9:12:9 | n | aggregate_literals.c:37:37:37:37 | x |
13+
| aggregate_literals.c:38:29:38:41 | {...} | aggregate_literals.c:11:7:11:15 | someUnion | aggregate_literals.c:13:12:13:12 | d | aggregate_literals.c:38:37:38:39 | 5.0 |
14+
| aggregate_literals.c:50:38:69:3 | {...} | aggregate_literals.c:41:8:41:20 | complexStruct | aggregate_literals.c:43:9:43:10 | as | aggregate_literals.c:51:11:55:5 | {...} |
15+
| aggregate_literals.c:50:38:69:3 | {...} | aggregate_literals.c:41:8:41:20 | complexStruct | aggregate_literals.c:44:28:44:31 | soss | aggregate_literals.c:57:13:67:5 | {...} |
16+
| aggregate_literals.c:50:38:69:3 | {...} | aggregate_literals.c:41:8:41:20 | complexStruct | aggregate_literals.c:45:9:45:9 | z | aggregate_literals.c:56:10:56:11 | 42 |
17+
| aggregate_literals.c:58:13:61:7 | {...} | aggregate_literals.c:6:8:6:22 | someOtherStruct | aggregate_literals.c:7:9:7:9 | a | aggregate_literals.c:59:14:59:16 | ... + ... |
18+
| aggregate_literals.c:58:13:61:7 | {...} | aggregate_literals.c:6:8:6:22 | someOtherStruct | aggregate_literals.c:8:9:8:9 | b | aggregate_literals.c:60:14:60:16 | ... - ... |
19+
| aggregate_literals.c:62:13:65:7 | {...} | aggregate_literals.c:6:8:6:22 | someOtherStruct | aggregate_literals.c:7:9:7:9 | a | aggregate_literals.c:64:14:64:16 | ... / ... |
20+
| aggregate_literals.c:62:13:65:7 | {...} | aggregate_literals.c:6:8:6:22 | someOtherStruct | aggregate_literals.c:8:9:8:9 | b | aggregate_literals.c:63:14:63:16 | ... * ... |
21+
| aggregate_literals.c:72:38:101:3 | {...} | aggregate_literals.c:41:8:41:20 | complexStruct | aggregate_literals.c:42:23:42:25 | sss | aggregate_literals.c:73:5:83:5 | {...} |
22+
| aggregate_literals.c:72:38:101:3 | {...} | aggregate_literals.c:41:8:41:20 | complexStruct | aggregate_literals.c:43:9:43:10 | as | aggregate_literals.c:84:5:88:5 | {...} |
23+
| aggregate_literals.c:72:38:101:3 | {...} | aggregate_literals.c:41:8:41:20 | complexStruct | aggregate_literals.c:44:28:44:31 | soss | aggregate_literals.c:89:5:99:5 | {...} |
24+
| aggregate_literals.c:74:7:77:7 | {...} | aggregate_literals.c:1:8:1:17 | someStruct | aggregate_literals.c:2:9:2:9 | i | aggregate_literals.c:75:9:75:9 | x |
25+
| aggregate_literals.c:74:7:77:7 | {...} | aggregate_literals.c:1:8:1:17 | someStruct | aggregate_literals.c:3:9:3:9 | j | aggregate_literals.c:76:9:76:9 | y |
26+
| aggregate_literals.c:78:7:81:7 | {...} | aggregate_literals.c:1:8:1:17 | someStruct | aggregate_literals.c:2:9:2:9 | i | aggregate_literals.c:79:9:79:11 | ... + ... |
27+
| aggregate_literals.c:90:7:93:7 | {...} | aggregate_literals.c:6:8:6:22 | someOtherStruct | aggregate_literals.c:7:9:7:9 | a | aggregate_literals.c:91:9:91:11 | 123 |
28+
| aggregate_literals.c:90:7:93:7 | {...} | aggregate_literals.c:6:8:6:22 | someOtherStruct | aggregate_literals.c:8:9:8:9 | b | aggregate_literals.c:92:9:92:11 | ... + ... |
29+
| aggregate_literals.c:94:7:97:7 | {...} | aggregate_literals.c:6:8:6:22 | someOtherStruct | aggregate_literals.c:7:9:7:9 | a | aggregate_literals.c:95:9:95:9 | x |
1130
| aggregate_literals_cpp.cpp:23:29:23:40 | {...} | aggregate_literals_cpp.cpp:1:8:1:26 | StructWithBitfields | aggregate_literals_cpp.cpp:4:18:4:18 | a | aggregate_literals_cpp.cpp:23:32:23:32 | x |
1231
| aggregate_literals_cpp.cpp:23:29:23:40 | {...} | aggregate_literals_cpp.cpp:1:8:1:26 | StructWithBitfields | aggregate_literals_cpp.cpp:8:18:8:18 | b | aggregate_literals_cpp.cpp:23:35:23:35 | y |
1332
| aggregate_literals_cpp.cpp:23:29:23:40 | {...} | aggregate_literals_cpp.cpp:1:8:1:26 | StructWithBitfields | aggregate_literals_cpp.cpp:10:18:10:18 | c | aggregate_literals_cpp.cpp:23:38:23:38 | z |
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
11
| aggregate_literals.c:26:31:26:36 | {...} | aggregate_literals.c:1:8:1:17 | someStruct | aggregate_literals.c:3:9:3:9 | j |
2+
| aggregate_literals.c:28:31:28:41 | {...} | aggregate_literals.c:1:8:1:17 | someStruct | aggregate_literals.c:2:9:2:9 | i |
3+
| aggregate_literals.c:50:38:69:3 | {...} | aggregate_literals.c:41:8:41:20 | complexStruct | aggregate_literals.c:42:23:42:25 | sss |
4+
| aggregate_literals.c:72:38:101:3 | {...} | aggregate_literals.c:41:8:41:20 | complexStruct | aggregate_literals.c:45:9:45:9 | z |
5+
| aggregate_literals.c:78:7:81:7 | {...} | aggregate_literals.c:1:8:1:17 | someStruct | aggregate_literals.c:3:9:3:9 | j |
6+
| aggregate_literals.c:94:7:97:7 | {...} | aggregate_literals.c:6:8:6:22 | someOtherStruct | aggregate_literals.c:8:9:8:9 | b |
27
| aggregate_literals_cpp.cpp:24:29:24:37 | {...} | aggregate_literals_cpp.cpp:1:8:1:26 | StructWithBitfields | aggregate_literals_cpp.cpp:10:18:10:18 | c |
8+
| aggregate_literals_cpp.cpp:25:29:25:31 | {...} | aggregate_literals_cpp.cpp:1:8:1:26 | StructWithBitfields | aggregate_literals_cpp.cpp:4:18:4:18 | a |
9+
| aggregate_literals_cpp.cpp:25:29:25:31 | {...} | aggregate_literals_cpp.cpp:1:8:1:26 | StructWithBitfields | aggregate_literals_cpp.cpp:8:18:8:18 | b |
10+
| aggregate_literals_cpp.cpp:25:29:25:31 | {...} | aggregate_literals_cpp.cpp:1:8:1:26 | StructWithBitfields | aggregate_literals_cpp.cpp:10:18:10:18 | c |
311
| aggregate_literals_cpp.cpp:27:26:27:28 | {...} | aggregate_literals_cpp.cpp:13:7:13:22 | UnionWithMethods | aggregate_literals_cpp.cpp:18:12:18:12 | d |

0 commit comments

Comments
 (0)