From 2d9e1b3d1601e1f18eab063cb72d1c468b62bff8 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 13 Feb 2025 17:39:20 +0000 Subject: [PATCH 1/4] Rust: Add a test of Result.ok and Result.err. --- .../dataflow/local/DataFlowStep.expected | 710 +++++++++--------- .../dataflow/local/inline-flow.expected | 452 +++++------ .../test/library-tests/dataflow/local/main.rs | 15 + 3 files changed, 608 insertions(+), 569 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index f14830bb3d37..d807e5f28545 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -354,269 +354,291 @@ localStep | main.rs:263:9:263:10 | i1 | main.rs:263:9:263:10 | [SSA] i1 | | | main.rs:263:14:263:16 | TryExpr | main.rs:263:9:263:10 | i1 | | | main.rs:266:5:266:11 | Some(...) | main.rs:260:41:267:1 | { ... } | | -| main.rs:270:9:270:10 | [SSA] s1 | main.rs:273:14:273:15 | s1 | | -| main.rs:270:9:270:10 | s1 | main.rs:270:9:270:10 | [SSA] s1 | | -| main.rs:270:32:270:45 | Ok(...) | main.rs:270:9:270:10 | s1 | | -| main.rs:271:9:271:10 | [SSA] s2 | main.rs:274:14:274:15 | s2 | | -| main.rs:271:9:271:10 | s2 | main.rs:271:9:271:10 | [SSA] s2 | | -| main.rs:271:32:271:36 | Ok(...) | main.rs:271:9:271:10 | s2 | | -| main.rs:272:9:272:10 | [SSA] s3 | main.rs:277:14:277:15 | s3 | | -| main.rs:272:9:272:10 | s3 | main.rs:272:9:272:10 | [SSA] s3 | | -| main.rs:272:32:272:46 | Err(...) | main.rs:272:9:272:10 | s3 | | -| main.rs:273:9:273:10 | [SSA] i1 | main.rs:275:10:275:11 | i1 | | -| main.rs:273:9:273:10 | i1 | main.rs:273:9:273:10 | [SSA] i1 | | -| main.rs:273:14:273:16 | TryExpr | main.rs:273:9:273:10 | i1 | | -| main.rs:274:9:274:10 | [SSA] i2 | main.rs:276:10:276:11 | i2 | | -| main.rs:274:9:274:10 | i2 | main.rs:274:9:274:10 | [SSA] i2 | | -| main.rs:274:14:274:16 | TryExpr | main.rs:274:9:274:10 | i2 | | -| main.rs:277:9:277:10 | [SSA] i3 | main.rs:278:10:278:11 | i3 | | -| main.rs:277:9:277:10 | i3 | main.rs:277:9:277:10 | [SSA] i3 | | -| main.rs:277:14:277:16 | TryExpr | main.rs:277:9:277:10 | i3 | | -| main.rs:279:5:279:9 | Ok(...) | main.rs:269:46:280:1 | { ... } | | -| main.rs:283:9:283:10 | [SSA] s1 | main.rs:284:10:284:11 | s1 | | -| main.rs:283:9:283:10 | s1 | main.rs:283:9:283:10 | [SSA] s1 | | -| main.rs:283:32:283:45 | Ok(...) | main.rs:283:9:283:10 | s1 | | -| main.rs:284:10:284:11 | [post] s1 | main.rs:285:10:285:11 | s1 | | -| main.rs:284:10:284:11 | s1 | main.rs:285:10:285:11 | s1 | | -| main.rs:287:9:287:10 | [SSA] s2 | main.rs:288:10:288:11 | s2 | | -| main.rs:287:9:287:10 | s2 | main.rs:287:9:287:10 | [SSA] s2 | | -| main.rs:287:32:287:46 | Err(...) | main.rs:287:9:287:10 | s2 | | -| main.rs:288:10:288:11 | [post] s2 | main.rs:289:10:289:11 | s2 | | -| main.rs:288:10:288:11 | s2 | main.rs:289:10:289:11 | s2 | | -| main.rs:298:9:298:10 | [SSA] s1 | main.rs:300:11:300:12 | s1 | | -| main.rs:298:9:298:10 | s1 | main.rs:298:9:298:10 | [SSA] s1 | | -| main.rs:298:14:298:39 | ...::A(...) | main.rs:298:9:298:10 | s1 | | -| main.rs:299:9:299:10 | [SSA] s2 | main.rs:307:11:307:12 | s2 | | -| main.rs:299:9:299:10 | s2 | main.rs:299:9:299:10 | [SSA] s2 | | -| main.rs:299:14:299:30 | ...::B(...) | main.rs:299:9:299:10 | s2 | | -| main.rs:300:11:300:12 | s1 | main.rs:301:9:301:25 | ...::A(...) | | -| main.rs:300:11:300:12 | s1 | main.rs:302:9:302:25 | ...::B(...) | | -| main.rs:300:11:300:12 | s1 | main.rs:304:11:304:12 | s1 | | -| main.rs:301:24:301:24 | [SSA] n | main.rs:301:35:301:35 | n | | -| main.rs:301:24:301:24 | n | main.rs:301:24:301:24 | [SSA] n | | -| main.rs:301:30:301:36 | sink(...) | main.rs:300:5:303:5 | match s1 { ... } | | -| main.rs:302:24:302:24 | [SSA] n | main.rs:302:35:302:35 | n | | -| main.rs:302:24:302:24 | n | main.rs:302:24:302:24 | [SSA] n | | -| main.rs:302:30:302:36 | sink(...) | main.rs:300:5:303:5 | match s1 { ... } | | -| main.rs:304:11:304:12 | s1 | main.rs:305:9:305:45 | ... \| ... | | -| main.rs:305:9:305:45 | ... \| ... | main.rs:305:9:305:25 | ...::A(...) | | -| main.rs:305:9:305:45 | ... \| ... | main.rs:305:29:305:45 | ...::B(...) | | -| main.rs:305:9:305:45 | [SSA] [match(true)] phi | main.rs:305:55:305:55 | n | | -| main.rs:305:24:305:24 | [SSA] [input] [match(true)] phi | main.rs:305:9:305:45 | [SSA] [match(true)] phi | | -| main.rs:305:24:305:24 | [SSA] n | main.rs:305:24:305:24 | [SSA] [input] [match(true)] phi | | -| main.rs:305:24:305:24 | n | main.rs:305:24:305:24 | [SSA] n | | -| main.rs:305:44:305:44 | [SSA] [input] [match(true)] phi | main.rs:305:9:305:45 | [SSA] [match(true)] phi | | -| main.rs:305:44:305:44 | [SSA] n | main.rs:305:44:305:44 | [SSA] [input] [match(true)] phi | | -| main.rs:305:44:305:44 | n | main.rs:305:44:305:44 | [SSA] n | | -| main.rs:305:50:305:56 | sink(...) | main.rs:304:5:306:5 | match s1 { ... } | | -| main.rs:307:5:310:5 | match s2 { ... } | main.rs:297:48:311:1 | { ... } | | -| main.rs:307:11:307:12 | s2 | main.rs:308:9:308:25 | ...::A(...) | | -| main.rs:307:11:307:12 | s2 | main.rs:309:9:309:25 | ...::B(...) | | -| main.rs:308:24:308:24 | [SSA] n | main.rs:308:35:308:35 | n | | -| main.rs:308:24:308:24 | n | main.rs:308:24:308:24 | [SSA] n | | -| main.rs:308:30:308:36 | sink(...) | main.rs:307:5:310:5 | match s2 { ... } | | -| main.rs:309:24:309:24 | [SSA] n | main.rs:309:35:309:35 | n | | -| main.rs:309:24:309:24 | n | main.rs:309:24:309:24 | [SSA] n | | -| main.rs:309:30:309:36 | sink(...) | main.rs:307:5:310:5 | match s2 { ... } | | -| main.rs:316:9:316:10 | [SSA] s1 | main.rs:318:11:318:12 | s1 | | -| main.rs:316:9:316:10 | s1 | main.rs:316:9:316:10 | [SSA] s1 | | -| main.rs:316:14:316:26 | A(...) | main.rs:316:9:316:10 | s1 | | -| main.rs:317:9:317:10 | [SSA] s2 | main.rs:325:11:325:12 | s2 | | -| main.rs:317:9:317:10 | s2 | main.rs:317:9:317:10 | [SSA] s2 | | -| main.rs:317:14:317:17 | B(...) | main.rs:317:9:317:10 | s2 | | -| main.rs:318:11:318:12 | s1 | main.rs:319:9:319:12 | A(...) | | -| main.rs:318:11:318:12 | s1 | main.rs:320:9:320:12 | B(...) | | -| main.rs:318:11:318:12 | s1 | main.rs:322:11:322:12 | s1 | | -| main.rs:319:11:319:11 | [SSA] n | main.rs:319:22:319:22 | n | | -| main.rs:319:11:319:11 | n | main.rs:319:11:319:11 | [SSA] n | | -| main.rs:319:17:319:23 | sink(...) | main.rs:318:5:321:5 | match s1 { ... } | | -| main.rs:320:11:320:11 | [SSA] n | main.rs:320:22:320:22 | n | | -| main.rs:320:11:320:11 | n | main.rs:320:11:320:11 | [SSA] n | | -| main.rs:320:17:320:23 | sink(...) | main.rs:318:5:321:5 | match s1 { ... } | | -| main.rs:322:11:322:12 | s1 | main.rs:323:9:323:19 | ... \| ... | | -| main.rs:323:9:323:19 | ... \| ... | main.rs:323:9:323:12 | A(...) | | -| main.rs:323:9:323:19 | ... \| ... | main.rs:323:16:323:19 | B(...) | | -| main.rs:323:9:323:19 | [SSA] [match(true)] phi | main.rs:323:29:323:29 | n | | -| main.rs:323:11:323:11 | [SSA] [input] [match(true)] phi | main.rs:323:9:323:19 | [SSA] [match(true)] phi | | -| main.rs:323:11:323:11 | [SSA] n | main.rs:323:11:323:11 | [SSA] [input] [match(true)] phi | | -| main.rs:323:11:323:11 | n | main.rs:323:11:323:11 | [SSA] n | | -| main.rs:323:18:323:18 | [SSA] [input] [match(true)] phi | main.rs:323:9:323:19 | [SSA] [match(true)] phi | | -| main.rs:323:18:323:18 | [SSA] n | main.rs:323:18:323:18 | [SSA] [input] [match(true)] phi | | -| main.rs:323:18:323:18 | n | main.rs:323:18:323:18 | [SSA] n | | -| main.rs:323:24:323:30 | sink(...) | main.rs:322:5:324:5 | match s1 { ... } | | -| main.rs:325:5:328:5 | match s2 { ... } | main.rs:315:50:329:1 | { ... } | | -| main.rs:325:11:325:12 | s2 | main.rs:326:9:326:12 | A(...) | | -| main.rs:325:11:325:12 | s2 | main.rs:327:9:327:12 | B(...) | | -| main.rs:326:11:326:11 | [SSA] n | main.rs:326:22:326:22 | n | | -| main.rs:326:11:326:11 | n | main.rs:326:11:326:11 | [SSA] n | | -| main.rs:326:17:326:23 | sink(...) | main.rs:325:5:328:5 | match s2 { ... } | | -| main.rs:327:11:327:11 | [SSA] n | main.rs:327:22:327:22 | n | | -| main.rs:327:11:327:11 | n | main.rs:327:11:327:11 | [SSA] n | | -| main.rs:327:17:327:23 | sink(...) | main.rs:325:5:328:5 | match s2 { ... } | | -| main.rs:337:9:337:10 | [SSA] s1 | main.rs:341:11:341:12 | s1 | | -| main.rs:337:9:337:10 | s1 | main.rs:337:9:337:10 | [SSA] s1 | | -| main.rs:337:14:339:5 | ...::C {...} | main.rs:337:9:337:10 | s1 | | -| main.rs:340:9:340:10 | [SSA] s2 | main.rs:348:11:348:12 | s2 | | -| main.rs:340:9:340:10 | s2 | main.rs:340:9:340:10 | [SSA] s2 | | -| main.rs:340:14:340:43 | ...::D {...} | main.rs:340:9:340:10 | s2 | | -| main.rs:341:11:341:12 | s1 | main.rs:342:9:342:38 | ...::C {...} | | -| main.rs:341:11:341:12 | s1 | main.rs:343:9:343:38 | ...::D {...} | | -| main.rs:341:11:341:12 | s1 | main.rs:345:11:345:12 | s1 | | -| main.rs:342:36:342:36 | [SSA] n | main.rs:342:48:342:48 | n | | -| main.rs:342:36:342:36 | n | main.rs:342:36:342:36 | [SSA] n | | -| main.rs:342:43:342:49 | sink(...) | main.rs:341:5:344:5 | match s1 { ... } | | -| main.rs:343:36:343:36 | [SSA] n | main.rs:343:48:343:48 | n | | -| main.rs:343:36:343:36 | n | main.rs:343:36:343:36 | [SSA] n | | -| main.rs:343:43:343:49 | sink(...) | main.rs:341:5:344:5 | match s1 { ... } | | -| main.rs:345:11:345:12 | s1 | main.rs:346:9:346:71 | ... \| ... | | -| main.rs:346:9:346:71 | ... \| ... | main.rs:346:9:346:38 | ...::C {...} | | -| main.rs:346:9:346:71 | ... \| ... | main.rs:346:42:346:71 | ...::D {...} | | -| main.rs:346:9:346:71 | [SSA] [match(true)] phi | main.rs:346:81:346:81 | n | | -| main.rs:346:36:346:36 | [SSA] [input] [match(true)] phi | main.rs:346:9:346:71 | [SSA] [match(true)] phi | | -| main.rs:346:36:346:36 | [SSA] n | main.rs:346:36:346:36 | [SSA] [input] [match(true)] phi | | -| main.rs:346:36:346:36 | n | main.rs:346:36:346:36 | [SSA] n | | -| main.rs:346:69:346:69 | [SSA] [input] [match(true)] phi | main.rs:346:9:346:71 | [SSA] [match(true)] phi | | -| main.rs:346:69:346:69 | [SSA] n | main.rs:346:69:346:69 | [SSA] [input] [match(true)] phi | | -| main.rs:346:69:346:69 | n | main.rs:346:69:346:69 | [SSA] n | | -| main.rs:346:76:346:82 | sink(...) | main.rs:345:5:347:5 | match s1 { ... } | | -| main.rs:348:5:351:5 | match s2 { ... } | main.rs:336:49:352:1 | { ... } | | -| main.rs:348:11:348:12 | s2 | main.rs:349:9:349:38 | ...::C {...} | | -| main.rs:348:11:348:12 | s2 | main.rs:350:9:350:38 | ...::D {...} | | -| main.rs:349:36:349:36 | [SSA] n | main.rs:349:48:349:48 | n | | -| main.rs:349:36:349:36 | n | main.rs:349:36:349:36 | [SSA] n | | -| main.rs:349:43:349:49 | sink(...) | main.rs:348:5:351:5 | match s2 { ... } | | -| main.rs:350:36:350:36 | [SSA] n | main.rs:350:48:350:48 | n | | -| main.rs:350:36:350:36 | n | main.rs:350:36:350:36 | [SSA] n | | -| main.rs:350:43:350:49 | sink(...) | main.rs:348:5:351:5 | match s2 { ... } | | -| main.rs:357:9:357:10 | [SSA] s1 | main.rs:361:11:361:12 | s1 | | -| main.rs:357:9:357:10 | s1 | main.rs:357:9:357:10 | [SSA] s1 | | -| main.rs:357:14:359:5 | C {...} | main.rs:357:9:357:10 | s1 | | -| main.rs:360:9:360:10 | [SSA] s2 | main.rs:368:11:368:12 | s2 | | -| main.rs:360:9:360:10 | s2 | main.rs:360:9:360:10 | [SSA] s2 | | -| main.rs:360:14:360:29 | D {...} | main.rs:360:9:360:10 | s2 | | -| main.rs:361:11:361:12 | s1 | main.rs:362:9:362:24 | C {...} | | -| main.rs:361:11:361:12 | s1 | main.rs:363:9:363:24 | D {...} | | -| main.rs:361:11:361:12 | s1 | main.rs:365:11:365:12 | s1 | | -| main.rs:362:22:362:22 | [SSA] n | main.rs:362:34:362:34 | n | | -| main.rs:362:22:362:22 | n | main.rs:362:22:362:22 | [SSA] n | | -| main.rs:362:29:362:35 | sink(...) | main.rs:361:5:364:5 | match s1 { ... } | | -| main.rs:363:22:363:22 | [SSA] n | main.rs:363:34:363:34 | n | | -| main.rs:363:22:363:22 | n | main.rs:363:22:363:22 | [SSA] n | | -| main.rs:363:29:363:35 | sink(...) | main.rs:361:5:364:5 | match s1 { ... } | | -| main.rs:365:11:365:12 | s1 | main.rs:366:9:366:43 | ... \| ... | | -| main.rs:366:9:366:43 | ... \| ... | main.rs:366:9:366:24 | C {...} | | -| main.rs:366:9:366:43 | ... \| ... | main.rs:366:28:366:43 | D {...} | | -| main.rs:366:9:366:43 | [SSA] [match(true)] phi | main.rs:366:53:366:53 | n | | -| main.rs:366:22:366:22 | [SSA] [input] [match(true)] phi | main.rs:366:9:366:43 | [SSA] [match(true)] phi | | -| main.rs:366:22:366:22 | [SSA] n | main.rs:366:22:366:22 | [SSA] [input] [match(true)] phi | | -| main.rs:366:22:366:22 | n | main.rs:366:22:366:22 | [SSA] n | | -| main.rs:366:41:366:41 | [SSA] [input] [match(true)] phi | main.rs:366:9:366:43 | [SSA] [match(true)] phi | | -| main.rs:366:41:366:41 | [SSA] n | main.rs:366:41:366:41 | [SSA] [input] [match(true)] phi | | -| main.rs:366:41:366:41 | n | main.rs:366:41:366:41 | [SSA] n | | -| main.rs:366:48:366:54 | sink(...) | main.rs:365:5:367:5 | match s1 { ... } | | -| main.rs:368:5:371:5 | match s2 { ... } | main.rs:356:51:372:1 | { ... } | | -| main.rs:368:11:368:12 | s2 | main.rs:369:9:369:24 | C {...} | | -| main.rs:368:11:368:12 | s2 | main.rs:370:9:370:24 | D {...} | | -| main.rs:369:22:369:22 | [SSA] n | main.rs:369:34:369:34 | n | | -| main.rs:369:22:369:22 | n | main.rs:369:22:369:22 | [SSA] n | | -| main.rs:369:29:369:35 | sink(...) | main.rs:368:5:371:5 | match s2 { ... } | | -| main.rs:370:22:370:22 | [SSA] n | main.rs:370:34:370:34 | n | | -| main.rs:370:22:370:22 | n | main.rs:370:22:370:22 | [SSA] n | | -| main.rs:370:29:370:35 | sink(...) | main.rs:368:5:371:5 | match s2 { ... } | | -| main.rs:378:9:378:12 | [SSA] arr1 | main.rs:379:14:379:17 | arr1 | | -| main.rs:378:9:378:12 | arr1 | main.rs:378:9:378:12 | [SSA] arr1 | | -| main.rs:378:16:378:33 | [...] | main.rs:378:9:378:12 | arr1 | | -| main.rs:379:9:379:10 | [SSA] n1 | main.rs:380:10:380:11 | n1 | | -| main.rs:379:9:379:10 | n1 | main.rs:379:9:379:10 | [SSA] n1 | | -| main.rs:379:14:379:20 | arr1[2] | main.rs:379:9:379:10 | n1 | | -| main.rs:382:9:382:12 | [SSA] arr2 | main.rs:383:14:383:17 | arr2 | | -| main.rs:382:9:382:12 | arr2 | main.rs:382:9:382:12 | [SSA] arr2 | | -| main.rs:382:16:382:31 | [...; 10] | main.rs:382:9:382:12 | arr2 | | -| main.rs:383:9:383:10 | [SSA] n2 | main.rs:384:10:384:11 | n2 | | -| main.rs:383:9:383:10 | n2 | main.rs:383:9:383:10 | [SSA] n2 | | -| main.rs:383:14:383:20 | arr2[4] | main.rs:383:9:383:10 | n2 | | -| main.rs:386:9:386:12 | [SSA] arr3 | main.rs:387:14:387:17 | arr3 | | -| main.rs:386:9:386:12 | arr3 | main.rs:386:9:386:12 | [SSA] arr3 | | -| main.rs:386:16:386:24 | [...] | main.rs:386:9:386:12 | arr3 | | -| main.rs:387:9:387:10 | [SSA] n3 | main.rs:388:10:388:11 | n3 | | -| main.rs:387:9:387:10 | n3 | main.rs:387:9:387:10 | [SSA] n3 | | -| main.rs:387:14:387:20 | arr3[2] | main.rs:387:9:387:10 | n3 | | -| main.rs:392:9:392:12 | [SSA] arr1 | main.rs:393:15:393:18 | arr1 | | +| main.rs:270:9:270:10 | [SSA] r1 | main.rs:271:29:271:30 | r1 | | +| main.rs:270:9:270:10 | r1 | main.rs:270:9:270:10 | [SSA] r1 | | +| main.rs:270:33:270:46 | Ok(...) | main.rs:270:9:270:10 | r1 | | +| main.rs:271:9:271:11 | [SSA] o1a | main.rs:273:10:273:12 | o1a | | +| main.rs:271:9:271:11 | o1a | main.rs:271:9:271:11 | [SSA] o1a | | +| main.rs:271:29:271:30 | [post] r1 | main.rs:272:29:272:30 | r1 | | +| main.rs:271:29:271:30 | r1 | main.rs:272:29:272:30 | r1 | | +| main.rs:271:29:271:35 | r1.ok(...) | main.rs:271:9:271:11 | o1a | | +| main.rs:272:9:272:11 | [SSA] o1b | main.rs:274:10:274:12 | o1b | | +| main.rs:272:9:272:11 | o1b | main.rs:272:9:272:11 | [SSA] o1b | | +| main.rs:272:29:272:36 | r1.err(...) | main.rs:272:9:272:11 | o1b | | +| main.rs:276:9:276:10 | [SSA] r2 | main.rs:277:29:277:30 | r2 | | +| main.rs:276:9:276:10 | r2 | main.rs:276:9:276:10 | [SSA] r2 | | +| main.rs:276:33:276:47 | Err(...) | main.rs:276:9:276:10 | r2 | | +| main.rs:277:9:277:11 | [SSA] o2a | main.rs:279:10:279:12 | o2a | | +| main.rs:277:9:277:11 | o2a | main.rs:277:9:277:11 | [SSA] o2a | | +| main.rs:277:29:277:30 | [post] r2 | main.rs:278:29:278:30 | r2 | | +| main.rs:277:29:277:30 | r2 | main.rs:278:29:278:30 | r2 | | +| main.rs:277:29:277:35 | r2.ok(...) | main.rs:277:9:277:11 | o2a | | +| main.rs:278:9:278:11 | [SSA] o2b | main.rs:280:10:280:12 | o2b | | +| main.rs:278:9:278:11 | o2b | main.rs:278:9:278:11 | [SSA] o2b | | +| main.rs:278:29:278:36 | r2.err(...) | main.rs:278:9:278:11 | o2b | | +| main.rs:284:9:284:10 | [SSA] s1 | main.rs:287:14:287:15 | s1 | | +| main.rs:284:9:284:10 | s1 | main.rs:284:9:284:10 | [SSA] s1 | | +| main.rs:284:32:284:45 | Ok(...) | main.rs:284:9:284:10 | s1 | | +| main.rs:285:9:285:10 | [SSA] s2 | main.rs:288:14:288:15 | s2 | | +| main.rs:285:9:285:10 | s2 | main.rs:285:9:285:10 | [SSA] s2 | | +| main.rs:285:32:285:36 | Ok(...) | main.rs:285:9:285:10 | s2 | | +| main.rs:286:9:286:10 | [SSA] s3 | main.rs:291:14:291:15 | s3 | | +| main.rs:286:9:286:10 | s3 | main.rs:286:9:286:10 | [SSA] s3 | | +| main.rs:286:32:286:46 | Err(...) | main.rs:286:9:286:10 | s3 | | +| main.rs:287:9:287:10 | [SSA] i1 | main.rs:289:10:289:11 | i1 | | +| main.rs:287:9:287:10 | i1 | main.rs:287:9:287:10 | [SSA] i1 | | +| main.rs:287:14:287:16 | TryExpr | main.rs:287:9:287:10 | i1 | | +| main.rs:288:9:288:10 | [SSA] i2 | main.rs:290:10:290:11 | i2 | | +| main.rs:288:9:288:10 | i2 | main.rs:288:9:288:10 | [SSA] i2 | | +| main.rs:288:14:288:16 | TryExpr | main.rs:288:9:288:10 | i2 | | +| main.rs:291:9:291:10 | [SSA] i3 | main.rs:292:10:292:11 | i3 | | +| main.rs:291:9:291:10 | i3 | main.rs:291:9:291:10 | [SSA] i3 | | +| main.rs:291:14:291:16 | TryExpr | main.rs:291:9:291:10 | i3 | | +| main.rs:293:5:293:9 | Ok(...) | main.rs:283:46:294:1 | { ... } | | +| main.rs:297:9:297:10 | [SSA] s1 | main.rs:298:10:298:11 | s1 | | +| main.rs:297:9:297:10 | s1 | main.rs:297:9:297:10 | [SSA] s1 | | +| main.rs:297:32:297:45 | Ok(...) | main.rs:297:9:297:10 | s1 | | +| main.rs:298:10:298:11 | [post] s1 | main.rs:299:10:299:11 | s1 | | +| main.rs:298:10:298:11 | s1 | main.rs:299:10:299:11 | s1 | | +| main.rs:301:9:301:10 | [SSA] s2 | main.rs:302:10:302:11 | s2 | | +| main.rs:301:9:301:10 | s2 | main.rs:301:9:301:10 | [SSA] s2 | | +| main.rs:301:32:301:46 | Err(...) | main.rs:301:9:301:10 | s2 | | +| main.rs:302:10:302:11 | [post] s2 | main.rs:303:10:303:11 | s2 | | +| main.rs:302:10:302:11 | s2 | main.rs:303:10:303:11 | s2 | | +| main.rs:312:9:312:10 | [SSA] s1 | main.rs:314:11:314:12 | s1 | | +| main.rs:312:9:312:10 | s1 | main.rs:312:9:312:10 | [SSA] s1 | | +| main.rs:312:14:312:39 | ...::A(...) | main.rs:312:9:312:10 | s1 | | +| main.rs:313:9:313:10 | [SSA] s2 | main.rs:321:11:321:12 | s2 | | +| main.rs:313:9:313:10 | s2 | main.rs:313:9:313:10 | [SSA] s2 | | +| main.rs:313:14:313:30 | ...::B(...) | main.rs:313:9:313:10 | s2 | | +| main.rs:314:11:314:12 | s1 | main.rs:315:9:315:25 | ...::A(...) | | +| main.rs:314:11:314:12 | s1 | main.rs:316:9:316:25 | ...::B(...) | | +| main.rs:314:11:314:12 | s1 | main.rs:318:11:318:12 | s1 | | +| main.rs:315:24:315:24 | [SSA] n | main.rs:315:35:315:35 | n | | +| main.rs:315:24:315:24 | n | main.rs:315:24:315:24 | [SSA] n | | +| main.rs:315:30:315:36 | sink(...) | main.rs:314:5:317:5 | match s1 { ... } | | +| main.rs:316:24:316:24 | [SSA] n | main.rs:316:35:316:35 | n | | +| main.rs:316:24:316:24 | n | main.rs:316:24:316:24 | [SSA] n | | +| main.rs:316:30:316:36 | sink(...) | main.rs:314:5:317:5 | match s1 { ... } | | +| main.rs:318:11:318:12 | s1 | main.rs:319:9:319:45 | ... \| ... | | +| main.rs:319:9:319:45 | ... \| ... | main.rs:319:9:319:25 | ...::A(...) | | +| main.rs:319:9:319:45 | ... \| ... | main.rs:319:29:319:45 | ...::B(...) | | +| main.rs:319:9:319:45 | [SSA] [match(true)] phi | main.rs:319:55:319:55 | n | | +| main.rs:319:24:319:24 | [SSA] [input] [match(true)] phi | main.rs:319:9:319:45 | [SSA] [match(true)] phi | | +| main.rs:319:24:319:24 | [SSA] n | main.rs:319:24:319:24 | [SSA] [input] [match(true)] phi | | +| main.rs:319:24:319:24 | n | main.rs:319:24:319:24 | [SSA] n | | +| main.rs:319:44:319:44 | [SSA] [input] [match(true)] phi | main.rs:319:9:319:45 | [SSA] [match(true)] phi | | +| main.rs:319:44:319:44 | [SSA] n | main.rs:319:44:319:44 | [SSA] [input] [match(true)] phi | | +| main.rs:319:44:319:44 | n | main.rs:319:44:319:44 | [SSA] n | | +| main.rs:319:50:319:56 | sink(...) | main.rs:318:5:320:5 | match s1 { ... } | | +| main.rs:321:5:324:5 | match s2 { ... } | main.rs:311:48:325:1 | { ... } | | +| main.rs:321:11:321:12 | s2 | main.rs:322:9:322:25 | ...::A(...) | | +| main.rs:321:11:321:12 | s2 | main.rs:323:9:323:25 | ...::B(...) | | +| main.rs:322:24:322:24 | [SSA] n | main.rs:322:35:322:35 | n | | +| main.rs:322:24:322:24 | n | main.rs:322:24:322:24 | [SSA] n | | +| main.rs:322:30:322:36 | sink(...) | main.rs:321:5:324:5 | match s2 { ... } | | +| main.rs:323:24:323:24 | [SSA] n | main.rs:323:35:323:35 | n | | +| main.rs:323:24:323:24 | n | main.rs:323:24:323:24 | [SSA] n | | +| main.rs:323:30:323:36 | sink(...) | main.rs:321:5:324:5 | match s2 { ... } | | +| main.rs:330:9:330:10 | [SSA] s1 | main.rs:332:11:332:12 | s1 | | +| main.rs:330:9:330:10 | s1 | main.rs:330:9:330:10 | [SSA] s1 | | +| main.rs:330:14:330:26 | A(...) | main.rs:330:9:330:10 | s1 | | +| main.rs:331:9:331:10 | [SSA] s2 | main.rs:339:11:339:12 | s2 | | +| main.rs:331:9:331:10 | s2 | main.rs:331:9:331:10 | [SSA] s2 | | +| main.rs:331:14:331:17 | B(...) | main.rs:331:9:331:10 | s2 | | +| main.rs:332:11:332:12 | s1 | main.rs:333:9:333:12 | A(...) | | +| main.rs:332:11:332:12 | s1 | main.rs:334:9:334:12 | B(...) | | +| main.rs:332:11:332:12 | s1 | main.rs:336:11:336:12 | s1 | | +| main.rs:333:11:333:11 | [SSA] n | main.rs:333:22:333:22 | n | | +| main.rs:333:11:333:11 | n | main.rs:333:11:333:11 | [SSA] n | | +| main.rs:333:17:333:23 | sink(...) | main.rs:332:5:335:5 | match s1 { ... } | | +| main.rs:334:11:334:11 | [SSA] n | main.rs:334:22:334:22 | n | | +| main.rs:334:11:334:11 | n | main.rs:334:11:334:11 | [SSA] n | | +| main.rs:334:17:334:23 | sink(...) | main.rs:332:5:335:5 | match s1 { ... } | | +| main.rs:336:11:336:12 | s1 | main.rs:337:9:337:19 | ... \| ... | | +| main.rs:337:9:337:19 | ... \| ... | main.rs:337:9:337:12 | A(...) | | +| main.rs:337:9:337:19 | ... \| ... | main.rs:337:16:337:19 | B(...) | | +| main.rs:337:9:337:19 | [SSA] [match(true)] phi | main.rs:337:29:337:29 | n | | +| main.rs:337:11:337:11 | [SSA] [input] [match(true)] phi | main.rs:337:9:337:19 | [SSA] [match(true)] phi | | +| main.rs:337:11:337:11 | [SSA] n | main.rs:337:11:337:11 | [SSA] [input] [match(true)] phi | | +| main.rs:337:11:337:11 | n | main.rs:337:11:337:11 | [SSA] n | | +| main.rs:337:18:337:18 | [SSA] [input] [match(true)] phi | main.rs:337:9:337:19 | [SSA] [match(true)] phi | | +| main.rs:337:18:337:18 | [SSA] n | main.rs:337:18:337:18 | [SSA] [input] [match(true)] phi | | +| main.rs:337:18:337:18 | n | main.rs:337:18:337:18 | [SSA] n | | +| main.rs:337:24:337:30 | sink(...) | main.rs:336:5:338:5 | match s1 { ... } | | +| main.rs:339:5:342:5 | match s2 { ... } | main.rs:329:50:343:1 | { ... } | | +| main.rs:339:11:339:12 | s2 | main.rs:340:9:340:12 | A(...) | | +| main.rs:339:11:339:12 | s2 | main.rs:341:9:341:12 | B(...) | | +| main.rs:340:11:340:11 | [SSA] n | main.rs:340:22:340:22 | n | | +| main.rs:340:11:340:11 | n | main.rs:340:11:340:11 | [SSA] n | | +| main.rs:340:17:340:23 | sink(...) | main.rs:339:5:342:5 | match s2 { ... } | | +| main.rs:341:11:341:11 | [SSA] n | main.rs:341:22:341:22 | n | | +| main.rs:341:11:341:11 | n | main.rs:341:11:341:11 | [SSA] n | | +| main.rs:341:17:341:23 | sink(...) | main.rs:339:5:342:5 | match s2 { ... } | | +| main.rs:351:9:351:10 | [SSA] s1 | main.rs:355:11:355:12 | s1 | | +| main.rs:351:9:351:10 | s1 | main.rs:351:9:351:10 | [SSA] s1 | | +| main.rs:351:14:353:5 | ...::C {...} | main.rs:351:9:351:10 | s1 | | +| main.rs:354:9:354:10 | [SSA] s2 | main.rs:362:11:362:12 | s2 | | +| main.rs:354:9:354:10 | s2 | main.rs:354:9:354:10 | [SSA] s2 | | +| main.rs:354:14:354:43 | ...::D {...} | main.rs:354:9:354:10 | s2 | | +| main.rs:355:11:355:12 | s1 | main.rs:356:9:356:38 | ...::C {...} | | +| main.rs:355:11:355:12 | s1 | main.rs:357:9:357:38 | ...::D {...} | | +| main.rs:355:11:355:12 | s1 | main.rs:359:11:359:12 | s1 | | +| main.rs:356:36:356:36 | [SSA] n | main.rs:356:48:356:48 | n | | +| main.rs:356:36:356:36 | n | main.rs:356:36:356:36 | [SSA] n | | +| main.rs:356:43:356:49 | sink(...) | main.rs:355:5:358:5 | match s1 { ... } | | +| main.rs:357:36:357:36 | [SSA] n | main.rs:357:48:357:48 | n | | +| main.rs:357:36:357:36 | n | main.rs:357:36:357:36 | [SSA] n | | +| main.rs:357:43:357:49 | sink(...) | main.rs:355:5:358:5 | match s1 { ... } | | +| main.rs:359:11:359:12 | s1 | main.rs:360:9:360:71 | ... \| ... | | +| main.rs:360:9:360:71 | ... \| ... | main.rs:360:9:360:38 | ...::C {...} | | +| main.rs:360:9:360:71 | ... \| ... | main.rs:360:42:360:71 | ...::D {...} | | +| main.rs:360:9:360:71 | [SSA] [match(true)] phi | main.rs:360:81:360:81 | n | | +| main.rs:360:36:360:36 | [SSA] [input] [match(true)] phi | main.rs:360:9:360:71 | [SSA] [match(true)] phi | | +| main.rs:360:36:360:36 | [SSA] n | main.rs:360:36:360:36 | [SSA] [input] [match(true)] phi | | +| main.rs:360:36:360:36 | n | main.rs:360:36:360:36 | [SSA] n | | +| main.rs:360:69:360:69 | [SSA] [input] [match(true)] phi | main.rs:360:9:360:71 | [SSA] [match(true)] phi | | +| main.rs:360:69:360:69 | [SSA] n | main.rs:360:69:360:69 | [SSA] [input] [match(true)] phi | | +| main.rs:360:69:360:69 | n | main.rs:360:69:360:69 | [SSA] n | | +| main.rs:360:76:360:82 | sink(...) | main.rs:359:5:361:5 | match s1 { ... } | | +| main.rs:362:5:365:5 | match s2 { ... } | main.rs:350:49:366:1 | { ... } | | +| main.rs:362:11:362:12 | s2 | main.rs:363:9:363:38 | ...::C {...} | | +| main.rs:362:11:362:12 | s2 | main.rs:364:9:364:38 | ...::D {...} | | +| main.rs:363:36:363:36 | [SSA] n | main.rs:363:48:363:48 | n | | +| main.rs:363:36:363:36 | n | main.rs:363:36:363:36 | [SSA] n | | +| main.rs:363:43:363:49 | sink(...) | main.rs:362:5:365:5 | match s2 { ... } | | +| main.rs:364:36:364:36 | [SSA] n | main.rs:364:48:364:48 | n | | +| main.rs:364:36:364:36 | n | main.rs:364:36:364:36 | [SSA] n | | +| main.rs:364:43:364:49 | sink(...) | main.rs:362:5:365:5 | match s2 { ... } | | +| main.rs:371:9:371:10 | [SSA] s1 | main.rs:375:11:375:12 | s1 | | +| main.rs:371:9:371:10 | s1 | main.rs:371:9:371:10 | [SSA] s1 | | +| main.rs:371:14:373:5 | C {...} | main.rs:371:9:371:10 | s1 | | +| main.rs:374:9:374:10 | [SSA] s2 | main.rs:382:11:382:12 | s2 | | +| main.rs:374:9:374:10 | s2 | main.rs:374:9:374:10 | [SSA] s2 | | +| main.rs:374:14:374:29 | D {...} | main.rs:374:9:374:10 | s2 | | +| main.rs:375:11:375:12 | s1 | main.rs:376:9:376:24 | C {...} | | +| main.rs:375:11:375:12 | s1 | main.rs:377:9:377:24 | D {...} | | +| main.rs:375:11:375:12 | s1 | main.rs:379:11:379:12 | s1 | | +| main.rs:376:22:376:22 | [SSA] n | main.rs:376:34:376:34 | n | | +| main.rs:376:22:376:22 | n | main.rs:376:22:376:22 | [SSA] n | | +| main.rs:376:29:376:35 | sink(...) | main.rs:375:5:378:5 | match s1 { ... } | | +| main.rs:377:22:377:22 | [SSA] n | main.rs:377:34:377:34 | n | | +| main.rs:377:22:377:22 | n | main.rs:377:22:377:22 | [SSA] n | | +| main.rs:377:29:377:35 | sink(...) | main.rs:375:5:378:5 | match s1 { ... } | | +| main.rs:379:11:379:12 | s1 | main.rs:380:9:380:43 | ... \| ... | | +| main.rs:380:9:380:43 | ... \| ... | main.rs:380:9:380:24 | C {...} | | +| main.rs:380:9:380:43 | ... \| ... | main.rs:380:28:380:43 | D {...} | | +| main.rs:380:9:380:43 | [SSA] [match(true)] phi | main.rs:380:53:380:53 | n | | +| main.rs:380:22:380:22 | [SSA] [input] [match(true)] phi | main.rs:380:9:380:43 | [SSA] [match(true)] phi | | +| main.rs:380:22:380:22 | [SSA] n | main.rs:380:22:380:22 | [SSA] [input] [match(true)] phi | | +| main.rs:380:22:380:22 | n | main.rs:380:22:380:22 | [SSA] n | | +| main.rs:380:41:380:41 | [SSA] [input] [match(true)] phi | main.rs:380:9:380:43 | [SSA] [match(true)] phi | | +| main.rs:380:41:380:41 | [SSA] n | main.rs:380:41:380:41 | [SSA] [input] [match(true)] phi | | +| main.rs:380:41:380:41 | n | main.rs:380:41:380:41 | [SSA] n | | +| main.rs:380:48:380:54 | sink(...) | main.rs:379:5:381:5 | match s1 { ... } | | +| main.rs:382:5:385:5 | match s2 { ... } | main.rs:370:51:386:1 | { ... } | | +| main.rs:382:11:382:12 | s2 | main.rs:383:9:383:24 | C {...} | | +| main.rs:382:11:382:12 | s2 | main.rs:384:9:384:24 | D {...} | | +| main.rs:383:22:383:22 | [SSA] n | main.rs:383:34:383:34 | n | | +| main.rs:383:22:383:22 | n | main.rs:383:22:383:22 | [SSA] n | | +| main.rs:383:29:383:35 | sink(...) | main.rs:382:5:385:5 | match s2 { ... } | | +| main.rs:384:22:384:22 | [SSA] n | main.rs:384:34:384:34 | n | | +| main.rs:384:22:384:22 | n | main.rs:384:22:384:22 | [SSA] n | | +| main.rs:384:29:384:35 | sink(...) | main.rs:382:5:385:5 | match s2 { ... } | | +| main.rs:392:9:392:12 | [SSA] arr1 | main.rs:393:14:393:17 | arr1 | | | main.rs:392:9:392:12 | arr1 | main.rs:392:9:392:12 | [SSA] arr1 | | | main.rs:392:16:392:33 | [...] | main.rs:392:9:392:12 | arr1 | | -| main.rs:393:9:393:10 | [SSA] n1 | main.rs:394:14:394:15 | n1 | | +| main.rs:393:9:393:10 | [SSA] n1 | main.rs:394:10:394:11 | n1 | | | main.rs:393:9:393:10 | n1 | main.rs:393:9:393:10 | [SSA] n1 | | -| main.rs:397:9:397:12 | [SSA] arr2 | main.rs:398:15:398:18 | arr2 | | -| main.rs:397:9:397:12 | arr2 | main.rs:397:9:397:12 | [SSA] arr2 | | -| main.rs:397:16:397:24 | [...] | main.rs:397:9:397:12 | arr2 | | -| main.rs:398:5:400:5 | for ... in ... { ... } | main.rs:391:21:401:1 | { ... } | | -| main.rs:398:9:398:10 | [SSA] n2 | main.rs:399:14:399:15 | n2 | | -| main.rs:398:9:398:10 | n2 | main.rs:398:9:398:10 | [SSA] n2 | | -| main.rs:404:9:404:12 | [SSA] arr1 | main.rs:405:11:405:14 | arr1 | | -| main.rs:404:9:404:12 | arr1 | main.rs:404:9:404:12 | [SSA] arr1 | | -| main.rs:404:16:404:33 | [...] | main.rs:404:9:404:12 | arr1 | | -| main.rs:405:5:411:5 | match arr1 { ... } | main.rs:403:26:412:1 | { ... } | | -| main.rs:405:11:405:14 | arr1 | main.rs:406:9:406:17 | SlicePat | | -| main.rs:406:10:406:10 | [SSA] a | main.rs:407:18:407:18 | a | | -| main.rs:406:10:406:10 | a | main.rs:406:10:406:10 | [SSA] a | | -| main.rs:406:13:406:13 | [SSA] b | main.rs:408:18:408:18 | b | | -| main.rs:406:13:406:13 | b | main.rs:406:13:406:13 | [SSA] b | | -| main.rs:406:16:406:16 | [SSA] c | main.rs:409:18:409:18 | c | | -| main.rs:406:16:406:16 | c | main.rs:406:16:406:16 | [SSA] c | | -| main.rs:406:22:410:9 | { ... } | main.rs:405:5:411:5 | match arr1 { ... } | | -| main.rs:415:9:415:19 | [SSA] mut mut_arr | main.rs:416:10:416:16 | mut_arr | | -| main.rs:415:9:415:19 | mut mut_arr | main.rs:415:9:415:19 | [SSA] mut mut_arr | | -| main.rs:415:23:415:31 | [...] | main.rs:415:9:415:19 | mut mut_arr | | -| main.rs:416:10:416:16 | [post] mut_arr | main.rs:418:5:418:11 | mut_arr | | -| main.rs:416:10:416:16 | mut_arr | main.rs:418:5:418:11 | mut_arr | | -| main.rs:418:5:418:11 | [post] mut_arr | main.rs:419:13:419:19 | mut_arr | | -| main.rs:418:5:418:11 | mut_arr | main.rs:419:13:419:19 | mut_arr | | -| main.rs:418:18:418:27 | source(...) | main.rs:418:5:418:14 | mut_arr[1] | | -| main.rs:419:9:419:9 | [SSA] d | main.rs:420:10:420:10 | d | | -| main.rs:419:9:419:9 | d | main.rs:419:9:419:9 | [SSA] d | | -| main.rs:419:13:419:19 | [post] mut_arr | main.rs:421:10:421:16 | mut_arr | | -| main.rs:419:13:419:19 | mut_arr | main.rs:421:10:421:16 | mut_arr | | -| main.rs:419:13:419:22 | mut_arr[1] | main.rs:419:9:419:9 | d | | -| main.rs:426:39:426:43 | [SSA] names | main.rs:428:25:428:29 | names | | -| main.rs:426:39:426:43 | names | main.rs:426:39:426:43 | [SSA] names | | -| main.rs:426:39:426:72 | ...: Vec::<...> | main.rs:426:39:426:43 | names | | -| main.rs:427:9:427:20 | default_name | main.rs:427:9:427:20 | [SSA] default_name | | -| main.rs:427:24:427:45 | ... .to_string(...) | main.rs:427:9:427:20 | default_name | | -| main.rs:427:24:427:45 | ... .to_string(...) | main.rs:428:9:428:20 | phi(default_name) | | -| main.rs:428:5:434:5 | for ... in ... { ... } | main.rs:426:75:435:1 | { ... } | | -| main.rs:428:9:428:20 | phi(default_name) | main.rs:428:9:428:20 | phi(default_name) | | -| main.rs:428:9:428:20 | phi(default_name) | main.rs:430:41:430:67 | default_name | | -| main.rs:428:10:428:13 | [SSA] cond | main.rs:429:12:429:15 | cond | | -| main.rs:428:10:428:13 | cond | main.rs:428:10:428:13 | [SSA] cond | | -| main.rs:428:16:428:19 | [SSA] name | main.rs:430:21:430:24 | name | | -| main.rs:428:16:428:19 | name | main.rs:428:16:428:19 | [SSA] name | | -| main.rs:429:9:433:9 | if cond {...} | main.rs:428:31:434:5 | { ... } | | -| main.rs:430:17:430:17 | [SSA] n | main.rs:431:18:431:18 | n | | -| main.rs:430:17:430:17 | n | main.rs:430:17:430:17 | [SSA] n | | -| main.rs:430:21:430:68 | name.unwrap_or_else(...) | main.rs:430:17:430:17 | n | | -| main.rs:430:41:430:67 | [post] default_name | main.rs:428:9:428:20 | phi(default_name) | | -| main.rs:430:41:430:67 | closure self in \|...\| ... | main.rs:430:44:430:55 | this | | -| main.rs:430:41:430:67 | default_name | main.rs:428:9:428:20 | phi(default_name) | | -| main.rs:444:9:444:9 | [SSA] s | main.rs:445:10:445:10 | s | | -| main.rs:444:9:444:9 | s | main.rs:444:9:444:9 | [SSA] s | | -| main.rs:444:13:444:27 | MacroExpr | main.rs:444:9:444:9 | s | | -| main.rs:444:25:444:26 | source(...) | main.rs:444:13:444:27 | MacroExpr | | -| main.rs:449:9:449:9 | [SSA] a | main.rs:454:10:454:10 | a | | -| main.rs:449:9:449:9 | a | main.rs:449:9:449:9 | [SSA] a | | -| main.rs:449:13:449:22 | source(...) | main.rs:449:9:449:9 | a | | -| main.rs:450:9:450:9 | [SSA] b | main.rs:455:15:455:15 | b | | -| main.rs:450:9:450:9 | b | main.rs:450:9:450:9 | [SSA] b | | -| main.rs:450:13:450:22 | source(...) | main.rs:450:9:450:9 | b | | -| main.rs:451:9:451:9 | [SSA] c | main.rs:452:18:452:18 | c | | -| main.rs:451:9:451:9 | c | main.rs:451:9:451:9 | [SSA] c | | -| main.rs:451:13:451:22 | source(...) | main.rs:451:9:451:9 | c | | -| main.rs:452:9:452:13 | [SSA] c_ref | main.rs:456:14:456:18 | c_ref | | -| main.rs:452:9:452:13 | c_ref | main.rs:452:9:452:13 | [SSA] c_ref | | -| main.rs:452:17:452:18 | &c | main.rs:452:9:452:13 | c_ref | | -| main.rs:456:14:456:18 | [post] c_ref | main.rs:457:11:457:15 | c_ref | | -| main.rs:456:14:456:18 | c_ref | main.rs:457:11:457:15 | c_ref | | -| main.rs:483:13:483:33 | result_questionmark(...) | main.rs:483:9:483:9 | _ | | -| main.rs:495:36:495:41 | ...::new(...) | main.rs:495:36:495:41 | MacroExpr | | +| main.rs:393:14:393:20 | arr1[2] | main.rs:393:9:393:10 | n1 | | +| main.rs:396:9:396:12 | [SSA] arr2 | main.rs:397:14:397:17 | arr2 | | +| main.rs:396:9:396:12 | arr2 | main.rs:396:9:396:12 | [SSA] arr2 | | +| main.rs:396:16:396:31 | [...; 10] | main.rs:396:9:396:12 | arr2 | | +| main.rs:397:9:397:10 | [SSA] n2 | main.rs:398:10:398:11 | n2 | | +| main.rs:397:9:397:10 | n2 | main.rs:397:9:397:10 | [SSA] n2 | | +| main.rs:397:14:397:20 | arr2[4] | main.rs:397:9:397:10 | n2 | | +| main.rs:400:9:400:12 | [SSA] arr3 | main.rs:401:14:401:17 | arr3 | | +| main.rs:400:9:400:12 | arr3 | main.rs:400:9:400:12 | [SSA] arr3 | | +| main.rs:400:16:400:24 | [...] | main.rs:400:9:400:12 | arr3 | | +| main.rs:401:9:401:10 | [SSA] n3 | main.rs:402:10:402:11 | n3 | | +| main.rs:401:9:401:10 | n3 | main.rs:401:9:401:10 | [SSA] n3 | | +| main.rs:401:14:401:20 | arr3[2] | main.rs:401:9:401:10 | n3 | | +| main.rs:406:9:406:12 | [SSA] arr1 | main.rs:407:15:407:18 | arr1 | | +| main.rs:406:9:406:12 | arr1 | main.rs:406:9:406:12 | [SSA] arr1 | | +| main.rs:406:16:406:33 | [...] | main.rs:406:9:406:12 | arr1 | | +| main.rs:407:9:407:10 | [SSA] n1 | main.rs:408:14:408:15 | n1 | | +| main.rs:407:9:407:10 | n1 | main.rs:407:9:407:10 | [SSA] n1 | | +| main.rs:411:9:411:12 | [SSA] arr2 | main.rs:412:15:412:18 | arr2 | | +| main.rs:411:9:411:12 | arr2 | main.rs:411:9:411:12 | [SSA] arr2 | | +| main.rs:411:16:411:24 | [...] | main.rs:411:9:411:12 | arr2 | | +| main.rs:412:5:414:5 | for ... in ... { ... } | main.rs:405:21:415:1 | { ... } | | +| main.rs:412:9:412:10 | [SSA] n2 | main.rs:413:14:413:15 | n2 | | +| main.rs:412:9:412:10 | n2 | main.rs:412:9:412:10 | [SSA] n2 | | +| main.rs:418:9:418:12 | [SSA] arr1 | main.rs:419:11:419:14 | arr1 | | +| main.rs:418:9:418:12 | arr1 | main.rs:418:9:418:12 | [SSA] arr1 | | +| main.rs:418:16:418:33 | [...] | main.rs:418:9:418:12 | arr1 | | +| main.rs:419:5:425:5 | match arr1 { ... } | main.rs:417:26:426:1 | { ... } | | +| main.rs:419:11:419:14 | arr1 | main.rs:420:9:420:17 | SlicePat | | +| main.rs:420:10:420:10 | [SSA] a | main.rs:421:18:421:18 | a | | +| main.rs:420:10:420:10 | a | main.rs:420:10:420:10 | [SSA] a | | +| main.rs:420:13:420:13 | [SSA] b | main.rs:422:18:422:18 | b | | +| main.rs:420:13:420:13 | b | main.rs:420:13:420:13 | [SSA] b | | +| main.rs:420:16:420:16 | [SSA] c | main.rs:423:18:423:18 | c | | +| main.rs:420:16:420:16 | c | main.rs:420:16:420:16 | [SSA] c | | +| main.rs:420:22:424:9 | { ... } | main.rs:419:5:425:5 | match arr1 { ... } | | +| main.rs:429:9:429:19 | [SSA] mut mut_arr | main.rs:430:10:430:16 | mut_arr | | +| main.rs:429:9:429:19 | mut mut_arr | main.rs:429:9:429:19 | [SSA] mut mut_arr | | +| main.rs:429:23:429:31 | [...] | main.rs:429:9:429:19 | mut mut_arr | | +| main.rs:430:10:430:16 | [post] mut_arr | main.rs:432:5:432:11 | mut_arr | | +| main.rs:430:10:430:16 | mut_arr | main.rs:432:5:432:11 | mut_arr | | +| main.rs:432:5:432:11 | [post] mut_arr | main.rs:433:13:433:19 | mut_arr | | +| main.rs:432:5:432:11 | mut_arr | main.rs:433:13:433:19 | mut_arr | | +| main.rs:432:18:432:27 | source(...) | main.rs:432:5:432:14 | mut_arr[1] | | +| main.rs:433:9:433:9 | [SSA] d | main.rs:434:10:434:10 | d | | +| main.rs:433:9:433:9 | d | main.rs:433:9:433:9 | [SSA] d | | +| main.rs:433:13:433:19 | [post] mut_arr | main.rs:435:10:435:16 | mut_arr | | +| main.rs:433:13:433:19 | mut_arr | main.rs:435:10:435:16 | mut_arr | | +| main.rs:433:13:433:22 | mut_arr[1] | main.rs:433:9:433:9 | d | | +| main.rs:440:39:440:43 | [SSA] names | main.rs:442:25:442:29 | names | | +| main.rs:440:39:440:43 | names | main.rs:440:39:440:43 | [SSA] names | | +| main.rs:440:39:440:72 | ...: Vec::<...> | main.rs:440:39:440:43 | names | | +| main.rs:441:9:441:20 | default_name | main.rs:441:9:441:20 | [SSA] default_name | | +| main.rs:441:24:441:45 | ... .to_string(...) | main.rs:441:9:441:20 | default_name | | +| main.rs:441:24:441:45 | ... .to_string(...) | main.rs:442:9:442:20 | phi(default_name) | | +| main.rs:442:5:448:5 | for ... in ... { ... } | main.rs:440:75:449:1 | { ... } | | +| main.rs:442:9:442:20 | phi(default_name) | main.rs:442:9:442:20 | phi(default_name) | | +| main.rs:442:9:442:20 | phi(default_name) | main.rs:444:41:444:67 | default_name | | +| main.rs:442:10:442:13 | [SSA] cond | main.rs:443:12:443:15 | cond | | +| main.rs:442:10:442:13 | cond | main.rs:442:10:442:13 | [SSA] cond | | +| main.rs:442:16:442:19 | [SSA] name | main.rs:444:21:444:24 | name | | +| main.rs:442:16:442:19 | name | main.rs:442:16:442:19 | [SSA] name | | +| main.rs:443:9:447:9 | if cond {...} | main.rs:442:31:448:5 | { ... } | | +| main.rs:444:17:444:17 | [SSA] n | main.rs:445:18:445:18 | n | | +| main.rs:444:17:444:17 | n | main.rs:444:17:444:17 | [SSA] n | | +| main.rs:444:21:444:68 | name.unwrap_or_else(...) | main.rs:444:17:444:17 | n | | +| main.rs:444:41:444:67 | [post] default_name | main.rs:442:9:442:20 | phi(default_name) | | +| main.rs:444:41:444:67 | closure self in \|...\| ... | main.rs:444:44:444:55 | this | | +| main.rs:444:41:444:67 | default_name | main.rs:442:9:442:20 | phi(default_name) | | +| main.rs:458:9:458:9 | [SSA] s | main.rs:459:10:459:10 | s | | +| main.rs:458:9:458:9 | s | main.rs:458:9:458:9 | [SSA] s | | +| main.rs:458:13:458:27 | MacroExpr | main.rs:458:9:458:9 | s | | +| main.rs:458:25:458:26 | source(...) | main.rs:458:13:458:27 | MacroExpr | | +| main.rs:463:9:463:9 | [SSA] a | main.rs:468:10:468:10 | a | | +| main.rs:463:9:463:9 | a | main.rs:463:9:463:9 | [SSA] a | | +| main.rs:463:13:463:22 | source(...) | main.rs:463:9:463:9 | a | | +| main.rs:464:9:464:9 | [SSA] b | main.rs:469:15:469:15 | b | | +| main.rs:464:9:464:9 | b | main.rs:464:9:464:9 | [SSA] b | | +| main.rs:464:13:464:22 | source(...) | main.rs:464:9:464:9 | b | | +| main.rs:465:9:465:9 | [SSA] c | main.rs:466:18:466:18 | c | | +| main.rs:465:9:465:9 | c | main.rs:465:9:465:9 | [SSA] c | | +| main.rs:465:13:465:22 | source(...) | main.rs:465:9:465:9 | c | | +| main.rs:466:9:466:13 | [SSA] c_ref | main.rs:470:14:470:18 | c_ref | | +| main.rs:466:9:466:13 | c_ref | main.rs:466:9:466:13 | [SSA] c_ref | | +| main.rs:466:17:466:18 | &c | main.rs:466:9:466:13 | c_ref | | +| main.rs:470:14:470:18 | [post] c_ref | main.rs:471:11:471:15 | c_ref | | +| main.rs:470:14:470:18 | c_ref | main.rs:471:11:471:15 | c_ref | | +| main.rs:498:13:498:33 | result_questionmark(...) | main.rs:498:9:498:9 | _ | | +| main.rs:510:36:510:41 | ...::new(...) | main.rs:510:36:510:41 | MacroExpr | | models | 1 | Sink: lang:std; crate::io::stdio::_print; log-injection; Argument[0] | | 2 | Summary: lang:core; ::clone; Argument[self].Variant[crate::option::Option::Some(0)]; ReturnValue.Variant[crate::option::Option::Some(0)]; value | @@ -780,44 +802,46 @@ storeStep | main.rs:261:19:261:28 | source(...) | Some | main.rs:261:14:261:29 | Some(...) | | main.rs:262:19:262:19 | 2 | Some | main.rs:262:14:262:20 | Some(...) | | main.rs:266:10:266:10 | 0 | Some | main.rs:266:5:266:11 | Some(...) | -| main.rs:270:35:270:44 | source(...) | Ok | main.rs:270:32:270:45 | Ok(...) | -| main.rs:271:35:271:35 | 2 | Ok | main.rs:271:32:271:36 | Ok(...) | -| main.rs:272:36:272:45 | source(...) | Err | main.rs:272:32:272:46 | Err(...) | -| main.rs:279:8:279:8 | 0 | Ok | main.rs:279:5:279:9 | Ok(...) | -| main.rs:283:35:283:44 | source(...) | Ok | main.rs:283:32:283:45 | Ok(...) | -| main.rs:287:36:287:45 | source(...) | Err | main.rs:287:32:287:46 | Err(...) | -| main.rs:298:29:298:38 | source(...) | A | main.rs:298:14:298:39 | ...::A(...) | -| main.rs:299:29:299:29 | 2 | B | main.rs:299:14:299:30 | ...::B(...) | -| main.rs:316:16:316:25 | source(...) | A | main.rs:316:14:316:26 | A(...) | -| main.rs:317:16:317:16 | 2 | B | main.rs:317:14:317:17 | B(...) | -| main.rs:338:18:338:27 | source(...) | C | main.rs:337:14:339:5 | ...::C {...} | -| main.rs:340:41:340:41 | 2 | D | main.rs:340:14:340:43 | ...::D {...} | -| main.rs:358:18:358:27 | source(...) | C | main.rs:357:14:359:5 | C {...} | -| main.rs:360:27:360:27 | 2 | D | main.rs:360:14:360:29 | D {...} | -| main.rs:378:17:378:17 | 1 | element | main.rs:378:16:378:33 | [...] | -| main.rs:378:20:378:20 | 2 | element | main.rs:378:16:378:33 | [...] | -| main.rs:378:23:378:32 | source(...) | element | main.rs:378:16:378:33 | [...] | -| main.rs:382:17:382:26 | source(...) | element | main.rs:382:16:382:31 | [...; 10] | -| main.rs:386:17:386:17 | 1 | element | main.rs:386:16:386:24 | [...] | -| main.rs:386:20:386:20 | 2 | element | main.rs:386:16:386:24 | [...] | -| main.rs:386:23:386:23 | 3 | element | main.rs:386:16:386:24 | [...] | +| main.rs:270:36:270:45 | source(...) | Ok | main.rs:270:33:270:46 | Ok(...) | +| main.rs:276:37:276:46 | source(...) | Err | main.rs:276:33:276:47 | Err(...) | +| main.rs:284:35:284:44 | source(...) | Ok | main.rs:284:32:284:45 | Ok(...) | +| main.rs:285:35:285:35 | 2 | Ok | main.rs:285:32:285:36 | Ok(...) | +| main.rs:286:36:286:45 | source(...) | Err | main.rs:286:32:286:46 | Err(...) | +| main.rs:293:8:293:8 | 0 | Ok | main.rs:293:5:293:9 | Ok(...) | +| main.rs:297:35:297:44 | source(...) | Ok | main.rs:297:32:297:45 | Ok(...) | +| main.rs:301:36:301:45 | source(...) | Err | main.rs:301:32:301:46 | Err(...) | +| main.rs:312:29:312:38 | source(...) | A | main.rs:312:14:312:39 | ...::A(...) | +| main.rs:313:29:313:29 | 2 | B | main.rs:313:14:313:30 | ...::B(...) | +| main.rs:330:16:330:25 | source(...) | A | main.rs:330:14:330:26 | A(...) | +| main.rs:331:16:331:16 | 2 | B | main.rs:331:14:331:17 | B(...) | +| main.rs:352:18:352:27 | source(...) | C | main.rs:351:14:353:5 | ...::C {...} | +| main.rs:354:41:354:41 | 2 | D | main.rs:354:14:354:43 | ...::D {...} | +| main.rs:372:18:372:27 | source(...) | C | main.rs:371:14:373:5 | C {...} | +| main.rs:374:27:374:27 | 2 | D | main.rs:374:14:374:29 | D {...} | | main.rs:392:17:392:17 | 1 | element | main.rs:392:16:392:33 | [...] | | main.rs:392:20:392:20 | 2 | element | main.rs:392:16:392:33 | [...] | | main.rs:392:23:392:32 | source(...) | element | main.rs:392:16:392:33 | [...] | -| main.rs:397:17:397:17 | 1 | element | main.rs:397:16:397:24 | [...] | -| main.rs:397:20:397:20 | 2 | element | main.rs:397:16:397:24 | [...] | -| main.rs:397:23:397:23 | 3 | element | main.rs:397:16:397:24 | [...] | -| main.rs:404:17:404:17 | 1 | element | main.rs:404:16:404:33 | [...] | -| main.rs:404:20:404:20 | 2 | element | main.rs:404:16:404:33 | [...] | -| main.rs:404:23:404:32 | source(...) | element | main.rs:404:16:404:33 | [...] | -| main.rs:415:24:415:24 | 1 | element | main.rs:415:23:415:31 | [...] | -| main.rs:415:27:415:27 | 2 | element | main.rs:415:23:415:31 | [...] | -| main.rs:415:30:415:30 | 3 | element | main.rs:415:23:415:31 | [...] | -| main.rs:418:18:418:27 | source(...) | element | main.rs:418:5:418:11 | [post] mut_arr | -| main.rs:430:41:430:67 | default_name | captured default_name | main.rs:430:41:430:67 | \|...\| ... | -| main.rs:452:18:452:18 | c | &ref | main.rs:452:17:452:18 | &c | -| main.rs:455:15:455:15 | b | &ref | main.rs:455:14:455:15 | &b | -| main.rs:464:27:464:27 | 0 | Some | main.rs:464:22:464:28 | Some(...) | +| main.rs:396:17:396:26 | source(...) | element | main.rs:396:16:396:31 | [...; 10] | +| main.rs:400:17:400:17 | 1 | element | main.rs:400:16:400:24 | [...] | +| main.rs:400:20:400:20 | 2 | element | main.rs:400:16:400:24 | [...] | +| main.rs:400:23:400:23 | 3 | element | main.rs:400:16:400:24 | [...] | +| main.rs:406:17:406:17 | 1 | element | main.rs:406:16:406:33 | [...] | +| main.rs:406:20:406:20 | 2 | element | main.rs:406:16:406:33 | [...] | +| main.rs:406:23:406:32 | source(...) | element | main.rs:406:16:406:33 | [...] | +| main.rs:411:17:411:17 | 1 | element | main.rs:411:16:411:24 | [...] | +| main.rs:411:20:411:20 | 2 | element | main.rs:411:16:411:24 | [...] | +| main.rs:411:23:411:23 | 3 | element | main.rs:411:16:411:24 | [...] | +| main.rs:418:17:418:17 | 1 | element | main.rs:418:16:418:33 | [...] | +| main.rs:418:20:418:20 | 2 | element | main.rs:418:16:418:33 | [...] | +| main.rs:418:23:418:32 | source(...) | element | main.rs:418:16:418:33 | [...] | +| main.rs:429:24:429:24 | 1 | element | main.rs:429:23:429:31 | [...] | +| main.rs:429:27:429:27 | 2 | element | main.rs:429:23:429:31 | [...] | +| main.rs:429:30:429:30 | 3 | element | main.rs:429:23:429:31 | [...] | +| main.rs:432:18:432:27 | source(...) | element | main.rs:432:5:432:11 | [post] mut_arr | +| main.rs:444:41:444:67 | default_name | captured default_name | main.rs:444:41:444:67 | \|...\| ... | +| main.rs:466:18:466:18 | c | &ref | main.rs:466:17:466:18 | &c | +| main.rs:469:15:469:15 | b | &ref | main.rs:469:14:469:15 | &b | +| main.rs:478:27:478:27 | 0 | Some | main.rs:478:22:478:28 | Some(...) | readStep | file://:0:0:0:0 | [summary param] 0 in lang:core::_::::from | &ref | file://:0:0:0:0 | [summary] read: Argument[0].Reference in lang:core::_::::from | | file://:0:0:0:0 | [summary param] 0 in lang:core::_::::and_then | function return | file://:0:0:0:0 | [summary] read: Argument[0].ReturnValue in lang:core::_::::and_then | @@ -923,51 +947,51 @@ readStep | main.rs:263:14:263:15 | s1 | Some | main.rs:263:14:263:16 | TryExpr | | main.rs:265:10:265:11 | s2 | Ok | main.rs:265:10:265:12 | TryExpr | | main.rs:265:10:265:11 | s2 | Some | main.rs:265:10:265:12 | TryExpr | -| main.rs:273:14:273:15 | s1 | Ok | main.rs:273:14:273:16 | TryExpr | -| main.rs:273:14:273:15 | s1 | Some | main.rs:273:14:273:16 | TryExpr | -| main.rs:274:14:274:15 | s2 | Ok | main.rs:274:14:274:16 | TryExpr | -| main.rs:274:14:274:15 | s2 | Some | main.rs:274:14:274:16 | TryExpr | -| main.rs:277:14:277:15 | s3 | Ok | main.rs:277:14:277:16 | TryExpr | -| main.rs:277:14:277:15 | s3 | Some | main.rs:277:14:277:16 | TryExpr | -| main.rs:301:9:301:25 | ...::A(...) | A | main.rs:301:24:301:24 | n | -| main.rs:302:9:302:25 | ...::B(...) | B | main.rs:302:24:302:24 | n | -| main.rs:305:9:305:25 | ...::A(...) | A | main.rs:305:24:305:24 | n | -| main.rs:305:29:305:45 | ...::B(...) | B | main.rs:305:44:305:44 | n | -| main.rs:308:9:308:25 | ...::A(...) | A | main.rs:308:24:308:24 | n | -| main.rs:309:9:309:25 | ...::B(...) | B | main.rs:309:24:309:24 | n | -| main.rs:319:9:319:12 | A(...) | A | main.rs:319:11:319:11 | n | -| main.rs:320:9:320:12 | B(...) | B | main.rs:320:11:320:11 | n | -| main.rs:323:9:323:12 | A(...) | A | main.rs:323:11:323:11 | n | -| main.rs:323:16:323:19 | B(...) | B | main.rs:323:18:323:18 | n | -| main.rs:326:9:326:12 | A(...) | A | main.rs:326:11:326:11 | n | -| main.rs:327:9:327:12 | B(...) | B | main.rs:327:11:327:11 | n | -| main.rs:342:9:342:38 | ...::C {...} | C | main.rs:342:36:342:36 | n | -| main.rs:343:9:343:38 | ...::D {...} | D | main.rs:343:36:343:36 | n | -| main.rs:346:9:346:38 | ...::C {...} | C | main.rs:346:36:346:36 | n | -| main.rs:346:42:346:71 | ...::D {...} | D | main.rs:346:69:346:69 | n | -| main.rs:349:9:349:38 | ...::C {...} | C | main.rs:349:36:349:36 | n | -| main.rs:350:9:350:38 | ...::D {...} | D | main.rs:350:36:350:36 | n | -| main.rs:362:9:362:24 | C {...} | C | main.rs:362:22:362:22 | n | -| main.rs:363:9:363:24 | D {...} | D | main.rs:363:22:363:22 | n | -| main.rs:366:9:366:24 | C {...} | C | main.rs:366:22:366:22 | n | -| main.rs:366:28:366:43 | D {...} | D | main.rs:366:41:366:41 | n | -| main.rs:369:9:369:24 | C {...} | C | main.rs:369:22:369:22 | n | -| main.rs:370:9:370:24 | D {...} | D | main.rs:370:22:370:22 | n | -| main.rs:379:14:379:17 | arr1 | element | main.rs:379:14:379:20 | arr1[2] | -| main.rs:383:14:383:17 | arr2 | element | main.rs:383:14:383:20 | arr2[4] | -| main.rs:387:14:387:17 | arr3 | element | main.rs:387:14:387:20 | arr3[2] | -| main.rs:393:15:393:18 | arr1 | element | main.rs:393:9:393:10 | n1 | -| main.rs:398:15:398:18 | arr2 | element | main.rs:398:9:398:10 | n2 | -| main.rs:406:9:406:17 | SlicePat | element | main.rs:406:10:406:10 | a | -| main.rs:406:9:406:17 | SlicePat | element | main.rs:406:13:406:13 | b | -| main.rs:406:9:406:17 | SlicePat | element | main.rs:406:16:406:16 | c | -| main.rs:416:10:416:16 | mut_arr | element | main.rs:416:10:416:19 | mut_arr[1] | -| main.rs:418:5:418:11 | mut_arr | element | main.rs:418:5:418:14 | mut_arr[1] | -| main.rs:419:13:419:19 | mut_arr | element | main.rs:419:13:419:22 | mut_arr[1] | -| main.rs:421:10:421:16 | mut_arr | element | main.rs:421:10:421:19 | mut_arr[0] | -| main.rs:428:9:428:20 | TuplePat | tuple.0 | main.rs:428:10:428:13 | cond | -| main.rs:428:9:428:20 | TuplePat | tuple.1 | main.rs:428:16:428:19 | name | -| main.rs:428:25:428:29 | names | element | main.rs:428:9:428:20 | TuplePat | -| main.rs:430:41:430:67 | [post] \|...\| ... | captured default_name | main.rs:430:41:430:67 | [post] default_name | -| main.rs:430:44:430:55 | this | captured default_name | main.rs:430:44:430:55 | default_name | -| main.rs:457:11:457:15 | c_ref | &ref | main.rs:457:10:457:15 | * ... | +| main.rs:287:14:287:15 | s1 | Ok | main.rs:287:14:287:16 | TryExpr | +| main.rs:287:14:287:15 | s1 | Some | main.rs:287:14:287:16 | TryExpr | +| main.rs:288:14:288:15 | s2 | Ok | main.rs:288:14:288:16 | TryExpr | +| main.rs:288:14:288:15 | s2 | Some | main.rs:288:14:288:16 | TryExpr | +| main.rs:291:14:291:15 | s3 | Ok | main.rs:291:14:291:16 | TryExpr | +| main.rs:291:14:291:15 | s3 | Some | main.rs:291:14:291:16 | TryExpr | +| main.rs:315:9:315:25 | ...::A(...) | A | main.rs:315:24:315:24 | n | +| main.rs:316:9:316:25 | ...::B(...) | B | main.rs:316:24:316:24 | n | +| main.rs:319:9:319:25 | ...::A(...) | A | main.rs:319:24:319:24 | n | +| main.rs:319:29:319:45 | ...::B(...) | B | main.rs:319:44:319:44 | n | +| main.rs:322:9:322:25 | ...::A(...) | A | main.rs:322:24:322:24 | n | +| main.rs:323:9:323:25 | ...::B(...) | B | main.rs:323:24:323:24 | n | +| main.rs:333:9:333:12 | A(...) | A | main.rs:333:11:333:11 | n | +| main.rs:334:9:334:12 | B(...) | B | main.rs:334:11:334:11 | n | +| main.rs:337:9:337:12 | A(...) | A | main.rs:337:11:337:11 | n | +| main.rs:337:16:337:19 | B(...) | B | main.rs:337:18:337:18 | n | +| main.rs:340:9:340:12 | A(...) | A | main.rs:340:11:340:11 | n | +| main.rs:341:9:341:12 | B(...) | B | main.rs:341:11:341:11 | n | +| main.rs:356:9:356:38 | ...::C {...} | C | main.rs:356:36:356:36 | n | +| main.rs:357:9:357:38 | ...::D {...} | D | main.rs:357:36:357:36 | n | +| main.rs:360:9:360:38 | ...::C {...} | C | main.rs:360:36:360:36 | n | +| main.rs:360:42:360:71 | ...::D {...} | D | main.rs:360:69:360:69 | n | +| main.rs:363:9:363:38 | ...::C {...} | C | main.rs:363:36:363:36 | n | +| main.rs:364:9:364:38 | ...::D {...} | D | main.rs:364:36:364:36 | n | +| main.rs:376:9:376:24 | C {...} | C | main.rs:376:22:376:22 | n | +| main.rs:377:9:377:24 | D {...} | D | main.rs:377:22:377:22 | n | +| main.rs:380:9:380:24 | C {...} | C | main.rs:380:22:380:22 | n | +| main.rs:380:28:380:43 | D {...} | D | main.rs:380:41:380:41 | n | +| main.rs:383:9:383:24 | C {...} | C | main.rs:383:22:383:22 | n | +| main.rs:384:9:384:24 | D {...} | D | main.rs:384:22:384:22 | n | +| main.rs:393:14:393:17 | arr1 | element | main.rs:393:14:393:20 | arr1[2] | +| main.rs:397:14:397:17 | arr2 | element | main.rs:397:14:397:20 | arr2[4] | +| main.rs:401:14:401:17 | arr3 | element | main.rs:401:14:401:20 | arr3[2] | +| main.rs:407:15:407:18 | arr1 | element | main.rs:407:9:407:10 | n1 | +| main.rs:412:15:412:18 | arr2 | element | main.rs:412:9:412:10 | n2 | +| main.rs:420:9:420:17 | SlicePat | element | main.rs:420:10:420:10 | a | +| main.rs:420:9:420:17 | SlicePat | element | main.rs:420:13:420:13 | b | +| main.rs:420:9:420:17 | SlicePat | element | main.rs:420:16:420:16 | c | +| main.rs:430:10:430:16 | mut_arr | element | main.rs:430:10:430:19 | mut_arr[1] | +| main.rs:432:5:432:11 | mut_arr | element | main.rs:432:5:432:14 | mut_arr[1] | +| main.rs:433:13:433:19 | mut_arr | element | main.rs:433:13:433:22 | mut_arr[1] | +| main.rs:435:10:435:16 | mut_arr | element | main.rs:435:10:435:19 | mut_arr[0] | +| main.rs:442:9:442:20 | TuplePat | tuple.0 | main.rs:442:10:442:13 | cond | +| main.rs:442:9:442:20 | TuplePat | tuple.1 | main.rs:442:16:442:19 | name | +| main.rs:442:25:442:29 | names | element | main.rs:442:9:442:20 | TuplePat | +| main.rs:444:41:444:67 | [post] \|...\| ... | captured default_name | main.rs:444:41:444:67 | [post] default_name | +| main.rs:444:44:444:55 | this | captured default_name | main.rs:444:44:444:55 | default_name | +| main.rs:471:11:471:15 | c_ref | &ref | main.rs:471:10:471:15 | * ... | diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected index 7ca94b7c0bb6..96d6af4448bd 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -97,104 +97,104 @@ edges | main.rs:263:9:263:10 | i1 | main.rs:264:10:264:11 | i1 | provenance | | | main.rs:263:14:263:15 | s1 [Some] | main.rs:263:14:263:16 | TryExpr | provenance | | | main.rs:263:14:263:16 | TryExpr | main.rs:263:9:263:10 | i1 | provenance | | -| main.rs:270:9:270:10 | s1 [Ok] | main.rs:273:14:273:15 | s1 [Ok] | provenance | | -| main.rs:270:32:270:45 | Ok(...) [Ok] | main.rs:270:9:270:10 | s1 [Ok] | provenance | | -| main.rs:270:35:270:44 | source(...) | main.rs:270:32:270:45 | Ok(...) [Ok] | provenance | | -| main.rs:273:9:273:10 | i1 | main.rs:275:10:275:11 | i1 | provenance | | -| main.rs:273:14:273:15 | s1 [Ok] | main.rs:273:14:273:16 | TryExpr | provenance | | -| main.rs:273:14:273:16 | TryExpr | main.rs:273:9:273:10 | i1 | provenance | | -| main.rs:283:9:283:10 | s1 [Ok] | main.rs:284:10:284:11 | s1 [Ok] | provenance | | -| main.rs:283:32:283:45 | Ok(...) [Ok] | main.rs:283:9:283:10 | s1 [Ok] | provenance | | -| main.rs:283:35:283:44 | source(...) | main.rs:283:32:283:45 | Ok(...) [Ok] | provenance | | -| main.rs:284:10:284:11 | s1 [Ok] | main.rs:284:10:284:22 | s1.expect(...) | provenance | MaD:6 | -| main.rs:287:9:287:10 | s2 [Err] | main.rs:289:10:289:11 | s2 [Err] | provenance | | -| main.rs:287:32:287:46 | Err(...) [Err] | main.rs:287:9:287:10 | s2 [Err] | provenance | | -| main.rs:287:36:287:45 | source(...) | main.rs:287:32:287:46 | Err(...) [Err] | provenance | | -| main.rs:289:10:289:11 | s2 [Err] | main.rs:289:10:289:26 | s2.expect_err(...) | provenance | MaD:7 | -| main.rs:298:9:298:10 | s1 [A] | main.rs:300:11:300:12 | s1 [A] | provenance | | -| main.rs:298:14:298:39 | ...::A(...) [A] | main.rs:298:9:298:10 | s1 [A] | provenance | | -| main.rs:298:29:298:38 | source(...) | main.rs:298:14:298:39 | ...::A(...) [A] | provenance | | -| main.rs:300:11:300:12 | s1 [A] | main.rs:301:9:301:25 | ...::A(...) [A] | provenance | | -| main.rs:300:11:300:12 | s1 [A] | main.rs:304:11:304:12 | s1 [A] | provenance | | -| main.rs:301:9:301:25 | ...::A(...) [A] | main.rs:301:24:301:24 | n | provenance | | -| main.rs:301:24:301:24 | n | main.rs:301:35:301:35 | n | provenance | | -| main.rs:304:11:304:12 | s1 [A] | main.rs:305:9:305:25 | ...::A(...) [A] | provenance | | -| main.rs:305:9:305:25 | ...::A(...) [A] | main.rs:305:24:305:24 | n | provenance | | -| main.rs:305:24:305:24 | n | main.rs:305:55:305:55 | n | provenance | | -| main.rs:316:9:316:10 | s1 [A] | main.rs:318:11:318:12 | s1 [A] | provenance | | -| main.rs:316:14:316:26 | A(...) [A] | main.rs:316:9:316:10 | s1 [A] | provenance | | -| main.rs:316:16:316:25 | source(...) | main.rs:316:14:316:26 | A(...) [A] | provenance | | -| main.rs:318:11:318:12 | s1 [A] | main.rs:319:9:319:12 | A(...) [A] | provenance | | -| main.rs:318:11:318:12 | s1 [A] | main.rs:322:11:322:12 | s1 [A] | provenance | | -| main.rs:319:9:319:12 | A(...) [A] | main.rs:319:11:319:11 | n | provenance | | -| main.rs:319:11:319:11 | n | main.rs:319:22:319:22 | n | provenance | | -| main.rs:322:11:322:12 | s1 [A] | main.rs:323:9:323:12 | A(...) [A] | provenance | | -| main.rs:323:9:323:12 | A(...) [A] | main.rs:323:11:323:11 | n | provenance | | -| main.rs:323:11:323:11 | n | main.rs:323:29:323:29 | n | provenance | | -| main.rs:337:9:337:10 | s1 [C] | main.rs:341:11:341:12 | s1 [C] | provenance | | -| main.rs:337:14:339:5 | ...::C {...} [C] | main.rs:337:9:337:10 | s1 [C] | provenance | | -| main.rs:338:18:338:27 | source(...) | main.rs:337:14:339:5 | ...::C {...} [C] | provenance | | -| main.rs:341:11:341:12 | s1 [C] | main.rs:342:9:342:38 | ...::C {...} [C] | provenance | | -| main.rs:341:11:341:12 | s1 [C] | main.rs:345:11:345:12 | s1 [C] | provenance | | -| main.rs:342:9:342:38 | ...::C {...} [C] | main.rs:342:36:342:36 | n | provenance | | -| main.rs:342:36:342:36 | n | main.rs:342:48:342:48 | n | provenance | | -| main.rs:345:11:345:12 | s1 [C] | main.rs:346:9:346:38 | ...::C {...} [C] | provenance | | -| main.rs:346:9:346:38 | ...::C {...} [C] | main.rs:346:36:346:36 | n | provenance | | -| main.rs:346:36:346:36 | n | main.rs:346:81:346:81 | n | provenance | | -| main.rs:357:9:357:10 | s1 [C] | main.rs:361:11:361:12 | s1 [C] | provenance | | -| main.rs:357:14:359:5 | C {...} [C] | main.rs:357:9:357:10 | s1 [C] | provenance | | -| main.rs:358:18:358:27 | source(...) | main.rs:357:14:359:5 | C {...} [C] | provenance | | -| main.rs:361:11:361:12 | s1 [C] | main.rs:362:9:362:24 | C {...} [C] | provenance | | -| main.rs:361:11:361:12 | s1 [C] | main.rs:365:11:365:12 | s1 [C] | provenance | | -| main.rs:362:9:362:24 | C {...} [C] | main.rs:362:22:362:22 | n | provenance | | -| main.rs:362:22:362:22 | n | main.rs:362:34:362:34 | n | provenance | | -| main.rs:365:11:365:12 | s1 [C] | main.rs:366:9:366:24 | C {...} [C] | provenance | | -| main.rs:366:9:366:24 | C {...} [C] | main.rs:366:22:366:22 | n | provenance | | -| main.rs:366:22:366:22 | n | main.rs:366:53:366:53 | n | provenance | | -| main.rs:378:9:378:12 | arr1 [element] | main.rs:379:14:379:17 | arr1 [element] | provenance | | -| main.rs:378:16:378:33 | [...] [element] | main.rs:378:9:378:12 | arr1 [element] | provenance | | -| main.rs:378:23:378:32 | source(...) | main.rs:378:16:378:33 | [...] [element] | provenance | | -| main.rs:379:9:379:10 | n1 | main.rs:380:10:380:11 | n1 | provenance | | -| main.rs:379:14:379:17 | arr1 [element] | main.rs:379:14:379:20 | arr1[2] | provenance | | -| main.rs:379:14:379:20 | arr1[2] | main.rs:379:9:379:10 | n1 | provenance | | -| main.rs:382:9:382:12 | arr2 [element] | main.rs:383:14:383:17 | arr2 [element] | provenance | | -| main.rs:382:16:382:31 | [...; 10] [element] | main.rs:382:9:382:12 | arr2 [element] | provenance | | -| main.rs:382:17:382:26 | source(...) | main.rs:382:16:382:31 | [...; 10] [element] | provenance | | -| main.rs:383:9:383:10 | n2 | main.rs:384:10:384:11 | n2 | provenance | | -| main.rs:383:14:383:17 | arr2 [element] | main.rs:383:14:383:20 | arr2[4] | provenance | | -| main.rs:383:14:383:20 | arr2[4] | main.rs:383:9:383:10 | n2 | provenance | | -| main.rs:392:9:392:12 | arr1 [element] | main.rs:393:15:393:18 | arr1 [element] | provenance | | +| main.rs:284:9:284:10 | s1 [Ok] | main.rs:287:14:287:15 | s1 [Ok] | provenance | | +| main.rs:284:32:284:45 | Ok(...) [Ok] | main.rs:284:9:284:10 | s1 [Ok] | provenance | | +| main.rs:284:35:284:44 | source(...) | main.rs:284:32:284:45 | Ok(...) [Ok] | provenance | | +| main.rs:287:9:287:10 | i1 | main.rs:289:10:289:11 | i1 | provenance | | +| main.rs:287:14:287:15 | s1 [Ok] | main.rs:287:14:287:16 | TryExpr | provenance | | +| main.rs:287:14:287:16 | TryExpr | main.rs:287:9:287:10 | i1 | provenance | | +| main.rs:297:9:297:10 | s1 [Ok] | main.rs:298:10:298:11 | s1 [Ok] | provenance | | +| main.rs:297:32:297:45 | Ok(...) [Ok] | main.rs:297:9:297:10 | s1 [Ok] | provenance | | +| main.rs:297:35:297:44 | source(...) | main.rs:297:32:297:45 | Ok(...) [Ok] | provenance | | +| main.rs:298:10:298:11 | s1 [Ok] | main.rs:298:10:298:22 | s1.expect(...) | provenance | MaD:6 | +| main.rs:301:9:301:10 | s2 [Err] | main.rs:303:10:303:11 | s2 [Err] | provenance | | +| main.rs:301:32:301:46 | Err(...) [Err] | main.rs:301:9:301:10 | s2 [Err] | provenance | | +| main.rs:301:36:301:45 | source(...) | main.rs:301:32:301:46 | Err(...) [Err] | provenance | | +| main.rs:303:10:303:11 | s2 [Err] | main.rs:303:10:303:26 | s2.expect_err(...) | provenance | MaD:7 | +| main.rs:312:9:312:10 | s1 [A] | main.rs:314:11:314:12 | s1 [A] | provenance | | +| main.rs:312:14:312:39 | ...::A(...) [A] | main.rs:312:9:312:10 | s1 [A] | provenance | | +| main.rs:312:29:312:38 | source(...) | main.rs:312:14:312:39 | ...::A(...) [A] | provenance | | +| main.rs:314:11:314:12 | s1 [A] | main.rs:315:9:315:25 | ...::A(...) [A] | provenance | | +| main.rs:314:11:314:12 | s1 [A] | main.rs:318:11:318:12 | s1 [A] | provenance | | +| main.rs:315:9:315:25 | ...::A(...) [A] | main.rs:315:24:315:24 | n | provenance | | +| main.rs:315:24:315:24 | n | main.rs:315:35:315:35 | n | provenance | | +| main.rs:318:11:318:12 | s1 [A] | main.rs:319:9:319:25 | ...::A(...) [A] | provenance | | +| main.rs:319:9:319:25 | ...::A(...) [A] | main.rs:319:24:319:24 | n | provenance | | +| main.rs:319:24:319:24 | n | main.rs:319:55:319:55 | n | provenance | | +| main.rs:330:9:330:10 | s1 [A] | main.rs:332:11:332:12 | s1 [A] | provenance | | +| main.rs:330:14:330:26 | A(...) [A] | main.rs:330:9:330:10 | s1 [A] | provenance | | +| main.rs:330:16:330:25 | source(...) | main.rs:330:14:330:26 | A(...) [A] | provenance | | +| main.rs:332:11:332:12 | s1 [A] | main.rs:333:9:333:12 | A(...) [A] | provenance | | +| main.rs:332:11:332:12 | s1 [A] | main.rs:336:11:336:12 | s1 [A] | provenance | | +| main.rs:333:9:333:12 | A(...) [A] | main.rs:333:11:333:11 | n | provenance | | +| main.rs:333:11:333:11 | n | main.rs:333:22:333:22 | n | provenance | | +| main.rs:336:11:336:12 | s1 [A] | main.rs:337:9:337:12 | A(...) [A] | provenance | | +| main.rs:337:9:337:12 | A(...) [A] | main.rs:337:11:337:11 | n | provenance | | +| main.rs:337:11:337:11 | n | main.rs:337:29:337:29 | n | provenance | | +| main.rs:351:9:351:10 | s1 [C] | main.rs:355:11:355:12 | s1 [C] | provenance | | +| main.rs:351:14:353:5 | ...::C {...} [C] | main.rs:351:9:351:10 | s1 [C] | provenance | | +| main.rs:352:18:352:27 | source(...) | main.rs:351:14:353:5 | ...::C {...} [C] | provenance | | +| main.rs:355:11:355:12 | s1 [C] | main.rs:356:9:356:38 | ...::C {...} [C] | provenance | | +| main.rs:355:11:355:12 | s1 [C] | main.rs:359:11:359:12 | s1 [C] | provenance | | +| main.rs:356:9:356:38 | ...::C {...} [C] | main.rs:356:36:356:36 | n | provenance | | +| main.rs:356:36:356:36 | n | main.rs:356:48:356:48 | n | provenance | | +| main.rs:359:11:359:12 | s1 [C] | main.rs:360:9:360:38 | ...::C {...} [C] | provenance | | +| main.rs:360:9:360:38 | ...::C {...} [C] | main.rs:360:36:360:36 | n | provenance | | +| main.rs:360:36:360:36 | n | main.rs:360:81:360:81 | n | provenance | | +| main.rs:371:9:371:10 | s1 [C] | main.rs:375:11:375:12 | s1 [C] | provenance | | +| main.rs:371:14:373:5 | C {...} [C] | main.rs:371:9:371:10 | s1 [C] | provenance | | +| main.rs:372:18:372:27 | source(...) | main.rs:371:14:373:5 | C {...} [C] | provenance | | +| main.rs:375:11:375:12 | s1 [C] | main.rs:376:9:376:24 | C {...} [C] | provenance | | +| main.rs:375:11:375:12 | s1 [C] | main.rs:379:11:379:12 | s1 [C] | provenance | | +| main.rs:376:9:376:24 | C {...} [C] | main.rs:376:22:376:22 | n | provenance | | +| main.rs:376:22:376:22 | n | main.rs:376:34:376:34 | n | provenance | | +| main.rs:379:11:379:12 | s1 [C] | main.rs:380:9:380:24 | C {...} [C] | provenance | | +| main.rs:380:9:380:24 | C {...} [C] | main.rs:380:22:380:22 | n | provenance | | +| main.rs:380:22:380:22 | n | main.rs:380:53:380:53 | n | provenance | | +| main.rs:392:9:392:12 | arr1 [element] | main.rs:393:14:393:17 | arr1 [element] | provenance | | | main.rs:392:16:392:33 | [...] [element] | main.rs:392:9:392:12 | arr1 [element] | provenance | | | main.rs:392:23:392:32 | source(...) | main.rs:392:16:392:33 | [...] [element] | provenance | | -| main.rs:393:9:393:10 | n1 | main.rs:394:14:394:15 | n1 | provenance | | -| main.rs:393:15:393:18 | arr1 [element] | main.rs:393:9:393:10 | n1 | provenance | | -| main.rs:404:9:404:12 | arr1 [element] | main.rs:405:11:405:14 | arr1 [element] | provenance | | -| main.rs:404:16:404:33 | [...] [element] | main.rs:404:9:404:12 | arr1 [element] | provenance | | -| main.rs:404:23:404:32 | source(...) | main.rs:404:16:404:33 | [...] [element] | provenance | | -| main.rs:405:11:405:14 | arr1 [element] | main.rs:406:9:406:17 | SlicePat [element] | provenance | | -| main.rs:406:9:406:17 | SlicePat [element] | main.rs:406:10:406:10 | a | provenance | | -| main.rs:406:9:406:17 | SlicePat [element] | main.rs:406:13:406:13 | b | provenance | | -| main.rs:406:9:406:17 | SlicePat [element] | main.rs:406:16:406:16 | c | provenance | | -| main.rs:406:10:406:10 | a | main.rs:407:18:407:18 | a | provenance | | -| main.rs:406:13:406:13 | b | main.rs:408:18:408:18 | b | provenance | | -| main.rs:406:16:406:16 | c | main.rs:409:18:409:18 | c | provenance | | -| main.rs:418:5:418:11 | [post] mut_arr [element] | main.rs:419:13:419:19 | mut_arr [element] | provenance | | -| main.rs:418:5:418:11 | [post] mut_arr [element] | main.rs:421:10:421:16 | mut_arr [element] | provenance | | -| main.rs:418:18:418:27 | source(...) | main.rs:418:5:418:11 | [post] mut_arr [element] | provenance | | -| main.rs:419:9:419:9 | d | main.rs:420:10:420:10 | d | provenance | | -| main.rs:419:13:419:19 | mut_arr [element] | main.rs:419:13:419:22 | mut_arr[1] | provenance | | -| main.rs:419:13:419:22 | mut_arr[1] | main.rs:419:9:419:9 | d | provenance | | -| main.rs:421:10:421:16 | mut_arr [element] | main.rs:421:10:421:19 | mut_arr[0] | provenance | | -| main.rs:444:9:444:9 | s | main.rs:445:10:445:10 | s | provenance | | -| main.rs:444:25:444:26 | source(...) | main.rs:444:9:444:9 | s | provenance | | -| main.rs:449:9:449:9 | a | main.rs:454:10:454:10 | a | provenance | | -| main.rs:449:13:449:22 | source(...) | main.rs:449:9:449:9 | a | provenance | | -| main.rs:451:9:451:9 | c | main.rs:452:18:452:18 | c | provenance | | -| main.rs:451:13:451:22 | source(...) | main.rs:451:9:451:9 | c | provenance | | -| main.rs:452:9:452:13 | c_ref [&ref] | main.rs:457:11:457:15 | c_ref [&ref] | provenance | | -| main.rs:452:17:452:18 | &c [&ref] | main.rs:452:9:452:13 | c_ref [&ref] | provenance | | -| main.rs:452:18:452:18 | c | main.rs:452:17:452:18 | &c [&ref] | provenance | | -| main.rs:457:11:457:15 | c_ref [&ref] | main.rs:457:10:457:15 | * ... | provenance | | +| main.rs:393:9:393:10 | n1 | main.rs:394:10:394:11 | n1 | provenance | | +| main.rs:393:14:393:17 | arr1 [element] | main.rs:393:14:393:20 | arr1[2] | provenance | | +| main.rs:393:14:393:20 | arr1[2] | main.rs:393:9:393:10 | n1 | provenance | | +| main.rs:396:9:396:12 | arr2 [element] | main.rs:397:14:397:17 | arr2 [element] | provenance | | +| main.rs:396:16:396:31 | [...; 10] [element] | main.rs:396:9:396:12 | arr2 [element] | provenance | | +| main.rs:396:17:396:26 | source(...) | main.rs:396:16:396:31 | [...; 10] [element] | provenance | | +| main.rs:397:9:397:10 | n2 | main.rs:398:10:398:11 | n2 | provenance | | +| main.rs:397:14:397:17 | arr2 [element] | main.rs:397:14:397:20 | arr2[4] | provenance | | +| main.rs:397:14:397:20 | arr2[4] | main.rs:397:9:397:10 | n2 | provenance | | +| main.rs:406:9:406:12 | arr1 [element] | main.rs:407:15:407:18 | arr1 [element] | provenance | | +| main.rs:406:16:406:33 | [...] [element] | main.rs:406:9:406:12 | arr1 [element] | provenance | | +| main.rs:406:23:406:32 | source(...) | main.rs:406:16:406:33 | [...] [element] | provenance | | +| main.rs:407:9:407:10 | n1 | main.rs:408:14:408:15 | n1 | provenance | | +| main.rs:407:15:407:18 | arr1 [element] | main.rs:407:9:407:10 | n1 | provenance | | +| main.rs:418:9:418:12 | arr1 [element] | main.rs:419:11:419:14 | arr1 [element] | provenance | | +| main.rs:418:16:418:33 | [...] [element] | main.rs:418:9:418:12 | arr1 [element] | provenance | | +| main.rs:418:23:418:32 | source(...) | main.rs:418:16:418:33 | [...] [element] | provenance | | +| main.rs:419:11:419:14 | arr1 [element] | main.rs:420:9:420:17 | SlicePat [element] | provenance | | +| main.rs:420:9:420:17 | SlicePat [element] | main.rs:420:10:420:10 | a | provenance | | +| main.rs:420:9:420:17 | SlicePat [element] | main.rs:420:13:420:13 | b | provenance | | +| main.rs:420:9:420:17 | SlicePat [element] | main.rs:420:16:420:16 | c | provenance | | +| main.rs:420:10:420:10 | a | main.rs:421:18:421:18 | a | provenance | | +| main.rs:420:13:420:13 | b | main.rs:422:18:422:18 | b | provenance | | +| main.rs:420:16:420:16 | c | main.rs:423:18:423:18 | c | provenance | | +| main.rs:432:5:432:11 | [post] mut_arr [element] | main.rs:433:13:433:19 | mut_arr [element] | provenance | | +| main.rs:432:5:432:11 | [post] mut_arr [element] | main.rs:435:10:435:16 | mut_arr [element] | provenance | | +| main.rs:432:18:432:27 | source(...) | main.rs:432:5:432:11 | [post] mut_arr [element] | provenance | | +| main.rs:433:9:433:9 | d | main.rs:434:10:434:10 | d | provenance | | +| main.rs:433:13:433:19 | mut_arr [element] | main.rs:433:13:433:22 | mut_arr[1] | provenance | | +| main.rs:433:13:433:22 | mut_arr[1] | main.rs:433:9:433:9 | d | provenance | | +| main.rs:435:10:435:16 | mut_arr [element] | main.rs:435:10:435:19 | mut_arr[0] | provenance | | +| main.rs:458:9:458:9 | s | main.rs:459:10:459:10 | s | provenance | | +| main.rs:458:25:458:26 | source(...) | main.rs:458:9:458:9 | s | provenance | | +| main.rs:463:9:463:9 | a | main.rs:468:10:468:10 | a | provenance | | +| main.rs:463:13:463:22 | source(...) | main.rs:463:9:463:9 | a | provenance | | +| main.rs:465:9:465:9 | c | main.rs:466:18:466:18 | c | provenance | | +| main.rs:465:13:465:22 | source(...) | main.rs:465:9:465:9 | c | provenance | | +| main.rs:466:9:466:13 | c_ref [&ref] | main.rs:471:11:471:15 | c_ref [&ref] | provenance | | +| main.rs:466:17:466:18 | &c [&ref] | main.rs:466:9:466:13 | c_ref [&ref] | provenance | | +| main.rs:466:18:466:18 | c | main.rs:466:17:466:18 | &c [&ref] | provenance | | +| main.rs:471:11:471:15 | c_ref [&ref] | main.rs:471:10:471:15 | * ... | provenance | | nodes | main.rs:18:10:18:18 | source(...) | semmle.label | source(...) | | main.rs:22:9:22:9 | s | semmle.label | s | @@ -308,119 +308,119 @@ nodes | main.rs:263:14:263:15 | s1 [Some] | semmle.label | s1 [Some] | | main.rs:263:14:263:16 | TryExpr | semmle.label | TryExpr | | main.rs:264:10:264:11 | i1 | semmle.label | i1 | -| main.rs:270:9:270:10 | s1 [Ok] | semmle.label | s1 [Ok] | -| main.rs:270:32:270:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | -| main.rs:270:35:270:44 | source(...) | semmle.label | source(...) | -| main.rs:273:9:273:10 | i1 | semmle.label | i1 | -| main.rs:273:14:273:15 | s1 [Ok] | semmle.label | s1 [Ok] | -| main.rs:273:14:273:16 | TryExpr | semmle.label | TryExpr | -| main.rs:275:10:275:11 | i1 | semmle.label | i1 | -| main.rs:283:9:283:10 | s1 [Ok] | semmle.label | s1 [Ok] | -| main.rs:283:32:283:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | -| main.rs:283:35:283:44 | source(...) | semmle.label | source(...) | -| main.rs:284:10:284:11 | s1 [Ok] | semmle.label | s1 [Ok] | -| main.rs:284:10:284:22 | s1.expect(...) | semmle.label | s1.expect(...) | -| main.rs:287:9:287:10 | s2 [Err] | semmle.label | s2 [Err] | -| main.rs:287:32:287:46 | Err(...) [Err] | semmle.label | Err(...) [Err] | -| main.rs:287:36:287:45 | source(...) | semmle.label | source(...) | -| main.rs:289:10:289:11 | s2 [Err] | semmle.label | s2 [Err] | -| main.rs:289:10:289:26 | s2.expect_err(...) | semmle.label | s2.expect_err(...) | -| main.rs:298:9:298:10 | s1 [A] | semmle.label | s1 [A] | -| main.rs:298:14:298:39 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | -| main.rs:298:29:298:38 | source(...) | semmle.label | source(...) | -| main.rs:300:11:300:12 | s1 [A] | semmle.label | s1 [A] | -| main.rs:301:9:301:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | -| main.rs:301:24:301:24 | n | semmle.label | n | -| main.rs:301:35:301:35 | n | semmle.label | n | -| main.rs:304:11:304:12 | s1 [A] | semmle.label | s1 [A] | -| main.rs:305:9:305:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | -| main.rs:305:24:305:24 | n | semmle.label | n | -| main.rs:305:55:305:55 | n | semmle.label | n | -| main.rs:316:9:316:10 | s1 [A] | semmle.label | s1 [A] | -| main.rs:316:14:316:26 | A(...) [A] | semmle.label | A(...) [A] | -| main.rs:316:16:316:25 | source(...) | semmle.label | source(...) | +| main.rs:284:9:284:10 | s1 [Ok] | semmle.label | s1 [Ok] | +| main.rs:284:32:284:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | +| main.rs:284:35:284:44 | source(...) | semmle.label | source(...) | +| main.rs:287:9:287:10 | i1 | semmle.label | i1 | +| main.rs:287:14:287:15 | s1 [Ok] | semmle.label | s1 [Ok] | +| main.rs:287:14:287:16 | TryExpr | semmle.label | TryExpr | +| main.rs:289:10:289:11 | i1 | semmle.label | i1 | +| main.rs:297:9:297:10 | s1 [Ok] | semmle.label | s1 [Ok] | +| main.rs:297:32:297:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | +| main.rs:297:35:297:44 | source(...) | semmle.label | source(...) | +| main.rs:298:10:298:11 | s1 [Ok] | semmle.label | s1 [Ok] | +| main.rs:298:10:298:22 | s1.expect(...) | semmle.label | s1.expect(...) | +| main.rs:301:9:301:10 | s2 [Err] | semmle.label | s2 [Err] | +| main.rs:301:32:301:46 | Err(...) [Err] | semmle.label | Err(...) [Err] | +| main.rs:301:36:301:45 | source(...) | semmle.label | source(...) | +| main.rs:303:10:303:11 | s2 [Err] | semmle.label | s2 [Err] | +| main.rs:303:10:303:26 | s2.expect_err(...) | semmle.label | s2.expect_err(...) | +| main.rs:312:9:312:10 | s1 [A] | semmle.label | s1 [A] | +| main.rs:312:14:312:39 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | +| main.rs:312:29:312:38 | source(...) | semmle.label | source(...) | +| main.rs:314:11:314:12 | s1 [A] | semmle.label | s1 [A] | +| main.rs:315:9:315:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | +| main.rs:315:24:315:24 | n | semmle.label | n | +| main.rs:315:35:315:35 | n | semmle.label | n | | main.rs:318:11:318:12 | s1 [A] | semmle.label | s1 [A] | -| main.rs:319:9:319:12 | A(...) [A] | semmle.label | A(...) [A] | -| main.rs:319:11:319:11 | n | semmle.label | n | -| main.rs:319:22:319:22 | n | semmle.label | n | -| main.rs:322:11:322:12 | s1 [A] | semmle.label | s1 [A] | -| main.rs:323:9:323:12 | A(...) [A] | semmle.label | A(...) [A] | -| main.rs:323:11:323:11 | n | semmle.label | n | -| main.rs:323:29:323:29 | n | semmle.label | n | -| main.rs:337:9:337:10 | s1 [C] | semmle.label | s1 [C] | -| main.rs:337:14:339:5 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:338:18:338:27 | source(...) | semmle.label | source(...) | -| main.rs:341:11:341:12 | s1 [C] | semmle.label | s1 [C] | -| main.rs:342:9:342:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:342:36:342:36 | n | semmle.label | n | -| main.rs:342:48:342:48 | n | semmle.label | n | -| main.rs:345:11:345:12 | s1 [C] | semmle.label | s1 [C] | -| main.rs:346:9:346:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:346:36:346:36 | n | semmle.label | n | -| main.rs:346:81:346:81 | n | semmle.label | n | -| main.rs:357:9:357:10 | s1 [C] | semmle.label | s1 [C] | -| main.rs:357:14:359:5 | C {...} [C] | semmle.label | C {...} [C] | -| main.rs:358:18:358:27 | source(...) | semmle.label | source(...) | -| main.rs:361:11:361:12 | s1 [C] | semmle.label | s1 [C] | -| main.rs:362:9:362:24 | C {...} [C] | semmle.label | C {...} [C] | -| main.rs:362:22:362:22 | n | semmle.label | n | -| main.rs:362:34:362:34 | n | semmle.label | n | -| main.rs:365:11:365:12 | s1 [C] | semmle.label | s1 [C] | -| main.rs:366:9:366:24 | C {...} [C] | semmle.label | C {...} [C] | -| main.rs:366:22:366:22 | n | semmle.label | n | -| main.rs:366:53:366:53 | n | semmle.label | n | -| main.rs:378:9:378:12 | arr1 [element] | semmle.label | arr1 [element] | -| main.rs:378:16:378:33 | [...] [element] | semmle.label | [...] [element] | -| main.rs:378:23:378:32 | source(...) | semmle.label | source(...) | -| main.rs:379:9:379:10 | n1 | semmle.label | n1 | -| main.rs:379:14:379:17 | arr1 [element] | semmle.label | arr1 [element] | -| main.rs:379:14:379:20 | arr1[2] | semmle.label | arr1[2] | -| main.rs:380:10:380:11 | n1 | semmle.label | n1 | -| main.rs:382:9:382:12 | arr2 [element] | semmle.label | arr2 [element] | -| main.rs:382:16:382:31 | [...; 10] [element] | semmle.label | [...; 10] [element] | -| main.rs:382:17:382:26 | source(...) | semmle.label | source(...) | -| main.rs:383:9:383:10 | n2 | semmle.label | n2 | -| main.rs:383:14:383:17 | arr2 [element] | semmle.label | arr2 [element] | -| main.rs:383:14:383:20 | arr2[4] | semmle.label | arr2[4] | -| main.rs:384:10:384:11 | n2 | semmle.label | n2 | +| main.rs:319:9:319:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | +| main.rs:319:24:319:24 | n | semmle.label | n | +| main.rs:319:55:319:55 | n | semmle.label | n | +| main.rs:330:9:330:10 | s1 [A] | semmle.label | s1 [A] | +| main.rs:330:14:330:26 | A(...) [A] | semmle.label | A(...) [A] | +| main.rs:330:16:330:25 | source(...) | semmle.label | source(...) | +| main.rs:332:11:332:12 | s1 [A] | semmle.label | s1 [A] | +| main.rs:333:9:333:12 | A(...) [A] | semmle.label | A(...) [A] | +| main.rs:333:11:333:11 | n | semmle.label | n | +| main.rs:333:22:333:22 | n | semmle.label | n | +| main.rs:336:11:336:12 | s1 [A] | semmle.label | s1 [A] | +| main.rs:337:9:337:12 | A(...) [A] | semmle.label | A(...) [A] | +| main.rs:337:11:337:11 | n | semmle.label | n | +| main.rs:337:29:337:29 | n | semmle.label | n | +| main.rs:351:9:351:10 | s1 [C] | semmle.label | s1 [C] | +| main.rs:351:14:353:5 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:352:18:352:27 | source(...) | semmle.label | source(...) | +| main.rs:355:11:355:12 | s1 [C] | semmle.label | s1 [C] | +| main.rs:356:9:356:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:356:36:356:36 | n | semmle.label | n | +| main.rs:356:48:356:48 | n | semmle.label | n | +| main.rs:359:11:359:12 | s1 [C] | semmle.label | s1 [C] | +| main.rs:360:9:360:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:360:36:360:36 | n | semmle.label | n | +| main.rs:360:81:360:81 | n | semmle.label | n | +| main.rs:371:9:371:10 | s1 [C] | semmle.label | s1 [C] | +| main.rs:371:14:373:5 | C {...} [C] | semmle.label | C {...} [C] | +| main.rs:372:18:372:27 | source(...) | semmle.label | source(...) | +| main.rs:375:11:375:12 | s1 [C] | semmle.label | s1 [C] | +| main.rs:376:9:376:24 | C {...} [C] | semmle.label | C {...} [C] | +| main.rs:376:22:376:22 | n | semmle.label | n | +| main.rs:376:34:376:34 | n | semmle.label | n | +| main.rs:379:11:379:12 | s1 [C] | semmle.label | s1 [C] | +| main.rs:380:9:380:24 | C {...} [C] | semmle.label | C {...} [C] | +| main.rs:380:22:380:22 | n | semmle.label | n | +| main.rs:380:53:380:53 | n | semmle.label | n | | main.rs:392:9:392:12 | arr1 [element] | semmle.label | arr1 [element] | | main.rs:392:16:392:33 | [...] [element] | semmle.label | [...] [element] | | main.rs:392:23:392:32 | source(...) | semmle.label | source(...) | | main.rs:393:9:393:10 | n1 | semmle.label | n1 | -| main.rs:393:15:393:18 | arr1 [element] | semmle.label | arr1 [element] | -| main.rs:394:14:394:15 | n1 | semmle.label | n1 | -| main.rs:404:9:404:12 | arr1 [element] | semmle.label | arr1 [element] | -| main.rs:404:16:404:33 | [...] [element] | semmle.label | [...] [element] | -| main.rs:404:23:404:32 | source(...) | semmle.label | source(...) | -| main.rs:405:11:405:14 | arr1 [element] | semmle.label | arr1 [element] | -| main.rs:406:9:406:17 | SlicePat [element] | semmle.label | SlicePat [element] | -| main.rs:406:10:406:10 | a | semmle.label | a | -| main.rs:406:13:406:13 | b | semmle.label | b | -| main.rs:406:16:406:16 | c | semmle.label | c | -| main.rs:407:18:407:18 | a | semmle.label | a | -| main.rs:408:18:408:18 | b | semmle.label | b | -| main.rs:409:18:409:18 | c | semmle.label | c | -| main.rs:418:5:418:11 | [post] mut_arr [element] | semmle.label | [post] mut_arr [element] | -| main.rs:418:18:418:27 | source(...) | semmle.label | source(...) | -| main.rs:419:9:419:9 | d | semmle.label | d | -| main.rs:419:13:419:19 | mut_arr [element] | semmle.label | mut_arr [element] | -| main.rs:419:13:419:22 | mut_arr[1] | semmle.label | mut_arr[1] | -| main.rs:420:10:420:10 | d | semmle.label | d | -| main.rs:421:10:421:16 | mut_arr [element] | semmle.label | mut_arr [element] | -| main.rs:421:10:421:19 | mut_arr[0] | semmle.label | mut_arr[0] | -| main.rs:444:9:444:9 | s | semmle.label | s | -| main.rs:444:25:444:26 | source(...) | semmle.label | source(...) | -| main.rs:445:10:445:10 | s | semmle.label | s | -| main.rs:449:9:449:9 | a | semmle.label | a | -| main.rs:449:13:449:22 | source(...) | semmle.label | source(...) | -| main.rs:451:9:451:9 | c | semmle.label | c | -| main.rs:451:13:451:22 | source(...) | semmle.label | source(...) | -| main.rs:452:9:452:13 | c_ref [&ref] | semmle.label | c_ref [&ref] | -| main.rs:452:17:452:18 | &c [&ref] | semmle.label | &c [&ref] | -| main.rs:452:18:452:18 | c | semmle.label | c | -| main.rs:454:10:454:10 | a | semmle.label | a | -| main.rs:457:10:457:15 | * ... | semmle.label | * ... | -| main.rs:457:11:457:15 | c_ref [&ref] | semmle.label | c_ref [&ref] | +| main.rs:393:14:393:17 | arr1 [element] | semmle.label | arr1 [element] | +| main.rs:393:14:393:20 | arr1[2] | semmle.label | arr1[2] | +| main.rs:394:10:394:11 | n1 | semmle.label | n1 | +| main.rs:396:9:396:12 | arr2 [element] | semmle.label | arr2 [element] | +| main.rs:396:16:396:31 | [...; 10] [element] | semmle.label | [...; 10] [element] | +| main.rs:396:17:396:26 | source(...) | semmle.label | source(...) | +| main.rs:397:9:397:10 | n2 | semmle.label | n2 | +| main.rs:397:14:397:17 | arr2 [element] | semmle.label | arr2 [element] | +| main.rs:397:14:397:20 | arr2[4] | semmle.label | arr2[4] | +| main.rs:398:10:398:11 | n2 | semmle.label | n2 | +| main.rs:406:9:406:12 | arr1 [element] | semmle.label | arr1 [element] | +| main.rs:406:16:406:33 | [...] [element] | semmle.label | [...] [element] | +| main.rs:406:23:406:32 | source(...) | semmle.label | source(...) | +| main.rs:407:9:407:10 | n1 | semmle.label | n1 | +| main.rs:407:15:407:18 | arr1 [element] | semmle.label | arr1 [element] | +| main.rs:408:14:408:15 | n1 | semmle.label | n1 | +| main.rs:418:9:418:12 | arr1 [element] | semmle.label | arr1 [element] | +| main.rs:418:16:418:33 | [...] [element] | semmle.label | [...] [element] | +| main.rs:418:23:418:32 | source(...) | semmle.label | source(...) | +| main.rs:419:11:419:14 | arr1 [element] | semmle.label | arr1 [element] | +| main.rs:420:9:420:17 | SlicePat [element] | semmle.label | SlicePat [element] | +| main.rs:420:10:420:10 | a | semmle.label | a | +| main.rs:420:13:420:13 | b | semmle.label | b | +| main.rs:420:16:420:16 | c | semmle.label | c | +| main.rs:421:18:421:18 | a | semmle.label | a | +| main.rs:422:18:422:18 | b | semmle.label | b | +| main.rs:423:18:423:18 | c | semmle.label | c | +| main.rs:432:5:432:11 | [post] mut_arr [element] | semmle.label | [post] mut_arr [element] | +| main.rs:432:18:432:27 | source(...) | semmle.label | source(...) | +| main.rs:433:9:433:9 | d | semmle.label | d | +| main.rs:433:13:433:19 | mut_arr [element] | semmle.label | mut_arr [element] | +| main.rs:433:13:433:22 | mut_arr[1] | semmle.label | mut_arr[1] | +| main.rs:434:10:434:10 | d | semmle.label | d | +| main.rs:435:10:435:16 | mut_arr [element] | semmle.label | mut_arr [element] | +| main.rs:435:10:435:19 | mut_arr[0] | semmle.label | mut_arr[0] | +| main.rs:458:9:458:9 | s | semmle.label | s | +| main.rs:458:25:458:26 | source(...) | semmle.label | source(...) | +| main.rs:459:10:459:10 | s | semmle.label | s | +| main.rs:463:9:463:9 | a | semmle.label | a | +| main.rs:463:13:463:22 | source(...) | semmle.label | source(...) | +| main.rs:465:9:465:9 | c | semmle.label | c | +| main.rs:465:13:465:22 | source(...) | semmle.label | source(...) | +| main.rs:466:9:466:13 | c_ref [&ref] | semmle.label | c_ref [&ref] | +| main.rs:466:17:466:18 | &c [&ref] | semmle.label | &c [&ref] | +| main.rs:466:18:466:18 | c | semmle.label | c | +| main.rs:468:10:468:10 | a | semmle.label | a | +| main.rs:471:10:471:15 | * ... | semmle.label | * ... | +| main.rs:471:11:471:15 | c_ref [&ref] | semmle.label | c_ref [&ref] | subpaths testFailures #select @@ -446,25 +446,25 @@ testFailures | main.rs:254:10:254:32 | s1.unwrap_or_else(...) | main.rs:253:19:253:28 | source(...) | main.rs:254:10:254:32 | s1.unwrap_or_else(...) | $@ | main.rs:253:19:253:28 | source(...) | source(...) | | main.rs:257:10:257:41 | s2.unwrap_or_else(...) | main.rs:257:31:257:40 | source(...) | main.rs:257:10:257:41 | s2.unwrap_or_else(...) | $@ | main.rs:257:31:257:40 | source(...) | source(...) | | main.rs:264:10:264:11 | i1 | main.rs:261:19:261:28 | source(...) | main.rs:264:10:264:11 | i1 | $@ | main.rs:261:19:261:28 | source(...) | source(...) | -| main.rs:275:10:275:11 | i1 | main.rs:270:35:270:44 | source(...) | main.rs:275:10:275:11 | i1 | $@ | main.rs:270:35:270:44 | source(...) | source(...) | -| main.rs:284:10:284:22 | s1.expect(...) | main.rs:283:35:283:44 | source(...) | main.rs:284:10:284:22 | s1.expect(...) | $@ | main.rs:283:35:283:44 | source(...) | source(...) | -| main.rs:289:10:289:26 | s2.expect_err(...) | main.rs:287:36:287:45 | source(...) | main.rs:289:10:289:26 | s2.expect_err(...) | $@ | main.rs:287:36:287:45 | source(...) | source(...) | -| main.rs:301:35:301:35 | n | main.rs:298:29:298:38 | source(...) | main.rs:301:35:301:35 | n | $@ | main.rs:298:29:298:38 | source(...) | source(...) | -| main.rs:305:55:305:55 | n | main.rs:298:29:298:38 | source(...) | main.rs:305:55:305:55 | n | $@ | main.rs:298:29:298:38 | source(...) | source(...) | -| main.rs:319:22:319:22 | n | main.rs:316:16:316:25 | source(...) | main.rs:319:22:319:22 | n | $@ | main.rs:316:16:316:25 | source(...) | source(...) | -| main.rs:323:29:323:29 | n | main.rs:316:16:316:25 | source(...) | main.rs:323:29:323:29 | n | $@ | main.rs:316:16:316:25 | source(...) | source(...) | -| main.rs:342:48:342:48 | n | main.rs:338:18:338:27 | source(...) | main.rs:342:48:342:48 | n | $@ | main.rs:338:18:338:27 | source(...) | source(...) | -| main.rs:346:81:346:81 | n | main.rs:338:18:338:27 | source(...) | main.rs:346:81:346:81 | n | $@ | main.rs:338:18:338:27 | source(...) | source(...) | -| main.rs:362:34:362:34 | n | main.rs:358:18:358:27 | source(...) | main.rs:362:34:362:34 | n | $@ | main.rs:358:18:358:27 | source(...) | source(...) | -| main.rs:366:53:366:53 | n | main.rs:358:18:358:27 | source(...) | main.rs:366:53:366:53 | n | $@ | main.rs:358:18:358:27 | source(...) | source(...) | -| main.rs:380:10:380:11 | n1 | main.rs:378:23:378:32 | source(...) | main.rs:380:10:380:11 | n1 | $@ | main.rs:378:23:378:32 | source(...) | source(...) | -| main.rs:384:10:384:11 | n2 | main.rs:382:17:382:26 | source(...) | main.rs:384:10:384:11 | n2 | $@ | main.rs:382:17:382:26 | source(...) | source(...) | -| main.rs:394:14:394:15 | n1 | main.rs:392:23:392:32 | source(...) | main.rs:394:14:394:15 | n1 | $@ | main.rs:392:23:392:32 | source(...) | source(...) | -| main.rs:407:18:407:18 | a | main.rs:404:23:404:32 | source(...) | main.rs:407:18:407:18 | a | $@ | main.rs:404:23:404:32 | source(...) | source(...) | -| main.rs:408:18:408:18 | b | main.rs:404:23:404:32 | source(...) | main.rs:408:18:408:18 | b | $@ | main.rs:404:23:404:32 | source(...) | source(...) | -| main.rs:409:18:409:18 | c | main.rs:404:23:404:32 | source(...) | main.rs:409:18:409:18 | c | $@ | main.rs:404:23:404:32 | source(...) | source(...) | -| main.rs:420:10:420:10 | d | main.rs:418:18:418:27 | source(...) | main.rs:420:10:420:10 | d | $@ | main.rs:418:18:418:27 | source(...) | source(...) | -| main.rs:421:10:421:19 | mut_arr[0] | main.rs:418:18:418:27 | source(...) | main.rs:421:10:421:19 | mut_arr[0] | $@ | main.rs:418:18:418:27 | source(...) | source(...) | -| main.rs:445:10:445:10 | s | main.rs:444:25:444:26 | source(...) | main.rs:445:10:445:10 | s | $@ | main.rs:444:25:444:26 | source(...) | source(...) | -| main.rs:454:10:454:10 | a | main.rs:449:13:449:22 | source(...) | main.rs:454:10:454:10 | a | $@ | main.rs:449:13:449:22 | source(...) | source(...) | -| main.rs:457:10:457:15 | * ... | main.rs:451:13:451:22 | source(...) | main.rs:457:10:457:15 | * ... | $@ | main.rs:451:13:451:22 | source(...) | source(...) | +| main.rs:289:10:289:11 | i1 | main.rs:284:35:284:44 | source(...) | main.rs:289:10:289:11 | i1 | $@ | main.rs:284:35:284:44 | source(...) | source(...) | +| main.rs:298:10:298:22 | s1.expect(...) | main.rs:297:35:297:44 | source(...) | main.rs:298:10:298:22 | s1.expect(...) | $@ | main.rs:297:35:297:44 | source(...) | source(...) | +| main.rs:303:10:303:26 | s2.expect_err(...) | main.rs:301:36:301:45 | source(...) | main.rs:303:10:303:26 | s2.expect_err(...) | $@ | main.rs:301:36:301:45 | source(...) | source(...) | +| main.rs:315:35:315:35 | n | main.rs:312:29:312:38 | source(...) | main.rs:315:35:315:35 | n | $@ | main.rs:312:29:312:38 | source(...) | source(...) | +| main.rs:319:55:319:55 | n | main.rs:312:29:312:38 | source(...) | main.rs:319:55:319:55 | n | $@ | main.rs:312:29:312:38 | source(...) | source(...) | +| main.rs:333:22:333:22 | n | main.rs:330:16:330:25 | source(...) | main.rs:333:22:333:22 | n | $@ | main.rs:330:16:330:25 | source(...) | source(...) | +| main.rs:337:29:337:29 | n | main.rs:330:16:330:25 | source(...) | main.rs:337:29:337:29 | n | $@ | main.rs:330:16:330:25 | source(...) | source(...) | +| main.rs:356:48:356:48 | n | main.rs:352:18:352:27 | source(...) | main.rs:356:48:356:48 | n | $@ | main.rs:352:18:352:27 | source(...) | source(...) | +| main.rs:360:81:360:81 | n | main.rs:352:18:352:27 | source(...) | main.rs:360:81:360:81 | n | $@ | main.rs:352:18:352:27 | source(...) | source(...) | +| main.rs:376:34:376:34 | n | main.rs:372:18:372:27 | source(...) | main.rs:376:34:376:34 | n | $@ | main.rs:372:18:372:27 | source(...) | source(...) | +| main.rs:380:53:380:53 | n | main.rs:372:18:372:27 | source(...) | main.rs:380:53:380:53 | n | $@ | main.rs:372:18:372:27 | source(...) | source(...) | +| main.rs:394:10:394:11 | n1 | main.rs:392:23:392:32 | source(...) | main.rs:394:10:394:11 | n1 | $@ | main.rs:392:23:392:32 | source(...) | source(...) | +| main.rs:398:10:398:11 | n2 | main.rs:396:17:396:26 | source(...) | main.rs:398:10:398:11 | n2 | $@ | main.rs:396:17:396:26 | source(...) | source(...) | +| main.rs:408:14:408:15 | n1 | main.rs:406:23:406:32 | source(...) | main.rs:408:14:408:15 | n1 | $@ | main.rs:406:23:406:32 | source(...) | source(...) | +| main.rs:421:18:421:18 | a | main.rs:418:23:418:32 | source(...) | main.rs:421:18:421:18 | a | $@ | main.rs:418:23:418:32 | source(...) | source(...) | +| main.rs:422:18:422:18 | b | main.rs:418:23:418:32 | source(...) | main.rs:422:18:422:18 | b | $@ | main.rs:418:23:418:32 | source(...) | source(...) | +| main.rs:423:18:423:18 | c | main.rs:418:23:418:32 | source(...) | main.rs:423:18:423:18 | c | $@ | main.rs:418:23:418:32 | source(...) | source(...) | +| main.rs:434:10:434:10 | d | main.rs:432:18:432:27 | source(...) | main.rs:434:10:434:10 | d | $@ | main.rs:432:18:432:27 | source(...) | source(...) | +| main.rs:435:10:435:19 | mut_arr[0] | main.rs:432:18:432:27 | source(...) | main.rs:435:10:435:19 | mut_arr[0] | $@ | main.rs:432:18:432:27 | source(...) | source(...) | +| main.rs:459:10:459:10 | s | main.rs:458:25:458:26 | source(...) | main.rs:459:10:459:10 | s | $@ | main.rs:458:25:458:26 | source(...) | source(...) | +| main.rs:468:10:468:10 | a | main.rs:463:13:463:22 | source(...) | main.rs:468:10:468:10 | a | $@ | main.rs:463:13:463:22 | source(...) | source(...) | +| main.rs:471:10:471:15 | * ... | main.rs:465:13:465:22 | source(...) | main.rs:471:10:471:15 | * ... | $@ | main.rs:465:13:465:22 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/local/main.rs b/rust/ql/test/library-tests/dataflow/local/main.rs index 8d60daf128d6..641d440bd202 100644 --- a/rust/ql/test/library-tests/dataflow/local/main.rs +++ b/rust/ql/test/library-tests/dataflow/local/main.rs @@ -266,6 +266,20 @@ fn option_questionmark() -> Option { Some(0) } +fn option_ok() { + let r1 : Result = Ok(source(21)); + let o1a : Option = r1.ok(); + let o1b : Option = r1.err(); + sink(o1a.unwrap()); // $ MISSING: hasValueFlow=21 + sink(o1b.unwrap()); + + let r2 : Result = Err(source(22)); + let o2a : Option = r2.ok(); + let o2b : Option = r2.err(); + sink(o2a.unwrap()); + sink(o2b.unwrap()); // $ MISSING: hasValueFlow=22 +} + fn result_questionmark() -> Result { let s1: Result = Ok(source(20)); let s2: Result = Ok(2); @@ -480,6 +494,7 @@ fn main() { option_unwrap(); option_unwrap_or(); option_questionmark(); + option_ok(); let _ = result_questionmark(); custom_tuple_enum_pattern_match_qualified(); custom_tuple_enum_pattern_match_unqualified(); From fdcbbdfa08cc3f6945e8e1f2fb38c117d40da349 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 13 Feb 2025 17:42:41 +0000 Subject: [PATCH 2/4] Rust: Model them. --- .../frameworks/stdlib/lang-core.model.yml | 2 + .../dataflow/local/DataFlowStep.expected | 66 +++++++++++-------- .../dataflow/local/inline-flow.expected | 42 ++++++++++-- .../test/library-tests/dataflow/local/main.rs | 4 +- 4 files changed, 79 insertions(+), 35 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/lang-core.model.yml b/rust/ql/lib/codeql/rust/frameworks/stdlib/lang-core.model.yml index f6a379d0d0cc..cde7405e5543 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/lang-core.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/lang-core.model.yml @@ -24,6 +24,8 @@ extensions: - ["lang:core", "::unwrap_err_unchecked", "Argument[self].Variant[crate::result::Result::Err(0)]", "ReturnValue", "value", "manual"] - ["lang:core", "::expect", "Argument[self].Variant[crate::result::Result::Ok(0)]", "ReturnValue", "value", "manual"] - ["lang:core", "::expect_err", "Argument[self].Variant[crate::result::Result::Err(0)]", "ReturnValue", "value", "manual"] + - ["lang:core", "::ok", "Argument[self].Variant[crate::result::Result::Ok(0)]", "ReturnValue.Variant[crate::option::Option::Some(0)]", "value", "manual"] + - ["lang:core", "::err", "Argument[self].Variant[crate::result::Result::Err(0)]", "ReturnValue.Variant[crate::option::Option::Some(0)]", "value", "manual"] # String - ["lang:alloc", "::as_str", "Argument[self]", "ReturnValue", "taint", "manual"] - ["lang:alloc", "::as_bytes", "Argument[self]", "ReturnValue", "taint", "manual"] diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index d807e5f28545..dadb34d9cf67 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -32,9 +32,9 @@ localStep | file://:0:0:0:0 | [summary param] 0 in lang:core::_::::unwrap_or | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_or | MaD:47 | | file://:0:0:0:0 | [summary param] 0 in lang:core::_::::unwrap_or_else | file://:0:0:0:0 | [summary] to write: Argument[0].Parameter[closure self] in lang:core::_::::unwrap_or_else | MaD:50 | | file://:0:0:0:0 | [summary param] 0 in lang:core::_::::xor | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::xor | MaD:55 | -| file://:0:0:0:0 | [summary param] 0 in lang:core::_::::unwrap_or | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_or | MaD:67 | -| file://:0:0:0:0 | [summary param] 0 in lang:core::_::::unwrap_or_else | file://:0:0:0:0 | [summary] to write: Argument[0].Parameter[closure self] in lang:core::_::::unwrap_or_else | MaD:70 | -| file://:0:0:0:0 | [summary param] 0 in lang:core::_::crate::hint::must_use | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::crate::hint::must_use | MaD:73 | +| file://:0:0:0:0 | [summary param] 0 in lang:core::_::::unwrap_or | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_or | MaD:69 | +| file://:0:0:0:0 | [summary param] 0 in lang:core::_::::unwrap_or_else | file://:0:0:0:0 | [summary] to write: Argument[0].Parameter[closure self] in lang:core::_::::unwrap_or_else | MaD:72 | +| file://:0:0:0:0 | [summary param] 0 in lang:core::_::crate::hint::must_use | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::crate::hint::must_use | MaD:75 | | file://:0:0:0:0 | [summary param] 1 in lang:core::_::::map_or | file://:0:0:0:0 | [summary] to write: Argument[1].Parameter[closure self] in lang:core::_::::map_or | MaD:30 | | file://:0:0:0:0 | [summary param] 1 in lang:core::_::::map_or | file://:0:0:0:0 | [summary] to write: Argument[1].Parameter[closure self] in lang:core::_::::map_or | MaD:31 | | file://:0:0:0:0 | [summary param] 1 in lang:core::_::::map_or_else | file://:0:0:0:0 | [summary] to write: Argument[1].Parameter[closure self] in lang:core::_::::map_or_else | MaD:33 | @@ -55,14 +55,14 @@ localStep | file://:0:0:0:0 | [summary] read: Argument[0].ReturnValue in lang:core::_::::ok_or_else | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Err(0)] in lang:core::_::::ok_or_else | MaD:37 | | file://:0:0:0:0 | [summary] read: Argument[0].ReturnValue in lang:core::_::::or_else | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::or_else | MaD:41 | | file://:0:0:0:0 | [summary] read: Argument[0].ReturnValue in lang:core::_::::unwrap_or_else | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_or_else | MaD:50 | -| file://:0:0:0:0 | [summary] read: Argument[0].ReturnValue in lang:core::_::::unwrap_or_else | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_or_else | MaD:70 | +| file://:0:0:0:0 | [summary] read: Argument[0].ReturnValue in lang:core::_::::unwrap_or_else | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_or_else | MaD:72 | | file://:0:0:0:0 | [summary] read: Argument[0].Variant[crate::option::Option::Some(0)] in lang:core::_::::zip | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)].Tuple[1] in lang:core::_::::zip | MaD:57 | | file://:0:0:0:0 | [summary] read: Argument[0].Variant[crate::option::Option::Some(0)] in lang:core::_::::zip_with | file://:0:0:0:0 | [summary] to write: Argument[1].Parameter[1] in lang:core::_::::zip_with | MaD:59 | | file://:0:0:0:0 | [summary] read: Argument[1].ReturnValue in lang:core::_::::map_or | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::map_or | MaD:30 | | file://:0:0:0:0 | [summary] read: Argument[1].ReturnValue in lang:core::_::::map_or_else | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::map_or_else | MaD:33 | | file://:0:0:0:0 | [summary] read: Argument[1].ReturnValue in lang:core::_::::zip_with | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::::zip_with | MaD:60 | -| file://:0:0:0:0 | [summary] read: Argument[self].Element in lang:core::_::crate::iter::traits::iterator::Iterator::collect | file://:0:0:0:0 | [summary] to write: ReturnValue.Element in lang:core::_::crate::iter::traits::iterator::Iterator::collect | MaD:74 | -| file://:0:0:0:0 | [summary] read: Argument[self].Element in lang:core::_::crate::iter::traits::iterator::Iterator::nth | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::crate::iter::traits::iterator::Iterator::nth | MaD:75 | +| file://:0:0:0:0 | [summary] read: Argument[self].Element in lang:core::_::crate::iter::traits::iterator::Iterator::collect | file://:0:0:0:0 | [summary] to write: ReturnValue.Element in lang:core::_::crate::iter::traits::iterator::Iterator::collect | MaD:76 | +| file://:0:0:0:0 | [summary] read: Argument[self].Element in lang:core::_::crate::iter::traits::iterator::Iterator::nth | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::crate::iter::traits::iterator::Iterator::nth | MaD:77 | | file://:0:0:0:0 | [summary] read: Argument[self].Reference.Variant[crate::option::Option::Some(0)] in lang:core::_::::as_mut | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::::as_mut | MaD:8 | | file://:0:0:0:0 | [summary] read: Argument[self].Reference.Variant[crate::option::Option::Some(0)] in lang:core::_::::as_ref | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::::as_ref | MaD:9 | | file://:0:0:0:0 | [summary] read: Argument[self].Reference.Variant[crate::option::Option::Some(0)] in lang:core::_::::get_or_insert | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::get_or_insert | MaD:16 | @@ -94,15 +94,17 @@ localStep | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)].Tuple[1] in lang:core::_::::unzip | file://:0:0:0:0 | [summary] to write: ReturnValue.Tuple[1].Variant[crate::option::Option::Some(0)] in lang:core::_::::unzip | MaD:54 | | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)].Variant[crate::result::Result::Err(0)] in lang:core::_::::transpose | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Err(0)] in lang:core::_::::transpose | MaD:44 | | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)].Variant[crate::result::Result::Ok(0)] in lang:core::_::::transpose | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)].Variant[crate::option::Option::Some(0)] in lang:core::_::::transpose | MaD:45 | -| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Err(0)] in lang:core::_::::expect_err | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::expect_err | MaD:63 | -| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Err(0)] in lang:core::_::::unwrap_err | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_err | MaD:65 | -| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Err(0)] in lang:core::_::::unwrap_err_unchecked | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_err_unchecked | MaD:66 | -| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::expect | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::expect | MaD:62 | -| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::unwrap | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap | MaD:64 | -| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::unwrap_or | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_or | MaD:68 | -| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::unwrap_or_default | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_or_default | MaD:69 | -| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::unwrap_or_else | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_or_else | MaD:71 | -| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::unwrap_unchecked | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_unchecked | MaD:72 | +| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Err(0)] in lang:core::_::::err | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::::err | MaD:62 | +| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Err(0)] in lang:core::_::::expect_err | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::expect_err | MaD:64 | +| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Err(0)] in lang:core::_::::unwrap_err | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_err | MaD:67 | +| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Err(0)] in lang:core::_::::unwrap_err_unchecked | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_err_unchecked | MaD:68 | +| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::expect | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::expect | MaD:63 | +| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::ok | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::::ok | MaD:65 | +| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::unwrap | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap | MaD:66 | +| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::unwrap_or | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_or | MaD:70 | +| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::unwrap_or_default | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_or_default | MaD:71 | +| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::unwrap_or_else | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_or_else | MaD:73 | +| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::unwrap_unchecked | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_unchecked | MaD:74 | | main.rs:3:11:3:11 | [SSA] i | main.rs:4:12:4:12 | i | | | main.rs:3:11:3:11 | i | main.rs:3:11:3:11 | [SSA] i | | | main.rs:3:11:3:16 | ...: i64 | main.rs:3:11:3:11 | i | | @@ -701,20 +703,22 @@ models | 59 | Summary: lang:core; ::zip_with; Argument[0].Variant[crate::option::Option::Some(0)]; Argument[1].Parameter[1]; value | | 60 | Summary: lang:core; ::zip_with; Argument[1].ReturnValue; ReturnValue.Variant[crate::option::Option::Some(0)]; value | | 61 | Summary: lang:core; ::zip_with; Argument[self].Variant[crate::option::Option::Some(0)]; Argument[1].Parameter[0]; value | -| 62 | Summary: lang:core; ::expect; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value | -| 63 | Summary: lang:core; ::expect_err; Argument[self].Variant[crate::result::Result::Err(0)]; ReturnValue; value | -| 64 | Summary: lang:core; ::unwrap; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value | -| 65 | Summary: lang:core; ::unwrap_err; Argument[self].Variant[crate::result::Result::Err(0)]; ReturnValue; value | -| 66 | Summary: lang:core; ::unwrap_err_unchecked; Argument[self].Variant[crate::result::Result::Err(0)]; ReturnValue; value | -| 67 | Summary: lang:core; ::unwrap_or; Argument[0]; ReturnValue; value | -| 68 | Summary: lang:core; ::unwrap_or; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value | -| 69 | Summary: lang:core; ::unwrap_or_default; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value | -| 70 | Summary: lang:core; ::unwrap_or_else; Argument[0].ReturnValue; ReturnValue; value | -| 71 | Summary: lang:core; ::unwrap_or_else; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value | -| 72 | Summary: lang:core; ::unwrap_unchecked; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value | -| 73 | Summary: lang:core; crate::hint::must_use; Argument[0]; ReturnValue; value | -| 74 | Summary: lang:core; crate::iter::traits::iterator::Iterator::collect; Argument[self].Element; ReturnValue.Element; value | -| 75 | Summary: lang:core; crate::iter::traits::iterator::Iterator::nth; Argument[self].Element; ReturnValue.Variant[crate::option::Option::Some(0)]; value | +| 62 | Summary: lang:core; ::err; Argument[self].Variant[crate::result::Result::Err(0)]; ReturnValue.Variant[crate::option::Option::Some(0)]; value | +| 63 | Summary: lang:core; ::expect; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value | +| 64 | Summary: lang:core; ::expect_err; Argument[self].Variant[crate::result::Result::Err(0)]; ReturnValue; value | +| 65 | Summary: lang:core; ::ok; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue.Variant[crate::option::Option::Some(0)]; value | +| 66 | Summary: lang:core; ::unwrap; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value | +| 67 | Summary: lang:core; ::unwrap_err; Argument[self].Variant[crate::result::Result::Err(0)]; ReturnValue; value | +| 68 | Summary: lang:core; ::unwrap_err_unchecked; Argument[self].Variant[crate::result::Result::Err(0)]; ReturnValue; value | +| 69 | Summary: lang:core; ::unwrap_or; Argument[0]; ReturnValue; value | +| 70 | Summary: lang:core; ::unwrap_or; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value | +| 71 | Summary: lang:core; ::unwrap_or_default; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value | +| 72 | Summary: lang:core; ::unwrap_or_else; Argument[0].ReturnValue; ReturnValue; value | +| 73 | Summary: lang:core; ::unwrap_or_else; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value | +| 74 | Summary: lang:core; ::unwrap_unchecked; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value | +| 75 | Summary: lang:core; crate::hint::must_use; Argument[0]; ReturnValue; value | +| 76 | Summary: lang:core; crate::iter::traits::iterator::Iterator::collect; Argument[self].Element; ReturnValue.Element; value | +| 77 | Summary: lang:core; crate::iter::traits::iterator::Iterator::nth; Argument[self].Element; ReturnValue.Variant[crate::option::Option::Some(0)]; value | storeStep | file://:0:0:0:0 | [summary] to write: Argument[0].Variant[crate::option::Option::Some(0)] in lang:core::_::::zip_with | Some | file://:0:0:0:0 | [post] [summary param] 0 in lang:core::_::::zip_with | | file://:0:0:0:0 | [summary] to write: Argument[self].Reference in lang:core::_::::get_or_insert | &ref | file://:0:0:0:0 | [post] [summary param] self in lang:core::_::::get_or_insert | @@ -744,6 +748,8 @@ storeStep | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::::map | Some | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::map | | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::::zip | Some | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::zip | | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::::zip_with | Some | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::zip_with | +| file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::::err | Some | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::err | +| file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::::ok | Some | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::ok | | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::crate::iter::traits::iterator::Iterator::nth | Some | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::crate::iter::traits::iterator::Iterator::nth | | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)].Tuple[0] in lang:core::_::::zip | tuple.0 | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::::zip | | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)].Tuple[1] in lang:core::_::::zip | tuple.1 | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::::zip | @@ -887,8 +893,10 @@ readStep | file://:0:0:0:0 | [summary param] self in lang:core::_::::unzip | Some | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)] in lang:core::_::::unzip | | file://:0:0:0:0 | [summary param] self in lang:core::_::::zip | Some | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)] in lang:core::_::::zip | | file://:0:0:0:0 | [summary param] self in lang:core::_::::zip_with | Some | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)] in lang:core::_::::zip_with | +| file://:0:0:0:0 | [summary param] self in lang:core::_::::err | Err | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Err(0)] in lang:core::_::::err | | file://:0:0:0:0 | [summary param] self in lang:core::_::::expect | Ok | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::expect | | file://:0:0:0:0 | [summary param] self in lang:core::_::::expect_err | Err | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Err(0)] in lang:core::_::::expect_err | +| file://:0:0:0:0 | [summary param] self in lang:core::_::::ok | Ok | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::ok | | file://:0:0:0:0 | [summary param] self in lang:core::_::::unwrap | Ok | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::unwrap | | file://:0:0:0:0 | [summary param] self in lang:core::_::::unwrap_err | Err | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Err(0)] in lang:core::_::::unwrap_err | | file://:0:0:0:0 | [summary param] self in lang:core::_::::unwrap_err_unchecked | Err | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Err(0)] in lang:core::_::::unwrap_err_unchecked | diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected index 96d6af4448bd..17668ee9c905 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -4,8 +4,10 @@ models | 3 | Summary: lang:core; ::unwrap_or; Argument[self].Variant[crate::option::Option::Some(0)]; ReturnValue; value | | 4 | Summary: lang:core; ::unwrap_or_else; Argument[0].ReturnValue; ReturnValue; value | | 5 | Summary: lang:core; ::unwrap_or_else; Argument[self].Variant[crate::option::Option::Some(0)]; ReturnValue; value | -| 6 | Summary: lang:core; ::expect; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value | -| 7 | Summary: lang:core; ::expect_err; Argument[self].Variant[crate::result::Result::Err(0)]; ReturnValue; value | +| 6 | Summary: lang:core; ::err; Argument[self].Variant[crate::result::Result::Err(0)]; ReturnValue.Variant[crate::option::Option::Some(0)]; value | +| 7 | Summary: lang:core; ::expect; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value | +| 8 | Summary: lang:core; ::expect_err; Argument[self].Variant[crate::result::Result::Err(0)]; ReturnValue; value | +| 9 | Summary: lang:core; ::ok; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue.Variant[crate::option::Option::Some(0)]; value | edges | main.rs:22:9:22:9 | s | main.rs:23:10:23:10 | s | provenance | | | main.rs:22:13:22:21 | source(...) | main.rs:22:9:22:9 | s | provenance | | @@ -97,6 +99,20 @@ edges | main.rs:263:9:263:10 | i1 | main.rs:264:10:264:11 | i1 | provenance | | | main.rs:263:14:263:15 | s1 [Some] | main.rs:263:14:263:16 | TryExpr | provenance | | | main.rs:263:14:263:16 | TryExpr | main.rs:263:9:263:10 | i1 | provenance | | +| main.rs:270:9:270:10 | r1 [Ok] | main.rs:271:29:271:30 | r1 [Ok] | provenance | | +| main.rs:270:33:270:46 | Ok(...) [Ok] | main.rs:270:9:270:10 | r1 [Ok] | provenance | | +| main.rs:270:36:270:45 | source(...) | main.rs:270:33:270:46 | Ok(...) [Ok] | provenance | | +| main.rs:271:9:271:11 | o1a [Some] | main.rs:273:10:273:12 | o1a [Some] | provenance | | +| main.rs:271:29:271:30 | r1 [Ok] | main.rs:271:29:271:35 | r1.ok(...) [Some] | provenance | MaD:9 | +| main.rs:271:29:271:35 | r1.ok(...) [Some] | main.rs:271:9:271:11 | o1a [Some] | provenance | | +| main.rs:273:10:273:12 | o1a [Some] | main.rs:273:10:273:21 | o1a.unwrap(...) | provenance | MaD:1 | +| main.rs:276:9:276:10 | r2 [Err] | main.rs:278:29:278:30 | r2 [Err] | provenance | | +| main.rs:276:33:276:47 | Err(...) [Err] | main.rs:276:9:276:10 | r2 [Err] | provenance | | +| main.rs:276:37:276:46 | source(...) | main.rs:276:33:276:47 | Err(...) [Err] | provenance | | +| main.rs:278:9:278:11 | o2b [Some] | main.rs:280:10:280:12 | o2b [Some] | provenance | | +| main.rs:278:29:278:30 | r2 [Err] | main.rs:278:29:278:36 | r2.err(...) [Some] | provenance | MaD:6 | +| main.rs:278:29:278:36 | r2.err(...) [Some] | main.rs:278:9:278:11 | o2b [Some] | provenance | | +| main.rs:280:10:280:12 | o2b [Some] | main.rs:280:10:280:21 | o2b.unwrap(...) | provenance | MaD:1 | | main.rs:284:9:284:10 | s1 [Ok] | main.rs:287:14:287:15 | s1 [Ok] | provenance | | | main.rs:284:32:284:45 | Ok(...) [Ok] | main.rs:284:9:284:10 | s1 [Ok] | provenance | | | main.rs:284:35:284:44 | source(...) | main.rs:284:32:284:45 | Ok(...) [Ok] | provenance | | @@ -106,11 +122,11 @@ edges | main.rs:297:9:297:10 | s1 [Ok] | main.rs:298:10:298:11 | s1 [Ok] | provenance | | | main.rs:297:32:297:45 | Ok(...) [Ok] | main.rs:297:9:297:10 | s1 [Ok] | provenance | | | main.rs:297:35:297:44 | source(...) | main.rs:297:32:297:45 | Ok(...) [Ok] | provenance | | -| main.rs:298:10:298:11 | s1 [Ok] | main.rs:298:10:298:22 | s1.expect(...) | provenance | MaD:6 | +| main.rs:298:10:298:11 | s1 [Ok] | main.rs:298:10:298:22 | s1.expect(...) | provenance | MaD:7 | | main.rs:301:9:301:10 | s2 [Err] | main.rs:303:10:303:11 | s2 [Err] | provenance | | | main.rs:301:32:301:46 | Err(...) [Err] | main.rs:301:9:301:10 | s2 [Err] | provenance | | | main.rs:301:36:301:45 | source(...) | main.rs:301:32:301:46 | Err(...) [Err] | provenance | | -| main.rs:303:10:303:11 | s2 [Err] | main.rs:303:10:303:26 | s2.expect_err(...) | provenance | MaD:7 | +| main.rs:303:10:303:11 | s2 [Err] | main.rs:303:10:303:26 | s2.expect_err(...) | provenance | MaD:8 | | main.rs:312:9:312:10 | s1 [A] | main.rs:314:11:314:12 | s1 [A] | provenance | | | main.rs:312:14:312:39 | ...::A(...) [A] | main.rs:312:9:312:10 | s1 [A] | provenance | | | main.rs:312:29:312:38 | source(...) | main.rs:312:14:312:39 | ...::A(...) [A] | provenance | | @@ -308,6 +324,22 @@ nodes | main.rs:263:14:263:15 | s1 [Some] | semmle.label | s1 [Some] | | main.rs:263:14:263:16 | TryExpr | semmle.label | TryExpr | | main.rs:264:10:264:11 | i1 | semmle.label | i1 | +| main.rs:270:9:270:10 | r1 [Ok] | semmle.label | r1 [Ok] | +| main.rs:270:33:270:46 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | +| main.rs:270:36:270:45 | source(...) | semmle.label | source(...) | +| main.rs:271:9:271:11 | o1a [Some] | semmle.label | o1a [Some] | +| main.rs:271:29:271:30 | r1 [Ok] | semmle.label | r1 [Ok] | +| main.rs:271:29:271:35 | r1.ok(...) [Some] | semmle.label | r1.ok(...) [Some] | +| main.rs:273:10:273:12 | o1a [Some] | semmle.label | o1a [Some] | +| main.rs:273:10:273:21 | o1a.unwrap(...) | semmle.label | o1a.unwrap(...) | +| main.rs:276:9:276:10 | r2 [Err] | semmle.label | r2 [Err] | +| main.rs:276:33:276:47 | Err(...) [Err] | semmle.label | Err(...) [Err] | +| main.rs:276:37:276:46 | source(...) | semmle.label | source(...) | +| main.rs:278:9:278:11 | o2b [Some] | semmle.label | o2b [Some] | +| main.rs:278:29:278:30 | r2 [Err] | semmle.label | r2 [Err] | +| main.rs:278:29:278:36 | r2.err(...) [Some] | semmle.label | r2.err(...) [Some] | +| main.rs:280:10:280:12 | o2b [Some] | semmle.label | o2b [Some] | +| main.rs:280:10:280:21 | o2b.unwrap(...) | semmle.label | o2b.unwrap(...) | | main.rs:284:9:284:10 | s1 [Ok] | semmle.label | s1 [Ok] | | main.rs:284:32:284:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | | main.rs:284:35:284:44 | source(...) | semmle.label | source(...) | @@ -446,6 +478,8 @@ testFailures | main.rs:254:10:254:32 | s1.unwrap_or_else(...) | main.rs:253:19:253:28 | source(...) | main.rs:254:10:254:32 | s1.unwrap_or_else(...) | $@ | main.rs:253:19:253:28 | source(...) | source(...) | | main.rs:257:10:257:41 | s2.unwrap_or_else(...) | main.rs:257:31:257:40 | source(...) | main.rs:257:10:257:41 | s2.unwrap_or_else(...) | $@ | main.rs:257:31:257:40 | source(...) | source(...) | | main.rs:264:10:264:11 | i1 | main.rs:261:19:261:28 | source(...) | main.rs:264:10:264:11 | i1 | $@ | main.rs:261:19:261:28 | source(...) | source(...) | +| main.rs:273:10:273:21 | o1a.unwrap(...) | main.rs:270:36:270:45 | source(...) | main.rs:273:10:273:21 | o1a.unwrap(...) | $@ | main.rs:270:36:270:45 | source(...) | source(...) | +| main.rs:280:10:280:21 | o2b.unwrap(...) | main.rs:276:37:276:46 | source(...) | main.rs:280:10:280:21 | o2b.unwrap(...) | $@ | main.rs:276:37:276:46 | source(...) | source(...) | | main.rs:289:10:289:11 | i1 | main.rs:284:35:284:44 | source(...) | main.rs:289:10:289:11 | i1 | $@ | main.rs:284:35:284:44 | source(...) | source(...) | | main.rs:298:10:298:22 | s1.expect(...) | main.rs:297:35:297:44 | source(...) | main.rs:298:10:298:22 | s1.expect(...) | $@ | main.rs:297:35:297:44 | source(...) | source(...) | | main.rs:303:10:303:26 | s2.expect_err(...) | main.rs:301:36:301:45 | source(...) | main.rs:303:10:303:26 | s2.expect_err(...) | $@ | main.rs:301:36:301:45 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/local/main.rs b/rust/ql/test/library-tests/dataflow/local/main.rs index 641d440bd202..e74e2dbfbfce 100644 --- a/rust/ql/test/library-tests/dataflow/local/main.rs +++ b/rust/ql/test/library-tests/dataflow/local/main.rs @@ -270,14 +270,14 @@ fn option_ok() { let r1 : Result = Ok(source(21)); let o1a : Option = r1.ok(); let o1b : Option = r1.err(); - sink(o1a.unwrap()); // $ MISSING: hasValueFlow=21 + sink(o1a.unwrap()); // $ hasValueFlow=21 sink(o1b.unwrap()); let r2 : Result = Err(source(22)); let o2a : Option = r2.ok(); let o2b : Option = r2.err(); sink(o2a.unwrap()); - sink(o2b.unwrap()); // $ MISSING: hasValueFlow=22 + sink(o2b.unwrap()); // $ hasValueFlow=22 } fn result_questionmark() -> Result { From 436f7ccc823ecae1c9f8b0547d3a4e9de8093850 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 13 Feb 2025 18:12:06 +0000 Subject: [PATCH 3/4] Rust: Accept trivial change to consistency test .expected. --- .../dataflow/local/CONSISTENCY/DataFlowConsistency.expected | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/DataFlowConsistency.expected b/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/DataFlowConsistency.expected index 9ba9b9fcd995..e20ac1da53f6 100644 --- a/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/DataFlowConsistency.expected +++ b/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/DataFlowConsistency.expected @@ -1,2 +1,2 @@ identityLocalStep -| main.rs:428:9:428:20 | phi(default_name) | Node steps to itself | +| main.rs:442:9:442:20 | phi(default_name) | Node steps to itself | From 8bcfd0056564556235fef4dd1bdf8c18edd15ffa Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 17 Feb 2025 14:29:16 +0000 Subject: [PATCH 4/4] Rust: Remove the manual models. --- rust/ql/lib/codeql/rust/frameworks/stdlib/lang-core.model.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/lang-core.model.yml b/rust/ql/lib/codeql/rust/frameworks/stdlib/lang-core.model.yml index 7f0f7f84e127..ceaa836fed8d 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/lang-core.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/lang-core.model.yml @@ -24,8 +24,6 @@ extensions: - ["lang:core", "::unwrap_err_unchecked", "Argument[self].Field[crate::result::Result::Err(0)]", "ReturnValue", "value", "manual"] - ["lang:core", "::expect", "Argument[self].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "manual"] - ["lang:core", "::expect_err", "Argument[self].Field[crate::result::Result::Err(0)]", "ReturnValue", "value", "manual"] - - ["lang:core", "::ok", "Argument[self].Field[crate::result::Result::Ok(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "manual"] - - ["lang:core", "::err", "Argument[self].Field[crate::result::Result::Err(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "manual"] # String - ["lang:alloc", "::as_str", "Argument[self]", "ReturnValue", "taint", "manual"] - ["lang:alloc", "::as_bytes", "Argument[self]", "ReturnValue", "taint", "manual"]