Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ba4da72

Browse files
committed
C++: Add examples that require longer access paths
1 parent 430194b commit ba4da72

8 files changed

Lines changed: 128 additions & 0 deletions

cpp/ql/test/library-tests/dataflow/fields/aliasing.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,4 +204,32 @@ void deep_member_field_arrow(S2 *ps2) {
204204
void deep_member_field_arrow_different_fields(S2 *ps2) {
205205
taint_a_ptr(&ps2->s.m1);
206206
sink(ps2->s.m2);
207+
}
208+
209+
void test_deep_struct_fields() {
210+
S2 s2;
211+
s2.s.m1 = user_input();
212+
S s = s2.s;
213+
sink(s.m1); // $ ast MISSING: ir
214+
}
215+
216+
void test_deep_struct_fields_no_flow() {
217+
S2 s2;
218+
s2.s.m1 = user_input();
219+
S s = s2.s;
220+
sink(s.m2);
221+
}
222+
223+
void test_deep_struct_fields_taint_through_call() {
224+
S2 s2;
225+
taint_a_ptr(&s2.s.m1);
226+
S s = s2.s;
227+
sink(s.m1); // $ ast MISSING: ir
228+
}
229+
230+
void test_deep_struct_fields_taint_through_call_no_flow() {
231+
S2 s2;
232+
taint_a_ptr(&s2.s.m1);
233+
S s = s2.s;
234+
sink(s.m2);
207235
}

cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ postWithInFlow
8989
| aliasing.cpp:194:21:194:22 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. |
9090
| aliasing.cpp:200:23:200:24 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. |
9191
| aliasing.cpp:205:23:205:24 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. |
92+
| aliasing.cpp:211:8:211:9 | m1 [post update] | PostUpdateNode should not be the target of local flow. |
93+
| aliasing.cpp:218:8:218:9 | m1 [post update] | PostUpdateNode should not be the target of local flow. |
94+
| aliasing.cpp:225:21:225:22 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. |
95+
| aliasing.cpp:232:21:232:22 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. |
9296
| arrays.cpp:6:3:6:5 | arr [inner post update] | PostUpdateNode should not be the target of local flow. |
9397
| arrays.cpp:6:3:6:8 | access to array [post update] | PostUpdateNode should not be the target of local flow. |
9498
| arrays.cpp:15:3:15:10 | * ... [post update] | PostUpdateNode should not be the target of local flow. |
@@ -145,5 +149,6 @@ postWithInFlow
145149
| simple.cpp:65:7:65:7 | i [post update] | PostUpdateNode should not be the target of local flow. |
146150
| simple.cpp:83:12:83:13 | f1 [post update] | PostUpdateNode should not be the target of local flow. |
147151
| simple.cpp:92:7:92:7 | i [post update] | PostUpdateNode should not be the target of local flow. |
152+
| simple.cpp:104:9:104:9 | i [post update] | PostUpdateNode should not be the target of local flow. |
148153
| struct_init.c:24:11:24:12 | ab [inner post update] | PostUpdateNode should not be the target of local flow. |
149154
| struct_init.c:36:17:36:24 | nestedAB [inner post update] | PostUpdateNode should not be the target of local flow. |

cpp/ql/test/library-tests/dataflow/fields/dataflow-ir-consistency.expected

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ postIsNotPre
1818
postHasUniquePre
1919
| simple.cpp:65:5:65:22 | Store | PostUpdateNode should have one pre-update node but has 0. |
2020
| simple.cpp:92:5:92:22 | Store | PostUpdateNode should have one pre-update node but has 0. |
21+
| simple.cpp:104:5:104:24 | Store | PostUpdateNode should have one pre-update node but has 0. |
2122
uniquePostUpdate
2223
postIsInSameCallable
2324
reverseRead
@@ -96,6 +97,10 @@ postWithInFlow
9697
| aliasing.cpp:194:15:194:22 | Chi | PostUpdateNode should not be the target of local flow. |
9798
| aliasing.cpp:200:15:200:24 | Chi | PostUpdateNode should not be the target of local flow. |
9899
| aliasing.cpp:205:15:205:24 | Chi | PostUpdateNode should not be the target of local flow. |
100+
| aliasing.cpp:211:3:211:24 | Chi | PostUpdateNode should not be the target of local flow. |
101+
| aliasing.cpp:218:3:218:24 | Chi | PostUpdateNode should not be the target of local flow. |
102+
| aliasing.cpp:225:15:225:22 | Chi | PostUpdateNode should not be the target of local flow. |
103+
| aliasing.cpp:232:15:232:22 | Chi | PostUpdateNode should not be the target of local flow. |
99104
| arrays.cpp:5:18:5:23 | Chi | PostUpdateNode should not be the target of local flow. |
100105
| arrays.cpp:5:21:5:21 | Chi | PostUpdateNode should not be the target of local flow. |
101106
| arrays.cpp:6:3:6:23 | Chi | PostUpdateNode should not be the target of local flow. |
@@ -145,6 +150,7 @@ postWithInFlow
145150
| simple.cpp:65:5:65:22 | Store | PostUpdateNode should not be the target of local flow. |
146151
| simple.cpp:83:9:83:28 | Chi | PostUpdateNode should not be the target of local flow. |
147152
| simple.cpp:92:5:92:22 | Store | PostUpdateNode should not be the target of local flow. |
153+
| simple.cpp:104:5:104:24 | Store | PostUpdateNode should not be the target of local flow. |
148154
| struct_init.c:20:20:20:29 | Chi | PostUpdateNode should not be the target of local flow. |
149155
| struct_init.c:20:34:20:34 | Chi | PostUpdateNode should not be the target of local flow. |
150156
| struct_init.c:27:7:27:16 | Chi | PostUpdateNode should not be the target of local flow. |

cpp/ql/test/library-tests/dataflow/fields/partial-definition-diff.expected

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,14 @@
183183
| aliasing.cpp:200:16:200:18 | ps2 | AST only |
184184
| aliasing.cpp:205:15:205:24 | & ... | AST only |
185185
| aliasing.cpp:205:16:205:18 | ps2 | AST only |
186+
| aliasing.cpp:211:3:211:4 | s2 | AST only |
187+
| aliasing.cpp:211:8:211:9 | m1 | AST only |
188+
| aliasing.cpp:218:3:218:4 | s2 | AST only |
189+
| aliasing.cpp:218:8:218:9 | m1 | AST only |
190+
| aliasing.cpp:225:15:225:22 | & ... | AST only |
191+
| aliasing.cpp:225:16:225:17 | s2 | AST only |
192+
| aliasing.cpp:232:15:232:22 | & ... | AST only |
193+
| aliasing.cpp:232:16:232:17 | s2 | AST only |
186194
| arrays.cpp:6:3:6:8 | access to array | AST only |
187195
| arrays.cpp:6:3:6:23 | arr | IR only |
188196
| arrays.cpp:15:3:15:10 | * ... | AST only |
@@ -399,6 +407,8 @@
399407
| simple.cpp:83:12:83:13 | f1 | AST only |
400408
| simple.cpp:84:14:84:20 | this | AST only |
401409
| simple.cpp:92:7:92:7 | i | AST only |
410+
| simple.cpp:104:5:104:5 | b | AST only |
411+
| simple.cpp:104:9:104:9 | i | AST only |
402412
| struct_init.c:15:8:15:9 | ab | AST only |
403413
| struct_init.c:15:12:15:12 | a | AST only |
404414
| struct_init.c:16:8:16:9 | ab | AST only |

cpp/ql/test/library-tests/dataflow/fields/partial-definition-ir.expected

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@
3535
| aliasing.cpp:194:19:194:19 | s |
3636
| aliasing.cpp:200:21:200:21 | s |
3737
| aliasing.cpp:205:21:205:21 | s |
38+
| aliasing.cpp:211:6:211:6 | s |
39+
| aliasing.cpp:218:6:218:6 | s |
40+
| aliasing.cpp:225:19:225:19 | s |
41+
| aliasing.cpp:232:19:232:19 | s |
3842
| arrays.cpp:6:3:6:5 | arr |
3943
| arrays.cpp:36:3:36:17 | access to array |
4044
| by_reference.cpp:12:5:12:5 | s |
@@ -68,4 +72,5 @@
6872
| simple.cpp:65:5:65:5 | a |
6973
| simple.cpp:83:9:83:10 | f2 |
7074
| simple.cpp:92:5:92:5 | a |
75+
| simple.cpp:104:7:104:7 | a |
7176
| struct_init.c:36:11:36:15 | outer |

cpp/ql/test/library-tests/dataflow/fields/partial-definition.expected

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,18 @@
220220
| aliasing.cpp:205:15:205:24 | & ... |
221221
| aliasing.cpp:205:16:205:18 | ps2 |
222222
| aliasing.cpp:205:21:205:21 | s |
223+
| aliasing.cpp:211:3:211:4 | s2 |
224+
| aliasing.cpp:211:6:211:6 | s |
225+
| aliasing.cpp:211:8:211:9 | m1 |
226+
| aliasing.cpp:218:3:218:4 | s2 |
227+
| aliasing.cpp:218:6:218:6 | s |
228+
| aliasing.cpp:218:8:218:9 | m1 |
229+
| aliasing.cpp:225:15:225:22 | & ... |
230+
| aliasing.cpp:225:16:225:17 | s2 |
231+
| aliasing.cpp:225:19:225:19 | s |
232+
| aliasing.cpp:232:15:232:22 | & ... |
233+
| aliasing.cpp:232:16:232:17 | s2 |
234+
| aliasing.cpp:232:19:232:19 | s |
223235
| arrays.cpp:6:3:6:8 | access to array |
224236
| arrays.cpp:15:3:15:10 | * ... |
225237
| arrays.cpp:36:3:36:3 | o |
@@ -467,6 +479,9 @@
467479
| simple.cpp:84:14:84:20 | this |
468480
| simple.cpp:92:5:92:5 | a |
469481
| simple.cpp:92:7:92:7 | i |
482+
| simple.cpp:104:5:104:5 | b |
483+
| simple.cpp:104:7:104:7 | a |
484+
| simple.cpp:104:9:104:9 | i |
470485
| struct_init.c:15:8:15:9 | ab |
471486
| struct_init.c:15:12:15:12 | a |
472487
| struct_init.c:16:8:16:9 | ab |

cpp/ql/test/library-tests/dataflow/fields/path-flow.expected

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ edges
160160
| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:175:15:175:22 | ref arg & ... |
161161
| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:187:15:187:22 | ref arg & ... |
162162
| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:200:15:200:24 | ref arg & ... |
163+
| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:225:15:225:22 | ref arg & ... |
163164
| aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:106:4:106:5 | pa [inner post update] |
164165
| aliasing.cpp:158:15:158:15 | s [post update] [data] | aliasing.cpp:159:9:159:9 | s [data] |
165166
| aliasing.cpp:158:17:158:20 | ref arg data | aliasing.cpp:158:15:158:15 | s [post update] [data] |
@@ -187,6 +188,20 @@ edges
187188
| aliasing.cpp:200:23:200:24 | m1 [inner post update] | aliasing.cpp:200:21:200:21 | s [post update] [m1] |
188189
| aliasing.cpp:201:8:201:10 | ps2 [s, m1] | aliasing.cpp:201:13:201:13 | s [m1] |
189190
| aliasing.cpp:201:13:201:13 | s [m1] | aliasing.cpp:201:15:201:16 | m1 |
191+
| aliasing.cpp:211:3:211:4 | s2 [post update] [s, m1] | aliasing.cpp:212:9:212:10 | s2 [s, m1] |
192+
| aliasing.cpp:211:3:211:24 | ... = ... | aliasing.cpp:211:6:211:6 | s [post update] [m1] |
193+
| aliasing.cpp:211:6:211:6 | s [post update] [m1] | aliasing.cpp:211:3:211:4 | s2 [post update] [s, m1] |
194+
| aliasing.cpp:211:13:211:22 | call to user_input | aliasing.cpp:211:3:211:24 | ... = ... |
195+
| aliasing.cpp:212:9:212:10 | s2 [s, m1] | aliasing.cpp:212:12:212:12 | s [m1] |
196+
| aliasing.cpp:212:12:212:12 | s [m1] | aliasing.cpp:213:8:213:8 | s [m1] |
197+
| aliasing.cpp:213:8:213:8 | s [m1] | aliasing.cpp:213:10:213:11 | m1 |
198+
| aliasing.cpp:225:15:225:22 | ref arg & ... | aliasing.cpp:225:21:225:22 | m1 [inner post update] |
199+
| aliasing.cpp:225:16:225:17 | s2 [post update] [s, m1] | aliasing.cpp:226:9:226:10 | s2 [s, m1] |
200+
| aliasing.cpp:225:19:225:19 | s [post update] [m1] | aliasing.cpp:225:16:225:17 | s2 [post update] [s, m1] |
201+
| aliasing.cpp:225:21:225:22 | m1 [inner post update] | aliasing.cpp:225:19:225:19 | s [post update] [m1] |
202+
| aliasing.cpp:226:9:226:10 | s2 [s, m1] | aliasing.cpp:226:12:226:12 | s [m1] |
203+
| aliasing.cpp:226:12:226:12 | s [m1] | aliasing.cpp:227:8:227:8 | s [m1] |
204+
| aliasing.cpp:227:8:227:8 | s [m1] | aliasing.cpp:227:10:227:11 | m1 |
190205
| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:7:8:7:13 | access to array |
191206
| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:8:8:8:13 | access to array |
192207
| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:9:8:9:11 | * ... |
@@ -428,6 +443,12 @@ edges
428443
| simple.cpp:92:5:92:22 | ... = ... | simple.cpp:92:5:92:5 | a [post update] [i] |
429444
| simple.cpp:92:11:92:20 | call to user_input | simple.cpp:92:5:92:22 | ... = ... |
430445
| simple.cpp:94:10:94:11 | a2 [i] | simple.cpp:94:13:94:13 | i |
446+
| simple.cpp:104:5:104:5 | b [post update] [a, i] | simple.cpp:106:10:106:11 | b2 [a, i] |
447+
| simple.cpp:104:5:104:24 | ... = ... | simple.cpp:104:7:104:7 | a [post update] [i] |
448+
| simple.cpp:104:7:104:7 | a [post update] [i] | simple.cpp:104:5:104:5 | b [post update] [a, i] |
449+
| simple.cpp:104:13:104:22 | call to user_input | simple.cpp:104:5:104:24 | ... = ... |
450+
| simple.cpp:106:10:106:11 | b2 [a, i] | simple.cpp:106:13:106:13 | a [i] |
451+
| simple.cpp:106:13:106:13 | a [i] | simple.cpp:106:15:106:15 | i |
431452
| struct_init.c:14:24:14:25 | ab [a] | struct_init.c:15:8:15:9 | ab [a] |
432453
| struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a |
433454
| struct_init.c:20:17:20:36 | {...} [a] | struct_init.c:22:8:22:9 | ab [a] |
@@ -668,6 +689,22 @@ nodes
668689
| aliasing.cpp:201:8:201:10 | ps2 [s, m1] | semmle.label | ps2 [s, m1] |
669690
| aliasing.cpp:201:13:201:13 | s [m1] | semmle.label | s [m1] |
670691
| aliasing.cpp:201:15:201:16 | m1 | semmle.label | m1 |
692+
| aliasing.cpp:211:3:211:4 | s2 [post update] [s, m1] | semmle.label | s2 [post update] [s, m1] |
693+
| aliasing.cpp:211:3:211:24 | ... = ... | semmle.label | ... = ... |
694+
| aliasing.cpp:211:6:211:6 | s [post update] [m1] | semmle.label | s [post update] [m1] |
695+
| aliasing.cpp:211:13:211:22 | call to user_input | semmle.label | call to user_input |
696+
| aliasing.cpp:212:9:212:10 | s2 [s, m1] | semmle.label | s2 [s, m1] |
697+
| aliasing.cpp:212:12:212:12 | s [m1] | semmle.label | s [m1] |
698+
| aliasing.cpp:213:8:213:8 | s [m1] | semmle.label | s [m1] |
699+
| aliasing.cpp:213:10:213:11 | m1 | semmle.label | m1 |
700+
| aliasing.cpp:225:15:225:22 | ref arg & ... | semmle.label | ref arg & ... |
701+
| aliasing.cpp:225:16:225:17 | s2 [post update] [s, m1] | semmle.label | s2 [post update] [s, m1] |
702+
| aliasing.cpp:225:19:225:19 | s [post update] [m1] | semmle.label | s [post update] [m1] |
703+
| aliasing.cpp:225:21:225:22 | m1 [inner post update] | semmle.label | m1 [inner post update] |
704+
| aliasing.cpp:226:9:226:10 | s2 [s, m1] | semmle.label | s2 [s, m1] |
705+
| aliasing.cpp:226:12:226:12 | s [m1] | semmle.label | s [m1] |
706+
| aliasing.cpp:227:8:227:8 | s [m1] | semmle.label | s [m1] |
707+
| aliasing.cpp:227:10:227:11 | m1 | semmle.label | m1 |
671708
| arrays.cpp:6:12:6:21 | call to user_input | semmle.label | call to user_input |
672709
| arrays.cpp:7:8:7:13 | access to array | semmle.label | access to array |
673710
| arrays.cpp:8:8:8:13 | access to array | semmle.label | access to array |
@@ -933,6 +970,13 @@ nodes
933970
| simple.cpp:92:11:92:20 | call to user_input | semmle.label | call to user_input |
934971
| simple.cpp:94:10:94:11 | a2 [i] | semmle.label | a2 [i] |
935972
| simple.cpp:94:13:94:13 | i | semmle.label | i |
973+
| simple.cpp:104:5:104:5 | b [post update] [a, i] | semmle.label | b [post update] [a, i] |
974+
| simple.cpp:104:5:104:24 | ... = ... | semmle.label | ... = ... |
975+
| simple.cpp:104:7:104:7 | a [post update] [i] | semmle.label | a [post update] [i] |
976+
| simple.cpp:104:13:104:22 | call to user_input | semmle.label | call to user_input |
977+
| simple.cpp:106:10:106:11 | b2 [a, i] | semmle.label | b2 [a, i] |
978+
| simple.cpp:106:13:106:13 | a [i] | semmle.label | a [i] |
979+
| simple.cpp:106:15:106:15 | i | semmle.label | i |
936980
| struct_init.c:14:24:14:25 | ab [a] | semmle.label | ab [a] |
937981
| struct_init.c:15:8:15:9 | ab [a] | semmle.label | ab [a] |
938982
| struct_init.c:15:12:15:12 | a | semmle.label | a |
@@ -998,6 +1042,8 @@ nodes
9981042
| aliasing.cpp:176:13:176:14 | m1 | aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:176:13:176:14 | m1 | m1 flows from $@ | aliasing.cpp:106:9:106:18 | call to user_input | call to user_input |
9991043
| aliasing.cpp:189:15:189:16 | m1 | aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:189:15:189:16 | m1 | m1 flows from $@ | aliasing.cpp:106:9:106:18 | call to user_input | call to user_input |
10001044
| aliasing.cpp:201:15:201:16 | m1 | aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:201:15:201:16 | m1 | m1 flows from $@ | aliasing.cpp:106:9:106:18 | call to user_input | call to user_input |
1045+
| aliasing.cpp:213:10:213:11 | m1 | aliasing.cpp:211:13:211:22 | call to user_input | aliasing.cpp:213:10:213:11 | m1 | m1 flows from $@ | aliasing.cpp:211:13:211:22 | call to user_input | call to user_input |
1046+
| aliasing.cpp:227:10:227:11 | m1 | aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:227:10:227:11 | m1 | m1 flows from $@ | aliasing.cpp:106:9:106:18 | call to user_input | call to user_input |
10011047
| arrays.cpp:7:8:7:13 | access to array | arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:7:8:7:13 | access to array | access to array flows from $@ | arrays.cpp:6:12:6:21 | call to user_input | call to user_input |
10021048
| arrays.cpp:8:8:8:13 | access to array | arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:8:8:8:13 | access to array | access to array flows from $@ | arrays.cpp:6:12:6:21 | call to user_input | call to user_input |
10031049
| arrays.cpp:9:8:9:11 | * ... | arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:9:8:9:11 | * ... | * ... flows from $@ | arrays.cpp:6:12:6:21 | call to user_input | call to user_input |
@@ -1046,6 +1092,7 @@ nodes
10461092
| simple.cpp:67:13:67:13 | i | simple.cpp:65:11:65:20 | call to user_input | simple.cpp:67:13:67:13 | i | i flows from $@ | simple.cpp:65:11:65:20 | call to user_input | call to user_input |
10471093
| simple.cpp:84:14:84:20 | call to getf2f1 | simple.cpp:83:17:83:26 | call to user_input | simple.cpp:84:14:84:20 | call to getf2f1 | call to getf2f1 flows from $@ | simple.cpp:83:17:83:26 | call to user_input | call to user_input |
10481094
| simple.cpp:94:13:94:13 | i | simple.cpp:92:11:92:20 | call to user_input | simple.cpp:94:13:94:13 | i | i flows from $@ | simple.cpp:92:11:92:20 | call to user_input | call to user_input |
1095+
| simple.cpp:106:15:106:15 | i | simple.cpp:104:13:104:22 | call to user_input | simple.cpp:106:15:106:15 | i | i flows from $@ | simple.cpp:104:13:104:22 | call to user_input | call to user_input |
10491096
| struct_init.c:15:12:15:12 | a | struct_init.c:20:20:20:29 | call to user_input | struct_init.c:15:12:15:12 | a | a flows from $@ | struct_init.c:20:20:20:29 | call to user_input | call to user_input |
10501097
| struct_init.c:15:12:15:12 | a | struct_init.c:27:7:27:16 | call to user_input | struct_init.c:15:12:15:12 | a | a flows from $@ | struct_init.c:27:7:27:16 | call to user_input | call to user_input |
10511098
| struct_init.c:15:12:15:12 | a | struct_init.c:40:20:40:29 | call to user_input | struct_init.c:15:12:15:12 | a | a flows from $@ | struct_init.c:40:20:40:29 | call to user_input | call to user_input |

cpp/ql/test/library-tests/dataflow/fields/simple.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,16 @@ void single_field_test_typedef(A_typedef a)
9494
sink(a2.i); //$ ast,ir
9595
}
9696

97+
struct B {
98+
A a;
99+
};
100+
101+
void single_field_test_depth_2()
102+
{
103+
B b;
104+
b.a.i = user_input();
105+
B b2 = b;
106+
sink(b2.a.i); //$ ast MISSING: ir
107+
}
108+
97109
} // namespace Simple

0 commit comments

Comments
 (0)