Skip to content

Commit 12d5a30

Browse files
committed
Rust: Add a test of mutable iterators as well.
1 parent 8024fb6 commit 12d5a30

File tree

3 files changed

+63
-41
lines changed

3 files changed

+63
-41
lines changed

rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -673,25 +673,28 @@ localStep
673673
| main.rs:484:25:484:25 | ... | main.rs:484:25:484:25 | x | |
674674
| main.rs:484:25:484:25 | [SSA] x | main.rs:484:34:484:34 | x | |
675675
| main.rs:484:25:484:25 | x | main.rs:484:25:484:25 | [SSA] x | |
676-
| main.rs:486:5:488:5 | for ... in ... { ... } | main.rs:464:16:489:1 | { ... } | |
677676
| main.rs:486:9:486:9 | [SSA] v | main.rs:487:14:487:14 | v | |
678677
| main.rs:486:9:486:9 | v | main.rs:486:9:486:9 | [SSA] v | |
679-
| main.rs:492:9:492:9 | [SSA] a | main.rs:497:10:497:10 | a | |
680-
| main.rs:492:9:492:9 | a | main.rs:492:9:492:9 | [SSA] a | |
681-
| main.rs:492:13:492:22 | source(...) | main.rs:492:9:492:9 | a | |
682-
| main.rs:493:9:493:9 | [SSA] b | main.rs:498:15:498:15 | b | |
683-
| main.rs:493:9:493:9 | b | main.rs:493:9:493:9 | [SSA] b | |
684-
| main.rs:493:13:493:22 | source(...) | main.rs:493:9:493:9 | b | |
685-
| main.rs:494:9:494:9 | [SSA] c | main.rs:495:18:495:18 | c | |
686-
| main.rs:494:9:494:9 | c | main.rs:494:9:494:9 | [SSA] c | |
687-
| main.rs:494:13:494:22 | source(...) | main.rs:494:9:494:9 | c | |
688-
| main.rs:495:9:495:13 | [SSA] c_ref | main.rs:499:14:499:18 | c_ref | |
689-
| main.rs:495:9:495:13 | c_ref | main.rs:495:9:495:13 | [SSA] c_ref | |
690-
| main.rs:495:17:495:18 | &c | main.rs:495:9:495:13 | c_ref | |
691-
| main.rs:499:14:499:18 | [post] c_ref | main.rs:500:11:500:15 | c_ref | |
692-
| main.rs:499:14:499:18 | c_ref | main.rs:500:11:500:15 | c_ref | |
693-
| main.rs:526:13:526:33 | result_questionmark(...) | main.rs:526:9:526:9 | _ | |
694-
| main.rs:538:36:538:41 | ...::new(...) | main.rs:538:36:538:41 | MacroExpr | |
678+
| main.rs:490:22:490:42 | [...] | main.rs:490:9:490:18 | mut vs_mut | |
679+
| main.rs:496:5:498:5 | for ... in ... { ... } | main.rs:464:16:499:1 | { ... } | |
680+
| main.rs:496:14:496:14 | [SSA] v | main.rs:497:14:497:14 | v | |
681+
| main.rs:496:14:496:14 | v | main.rs:496:14:496:14 | [SSA] v | |
682+
| main.rs:502:9:502:9 | [SSA] a | main.rs:507:10:507:10 | a | |
683+
| main.rs:502:9:502:9 | a | main.rs:502:9:502:9 | [SSA] a | |
684+
| main.rs:502:13:502:22 | source(...) | main.rs:502:9:502:9 | a | |
685+
| main.rs:503:9:503:9 | [SSA] b | main.rs:508:15:508:15 | b | |
686+
| main.rs:503:9:503:9 | b | main.rs:503:9:503:9 | [SSA] b | |
687+
| main.rs:503:13:503:22 | source(...) | main.rs:503:9:503:9 | b | |
688+
| main.rs:504:9:504:9 | [SSA] c | main.rs:505:18:505:18 | c | |
689+
| main.rs:504:9:504:9 | c | main.rs:504:9:504:9 | [SSA] c | |
690+
| main.rs:504:13:504:22 | source(...) | main.rs:504:9:504:9 | c | |
691+
| main.rs:505:9:505:13 | [SSA] c_ref | main.rs:509:14:509:18 | c_ref | |
692+
| main.rs:505:9:505:13 | c_ref | main.rs:505:9:505:13 | [SSA] c_ref | |
693+
| main.rs:505:17:505:18 | &c | main.rs:505:9:505:13 | c_ref | |
694+
| main.rs:509:14:509:18 | [post] c_ref | main.rs:510:11:510:15 | c_ref | |
695+
| main.rs:509:14:509:18 | c_ref | main.rs:510:11:510:15 | c_ref | |
696+
| main.rs:536:13:536:33 | result_questionmark(...) | main.rs:536:9:536:9 | _ | |
697+
| main.rs:548:36:548:41 | ...::new(...) | main.rs:548:36:548:41 | MacroExpr | |
695698
models
696699
| 1 | Sink: lang:std; crate::io::stdio::_print; log-injection; Argument[0] |
697700
| 2 | Summary: lang:core; <crate::option::Option as crate::clone::Clone>::clone; Argument[self].Field[crate::option::Option::Some(0)]; ReturnValue.Field[crate::option::Option::Some(0)]; value |
@@ -911,9 +914,13 @@ storeStep
911914
| main.rs:465:27:465:27 | 2 | element | main.rs:465:14:465:34 | [...] |
912915
| main.rs:465:30:465:30 | 3 | element | main.rs:465:14:465:34 | [...] |
913916
| main.rs:465:33:465:33 | 4 | element | main.rs:465:14:465:34 | [...] |
914-
| main.rs:495:18:495:18 | c | &ref | main.rs:495:17:495:18 | &c |
915-
| main.rs:498:15:498:15 | b | &ref | main.rs:498:14:498:15 | &b |
916-
| main.rs:507:27:507:27 | 0 | Some | main.rs:507:22:507:28 | Some(...) |
917+
| main.rs:490:23:490:32 | source(...) | element | main.rs:490:22:490:42 | [...] |
918+
| main.rs:490:35:490:35 | 2 | element | main.rs:490:22:490:42 | [...] |
919+
| main.rs:490:38:490:38 | 3 | element | main.rs:490:22:490:42 | [...] |
920+
| main.rs:490:41:490:41 | 4 | element | main.rs:490:22:490:42 | [...] |
921+
| main.rs:505:18:505:18 | c | &ref | main.rs:505:17:505:18 | &c |
922+
| main.rs:508:15:508:15 | b | &ref | main.rs:508:14:508:15 | &b |
923+
| main.rs:517:27:517:27 | 0 | Some | main.rs:517:22:517:28 | Some(...) |
917924
readStep
918925
| file://:0:0:0:0 | [summary param] 0 in lang:core::_::<crate::option::Option as crate::convert::From>::from | &ref | file://:0:0:0:0 | [summary] read: Argument[0].Reference in lang:core::_::<crate::option::Option as crate::convert::From>::from |
919926
| file://:0:0:0:0 | [summary param] 0 in lang:core::_::<crate::option::Option>::and_then | function return | file://:0:0:0:0 | [summary] read: Argument[0].ReturnValue in lang:core::_::<crate::option::Option>::and_then |
@@ -1085,4 +1092,9 @@ readStep
10851092
| main.rs:483:29:483:29 | x | &ref | main.rs:483:28:483:29 | * ... |
10861093
| main.rs:484:34:484:34 | x | &ref | main.rs:484:33:484:34 | * ... |
10871094
| main.rs:486:14:486:27 | vs.into_iter(...) | element | main.rs:486:9:486:9 | v |
1088-
| main.rs:500:11:500:15 | c_ref | &ref | main.rs:500:10:500:15 | * ... |
1095+
| main.rs:492:10:492:15 | vs_mut | element | main.rs:492:10:492:18 | vs_mut[0] |
1096+
| main.rs:493:11:493:39 | ... .unwrap(...) | &ref | main.rs:493:10:493:39 | * ... |
1097+
| main.rs:494:11:494:39 | ... .unwrap(...) | &ref | main.rs:494:10:494:39 | * ... |
1098+
| main.rs:496:9:496:14 | &mut ... | &ref | main.rs:496:14:496:14 | v |
1099+
| main.rs:496:19:496:35 | vs_mut.iter_mut(...) | element | main.rs:496:9:496:14 | &mut ... |
1100+
| main.rs:510:11:510:15 | c_ref | &ref | main.rs:510:10:510:15 | * ... |

rust/ql/test/library-tests/dataflow/local/inline-flow.expected

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -196,14 +196,14 @@ edges
196196
| main.rs:467:10:467:11 | vs [element] | main.rs:467:10:467:14 | vs[0] | provenance | |
197197
| main.rs:471:9:471:9 | v | main.rs:472:14:472:14 | v | provenance | |
198198
| main.rs:471:14:471:15 | vs [element] | main.rs:471:9:471:9 | v | provenance | |
199-
| main.rs:492:9:492:9 | a | main.rs:497:10:497:10 | a | provenance | |
200-
| main.rs:492:13:492:22 | source(...) | main.rs:492:9:492:9 | a | provenance | |
201-
| main.rs:494:9:494:9 | c | main.rs:495:18:495:18 | c | provenance | |
202-
| main.rs:494:13:494:22 | source(...) | main.rs:494:9:494:9 | c | provenance | |
203-
| main.rs:495:9:495:13 | c_ref [&ref] | main.rs:500:11:500:15 | c_ref [&ref] | provenance | |
204-
| main.rs:495:17:495:18 | &c [&ref] | main.rs:495:9:495:13 | c_ref [&ref] | provenance | |
205-
| main.rs:495:18:495:18 | c | main.rs:495:17:495:18 | &c [&ref] | provenance | |
206-
| main.rs:500:11:500:15 | c_ref [&ref] | main.rs:500:10:500:15 | * ... | provenance | |
199+
| main.rs:502:9:502:9 | a | main.rs:507:10:507:10 | a | provenance | |
200+
| main.rs:502:13:502:22 | source(...) | main.rs:502:9:502:9 | a | provenance | |
201+
| main.rs:504:9:504:9 | c | main.rs:505:18:505:18 | c | provenance | |
202+
| main.rs:504:13:504:22 | source(...) | main.rs:504:9:504:9 | c | provenance | |
203+
| main.rs:505:9:505:13 | c_ref [&ref] | main.rs:510:11:510:15 | c_ref [&ref] | provenance | |
204+
| main.rs:505:17:505:18 | &c [&ref] | main.rs:505:9:505:13 | c_ref [&ref] | provenance | |
205+
| main.rs:505:18:505:18 | c | main.rs:505:17:505:18 | &c [&ref] | provenance | |
206+
| main.rs:510:11:510:15 | c_ref [&ref] | main.rs:510:10:510:15 | * ... | provenance | |
207207
nodes
208208
| main.rs:18:10:18:18 | source(...) | semmle.label | source(...) |
209209
| main.rs:22:9:22:9 | s | semmle.label | s |
@@ -431,16 +431,16 @@ nodes
431431
| main.rs:471:9:471:9 | v | semmle.label | v |
432432
| main.rs:471:14:471:15 | vs [element] | semmle.label | vs [element] |
433433
| main.rs:472:14:472:14 | v | semmle.label | v |
434-
| main.rs:492:9:492:9 | a | semmle.label | a |
435-
| main.rs:492:13:492:22 | source(...) | semmle.label | source(...) |
436-
| main.rs:494:9:494:9 | c | semmle.label | c |
437-
| main.rs:494:13:494:22 | source(...) | semmle.label | source(...) |
438-
| main.rs:495:9:495:13 | c_ref [&ref] | semmle.label | c_ref [&ref] |
439-
| main.rs:495:17:495:18 | &c [&ref] | semmle.label | &c [&ref] |
440-
| main.rs:495:18:495:18 | c | semmle.label | c |
441-
| main.rs:497:10:497:10 | a | semmle.label | a |
442-
| main.rs:500:10:500:15 | * ... | semmle.label | * ... |
443-
| main.rs:500:11:500:15 | c_ref [&ref] | semmle.label | c_ref [&ref] |
434+
| main.rs:502:9:502:9 | a | semmle.label | a |
435+
| main.rs:502:13:502:22 | source(...) | semmle.label | source(...) |
436+
| main.rs:504:9:504:9 | c | semmle.label | c |
437+
| main.rs:504:13:504:22 | source(...) | semmle.label | source(...) |
438+
| main.rs:505:9:505:13 | c_ref [&ref] | semmle.label | c_ref [&ref] |
439+
| main.rs:505:17:505:18 | &c [&ref] | semmle.label | &c [&ref] |
440+
| main.rs:505:18:505:18 | c | semmle.label | c |
441+
| main.rs:507:10:507:10 | a | semmle.label | a |
442+
| main.rs:510:10:510:15 | * ... | semmle.label | * ... |
443+
| main.rs:510:11:510:15 | c_ref [&ref] | semmle.label | c_ref [&ref] |
444444
subpaths
445445
testFailures
446446
#select
@@ -489,5 +489,5 @@ testFailures
489489
| main.rs:458:10:458:10 | a | main.rs:453:13:453:22 | source(...) | main.rs:458:10:458:10 | a | $@ | main.rs:453:13:453:22 | source(...) | source(...) |
490490
| main.rs:467:10:467:14 | vs[0] | main.rs:465:15:465:24 | source(...) | main.rs:467:10:467:14 | vs[0] | $@ | main.rs:465:15:465:24 | source(...) | source(...) |
491491
| main.rs:472:14:472:14 | v | main.rs:465:15:465:24 | source(...) | main.rs:472:14:472:14 | v | $@ | main.rs:465:15:465:24 | source(...) | source(...) |
492-
| main.rs:497:10:497:10 | a | main.rs:492:13:492:22 | source(...) | main.rs:497:10:497:10 | a | $@ | main.rs:492:13:492:22 | source(...) | source(...) |
493-
| main.rs:500:10:500:15 | * ... | main.rs:494:13:494:22 | source(...) | main.rs:500:10:500:15 | * ... | $@ | main.rs:494:13:494:22 | source(...) | source(...) |
492+
| main.rs:507:10:507:10 | a | main.rs:502:13:502:22 | source(...) | main.rs:507:10:507:10 | a | $@ | main.rs:502:13:502:22 | source(...) | source(...) |
493+
| main.rs:510:10:510:15 | * ... | main.rs:504:13:504:22 | source(...) | main.rs:510:10:510:15 | * ... | $@ | main.rs:504:13:504:22 | source(...) | source(...) |

rust/ql/test/library-tests/dataflow/local/main.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,16 @@ fn iterators() {
486486
for v in vs.into_iter() {
487487
sink(v); // $ MISSING: hasValueFlow=91
488488
}
489+
490+
let mut vs_mut = [source(92), 2, 3, 4];
491+
492+
sink(vs_mut[0]); // $ MISSING: hasValueFlow=92
493+
sink(*vs_mut.iter().next().unwrap()); // $ MISSING: hasValueFlow=92
494+
sink(*vs_mut.iter().nth(0).unwrap()); // $ MISSING: hasValueFlow=92
495+
496+
for &mut v in vs_mut.iter_mut() {
497+
sink(v); // $ MISSING: hasValueFlow=92
498+
}
489499
}
490500

491501
fn references() {

0 commit comments

Comments
 (0)