Rust: Add a test of mutable iterators as well.

This commit is contained in:
Geoffrey White
2025-02-18 17:09:28 +00:00
parent 8024fb6812
commit 12d5a30703
3 changed files with 63 additions and 41 deletions

View File

@@ -673,25 +673,28 @@ localStep
| main.rs:484:25:484:25 | ... | main.rs:484:25:484:25 | x | |
| main.rs:484:25:484:25 | [SSA] x | main.rs:484:34:484:34 | x | |
| main.rs:484:25:484:25 | x | main.rs:484:25:484:25 | [SSA] x | |
| main.rs:486:5:488:5 | for ... in ... { ... } | main.rs:464:16:489:1 | { ... } | |
| main.rs:486:9:486:9 | [SSA] v | main.rs:487:14:487:14 | v | |
| main.rs:486:9:486:9 | v | main.rs:486:9:486:9 | [SSA] v | |
| main.rs:492:9:492:9 | [SSA] a | main.rs:497:10:497:10 | a | |
| main.rs:492:9:492:9 | a | main.rs:492:9:492:9 | [SSA] a | |
| main.rs:492:13:492:22 | source(...) | main.rs:492:9:492:9 | a | |
| main.rs:493:9:493:9 | [SSA] b | main.rs:498:15:498:15 | b | |
| main.rs:493:9:493:9 | b | main.rs:493:9:493:9 | [SSA] b | |
| main.rs:493:13:493:22 | source(...) | main.rs:493:9:493:9 | b | |
| main.rs:494:9:494:9 | [SSA] c | main.rs:495:18:495:18 | c | |
| main.rs:494:9:494:9 | c | main.rs:494:9:494:9 | [SSA] c | |
| main.rs:494:13:494:22 | source(...) | main.rs:494:9:494:9 | c | |
| main.rs:495:9:495:13 | [SSA] c_ref | main.rs:499:14:499:18 | c_ref | |
| main.rs:495:9:495:13 | c_ref | main.rs:495:9:495:13 | [SSA] c_ref | |
| main.rs:495:17:495:18 | &c | main.rs:495:9:495:13 | c_ref | |
| main.rs:499:14:499:18 | [post] c_ref | main.rs:500:11:500:15 | c_ref | |
| main.rs:499:14:499:18 | c_ref | main.rs:500:11:500:15 | c_ref | |
| main.rs:526:13:526:33 | result_questionmark(...) | main.rs:526:9:526:9 | _ | |
| main.rs:538:36:538:41 | ...::new(...) | main.rs:538:36:538:41 | MacroExpr | |
| main.rs:490:22:490:42 | [...] | main.rs:490:9:490:18 | mut vs_mut | |
| main.rs:496:5:498:5 | for ... in ... { ... } | main.rs:464:16:499:1 | { ... } | |
| main.rs:496:14:496:14 | [SSA] v | main.rs:497:14:497:14 | v | |
| main.rs:496:14:496:14 | v | main.rs:496:14:496:14 | [SSA] v | |
| main.rs:502:9:502:9 | [SSA] a | main.rs:507:10:507:10 | a | |
| main.rs:502:9:502:9 | a | main.rs:502:9:502:9 | [SSA] a | |
| main.rs:502:13:502:22 | source(...) | main.rs:502:9:502:9 | a | |
| main.rs:503:9:503:9 | [SSA] b | main.rs:508:15:508:15 | b | |
| main.rs:503:9:503:9 | b | main.rs:503:9:503:9 | [SSA] b | |
| main.rs:503:13:503:22 | source(...) | main.rs:503:9:503:9 | b | |
| main.rs:504:9:504:9 | [SSA] c | main.rs:505:18:505:18 | c | |
| main.rs:504:9:504:9 | c | main.rs:504:9:504:9 | [SSA] c | |
| main.rs:504:13:504:22 | source(...) | main.rs:504:9:504:9 | c | |
| main.rs:505:9:505:13 | [SSA] c_ref | main.rs:509:14:509:18 | c_ref | |
| main.rs:505:9:505:13 | c_ref | main.rs:505:9:505:13 | [SSA] c_ref | |
| main.rs:505:17:505:18 | &c | main.rs:505:9:505:13 | c_ref | |
| main.rs:509:14:509:18 | [post] c_ref | main.rs:510:11:510:15 | c_ref | |
| main.rs:509:14:509:18 | c_ref | main.rs:510:11:510:15 | c_ref | |
| main.rs:536:13:536:33 | result_questionmark(...) | main.rs:536:9:536:9 | _ | |
| main.rs:548:36:548:41 | ...::new(...) | main.rs:548:36:548:41 | MacroExpr | |
models
| 1 | Sink: lang:std; crate::io::stdio::_print; log-injection; Argument[0] |
| 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
| main.rs:465:27:465:27 | 2 | element | main.rs:465:14:465:34 | [...] |
| main.rs:465:30:465:30 | 3 | element | main.rs:465:14:465:34 | [...] |
| main.rs:465:33:465:33 | 4 | element | main.rs:465:14:465:34 | [...] |
| main.rs:495:18:495:18 | c | &ref | main.rs:495:17:495:18 | &c |
| main.rs:498:15:498:15 | b | &ref | main.rs:498:14:498:15 | &b |
| main.rs:507:27:507:27 | 0 | Some | main.rs:507:22:507:28 | Some(...) |
| main.rs:490:23:490:32 | source(...) | element | main.rs:490:22:490:42 | [...] |
| main.rs:490:35:490:35 | 2 | element | main.rs:490:22:490:42 | [...] |
| main.rs:490:38:490:38 | 3 | element | main.rs:490:22:490:42 | [...] |
| main.rs:490:41:490:41 | 4 | element | main.rs:490:22:490:42 | [...] |
| main.rs:505:18:505:18 | c | &ref | main.rs:505:17:505:18 | &c |
| main.rs:508:15:508:15 | b | &ref | main.rs:508:14:508:15 | &b |
| main.rs:517:27:517:27 | 0 | Some | main.rs:517:22:517:28 | Some(...) |
readStep
| 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 |
| 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
| main.rs:483:29:483:29 | x | &ref | main.rs:483:28:483:29 | * ... |
| main.rs:484:34:484:34 | x | &ref | main.rs:484:33:484:34 | * ... |
| main.rs:486:14:486:27 | vs.into_iter(...) | element | main.rs:486:9:486:9 | v |
| main.rs:500:11:500:15 | c_ref | &ref | main.rs:500:10:500:15 | * ... |
| main.rs:492:10:492:15 | vs_mut | element | main.rs:492:10:492:18 | vs_mut[0] |
| main.rs:493:11:493:39 | ... .unwrap(...) | &ref | main.rs:493:10:493:39 | * ... |
| main.rs:494:11:494:39 | ... .unwrap(...) | &ref | main.rs:494:10:494:39 | * ... |
| main.rs:496:9:496:14 | &mut ... | &ref | main.rs:496:14:496:14 | v |
| main.rs:496:19:496:35 | vs_mut.iter_mut(...) | element | main.rs:496:9:496:14 | &mut ... |
| main.rs:510:11:510:15 | c_ref | &ref | main.rs:510:10:510:15 | * ... |

View File

@@ -196,14 +196,14 @@ edges
| main.rs:467:10:467:11 | vs [element] | main.rs:467:10:467:14 | vs[0] | provenance | |
| main.rs:471:9:471:9 | v | main.rs:472:14:472:14 | v | provenance | |
| main.rs:471:14:471:15 | vs [element] | main.rs:471:9:471:9 | v | provenance | |
| main.rs:492:9:492:9 | a | main.rs:497:10:497:10 | a | provenance | |
| main.rs:492:13:492:22 | source(...) | main.rs:492:9:492:9 | a | provenance | |
| main.rs:494:9:494:9 | c | main.rs:495:18:495:18 | c | provenance | |
| main.rs:494:13:494:22 | source(...) | main.rs:494:9:494:9 | c | provenance | |
| main.rs:495:9:495:13 | c_ref [&ref] | main.rs:500:11:500:15 | c_ref [&ref] | provenance | |
| main.rs:495:17:495:18 | &c [&ref] | main.rs:495:9:495:13 | c_ref [&ref] | provenance | |
| main.rs:495:18:495:18 | c | main.rs:495:17:495:18 | &c [&ref] | provenance | |
| main.rs:500:11:500:15 | c_ref [&ref] | main.rs:500:10:500:15 | * ... | provenance | |
| main.rs:502:9:502:9 | a | main.rs:507:10:507:10 | a | provenance | |
| main.rs:502:13:502:22 | source(...) | main.rs:502:9:502:9 | a | provenance | |
| main.rs:504:9:504:9 | c | main.rs:505:18:505:18 | c | provenance | |
| main.rs:504:13:504:22 | source(...) | main.rs:504:9:504:9 | c | provenance | |
| main.rs:505:9:505:13 | c_ref [&ref] | main.rs:510:11:510:15 | c_ref [&ref] | provenance | |
| main.rs:505:17:505:18 | &c [&ref] | main.rs:505:9:505:13 | c_ref [&ref] | provenance | |
| main.rs:505:18:505:18 | c | main.rs:505:17:505:18 | &c [&ref] | provenance | |
| main.rs:510:11:510:15 | c_ref [&ref] | main.rs:510:10:510:15 | * ... | provenance | |
nodes
| main.rs:18:10:18:18 | source(...) | semmle.label | source(...) |
| main.rs:22:9:22:9 | s | semmle.label | s |
@@ -431,16 +431,16 @@ nodes
| main.rs:471:9:471:9 | v | semmle.label | v |
| main.rs:471:14:471:15 | vs [element] | semmle.label | vs [element] |
| main.rs:472:14:472:14 | v | semmle.label | v |
| main.rs:492:9:492:9 | a | semmle.label | a |
| main.rs:492:13:492:22 | source(...) | semmle.label | source(...) |
| main.rs:494:9:494:9 | c | semmle.label | c |
| main.rs:494:13:494:22 | source(...) | semmle.label | source(...) |
| main.rs:495:9:495:13 | c_ref [&ref] | semmle.label | c_ref [&ref] |
| main.rs:495:17:495:18 | &c [&ref] | semmle.label | &c [&ref] |
| main.rs:495:18:495:18 | c | semmle.label | c |
| main.rs:497:10:497:10 | a | semmle.label | a |
| main.rs:500:10:500:15 | * ... | semmle.label | * ... |
| main.rs:500:11:500:15 | c_ref [&ref] | semmle.label | c_ref [&ref] |
| main.rs:502:9:502:9 | a | semmle.label | a |
| main.rs:502:13:502:22 | source(...) | semmle.label | source(...) |
| main.rs:504:9:504:9 | c | semmle.label | c |
| main.rs:504:13:504:22 | source(...) | semmle.label | source(...) |
| main.rs:505:9:505:13 | c_ref [&ref] | semmle.label | c_ref [&ref] |
| main.rs:505:17:505:18 | &c [&ref] | semmle.label | &c [&ref] |
| main.rs:505:18:505:18 | c | semmle.label | c |
| main.rs:507:10:507:10 | a | semmle.label | a |
| main.rs:510:10:510:15 | * ... | semmle.label | * ... |
| main.rs:510:11:510:15 | c_ref [&ref] | semmle.label | c_ref [&ref] |
subpaths
testFailures
#select
@@ -489,5 +489,5 @@ testFailures
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |

View File

@@ -486,6 +486,16 @@ fn iterators() {
for v in vs.into_iter() {
sink(v); // $ MISSING: hasValueFlow=91
}
let mut vs_mut = [source(92), 2, 3, 4];
sink(vs_mut[0]); // $ MISSING: hasValueFlow=92
sink(*vs_mut.iter().next().unwrap()); // $ MISSING: hasValueFlow=92
sink(*vs_mut.iter().nth(0).unwrap()); // $ MISSING: hasValueFlow=92
for &mut v in vs_mut.iter_mut() {
sink(v); // $ MISSING: hasValueFlow=92
}
}
fn references() {