C++: expand test for aggregate literals to include more nesting

This commit is contained in:
Nick Rolfe
2018-08-29 17:10:03 +01:00
committed by Nick Rolfe
parent 4abdeda857
commit afa7505cae
6 changed files with 123 additions and 16 deletions

View File

@@ -1,7 +1,7 @@
struct someStruct {
int i;
int j;
};
struct someStruct {
int i;
int j;
};
struct someOtherStruct {
int a;
@@ -13,27 +13,90 @@ union someUnion {
double d;
};
void f(int x, int y) {
struct someStruct sInit1 = {
.i = x + x,
.j = y - y,
};
void f(int x, int y) {
struct someStruct sInit1 = {
.i = x + x,
.j = y - y,
};
struct someStruct sInit2 = { x + x, y - y };
struct someStruct sInit2 = { x + x, y - y };
struct someStruct ss[] = {{x + x, y - y}, {x * x, y / y}};
struct someStruct ss[] = {{x + x, y - y}, {x * x, y / y}};
struct someStruct sInit3 = { x };
// struct someStruct sInit4 = { .j = y }; Currently fails. Initializes 'i' with 'y' as well.
struct someStruct sInit4 = { .j = y };
int aInit1[2] = { x, y };
int aInit2[2] = { x };
// int aInit3[2] = { [1] = y }; Currently fails. Initializes [0] with 'y' as well.
int aInit3[2] = { [1] = y };
union someUnion uInit1 = { x };
// union someUnion uInit2 = { .n = x }; Currently fails. Initializes .d with 'x' as well.
// union someUnion uInit3 = { .d = 5.0 }; Currently fails. Initializes .n with '5.0' as well.
union someUnion uInit2 = { .n = x };
union someUnion uInit3 = { .d = 5.0 };
}
struct complexStruct {
struct someStruct sss[3];
int as[3];
struct someOtherStruct soss[3];
int z;
};
void g(int x, int y) {
// Nested aggregate designated initializers
struct complexStruct complexInit1 = {
.as = {
[2] = x,
[0] = y,
x+y // as[1]
},
.z = 42,
.soss = {
[1] = {
.a = x+y,
.b = x-y
},
[0] = {
.b = x*y,
.a = x/y
}
// soss[2] is value initializaed
}
// sss is value initialized
};
// Nested aggregate non-designated initializers
struct complexStruct complexInit2 = {
{ // sss
{ // sss[0]
x, // sss[0].i
y // sss[0].j
},
{ // sss[1]
x+1, // sss[1].i
// sss[1].j is value initialized
}
// ss[2] is value initialized
},
{ // as
99, // as[0]
x*y // as[1]
// as[2] is value initialized
},
{ // soss
{ // soss[0]
123, // soss[0].a
y+1 // soss[0].b
},
{ // soss[1]
x, // soss[1].a
// soss[1].b is value initialized
}
// soss[2] is value initialized
}
// z is value initialized
};
}

View File

@@ -22,7 +22,7 @@ union UnionWithMethods {
void Init(int x, int y, int z) {
StructWithBitfields s1 = { x, y, z };
StructWithBitfields s2 = { x, y }; // s2.c is value initialized
StructWithBitfields s3 = {}; // s3 is value initialized
UnionWithMethods u1 = { x };
UnionWithMethods u2 = {};
}

View File

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

View File

@@ -1 +1,6 @@
| aggregate_literals.c:32:20:32:25 | {...} | file://:0:0:0:0 | int[2] | 1 |
| aggregate_literals.c:34:20:34:31 | {...} | file://:0:0:0:0 | int[2] | 0 |
| aggregate_literals.c:57:13:67:5 | {...} | file://:0:0:0:0 | someOtherStruct[3] | 2 |
| aggregate_literals.c:73:5:83:5 | {...} | file://:0:0:0:0 | someStruct[3] | 2 |
| aggregate_literals.c:84:5:88:5 | {...} | file://:0:0:0:0 | int[3] | 2 |
| aggregate_literals.c:89:5:99:5 | {...} | file://:0:0:0:0 | someOtherStruct[3] | 2 |

View File

@@ -7,7 +7,26 @@
| 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 | ... * ... |
| 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 | ... / ... |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 | {...} |
| 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 | {...} |
| 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 |
| 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 | ... + ... |
| 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 | ... - ... |
| 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 | ... / ... |
| 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 | ... * ... |
| 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 | {...} |
| 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 | {...} |
| 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 | {...} |
| 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 |
| 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 |
| 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 | ... + ... |
| 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 |
| 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 | ... + ... |
| 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 |
| 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 |
| 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 |
| 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 |

View File

@@ -1,3 +1,11 @@
| aggregate_literals.c:26:31:26:36 | {...} | aggregate_literals.c:1:8:1:17 | someStruct | aggregate_literals.c:3:9:3:9 | j |
| aggregate_literals.c:28:31:28:41 | {...} | aggregate_literals.c:1:8:1:17 | someStruct | aggregate_literals.c:2:9:2:9 | i |
| aggregate_literals.c:50:38:69:3 | {...} | aggregate_literals.c:41:8:41:20 | complexStruct | aggregate_literals.c:42:23:42:25 | sss |
| aggregate_literals.c:72:38:101:3 | {...} | aggregate_literals.c:41:8:41:20 | complexStruct | aggregate_literals.c:45:9:45:9 | z |
| aggregate_literals.c:78:7:81:7 | {...} | aggregate_literals.c:1:8:1:17 | someStruct | aggregate_literals.c:3:9:3:9 | j |
| aggregate_literals.c:94:7:97:7 | {...} | aggregate_literals.c:6:8:6:22 | someOtherStruct | aggregate_literals.c:8:9:8:9 | b |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |