From b50834aee8ae2aeee715979467714d315221dba3 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 29 Nov 2024 13:13:55 +0100 Subject: [PATCH 1/2] Rust: Add data flow tests for question mark operator --- .../dataflow/local/DataFlowStep.expected | 380 ++++++++++-------- .../dataflow/local/inline-flow.expected | 136 +++---- .../test/library-tests/dataflow/local/main.rs | 25 ++ 3 files changed, 303 insertions(+), 238 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index bc36656e49dc..d566af4eca27 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -204,146 +204,179 @@ localStep | main.rs:224:9:224:10 | [SSA] s1 | main.rs:225:10:225:11 | s1 | | main.rs:224:9:224:10 | s1 | main.rs:224:9:224:10 | [SSA] s1 | | main.rs:224:14:224:29 | Some(...) | main.rs:224:9:224:10 | s1 | -| main.rs:234:9:234:10 | [SSA] s1 | main.rs:236:11:236:12 | s1 | -| main.rs:234:9:234:10 | s1 | main.rs:234:9:234:10 | [SSA] s1 | -| main.rs:234:14:234:39 | ...::A(...) | main.rs:234:9:234:10 | s1 | -| main.rs:235:9:235:10 | [SSA] s2 | main.rs:243:11:243:12 | s2 | -| main.rs:235:9:235:10 | s2 | main.rs:235:9:235:10 | [SSA] s2 | -| main.rs:235:14:235:30 | ...::B(...) | main.rs:235:9:235:10 | s2 | -| main.rs:236:11:236:12 | s1 | main.rs:237:9:237:25 | TupleStructPat | -| main.rs:236:11:236:12 | s1 | main.rs:238:9:238:25 | TupleStructPat | -| main.rs:236:11:236:12 | s1 | main.rs:240:11:240:12 | s1 | -| main.rs:237:24:237:24 | [SSA] n | main.rs:237:35:237:35 | n | -| main.rs:237:24:237:24 | n | main.rs:237:24:237:24 | [SSA] n | -| main.rs:237:30:237:36 | sink(...) | main.rs:236:5:239:5 | match s1 { ... } | -| main.rs:238:24:238:24 | [SSA] n | main.rs:238:35:238:35 | n | -| main.rs:238:24:238:24 | n | main.rs:238:24:238:24 | [SSA] n | -| main.rs:238:30:238:36 | sink(...) | main.rs:236:5:239:5 | match s1 { ... } | -| main.rs:240:11:240:12 | s1 | main.rs:241:9:241:45 | ... \| ... | -| main.rs:241:9:241:45 | ... \| ... | main.rs:241:9:241:25 | TupleStructPat | -| main.rs:241:9:241:45 | ... \| ... | main.rs:241:29:241:45 | TupleStructPat | -| main.rs:241:9:241:45 | [SSA] [match(true)] phi | main.rs:241:55:241:55 | n | -| main.rs:241:24:241:24 | [SSA] [input] [match(true)] phi | main.rs:241:9:241:45 | [SSA] [match(true)] phi | -| main.rs:241:24:241:24 | [SSA] n | main.rs:241:24:241:24 | [SSA] [input] [match(true)] phi | -| main.rs:241:24:241:24 | n | main.rs:241:24:241:24 | [SSA] n | -| main.rs:241:44:241:44 | [SSA] [input] [match(true)] phi | main.rs:241:9:241:45 | [SSA] [match(true)] phi | -| main.rs:241:44:241:44 | [SSA] n | main.rs:241:44:241:44 | [SSA] [input] [match(true)] phi | -| main.rs:241:44:241:44 | n | main.rs:241:44:241:44 | [SSA] n | -| main.rs:241:50:241:56 | sink(...) | main.rs:240:5:242:5 | match s1 { ... } | -| main.rs:243:5:246:5 | match s2 { ... } | main.rs:233:48:247:1 | { ... } | -| main.rs:243:11:243:12 | s2 | main.rs:244:9:244:25 | TupleStructPat | -| main.rs:243:11:243:12 | s2 | main.rs:245:9:245:25 | TupleStructPat | -| main.rs:244:24:244:24 | [SSA] n | main.rs:244:35:244:35 | n | -| main.rs:244:24:244:24 | n | main.rs:244:24:244:24 | [SSA] n | -| main.rs:244:30:244:36 | sink(...) | main.rs:243:5:246:5 | match s2 { ... } | -| main.rs:245:24:245:24 | [SSA] n | main.rs:245:35:245:35 | n | -| main.rs:245:24:245:24 | n | main.rs:245:24:245:24 | [SSA] n | -| main.rs:245:30:245:36 | sink(...) | main.rs:243:5:246:5 | match s2 { ... } | -| main.rs:252:9:252:10 | [SSA] s1 | main.rs:254:11:254:12 | s1 | -| main.rs:252:9:252:10 | s1 | main.rs:252:9:252:10 | [SSA] s1 | -| main.rs:252:14:252:26 | A(...) | main.rs:252:9:252:10 | s1 | -| main.rs:253:9:253:10 | [SSA] s2 | main.rs:261:11:261:12 | s2 | -| main.rs:253:9:253:10 | s2 | main.rs:253:9:253:10 | [SSA] s2 | -| main.rs:253:14:253:17 | B(...) | main.rs:253:9:253:10 | s2 | -| main.rs:254:11:254:12 | s1 | main.rs:255:9:255:12 | TupleStructPat | -| main.rs:254:11:254:12 | s1 | main.rs:256:9:256:12 | TupleStructPat | -| main.rs:254:11:254:12 | s1 | main.rs:258:11:258:12 | s1 | -| main.rs:255:11:255:11 | [SSA] n | main.rs:255:22:255:22 | n | -| main.rs:255:11:255:11 | n | main.rs:255:11:255:11 | [SSA] n | -| main.rs:255:17:255:23 | sink(...) | main.rs:254:5:257:5 | match s1 { ... } | -| main.rs:256:11:256:11 | [SSA] n | main.rs:256:22:256:22 | n | -| main.rs:256:11:256:11 | n | main.rs:256:11:256:11 | [SSA] n | -| main.rs:256:17:256:23 | sink(...) | main.rs:254:5:257:5 | match s1 { ... } | -| main.rs:258:11:258:12 | s1 | main.rs:259:9:259:19 | ... \| ... | -| main.rs:259:9:259:19 | ... \| ... | main.rs:259:9:259:12 | TupleStructPat | -| main.rs:259:9:259:19 | ... \| ... | main.rs:259:16:259:19 | TupleStructPat | -| main.rs:259:9:259:19 | [SSA] [match(true)] phi | main.rs:259:29:259:29 | n | -| main.rs:259:11:259:11 | [SSA] [input] [match(true)] phi | main.rs:259:9:259:19 | [SSA] [match(true)] phi | -| main.rs:259:11:259:11 | [SSA] n | main.rs:259:11:259:11 | [SSA] [input] [match(true)] phi | -| main.rs:259:11:259:11 | n | main.rs:259:11:259:11 | [SSA] n | -| main.rs:259:18:259:18 | [SSA] [input] [match(true)] phi | main.rs:259:9:259:19 | [SSA] [match(true)] phi | -| main.rs:259:18:259:18 | [SSA] n | main.rs:259:18:259:18 | [SSA] [input] [match(true)] phi | -| main.rs:259:18:259:18 | n | main.rs:259:18:259:18 | [SSA] n | -| main.rs:259:24:259:30 | sink(...) | main.rs:258:5:260:5 | match s1 { ... } | -| main.rs:261:5:264:5 | match s2 { ... } | main.rs:251:50:265:1 | { ... } | -| main.rs:261:11:261:12 | s2 | main.rs:262:9:262:12 | TupleStructPat | -| main.rs:261:11:261:12 | s2 | main.rs:263:9:263:12 | TupleStructPat | -| main.rs:262:11:262:11 | [SSA] n | main.rs:262:22:262:22 | n | -| main.rs:262:11:262:11 | n | main.rs:262:11:262:11 | [SSA] n | -| main.rs:262:17:262:23 | sink(...) | main.rs:261:5:264:5 | match s2 { ... } | -| main.rs:263:11:263:11 | [SSA] n | main.rs:263:22:263:22 | n | -| main.rs:263:11:263:11 | n | main.rs:263:11:263:11 | [SSA] n | -| main.rs:263:17:263:23 | sink(...) | main.rs:261:5:264:5 | match s2 { ... } | -| main.rs:273:9:273:10 | [SSA] s1 | main.rs:277:11:277:12 | s1 | -| main.rs:273:9:273:10 | s1 | main.rs:273:9:273:10 | [SSA] s1 | -| main.rs:273:14:275:5 | ...::C {...} | main.rs:273:9:273:10 | s1 | +| main.rs:229:9:229:10 | [SSA] s1 | main.rs:231:14:231:15 | s1 | +| main.rs:229:9:229:10 | s1 | main.rs:229:9:229:10 | [SSA] s1 | +| main.rs:229:14:229:29 | Some(...) | main.rs:229:9:229:10 | s1 | +| main.rs:230:9:230:10 | [SSA] s2 | main.rs:232:14:232:15 | s2 | +| main.rs:230:9:230:10 | s2 | main.rs:230:9:230:10 | [SSA] s2 | +| main.rs:230:14:230:20 | Some(...) | main.rs:230:9:230:10 | s2 | +| main.rs:231:9:231:10 | [SSA] i1 | main.rs:233:10:233:11 | i1 | +| main.rs:231:9:231:10 | i1 | main.rs:231:9:231:10 | [SSA] i1 | +| main.rs:231:14:231:16 | TryExpr | main.rs:231:9:231:10 | i1 | +| main.rs:232:9:232:10 | [SSA] i2 | main.rs:234:10:234:11 | i2 | +| main.rs:232:9:232:10 | i2 | main.rs:232:9:232:10 | [SSA] i2 | +| main.rs:232:14:232:16 | TryExpr | main.rs:232:9:232:10 | i2 | +| main.rs:235:5:235:11 | Some(...) | main.rs:228:41:236:1 | { ... } | +| main.rs:239:9:239:10 | [SSA] s1 | main.rs:242:14:242:15 | s1 | +| main.rs:239:9:239:10 | s1 | main.rs:239:9:239:10 | [SSA] s1 | +| main.rs:239:32:239:45 | Ok(...) | main.rs:239:9:239:10 | s1 | +| main.rs:240:9:240:10 | [SSA] s2 | main.rs:243:14:243:15 | s2 | +| main.rs:240:9:240:10 | s2 | main.rs:240:9:240:10 | [SSA] s2 | +| main.rs:240:32:240:36 | Ok(...) | main.rs:240:9:240:10 | s2 | +| main.rs:241:9:241:10 | [SSA] s3 | main.rs:246:14:246:15 | s3 | +| main.rs:241:9:241:10 | s3 | main.rs:241:9:241:10 | [SSA] s3 | +| main.rs:241:32:241:46 | Err(...) | main.rs:241:9:241:10 | s3 | +| main.rs:242:9:242:10 | [SSA] i1 | main.rs:244:10:244:11 | i1 | +| main.rs:242:9:242:10 | i1 | main.rs:242:9:242:10 | [SSA] i1 | +| main.rs:242:14:242:16 | TryExpr | main.rs:242:9:242:10 | i1 | +| main.rs:243:9:243:10 | [SSA] i2 | main.rs:245:10:245:11 | i2 | +| main.rs:243:9:243:10 | i2 | main.rs:243:9:243:10 | [SSA] i2 | +| main.rs:243:14:243:16 | TryExpr | main.rs:243:9:243:10 | i2 | +| main.rs:246:9:246:10 | [SSA] i3 | main.rs:247:10:247:11 | i3 | +| main.rs:246:9:246:10 | i3 | main.rs:246:9:246:10 | [SSA] i3 | +| main.rs:246:14:246:16 | TryExpr | main.rs:246:9:246:10 | i3 | +| main.rs:248:5:248:9 | Ok(...) | main.rs:238:46:249:1 | { ... } | +| main.rs:257:9:257:10 | [SSA] s1 | main.rs:259:11:259:12 | s1 | +| main.rs:257:9:257:10 | s1 | main.rs:257:9:257:10 | [SSA] s1 | +| main.rs:257:14:257:39 | ...::A(...) | main.rs:257:9:257:10 | s1 | +| main.rs:258:9:258:10 | [SSA] s2 | main.rs:266:11:266:12 | s2 | +| main.rs:258:9:258:10 | s2 | main.rs:258:9:258:10 | [SSA] s2 | +| main.rs:258:14:258:30 | ...::B(...) | main.rs:258:9:258:10 | s2 | +| main.rs:259:11:259:12 | s1 | main.rs:260:9:260:25 | TupleStructPat | +| main.rs:259:11:259:12 | s1 | main.rs:261:9:261:25 | TupleStructPat | +| main.rs:259:11:259:12 | s1 | main.rs:263:11:263:12 | s1 | +| main.rs:260:24:260:24 | [SSA] n | main.rs:260:35:260:35 | n | +| main.rs:260:24:260:24 | n | main.rs:260:24:260:24 | [SSA] n | +| main.rs:260:30:260:36 | sink(...) | main.rs:259:5:262:5 | match s1 { ... } | +| main.rs:261:24:261:24 | [SSA] n | main.rs:261:35:261:35 | n | +| main.rs:261:24:261:24 | n | main.rs:261:24:261:24 | [SSA] n | +| main.rs:261:30:261:36 | sink(...) | main.rs:259:5:262:5 | match s1 { ... } | +| main.rs:263:11:263:12 | s1 | main.rs:264:9:264:45 | ... \| ... | +| main.rs:264:9:264:45 | ... \| ... | main.rs:264:9:264:25 | TupleStructPat | +| main.rs:264:9:264:45 | ... \| ... | main.rs:264:29:264:45 | TupleStructPat | +| main.rs:264:9:264:45 | [SSA] [match(true)] phi | main.rs:264:55:264:55 | n | +| main.rs:264:24:264:24 | [SSA] [input] [match(true)] phi | main.rs:264:9:264:45 | [SSA] [match(true)] phi | +| main.rs:264:24:264:24 | [SSA] n | main.rs:264:24:264:24 | [SSA] [input] [match(true)] phi | +| main.rs:264:24:264:24 | n | main.rs:264:24:264:24 | [SSA] n | +| main.rs:264:44:264:44 | [SSA] [input] [match(true)] phi | main.rs:264:9:264:45 | [SSA] [match(true)] phi | +| main.rs:264:44:264:44 | [SSA] n | main.rs:264:44:264:44 | [SSA] [input] [match(true)] phi | +| main.rs:264:44:264:44 | n | main.rs:264:44:264:44 | [SSA] n | +| main.rs:264:50:264:56 | sink(...) | main.rs:263:5:265:5 | match s1 { ... } | +| main.rs:266:5:269:5 | match s2 { ... } | main.rs:256:48:270:1 | { ... } | +| main.rs:266:11:266:12 | s2 | main.rs:267:9:267:25 | TupleStructPat | +| main.rs:266:11:266:12 | s2 | main.rs:268:9:268:25 | TupleStructPat | +| main.rs:267:24:267:24 | [SSA] n | main.rs:267:35:267:35 | n | +| main.rs:267:24:267:24 | n | main.rs:267:24:267:24 | [SSA] n | +| main.rs:267:30:267:36 | sink(...) | main.rs:266:5:269:5 | match s2 { ... } | +| main.rs:268:24:268:24 | [SSA] n | main.rs:268:35:268:35 | n | +| main.rs:268:24:268:24 | n | main.rs:268:24:268:24 | [SSA] n | +| main.rs:268:30:268:36 | sink(...) | main.rs:266:5:269:5 | match s2 { ... } | +| main.rs:275:9:275:10 | [SSA] s1 | main.rs:277:11:277:12 | s1 | +| main.rs:275:9:275:10 | s1 | main.rs:275:9:275:10 | [SSA] s1 | +| main.rs:275:14:275:26 | A(...) | main.rs:275:9:275:10 | s1 | | main.rs:276:9:276:10 | [SSA] s2 | main.rs:284:11:284:12 | s2 | | main.rs:276:9:276:10 | s2 | main.rs:276:9:276:10 | [SSA] s2 | -| main.rs:276:14:276:43 | ...::D {...} | main.rs:276:9:276:10 | s2 | -| main.rs:277:11:277:12 | s1 | main.rs:278:9:278:38 | ...::C {...} | -| main.rs:277:11:277:12 | s1 | main.rs:279:9:279:38 | ...::D {...} | +| main.rs:276:14:276:17 | B(...) | main.rs:276:9:276:10 | s2 | +| main.rs:277:11:277:12 | s1 | main.rs:278:9:278:12 | TupleStructPat | +| main.rs:277:11:277:12 | s1 | main.rs:279:9:279:12 | TupleStructPat | | main.rs:277:11:277:12 | s1 | main.rs:281:11:281:12 | s1 | -| main.rs:278:36:278:36 | [SSA] n | main.rs:278:48:278:48 | n | -| main.rs:278:36:278:36 | n | main.rs:278:36:278:36 | [SSA] n | -| main.rs:278:43:278:49 | sink(...) | main.rs:277:5:280:5 | match s1 { ... } | -| main.rs:279:36:279:36 | [SSA] n | main.rs:279:48:279:48 | n | -| main.rs:279:36:279:36 | n | main.rs:279:36:279:36 | [SSA] n | -| main.rs:279:43:279:49 | sink(...) | main.rs:277:5:280:5 | match s1 { ... } | -| main.rs:281:11:281:12 | s1 | main.rs:282:9:282:71 | ... \| ... | -| main.rs:282:9:282:71 | ... \| ... | main.rs:282:9:282:38 | ...::C {...} | -| main.rs:282:9:282:71 | ... \| ... | main.rs:282:42:282:71 | ...::D {...} | -| main.rs:282:9:282:71 | [SSA] [match(true)] phi | main.rs:282:81:282:81 | n | -| main.rs:282:36:282:36 | [SSA] [input] [match(true)] phi | main.rs:282:9:282:71 | [SSA] [match(true)] phi | -| main.rs:282:36:282:36 | [SSA] n | main.rs:282:36:282:36 | [SSA] [input] [match(true)] phi | -| main.rs:282:36:282:36 | n | main.rs:282:36:282:36 | [SSA] n | -| main.rs:282:69:282:69 | [SSA] [input] [match(true)] phi | main.rs:282:9:282:71 | [SSA] [match(true)] phi | -| main.rs:282:69:282:69 | [SSA] n | main.rs:282:69:282:69 | [SSA] [input] [match(true)] phi | -| main.rs:282:69:282:69 | n | main.rs:282:69:282:69 | [SSA] n | -| main.rs:282:76:282:82 | sink(...) | main.rs:281:5:283:5 | match s1 { ... } | -| main.rs:284:5:287:5 | match s2 { ... } | main.rs:272:49:288:1 | { ... } | -| main.rs:284:11:284:12 | s2 | main.rs:285:9:285:38 | ...::C {...} | -| main.rs:284:11:284:12 | s2 | main.rs:286:9:286:38 | ...::D {...} | -| main.rs:285:36:285:36 | [SSA] n | main.rs:285:48:285:48 | n | -| main.rs:285:36:285:36 | n | main.rs:285:36:285:36 | [SSA] n | -| main.rs:285:43:285:49 | sink(...) | main.rs:284:5:287:5 | match s2 { ... } | -| main.rs:286:36:286:36 | [SSA] n | main.rs:286:48:286:48 | n | -| main.rs:286:36:286:36 | n | main.rs:286:36:286:36 | [SSA] n | -| main.rs:286:43:286:49 | sink(...) | main.rs:284:5:287:5 | match s2 { ... } | -| main.rs:293:9:293:10 | [SSA] s1 | main.rs:297:11:297:12 | s1 | -| main.rs:293:9:293:10 | s1 | main.rs:293:9:293:10 | [SSA] s1 | -| main.rs:293:14:295:5 | C {...} | main.rs:293:9:293:10 | s1 | -| main.rs:296:9:296:10 | [SSA] s2 | main.rs:304:11:304:12 | s2 | -| main.rs:296:9:296:10 | s2 | main.rs:296:9:296:10 | [SSA] s2 | -| main.rs:296:14:296:29 | D {...} | main.rs:296:9:296:10 | s2 | -| main.rs:297:11:297:12 | s1 | main.rs:298:9:298:24 | C {...} | -| main.rs:297:11:297:12 | s1 | main.rs:299:9:299:24 | D {...} | -| main.rs:297:11:297:12 | s1 | main.rs:301:11:301:12 | s1 | -| main.rs:298:22:298:22 | [SSA] n | main.rs:298:34:298:34 | n | -| main.rs:298:22:298:22 | n | main.rs:298:22:298:22 | [SSA] n | -| main.rs:298:29:298:35 | sink(...) | main.rs:297:5:300:5 | match s1 { ... } | -| main.rs:299:22:299:22 | [SSA] n | main.rs:299:34:299:34 | n | -| main.rs:299:22:299:22 | n | main.rs:299:22:299:22 | [SSA] n | -| main.rs:299:29:299:35 | sink(...) | main.rs:297:5:300:5 | match s1 { ... } | -| main.rs:301:11:301:12 | s1 | main.rs:302:9:302:43 | ... \| ... | -| main.rs:302:9:302:43 | ... \| ... | main.rs:302:9:302:24 | C {...} | -| main.rs:302:9:302:43 | ... \| ... | main.rs:302:28:302:43 | D {...} | -| main.rs:302:9:302:43 | [SSA] [match(true)] phi | main.rs:302:53:302:53 | n | -| main.rs:302:22:302:22 | [SSA] [input] [match(true)] phi | main.rs:302:9:302:43 | [SSA] [match(true)] phi | -| main.rs:302:22:302:22 | [SSA] n | main.rs:302:22:302:22 | [SSA] [input] [match(true)] phi | -| main.rs:302:22:302:22 | n | main.rs:302:22:302:22 | [SSA] n | -| main.rs:302:41:302:41 | [SSA] [input] [match(true)] phi | main.rs:302:9:302:43 | [SSA] [match(true)] phi | -| main.rs:302:41:302:41 | [SSA] n | main.rs:302:41:302:41 | [SSA] [input] [match(true)] phi | -| main.rs:302:41:302:41 | n | main.rs:302:41:302:41 | [SSA] n | -| main.rs:302:48:302:54 | sink(...) | main.rs:301:5:303:5 | match s1 { ... } | -| main.rs:304:5:307:5 | match s2 { ... } | main.rs:292:51:308:1 | { ... } | -| main.rs:304:11:304:12 | s2 | main.rs:305:9:305:24 | C {...} | -| main.rs:304:11:304:12 | s2 | main.rs:306:9:306:24 | D {...} | -| main.rs:305:22:305:22 | [SSA] n | main.rs:305:34:305:34 | n | -| main.rs:305:22:305:22 | n | main.rs:305:22:305:22 | [SSA] n | -| main.rs:305:29:305:35 | sink(...) | main.rs:304:5:307:5 | match s2 { ... } | -| main.rs:306:22:306:22 | [SSA] n | main.rs:306:34:306:34 | n | -| main.rs:306:22:306:22 | n | main.rs:306:22:306:22 | [SSA] n | -| main.rs:306:29:306:35 | sink(...) | main.rs:304:5:307:5 | match s2 { ... } | +| main.rs:278:11:278:11 | [SSA] n | main.rs:278:22:278:22 | n | +| main.rs:278:11:278:11 | n | main.rs:278:11:278:11 | [SSA] n | +| main.rs:278:17:278:23 | sink(...) | main.rs:277:5:280:5 | match s1 { ... } | +| main.rs:279:11:279:11 | [SSA] n | main.rs:279:22:279:22 | n | +| main.rs:279:11:279:11 | n | main.rs:279:11:279:11 | [SSA] n | +| main.rs:279:17:279:23 | sink(...) | main.rs:277:5:280:5 | match s1 { ... } | +| main.rs:281:11:281:12 | s1 | main.rs:282:9:282:19 | ... \| ... | +| main.rs:282:9:282:19 | ... \| ... | main.rs:282:9:282:12 | TupleStructPat | +| main.rs:282:9:282:19 | ... \| ... | main.rs:282:16:282:19 | TupleStructPat | +| main.rs:282:9:282:19 | [SSA] [match(true)] phi | main.rs:282:29:282:29 | n | +| main.rs:282:11:282:11 | [SSA] [input] [match(true)] phi | main.rs:282:9:282:19 | [SSA] [match(true)] phi | +| main.rs:282:11:282:11 | [SSA] n | main.rs:282:11:282:11 | [SSA] [input] [match(true)] phi | +| main.rs:282:11:282:11 | n | main.rs:282:11:282:11 | [SSA] n | +| main.rs:282:18:282:18 | [SSA] [input] [match(true)] phi | main.rs:282:9:282:19 | [SSA] [match(true)] phi | +| main.rs:282:18:282:18 | [SSA] n | main.rs:282:18:282:18 | [SSA] [input] [match(true)] phi | +| main.rs:282:18:282:18 | n | main.rs:282:18:282:18 | [SSA] n | +| main.rs:282:24:282:30 | sink(...) | main.rs:281:5:283:5 | match s1 { ... } | +| main.rs:284:5:287:5 | match s2 { ... } | main.rs:274:50:288:1 | { ... } | +| main.rs:284:11:284:12 | s2 | main.rs:285:9:285:12 | TupleStructPat | +| main.rs:284:11:284:12 | s2 | main.rs:286:9:286:12 | TupleStructPat | +| main.rs:285:11:285:11 | [SSA] n | main.rs:285:22:285:22 | n | +| main.rs:285:11:285:11 | n | main.rs:285:11:285:11 | [SSA] n | +| main.rs:285:17:285:23 | sink(...) | main.rs:284:5:287:5 | match s2 { ... } | +| main.rs:286:11:286:11 | [SSA] n | main.rs:286:22:286:22 | n | +| main.rs:286:11:286:11 | n | main.rs:286:11:286:11 | [SSA] n | +| main.rs:286:17:286:23 | sink(...) | main.rs:284:5:287:5 | match s2 { ... } | +| main.rs:296:9:296:10 | [SSA] s1 | main.rs:300:11:300:12 | s1 | +| main.rs:296:9:296:10 | s1 | main.rs:296:9:296:10 | [SSA] s1 | +| main.rs:296:14:298:5 | ...::C {...} | main.rs:296:9:296: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:43 | ...::D {...} | main.rs:299:9:299:10 | s2 | +| main.rs:300:11:300:12 | s1 | main.rs:301:9:301:38 | ...::C {...} | +| main.rs:300:11:300:12 | s1 | main.rs:302:9:302:38 | ...::D {...} | +| main.rs:300:11:300:12 | s1 | main.rs:304:11:304:12 | s1 | +| main.rs:301:36:301:36 | [SSA] n | main.rs:301:48:301:48 | n | +| main.rs:301:36:301:36 | n | main.rs:301:36:301:36 | [SSA] n | +| main.rs:301:43:301:49 | sink(...) | main.rs:300:5:303:5 | match s1 { ... } | +| main.rs:302:36:302:36 | [SSA] n | main.rs:302:48:302:48 | n | +| main.rs:302:36:302:36 | n | main.rs:302:36:302:36 | [SSA] n | +| main.rs:302:43:302:49 | sink(...) | main.rs:300:5:303:5 | match s1 { ... } | +| main.rs:304:11:304:12 | s1 | main.rs:305:9:305:71 | ... \| ... | +| main.rs:305:9:305:71 | ... \| ... | main.rs:305:9:305:38 | ...::C {...} | +| main.rs:305:9:305:71 | ... \| ... | main.rs:305:42:305:71 | ...::D {...} | +| main.rs:305:9:305:71 | [SSA] [match(true)] phi | main.rs:305:81:305:81 | n | +| main.rs:305:36:305:36 | [SSA] [input] [match(true)] phi | main.rs:305:9:305:71 | [SSA] [match(true)] phi | +| main.rs:305:36:305:36 | [SSA] n | main.rs:305:36:305:36 | [SSA] [input] [match(true)] phi | +| main.rs:305:36:305:36 | n | main.rs:305:36:305:36 | [SSA] n | +| main.rs:305:69:305:69 | [SSA] [input] [match(true)] phi | main.rs:305:9:305:71 | [SSA] [match(true)] phi | +| main.rs:305:69:305:69 | [SSA] n | main.rs:305:69:305:69 | [SSA] [input] [match(true)] phi | +| main.rs:305:69:305:69 | n | main.rs:305:69:305:69 | [SSA] n | +| main.rs:305:76:305:82 | sink(...) | main.rs:304:5:306:5 | match s1 { ... } | +| main.rs:307:5:310:5 | match s2 { ... } | main.rs:295:49:311:1 | { ... } | +| main.rs:307:11:307:12 | s2 | main.rs:308:9:308:38 | ...::C {...} | +| main.rs:307:11:307:12 | s2 | main.rs:309:9:309:38 | ...::D {...} | +| main.rs:308:36:308:36 | [SSA] n | main.rs:308:48:308:48 | n | +| main.rs:308:36:308:36 | n | main.rs:308:36:308:36 | [SSA] n | +| main.rs:308:43:308:49 | sink(...) | main.rs:307:5:310:5 | match s2 { ... } | +| main.rs:309:36:309:36 | [SSA] n | main.rs:309:48:309:48 | n | +| main.rs:309:36:309:36 | n | main.rs:309:36:309:36 | [SSA] n | +| main.rs:309:43:309:49 | sink(...) | main.rs:307:5:310:5 | match s2 { ... } | +| main.rs:316:9:316:10 | [SSA] s1 | main.rs:320:11:320:12 | s1 | +| main.rs:316:9:316:10 | s1 | main.rs:316:9:316:10 | [SSA] s1 | +| main.rs:316:14:318:5 | C {...} | main.rs:316:9:316:10 | s1 | +| main.rs:319:9:319:10 | [SSA] s2 | main.rs:327:11:327:12 | s2 | +| main.rs:319:9:319:10 | s2 | main.rs:319:9:319:10 | [SSA] s2 | +| main.rs:319:14:319:29 | D {...} | main.rs:319:9:319:10 | s2 | +| main.rs:320:11:320:12 | s1 | main.rs:321:9:321:24 | C {...} | +| main.rs:320:11:320:12 | s1 | main.rs:322:9:322:24 | D {...} | +| main.rs:320:11:320:12 | s1 | main.rs:324:11:324:12 | s1 | +| main.rs:321:22:321:22 | [SSA] n | main.rs:321:34:321:34 | n | +| main.rs:321:22:321:22 | n | main.rs:321:22:321:22 | [SSA] n | +| main.rs:321:29:321:35 | sink(...) | main.rs:320:5:323:5 | match s1 { ... } | +| main.rs:322:22:322:22 | [SSA] n | main.rs:322:34:322:34 | n | +| main.rs:322:22:322:22 | n | main.rs:322:22:322:22 | [SSA] n | +| main.rs:322:29:322:35 | sink(...) | main.rs:320:5:323:5 | match s1 { ... } | +| main.rs:324:11:324:12 | s1 | main.rs:325:9:325:43 | ... \| ... | +| main.rs:325:9:325:43 | ... \| ... | main.rs:325:9:325:24 | C {...} | +| main.rs:325:9:325:43 | ... \| ... | main.rs:325:28:325:43 | D {...} | +| main.rs:325:9:325:43 | [SSA] [match(true)] phi | main.rs:325:53:325:53 | n | +| main.rs:325:22:325:22 | [SSA] [input] [match(true)] phi | main.rs:325:9:325:43 | [SSA] [match(true)] phi | +| main.rs:325:22:325:22 | [SSA] n | main.rs:325:22:325:22 | [SSA] [input] [match(true)] phi | +| main.rs:325:22:325:22 | n | main.rs:325:22:325:22 | [SSA] n | +| main.rs:325:41:325:41 | [SSA] [input] [match(true)] phi | main.rs:325:9:325:43 | [SSA] [match(true)] phi | +| main.rs:325:41:325:41 | [SSA] n | main.rs:325:41:325:41 | [SSA] [input] [match(true)] phi | +| main.rs:325:41:325:41 | n | main.rs:325:41:325:41 | [SSA] n | +| main.rs:325:48:325:54 | sink(...) | main.rs:324:5:326:5 | match s1 { ... } | +| main.rs:327:5:330:5 | match s2 { ... } | main.rs:315:51:331:1 | { ... } | +| main.rs:327:11:327:12 | s2 | main.rs:328:9:328:24 | C {...} | +| main.rs:327:11:327:12 | s2 | main.rs:329:9:329:24 | D {...} | +| main.rs:328:22:328:22 | [SSA] n | main.rs:328:34:328:34 | n | +| main.rs:328:22:328:22 | n | main.rs:328:22:328:22 | [SSA] n | +| main.rs:328:29:328:35 | sink(...) | main.rs:327:5:330:5 | match s2 { ... } | +| main.rs:329:22:329:22 | [SSA] n | main.rs:329:34:329:34 | n | +| main.rs:329:22:329:22 | n | main.rs:329:22:329:22 | [SSA] n | +| main.rs:329:29:329:35 | sink(...) | main.rs:327:5:330:5 | match s2 { ... } | +| main.rs:354:13:354:33 | result_questionmark(...) | main.rs:354:9:354:9 | _ | storeStep | main.rs:94:14:94:22 | source(...) | tuple.0 | main.rs:94:13:94:26 | TupleExpr | | main.rs:94:25:94:25 | 2 | tuple.1 | main.rs:94:13:94:26 | TupleExpr | @@ -377,15 +410,22 @@ storeStep | main.rs:211:19:211:28 | source(...) | Some | main.rs:211:14:211:29 | Some(...) | | main.rs:212:19:212:19 | 2 | Some | main.rs:212:14:212:20 | Some(...) | | main.rs:224:19:224:28 | source(...) | Some | main.rs:224:14:224:29 | Some(...) | -| main.rs:234:29:234:38 | source(...) | A | main.rs:234:14:234:39 | ...::A(...) | -| main.rs:235:29:235:29 | 2 | B | main.rs:235:14:235:30 | ...::B(...) | -| main.rs:252:16:252:25 | source(...) | A | main.rs:252:14:252:26 | A(...) | -| main.rs:253:16:253:16 | 2 | B | main.rs:253:14:253:17 | B(...) | -| main.rs:274:18:274:27 | source(...) | C | main.rs:273:14:275:5 | ...::C {...} | -| main.rs:276:41:276:41 | 2 | D | main.rs:276:14:276:43 | ...::D {...} | -| main.rs:294:18:294:27 | source(...) | C | main.rs:293:14:295:5 | C {...} | -| main.rs:296:27:296:27 | 2 | D | main.rs:296:14:296:29 | D {...} | -| main.rs:314:27:314:27 | 0 | Some | main.rs:314:22:314:28 | Some(...) | +| main.rs:229:19:229:28 | source(...) | Some | main.rs:229:14:229:29 | Some(...) | +| main.rs:230:19:230:19 | 2 | Some | main.rs:230:14:230:20 | Some(...) | +| main.rs:235:10:235:10 | 0 | Some | main.rs:235:5:235:11 | Some(...) | +| main.rs:239:35:239:44 | source(...) | Ok | main.rs:239:32:239:45 | Ok(...) | +| main.rs:240:35:240:35 | 2 | Ok | main.rs:240:32:240:36 | Ok(...) | +| main.rs:241:36:241:45 | source(...) | Err | main.rs:241:32:241:46 | Err(...) | +| main.rs:248:8:248:8 | 0 | Ok | main.rs:248:5:248:9 | Ok(...) | +| main.rs:257:29:257:38 | source(...) | A | main.rs:257:14:257:39 | ...::A(...) | +| main.rs:258:29:258:29 | 2 | B | main.rs:258:14:258:30 | ...::B(...) | +| main.rs:275:16:275:25 | source(...) | A | main.rs:275:14:275:26 | A(...) | +| main.rs:276:16:276:16 | 2 | B | main.rs:276:14:276:17 | B(...) | +| main.rs:297:18:297:27 | source(...) | C | main.rs:296:14:298:5 | ...::C {...} | +| main.rs:299:41:299:41 | 2 | D | main.rs:299:14:299:43 | ...::D {...} | +| main.rs:317:18:317:27 | source(...) | C | main.rs:316:14:318:5 | C {...} | +| main.rs:319:27:319:27 | 2 | D | main.rs:319:14:319:29 | D {...} | +| main.rs:337:27:337:27 | 0 | Some | main.rs:337:22:337:28 | Some(...) | readStep | file://:0:0:0:0 | [summary param] self in lang:core::_::::unwrap | Some | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)] in lang:core::_::::unwrap | | main.rs:33:9:33:15 | TupleStructPat | Some | main.rs:33:14:33:14 | _ | @@ -409,27 +449,27 @@ readStep | main.rs:205:9:205:23 | TupleStructPat | Some | main.rs:205:22:205:22 | n | | main.rs:214:9:214:15 | TupleStructPat | Some | main.rs:214:14:214:14 | n | | main.rs:218:9:218:15 | TupleStructPat | Some | main.rs:218:14:218:14 | n | -| main.rs:237:9:237:25 | TupleStructPat | A | main.rs:237:24:237:24 | n | -| main.rs:238:9:238:25 | TupleStructPat | B | main.rs:238:24:238:24 | n | -| main.rs:241:9:241:25 | TupleStructPat | A | main.rs:241:24:241:24 | n | -| main.rs:241:29:241:45 | TupleStructPat | B | main.rs:241:44:241:44 | n | -| main.rs:244:9:244:25 | TupleStructPat | A | main.rs:244:24:244:24 | n | -| main.rs:245:9:245:25 | TupleStructPat | B | main.rs:245:24:245:24 | n | -| main.rs:255:9:255:12 | TupleStructPat | A | main.rs:255:11:255:11 | n | -| main.rs:256:9:256:12 | TupleStructPat | B | main.rs:256:11:256:11 | n | -| main.rs:259:9:259:12 | TupleStructPat | A | main.rs:259:11:259:11 | n | -| main.rs:259:16:259:19 | TupleStructPat | B | main.rs:259:18:259:18 | n | -| main.rs:262:9:262:12 | TupleStructPat | A | main.rs:262:11:262:11 | n | -| main.rs:263:9:263:12 | TupleStructPat | B | main.rs:263:11:263:11 | n | -| main.rs:278:9:278:38 | ...::C {...} | C | main.rs:278:36:278:36 | n | -| main.rs:279:9:279:38 | ...::D {...} | D | main.rs:279:36:279:36 | n | -| main.rs:282:9:282:38 | ...::C {...} | C | main.rs:282:36:282:36 | n | -| main.rs:282:42:282:71 | ...::D {...} | D | main.rs:282:69:282:69 | n | -| main.rs:285:9:285:38 | ...::C {...} | C | main.rs:285:36:285:36 | n | -| main.rs:286:9:286:38 | ...::D {...} | D | main.rs:286:36:286:36 | n | -| main.rs:298:9:298:24 | C {...} | C | main.rs:298:22:298:22 | n | -| main.rs:299:9:299:24 | D {...} | D | main.rs:299:22:299:22 | n | -| main.rs:302:9:302:24 | C {...} | C | main.rs:302:22:302:22 | n | -| main.rs:302:28:302:43 | D {...} | D | main.rs:302:41:302:41 | n | -| main.rs:305:9:305:24 | C {...} | C | main.rs:305:22:305:22 | n | -| main.rs:306:9:306:24 | D {...} | D | main.rs:306:22:306:22 | n | +| main.rs:260:9:260:25 | TupleStructPat | A | main.rs:260:24:260:24 | n | +| main.rs:261:9:261:25 | TupleStructPat | B | main.rs:261:24:261:24 | n | +| main.rs:264:9:264:25 | TupleStructPat | A | main.rs:264:24:264:24 | n | +| main.rs:264:29:264:45 | TupleStructPat | B | main.rs:264:44:264:44 | n | +| main.rs:267:9:267:25 | TupleStructPat | A | main.rs:267:24:267:24 | n | +| main.rs:268:9:268:25 | TupleStructPat | B | main.rs:268:24:268:24 | n | +| main.rs:278:9:278:12 | TupleStructPat | A | main.rs:278:11:278:11 | n | +| main.rs:279:9:279:12 | TupleStructPat | B | main.rs:279:11:279:11 | n | +| main.rs:282:9:282:12 | TupleStructPat | A | main.rs:282:11:282:11 | n | +| main.rs:282:16:282:19 | TupleStructPat | B | main.rs:282:18:282:18 | n | +| main.rs:285:9:285:12 | TupleStructPat | A | main.rs:285:11:285:11 | n | +| main.rs:286:9:286:12 | TupleStructPat | B | main.rs:286:11:286:11 | n | +| main.rs:301:9:301:38 | ...::C {...} | C | main.rs:301:36:301:36 | n | +| main.rs:302:9:302:38 | ...::D {...} | D | main.rs:302:36:302:36 | n | +| main.rs:305:9:305:38 | ...::C {...} | C | main.rs:305:36:305:36 | n | +| main.rs:305:42:305:71 | ...::D {...} | D | main.rs:305:69:305:69 | n | +| main.rs:308:9:308:38 | ...::C {...} | C | main.rs:308:36:308:36 | n | +| main.rs:309:9:309:38 | ...::D {...} | D | main.rs:309:36:309:36 | n | +| main.rs:321:9:321:24 | C {...} | C | main.rs:321:22:321:22 | n | +| main.rs:322:9:322:24 | D {...} | D | main.rs:322:22:322:22 | n | +| main.rs:325:9:325:24 | C {...} | C | main.rs:325:22:325:22 | n | +| main.rs:325:28:325:43 | D {...} | D | main.rs:325:41:325:41 | n | +| main.rs:328:9:328:24 | C {...} | C | main.rs:328:22:328:22 | n | +| main.rs:329:9:329:24 | D {...} | D | main.rs:329:22:329:22 | n | 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 ed51d66a1adc..75b0273f8e60 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -36,34 +36,34 @@ edges | main.rs:224:14:224:29 | Some(...) [Some] | main.rs:225:10:225:11 | s1 [Some] | provenance | | | main.rs:224:19:224:28 | source(...) | main.rs:224:14:224:29 | Some(...) [Some] | provenance | | | main.rs:225:10:225:11 | s1 [Some] | main.rs:225:10:225:20 | ... .unwrap(...) | provenance | | -| main.rs:234:14:234:39 | ...::A(...) [A] | main.rs:237:9:237:25 | TupleStructPat [A] | provenance | | -| main.rs:234:14:234:39 | ...::A(...) [A] | main.rs:241:9:241:25 | TupleStructPat [A] | provenance | | -| main.rs:234:29:234:38 | source(...) | main.rs:234:14:234:39 | ...::A(...) [A] | provenance | | -| main.rs:237:9:237:25 | TupleStructPat [A] | main.rs:237:24:237:24 | n | provenance | | -| main.rs:237:24:237:24 | n | main.rs:237:35:237:35 | n | provenance | | -| main.rs:241:9:241:25 | TupleStructPat [A] | main.rs:241:24:241:24 | n | provenance | | -| main.rs:241:24:241:24 | n | main.rs:241:55:241:55 | n | provenance | | -| main.rs:252:14:252:26 | A(...) [A] | main.rs:255:9:255:12 | TupleStructPat [A] | provenance | | -| main.rs:252:14:252:26 | A(...) [A] | main.rs:259:9:259:12 | TupleStructPat [A] | provenance | | -| main.rs:252:16:252:25 | source(...) | main.rs:252:14:252:26 | A(...) [A] | provenance | | -| main.rs:255:9:255:12 | TupleStructPat [A] | main.rs:255:11:255:11 | n | provenance | | -| main.rs:255:11:255:11 | n | main.rs:255:22:255:22 | n | provenance | | -| main.rs:259:9:259:12 | TupleStructPat [A] | main.rs:259:11:259:11 | n | provenance | | -| main.rs:259:11:259:11 | n | main.rs:259:29:259:29 | n | provenance | | -| main.rs:273:14:275:5 | ...::C {...} [C] | main.rs:278:9:278:38 | ...::C {...} [C] | provenance | | -| main.rs:273:14:275:5 | ...::C {...} [C] | main.rs:282:9:282:38 | ...::C {...} [C] | provenance | | -| main.rs:274:18:274:27 | source(...) | main.rs:273:14:275:5 | ...::C {...} [C] | provenance | | -| main.rs:278:9:278:38 | ...::C {...} [C] | main.rs:278:36:278:36 | n | provenance | | -| main.rs:278:36:278:36 | n | main.rs:278:48:278:48 | n | provenance | | -| main.rs:282:9:282:38 | ...::C {...} [C] | main.rs:282:36:282:36 | n | provenance | | -| main.rs:282:36:282:36 | n | main.rs:282:81:282:81 | n | provenance | | -| main.rs:293:14:295:5 | C {...} [C] | main.rs:298:9:298:24 | C {...} [C] | provenance | | -| main.rs:293:14:295:5 | C {...} [C] | main.rs:302:9:302:24 | C {...} [C] | provenance | | -| main.rs:294:18:294:27 | source(...) | main.rs:293:14:295:5 | C {...} [C] | provenance | | -| main.rs:298:9:298:24 | C {...} [C] | main.rs:298:22:298:22 | n | provenance | | -| main.rs:298:22:298:22 | n | main.rs:298:34:298:34 | n | provenance | | -| main.rs:302:9:302:24 | C {...} [C] | main.rs:302:22:302:22 | n | provenance | | -| main.rs:302:22:302:22 | n | main.rs:302:53:302:53 | n | provenance | | +| main.rs:257:14:257:39 | ...::A(...) [A] | main.rs:260:9:260:25 | TupleStructPat [A] | provenance | | +| main.rs:257:14:257:39 | ...::A(...) [A] | main.rs:264:9:264:25 | TupleStructPat [A] | provenance | | +| main.rs:257:29:257:38 | source(...) | main.rs:257:14:257:39 | ...::A(...) [A] | provenance | | +| main.rs:260:9:260:25 | TupleStructPat [A] | main.rs:260:24:260:24 | n | provenance | | +| main.rs:260:24:260:24 | n | main.rs:260:35:260:35 | n | provenance | | +| main.rs:264:9:264:25 | TupleStructPat [A] | main.rs:264:24:264:24 | n | provenance | | +| main.rs:264:24:264:24 | n | main.rs:264:55:264:55 | n | provenance | | +| main.rs:275:14:275:26 | A(...) [A] | main.rs:278:9:278:12 | TupleStructPat [A] | provenance | | +| main.rs:275:14:275:26 | A(...) [A] | main.rs:282:9:282:12 | TupleStructPat [A] | provenance | | +| main.rs:275:16:275:25 | source(...) | main.rs:275:14:275:26 | A(...) [A] | provenance | | +| main.rs:278:9:278:12 | TupleStructPat [A] | main.rs:278:11:278:11 | n | provenance | | +| main.rs:278:11:278:11 | n | main.rs:278:22:278:22 | n | provenance | | +| main.rs:282:9:282:12 | TupleStructPat [A] | main.rs:282:11:282:11 | n | provenance | | +| main.rs:282:11:282:11 | n | main.rs:282:29:282:29 | n | provenance | | +| main.rs:296:14:298:5 | ...::C {...} [C] | main.rs:301:9:301:38 | ...::C {...} [C] | provenance | | +| main.rs:296:14:298:5 | ...::C {...} [C] | main.rs:305:9:305:38 | ...::C {...} [C] | provenance | | +| main.rs:297:18:297:27 | source(...) | main.rs:296:14:298:5 | ...::C {...} [C] | provenance | | +| main.rs:301:9:301:38 | ...::C {...} [C] | main.rs:301:36:301:36 | n | provenance | | +| main.rs:301:36:301:36 | n | main.rs:301:48:301:48 | n | provenance | | +| main.rs:305:9:305:38 | ...::C {...} [C] | main.rs:305:36:305:36 | n | provenance | | +| main.rs:305:36:305:36 | n | main.rs:305:81:305:81 | n | provenance | | +| main.rs:316:14:318:5 | C {...} [C] | main.rs:321:9:321:24 | C {...} [C] | provenance | | +| main.rs:316:14:318:5 | C {...} [C] | main.rs:325:9:325:24 | C {...} [C] | provenance | | +| main.rs:317:18:317:27 | source(...) | main.rs:316:14:318:5 | C {...} [C] | provenance | | +| main.rs:321:9:321:24 | C {...} [C] | main.rs:321:22:321:22 | n | provenance | | +| main.rs:321:22:321:22 | n | main.rs:321:34:321:34 | n | provenance | | +| main.rs:325:9:325:24 | C {...} [C] | main.rs:325:22:325:22 | n | provenance | | +| main.rs:325:22:325:22 | n | main.rs:325:53:325:53 | n | provenance | | nodes | main.rs:15:10:15:18 | source(...) | semmle.label | source(...) | | main.rs:19:13:19:21 | source(...) | semmle.label | source(...) | @@ -115,38 +115,38 @@ nodes | main.rs:224:19:224:28 | source(...) | semmle.label | source(...) | | main.rs:225:10:225:11 | s1 [Some] | semmle.label | s1 [Some] | | main.rs:225:10:225:20 | ... .unwrap(...) | semmle.label | ... .unwrap(...) | -| main.rs:234:14:234:39 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | -| main.rs:234:29:234:38 | source(...) | semmle.label | source(...) | -| main.rs:237:9:237:25 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | -| main.rs:237:24:237:24 | n | semmle.label | n | -| main.rs:237:35:237:35 | n | semmle.label | n | -| main.rs:241:9:241:25 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | -| main.rs:241:24:241:24 | n | semmle.label | n | -| main.rs:241:55:241:55 | n | semmle.label | n | -| main.rs:252:14:252:26 | A(...) [A] | semmle.label | A(...) [A] | -| main.rs:252:16:252:25 | source(...) | semmle.label | source(...) | -| main.rs:255:9:255:12 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | -| main.rs:255:11:255:11 | n | semmle.label | n | -| main.rs:255:22:255:22 | n | semmle.label | n | -| main.rs:259:9:259:12 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | -| main.rs:259:11:259:11 | n | semmle.label | n | -| main.rs:259:29:259:29 | n | semmle.label | n | -| main.rs:273:14:275:5 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:274:18:274:27 | source(...) | semmle.label | source(...) | -| main.rs:278:9:278:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:278:36:278:36 | n | semmle.label | n | -| main.rs:278:48:278:48 | n | semmle.label | n | -| main.rs:282:9:282:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:282:36:282:36 | n | semmle.label | n | -| main.rs:282:81:282:81 | n | semmle.label | n | -| main.rs:293:14:295:5 | C {...} [C] | semmle.label | C {...} [C] | -| main.rs:294:18:294:27 | source(...) | semmle.label | source(...) | -| main.rs:298:9:298:24 | C {...} [C] | semmle.label | C {...} [C] | -| main.rs:298:22:298:22 | n | semmle.label | n | -| main.rs:298:34:298:34 | n | semmle.label | n | -| main.rs:302:9:302:24 | C {...} [C] | semmle.label | C {...} [C] | -| main.rs:302:22:302:22 | n | semmle.label | n | -| main.rs:302:53:302:53 | n | semmle.label | n | +| main.rs:257:14:257:39 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | +| main.rs:257:29:257:38 | source(...) | semmle.label | source(...) | +| main.rs:260:9:260:25 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | +| main.rs:260:24:260:24 | n | semmle.label | n | +| main.rs:260:35:260:35 | n | semmle.label | n | +| main.rs:264:9:264:25 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | +| main.rs:264:24:264:24 | n | semmle.label | n | +| main.rs:264:55:264:55 | n | semmle.label | n | +| main.rs:275:14:275:26 | A(...) [A] | semmle.label | A(...) [A] | +| main.rs:275:16:275:25 | source(...) | semmle.label | source(...) | +| main.rs:278:9:278:12 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | +| main.rs:278:11:278:11 | n | semmle.label | n | +| main.rs:278:22:278:22 | n | semmle.label | n | +| main.rs:282:9:282:12 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | +| main.rs:282:11:282:11 | n | semmle.label | n | +| main.rs:282:29:282:29 | n | semmle.label | n | +| main.rs:296:14:298:5 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:297:18:297:27 | source(...) | semmle.label | source(...) | +| main.rs:301:9:301:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:301:36:301:36 | n | semmle.label | n | +| main.rs:301:48:301:48 | n | semmle.label | n | +| main.rs:305:9:305:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:305:36:305:36 | n | semmle.label | n | +| main.rs:305:81:305:81 | n | semmle.label | n | +| main.rs:316:14:318:5 | C {...} [C] | semmle.label | C {...} [C] | +| main.rs:317:18:317:27 | source(...) | semmle.label | source(...) | +| main.rs:321:9:321:24 | C {...} [C] | semmle.label | C {...} [C] | +| main.rs:321:22:321:22 | n | semmle.label | n | +| main.rs:321:34:321:34 | n | semmle.label | n | +| main.rs:325:9:325:24 | C {...} [C] | semmle.label | C {...} [C] | +| main.rs:325:22:325:22 | n | semmle.label | n | +| main.rs:325:53:325:53 | n | semmle.label | n | subpaths testFailures #select @@ -164,11 +164,11 @@ testFailures | main.rs:201:33:201:33 | n | main.rs:198:27:198:36 | source(...) | main.rs:201:33:201:33 | n | $@ | main.rs:198:27:198:36 | source(...) | source(...) | | main.rs:214:25:214:25 | n | main.rs:211:19:211:28 | source(...) | main.rs:214:25:214:25 | n | $@ | main.rs:211:19:211:28 | source(...) | source(...) | | main.rs:225:10:225:20 | ... .unwrap(...) | main.rs:224:19:224:28 | source(...) | main.rs:225:10:225:20 | ... .unwrap(...) | $@ | main.rs:224:19:224:28 | source(...) | source(...) | -| main.rs:237:35:237:35 | n | main.rs:234:29:234:38 | source(...) | main.rs:237:35:237:35 | n | $@ | main.rs:234:29:234:38 | source(...) | source(...) | -| main.rs:241:55:241:55 | n | main.rs:234:29:234:38 | source(...) | main.rs:241:55:241:55 | n | $@ | main.rs:234:29:234:38 | source(...) | source(...) | -| main.rs:255:22:255:22 | n | main.rs:252:16:252:25 | source(...) | main.rs:255:22:255:22 | n | $@ | main.rs:252:16:252:25 | source(...) | source(...) | -| main.rs:259:29:259:29 | n | main.rs:252:16:252:25 | source(...) | main.rs:259:29:259:29 | n | $@ | main.rs:252:16:252:25 | source(...) | source(...) | -| main.rs:278:48:278:48 | n | main.rs:274:18:274:27 | source(...) | main.rs:278:48:278:48 | n | $@ | main.rs:274:18:274:27 | source(...) | source(...) | -| main.rs:282:81:282:81 | n | main.rs:274:18:274:27 | source(...) | main.rs:282:81:282:81 | n | $@ | main.rs:274:18:274:27 | source(...) | source(...) | -| main.rs:298:34:298:34 | n | main.rs:294:18:294:27 | source(...) | main.rs:298:34:298:34 | n | $@ | main.rs:294:18:294:27 | source(...) | source(...) | -| main.rs:302:53:302:53 | n | main.rs:294:18:294:27 | source(...) | main.rs:302:53:302:53 | n | $@ | main.rs:294:18:294:27 | source(...) | source(...) | +| main.rs:260:35:260:35 | n | main.rs:257:29:257:38 | source(...) | main.rs:260:35:260:35 | n | $@ | main.rs:257:29:257:38 | source(...) | source(...) | +| main.rs:264:55:264:55 | n | main.rs:257:29:257:38 | source(...) | main.rs:264:55:264:55 | n | $@ | main.rs:257:29:257:38 | source(...) | source(...) | +| main.rs:278:22:278:22 | n | main.rs:275:16:275:25 | source(...) | main.rs:278:22:278:22 | n | $@ | main.rs:275:16:275:25 | source(...) | source(...) | +| main.rs:282:29:282:29 | n | main.rs:275:16:275:25 | source(...) | main.rs:282:29:282:29 | n | $@ | main.rs:275:16:275:25 | source(...) | source(...) | +| main.rs:301:48:301:48 | n | main.rs:297:18:297:27 | source(...) | main.rs:301:48:301:48 | n | $@ | main.rs:297:18:297:27 | source(...) | source(...) | +| main.rs:305:81:305:81 | n | main.rs:297:18:297:27 | source(...) | main.rs:305:81:305:81 | n | $@ | main.rs:297:18:297:27 | source(...) | source(...) | +| main.rs:321:34:321:34 | n | main.rs:317:18:317:27 | source(...) | main.rs:321:34:321:34 | n | $@ | main.rs:317:18:317:27 | source(...) | source(...) | +| main.rs:325:53:325:53 | n | main.rs:317:18:317:27 | source(...) | main.rs:325:53:325:53 | n | $@ | main.rs:317:18:317:27 | 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 2732e00ecb19..8ddfcfbf1309 100644 --- a/rust/ql/test/library-tests/dataflow/local/main.rs +++ b/rust/ql/test/library-tests/dataflow/local/main.rs @@ -225,6 +225,29 @@ fn option_unwrap() { sink(s1.unwrap()); // $ hasValueFlow=19 } +fn option_questionmark() -> Option { + let s1 = Some(source(20)); + let s2 = Some(2); + let i1 = s1?; + let i2 = s2?; + sink(i1); // $ MISSING: hasValueFlow=20 + sink(i2); + Some(0) +} + +fn result_questionmark() -> Result { + let s1: Result = Ok(source(20)); + let s2: Result = Ok(2); + let s3: Result = Err(source(77)); + let i1 = s1?; + let i2 = s2?; + sink(i1); // $ MISSING: hasValueFlow=20 + sink(i2); + let i3 = s3?; + sink(i3); // No flow since value is in `Err`. + Ok(0) +} + enum MyTupleEnum { A(i64), B(i64), @@ -327,6 +350,8 @@ fn main() { option_pattern_match_qualified(); option_pattern_match_unqualified(); option_unwrap(); + option_questionmark(); + let _ = result_questionmark(); custom_tuple_enum_pattern_match_qualified(); custom_tuple_enum_pattern_match_unqualified(); custom_record_enum_pattern_match_qualified(); From 70c60868a69d284aed4daf145636ddf1bbc2b825 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 29 Nov 2024 13:18:11 +0100 Subject: [PATCH 2/2] Rust: Model `?` as reading from `Option` and `Result` --- .../rust/dataflow/internal/DataFlowImpl.qll | 10 +- .../dataflow/local/DataFlowStep.expected | 383 +++++++++--------- .../dataflow/local/inline-flow.expected | 156 +++---- .../test/library-tests/dataflow/local/main.rs | 7 +- 4 files changed, 295 insertions(+), 261 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index a474d778e4e4..e1f970ed6d09 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -884,6 +884,13 @@ module RustDataFlow implements InputSig { node1.asExpr() = access.getExpr() and node2.asExpr() = access ) + or + exists(TryExprCfgNode try | + node1.asExpr() = try.getExpr() and + node2.asExpr() = try and + c.(VariantPositionContent).getVariantCanonicalPath(0).getExtendedCanonicalPath() = + ["crate::option::Option::Some", "crate::result::Result::Ok"] + ) ) or FlowSummaryImpl::Private::Steps::summaryReadStep(node1.(Node::FlowSummaryNode).getSummaryNode(), @@ -1050,7 +1057,8 @@ private module Cached { TSourceParameterNode(ParamBaseCfgNode p) or TPatNode(PatCfgNode p) or TExprPostUpdateNode(ExprCfgNode e) { - isArgumentForCall(e, _, _) or e = any(FieldExprCfgNode access).getExpr() + isArgumentForCall(e, _, _) or + e = [any(FieldExprCfgNode access).getExpr(), any(TryExprCfgNode try).getExpr()] } or TSsaNode(SsaImpl::DataFlowIntegration::SsaNode node) or TFlowSummaryNode(FlowSummaryImpl::Private::SummaryNode sn) diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index d566af4eca27..781a57dd553b 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -207,176 +207,173 @@ localStep | main.rs:229:9:229:10 | [SSA] s1 | main.rs:231:14:231:15 | s1 | | main.rs:229:9:229:10 | s1 | main.rs:229:9:229:10 | [SSA] s1 | | main.rs:229:14:229:29 | Some(...) | main.rs:229:9:229:10 | s1 | -| main.rs:230:9:230:10 | [SSA] s2 | main.rs:232:14:232:15 | s2 | +| main.rs:230:9:230:10 | [SSA] s2 | main.rs:233:10:233:11 | s2 | | main.rs:230:9:230:10 | s2 | main.rs:230:9:230:10 | [SSA] s2 | | main.rs:230:14:230:20 | Some(...) | main.rs:230:9:230:10 | s2 | -| main.rs:231:9:231:10 | [SSA] i1 | main.rs:233:10:233:11 | i1 | +| main.rs:231:9:231:10 | [SSA] i1 | main.rs:232:10:232:11 | i1 | | main.rs:231:9:231:10 | i1 | main.rs:231:9:231:10 | [SSA] i1 | | main.rs:231:14:231:16 | TryExpr | main.rs:231:9:231:10 | i1 | -| main.rs:232:9:232:10 | [SSA] i2 | main.rs:234:10:234:11 | i2 | -| main.rs:232:9:232:10 | i2 | main.rs:232:9:232:10 | [SSA] i2 | -| main.rs:232:14:232:16 | TryExpr | main.rs:232:9:232:10 | i2 | -| main.rs:235:5:235:11 | Some(...) | main.rs:228:41:236:1 | { ... } | -| main.rs:239:9:239:10 | [SSA] s1 | main.rs:242:14:242:15 | s1 | -| main.rs:239:9:239:10 | s1 | main.rs:239:9:239:10 | [SSA] s1 | -| main.rs:239:32:239:45 | Ok(...) | main.rs:239:9:239:10 | s1 | -| main.rs:240:9:240:10 | [SSA] s2 | main.rs:243:14:243:15 | s2 | -| main.rs:240:9:240:10 | s2 | main.rs:240:9:240:10 | [SSA] s2 | -| main.rs:240:32:240:36 | Ok(...) | main.rs:240:9:240:10 | s2 | -| main.rs:241:9:241:10 | [SSA] s3 | main.rs:246:14:246:15 | s3 | -| main.rs:241:9:241:10 | s3 | main.rs:241:9:241:10 | [SSA] s3 | -| main.rs:241:32:241:46 | Err(...) | main.rs:241:9:241:10 | s3 | -| main.rs:242:9:242:10 | [SSA] i1 | main.rs:244:10:244:11 | i1 | -| main.rs:242:9:242:10 | i1 | main.rs:242:9:242:10 | [SSA] i1 | -| main.rs:242:14:242:16 | TryExpr | main.rs:242:9:242:10 | i1 | -| main.rs:243:9:243:10 | [SSA] i2 | main.rs:245:10:245:11 | i2 | -| main.rs:243:9:243:10 | i2 | main.rs:243:9:243:10 | [SSA] i2 | -| main.rs:243:14:243:16 | TryExpr | main.rs:243:9:243:10 | i2 | -| main.rs:246:9:246:10 | [SSA] i3 | main.rs:247:10:247:11 | i3 | -| main.rs:246:9:246:10 | i3 | main.rs:246:9:246:10 | [SSA] i3 | -| main.rs:246:14:246:16 | TryExpr | main.rs:246:9:246:10 | i3 | -| main.rs:248:5:248:9 | Ok(...) | main.rs:238:46:249:1 | { ... } | -| main.rs:257:9:257:10 | [SSA] s1 | main.rs:259:11:259:12 | s1 | -| main.rs:257:9:257:10 | s1 | main.rs:257:9:257:10 | [SSA] s1 | -| main.rs:257:14:257:39 | ...::A(...) | main.rs:257:9:257:10 | s1 | -| main.rs:258:9:258:10 | [SSA] s2 | main.rs:266:11:266:12 | s2 | -| main.rs:258:9:258:10 | s2 | main.rs:258:9:258:10 | [SSA] s2 | -| main.rs:258:14:258:30 | ...::B(...) | main.rs:258:9:258:10 | s2 | -| main.rs:259:11:259:12 | s1 | main.rs:260:9:260:25 | TupleStructPat | -| main.rs:259:11:259:12 | s1 | main.rs:261:9:261:25 | TupleStructPat | -| main.rs:259:11:259:12 | s1 | main.rs:263:11:263:12 | s1 | +| main.rs:234:5:234:11 | Some(...) | main.rs:228:41:235:1 | { ... } | +| main.rs:238:9:238:10 | [SSA] s1 | main.rs:241:14:241:15 | s1 | +| main.rs:238:9:238:10 | s1 | main.rs:238:9:238:10 | [SSA] s1 | +| main.rs:238:32:238:45 | Ok(...) | main.rs:238:9:238:10 | s1 | +| main.rs:239:9:239:10 | [SSA] s2 | main.rs:242:14:242:15 | s2 | +| main.rs:239:9:239:10 | s2 | main.rs:239:9:239:10 | [SSA] s2 | +| main.rs:239:32:239:36 | Ok(...) | main.rs:239:9:239:10 | s2 | +| main.rs:240:9:240:10 | [SSA] s3 | main.rs:245:14:245:15 | s3 | +| main.rs:240:9:240:10 | s3 | main.rs:240:9:240:10 | [SSA] s3 | +| main.rs:240:32:240:46 | Err(...) | main.rs:240:9:240:10 | s3 | +| main.rs:241:9:241:10 | [SSA] i1 | main.rs:243:10:243:11 | i1 | +| main.rs:241:9:241:10 | i1 | main.rs:241:9:241:10 | [SSA] i1 | +| main.rs:241:14:241:16 | TryExpr | main.rs:241:9:241:10 | i1 | +| main.rs:242:9:242:10 | [SSA] i2 | main.rs:244:10:244:11 | i2 | +| main.rs:242:9:242:10 | i2 | main.rs:242:9:242:10 | [SSA] i2 | +| main.rs:242:14:242:16 | TryExpr | main.rs:242:9:242:10 | i2 | +| main.rs:245:9:245:10 | [SSA] i3 | main.rs:246:10:246:11 | i3 | +| main.rs:245:9:245:10 | i3 | main.rs:245:9:245:10 | [SSA] i3 | +| main.rs:245:14:245:16 | TryExpr | main.rs:245:9:245:10 | i3 | +| main.rs:247:5:247:9 | Ok(...) | main.rs:237:46:248:1 | { ... } | +| main.rs:256:9:256:10 | [SSA] s1 | main.rs:258:11:258:12 | s1 | +| main.rs:256:9:256:10 | s1 | main.rs:256:9:256:10 | [SSA] s1 | +| main.rs:256:14:256:39 | ...::A(...) | main.rs:256:9:256:10 | s1 | +| main.rs:257:9:257:10 | [SSA] s2 | main.rs:265:11:265:12 | s2 | +| main.rs:257:9:257:10 | s2 | main.rs:257:9:257:10 | [SSA] s2 | +| main.rs:257:14:257:30 | ...::B(...) | main.rs:257:9:257:10 | s2 | +| main.rs:258:11:258:12 | s1 | main.rs:259:9:259:25 | TupleStructPat | +| main.rs:258:11:258:12 | s1 | main.rs:260:9:260:25 | TupleStructPat | +| main.rs:258:11:258:12 | s1 | main.rs:262:11:262:12 | s1 | +| main.rs:259:24:259:24 | [SSA] n | main.rs:259:35:259:35 | n | +| main.rs:259:24:259:24 | n | main.rs:259:24:259:24 | [SSA] n | +| main.rs:259:30:259:36 | sink(...) | main.rs:258:5:261:5 | match s1 { ... } | | main.rs:260:24:260:24 | [SSA] n | main.rs:260:35:260:35 | n | | main.rs:260:24:260:24 | n | main.rs:260:24:260:24 | [SSA] n | -| main.rs:260:30:260:36 | sink(...) | main.rs:259:5:262:5 | match s1 { ... } | -| main.rs:261:24:261:24 | [SSA] n | main.rs:261:35:261:35 | n | -| main.rs:261:24:261:24 | n | main.rs:261:24:261:24 | [SSA] n | -| main.rs:261:30:261:36 | sink(...) | main.rs:259:5:262:5 | match s1 { ... } | -| main.rs:263:11:263:12 | s1 | main.rs:264:9:264:45 | ... \| ... | -| main.rs:264:9:264:45 | ... \| ... | main.rs:264:9:264:25 | TupleStructPat | -| main.rs:264:9:264:45 | ... \| ... | main.rs:264:29:264:45 | TupleStructPat | -| main.rs:264:9:264:45 | [SSA] [match(true)] phi | main.rs:264:55:264:55 | n | -| main.rs:264:24:264:24 | [SSA] [input] [match(true)] phi | main.rs:264:9:264:45 | [SSA] [match(true)] phi | -| main.rs:264:24:264:24 | [SSA] n | main.rs:264:24:264:24 | [SSA] [input] [match(true)] phi | -| main.rs:264:24:264:24 | n | main.rs:264:24:264:24 | [SSA] n | -| main.rs:264:44:264:44 | [SSA] [input] [match(true)] phi | main.rs:264:9:264:45 | [SSA] [match(true)] phi | -| main.rs:264:44:264:44 | [SSA] n | main.rs:264:44:264:44 | [SSA] [input] [match(true)] phi | -| main.rs:264:44:264:44 | n | main.rs:264:44:264:44 | [SSA] n | -| main.rs:264:50:264:56 | sink(...) | main.rs:263:5:265:5 | match s1 { ... } | -| main.rs:266:5:269:5 | match s2 { ... } | main.rs:256:48:270:1 | { ... } | -| main.rs:266:11:266:12 | s2 | main.rs:267:9:267:25 | TupleStructPat | -| main.rs:266:11:266:12 | s2 | main.rs:268:9:268:25 | TupleStructPat | +| main.rs:260:30:260:36 | sink(...) | main.rs:258:5:261:5 | match s1 { ... } | +| main.rs:262:11:262:12 | s1 | main.rs:263:9:263:45 | ... \| ... | +| main.rs:263:9:263:45 | ... \| ... | main.rs:263:9:263:25 | TupleStructPat | +| main.rs:263:9:263:45 | ... \| ... | main.rs:263:29:263:45 | TupleStructPat | +| main.rs:263:9:263:45 | [SSA] [match(true)] phi | main.rs:263:55:263:55 | n | +| main.rs:263:24:263:24 | [SSA] [input] [match(true)] phi | main.rs:263:9:263:45 | [SSA] [match(true)] phi | +| main.rs:263:24:263:24 | [SSA] n | main.rs:263:24:263:24 | [SSA] [input] [match(true)] phi | +| main.rs:263:24:263:24 | n | main.rs:263:24:263:24 | [SSA] n | +| main.rs:263:44:263:44 | [SSA] [input] [match(true)] phi | main.rs:263:9:263:45 | [SSA] [match(true)] phi | +| main.rs:263:44:263:44 | [SSA] n | main.rs:263:44:263:44 | [SSA] [input] [match(true)] phi | +| main.rs:263:44:263:44 | n | main.rs:263:44:263:44 | [SSA] n | +| main.rs:263:50:263:56 | sink(...) | main.rs:262:5:264:5 | match s1 { ... } | +| main.rs:265:5:268:5 | match s2 { ... } | main.rs:255:48:269:1 | { ... } | +| main.rs:265:11:265:12 | s2 | main.rs:266:9:266:25 | TupleStructPat | +| main.rs:265:11:265:12 | s2 | main.rs:267:9:267:25 | TupleStructPat | +| main.rs:266:24:266:24 | [SSA] n | main.rs:266:35:266:35 | n | +| main.rs:266:24:266:24 | n | main.rs:266:24:266:24 | [SSA] n | +| main.rs:266:30:266:36 | sink(...) | main.rs:265:5:268:5 | match s2 { ... } | | main.rs:267:24:267:24 | [SSA] n | main.rs:267:35:267:35 | n | | main.rs:267:24:267:24 | n | main.rs:267:24:267:24 | [SSA] n | -| main.rs:267:30:267:36 | sink(...) | main.rs:266:5:269:5 | match s2 { ... } | -| main.rs:268:24:268:24 | [SSA] n | main.rs:268:35:268:35 | n | -| main.rs:268:24:268:24 | n | main.rs:268:24:268:24 | [SSA] n | -| main.rs:268:30:268:36 | sink(...) | main.rs:266:5:269:5 | match s2 { ... } | -| main.rs:275:9:275:10 | [SSA] s1 | main.rs:277:11:277:12 | s1 | -| main.rs:275:9:275:10 | s1 | main.rs:275:9:275:10 | [SSA] s1 | -| main.rs:275:14:275:26 | A(...) | main.rs:275:9:275:10 | s1 | -| main.rs:276:9:276:10 | [SSA] s2 | main.rs:284:11:284:12 | s2 | -| main.rs:276:9:276:10 | s2 | main.rs:276:9:276:10 | [SSA] s2 | -| main.rs:276:14:276:17 | B(...) | main.rs:276:9:276:10 | s2 | -| main.rs:277:11:277:12 | s1 | main.rs:278:9:278:12 | TupleStructPat | -| main.rs:277:11:277:12 | s1 | main.rs:279:9:279:12 | TupleStructPat | -| main.rs:277:11:277:12 | s1 | main.rs:281:11:281:12 | s1 | +| main.rs:267:30:267:36 | sink(...) | main.rs:265:5:268:5 | match s2 { ... } | +| main.rs:274:9:274:10 | [SSA] s1 | main.rs:276:11:276:12 | s1 | +| main.rs:274:9:274:10 | s1 | main.rs:274:9:274:10 | [SSA] s1 | +| main.rs:274:14:274:26 | A(...) | main.rs:274:9:274:10 | s1 | +| main.rs:275:9:275:10 | [SSA] s2 | main.rs:283:11:283:12 | s2 | +| main.rs:275:9:275:10 | s2 | main.rs:275:9:275:10 | [SSA] s2 | +| main.rs:275:14:275:17 | B(...) | main.rs:275:9:275:10 | s2 | +| main.rs:276:11:276:12 | s1 | main.rs:277:9:277:12 | TupleStructPat | +| main.rs:276:11:276:12 | s1 | main.rs:278:9:278:12 | TupleStructPat | +| main.rs:276:11:276:12 | s1 | main.rs:280:11:280:12 | s1 | +| main.rs:277:11:277:11 | [SSA] n | main.rs:277:22:277:22 | n | +| main.rs:277:11:277:11 | n | main.rs:277:11:277:11 | [SSA] n | +| main.rs:277:17:277:23 | sink(...) | main.rs:276:5:279:5 | match s1 { ... } | | main.rs:278:11:278:11 | [SSA] n | main.rs:278:22:278:22 | n | | main.rs:278:11:278:11 | n | main.rs:278:11:278:11 | [SSA] n | -| main.rs:278:17:278:23 | sink(...) | main.rs:277:5:280:5 | match s1 { ... } | -| main.rs:279:11:279:11 | [SSA] n | main.rs:279:22:279:22 | n | -| main.rs:279:11:279:11 | n | main.rs:279:11:279:11 | [SSA] n | -| main.rs:279:17:279:23 | sink(...) | main.rs:277:5:280:5 | match s1 { ... } | -| main.rs:281:11:281:12 | s1 | main.rs:282:9:282:19 | ... \| ... | -| main.rs:282:9:282:19 | ... \| ... | main.rs:282:9:282:12 | TupleStructPat | -| main.rs:282:9:282:19 | ... \| ... | main.rs:282:16:282:19 | TupleStructPat | -| main.rs:282:9:282:19 | [SSA] [match(true)] phi | main.rs:282:29:282:29 | n | -| main.rs:282:11:282:11 | [SSA] [input] [match(true)] phi | main.rs:282:9:282:19 | [SSA] [match(true)] phi | -| main.rs:282:11:282:11 | [SSA] n | main.rs:282:11:282:11 | [SSA] [input] [match(true)] phi | -| main.rs:282:11:282:11 | n | main.rs:282:11:282:11 | [SSA] n | -| main.rs:282:18:282:18 | [SSA] [input] [match(true)] phi | main.rs:282:9:282:19 | [SSA] [match(true)] phi | -| main.rs:282:18:282:18 | [SSA] n | main.rs:282:18:282:18 | [SSA] [input] [match(true)] phi | -| main.rs:282:18:282:18 | n | main.rs:282:18:282:18 | [SSA] n | -| main.rs:282:24:282:30 | sink(...) | main.rs:281:5:283:5 | match s1 { ... } | -| main.rs:284:5:287:5 | match s2 { ... } | main.rs:274:50:288:1 | { ... } | -| main.rs:284:11:284:12 | s2 | main.rs:285:9:285:12 | TupleStructPat | -| main.rs:284:11:284:12 | s2 | main.rs:286:9:286:12 | TupleStructPat | +| main.rs:278:17:278:23 | sink(...) | main.rs:276:5:279:5 | match s1 { ... } | +| main.rs:280:11:280:12 | s1 | main.rs:281:9:281:19 | ... \| ... | +| main.rs:281:9:281:19 | ... \| ... | main.rs:281:9:281:12 | TupleStructPat | +| main.rs:281:9:281:19 | ... \| ... | main.rs:281:16:281:19 | TupleStructPat | +| main.rs:281:9:281:19 | [SSA] [match(true)] phi | main.rs:281:29:281:29 | n | +| main.rs:281:11:281:11 | [SSA] [input] [match(true)] phi | main.rs:281:9:281:19 | [SSA] [match(true)] phi | +| main.rs:281:11:281:11 | [SSA] n | main.rs:281:11:281:11 | [SSA] [input] [match(true)] phi | +| main.rs:281:11:281:11 | n | main.rs:281:11:281:11 | [SSA] n | +| main.rs:281:18:281:18 | [SSA] [input] [match(true)] phi | main.rs:281:9:281:19 | [SSA] [match(true)] phi | +| main.rs:281:18:281:18 | [SSA] n | main.rs:281:18:281:18 | [SSA] [input] [match(true)] phi | +| main.rs:281:18:281:18 | n | main.rs:281:18:281:18 | [SSA] n | +| main.rs:281:24:281:30 | sink(...) | main.rs:280:5:282:5 | match s1 { ... } | +| main.rs:283:5:286:5 | match s2 { ... } | main.rs:273:50:287:1 | { ... } | +| main.rs:283:11:283:12 | s2 | main.rs:284:9:284:12 | TupleStructPat | +| main.rs:283:11:283:12 | s2 | main.rs:285:9:285:12 | TupleStructPat | +| main.rs:284:11:284:11 | [SSA] n | main.rs:284:22:284:22 | n | +| main.rs:284:11:284:11 | n | main.rs:284:11:284:11 | [SSA] n | +| main.rs:284:17:284:23 | sink(...) | main.rs:283:5:286:5 | match s2 { ... } | | main.rs:285:11:285:11 | [SSA] n | main.rs:285:22:285:22 | n | | main.rs:285:11:285:11 | n | main.rs:285:11:285:11 | [SSA] n | -| main.rs:285:17:285:23 | sink(...) | main.rs:284:5:287:5 | match s2 { ... } | -| main.rs:286:11:286:11 | [SSA] n | main.rs:286:22:286:22 | n | -| main.rs:286:11:286:11 | n | main.rs:286:11:286:11 | [SSA] n | -| main.rs:286:17:286:23 | sink(...) | main.rs:284:5:287:5 | match s2 { ... } | -| main.rs:296:9:296:10 | [SSA] s1 | main.rs:300:11:300:12 | s1 | -| main.rs:296:9:296:10 | s1 | main.rs:296:9:296:10 | [SSA] s1 | -| main.rs:296:14:298:5 | ...::C {...} | main.rs:296:9:296: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:43 | ...::D {...} | main.rs:299:9:299:10 | s2 | -| main.rs:300:11:300:12 | s1 | main.rs:301:9:301:38 | ...::C {...} | -| main.rs:300:11:300:12 | s1 | main.rs:302:9:302:38 | ...::D {...} | -| main.rs:300:11:300:12 | s1 | main.rs:304:11:304:12 | s1 | +| main.rs:285:17:285:23 | sink(...) | main.rs:283:5:286:5 | match s2 { ... } | +| main.rs:295:9:295:10 | [SSA] s1 | main.rs:299:11:299:12 | s1 | +| main.rs:295:9:295:10 | s1 | main.rs:295:9:295:10 | [SSA] s1 | +| main.rs:295:14:297:5 | ...::C {...} | main.rs:295:9:295:10 | s1 | +| main.rs:298:9:298:10 | [SSA] s2 | main.rs:306:11:306:12 | s2 | +| main.rs:298:9:298:10 | s2 | main.rs:298:9:298:10 | [SSA] s2 | +| main.rs:298:14:298:43 | ...::D {...} | main.rs:298:9:298:10 | s2 | +| main.rs:299:11:299:12 | s1 | main.rs:300:9:300:38 | ...::C {...} | +| main.rs:299:11:299:12 | s1 | main.rs:301:9:301:38 | ...::D {...} | +| main.rs:299:11:299:12 | s1 | main.rs:303:11:303:12 | s1 | +| main.rs:300:36:300:36 | [SSA] n | main.rs:300:48:300:48 | n | +| main.rs:300:36:300:36 | n | main.rs:300:36:300:36 | [SSA] n | +| main.rs:300:43:300:49 | sink(...) | main.rs:299:5:302:5 | match s1 { ... } | | main.rs:301:36:301:36 | [SSA] n | main.rs:301:48:301:48 | n | | main.rs:301:36:301:36 | n | main.rs:301:36:301:36 | [SSA] n | -| main.rs:301:43:301:49 | sink(...) | main.rs:300:5:303:5 | match s1 { ... } | -| main.rs:302:36:302:36 | [SSA] n | main.rs:302:48:302:48 | n | -| main.rs:302:36:302:36 | n | main.rs:302:36:302:36 | [SSA] n | -| main.rs:302:43:302:49 | sink(...) | main.rs:300:5:303:5 | match s1 { ... } | -| main.rs:304:11:304:12 | s1 | main.rs:305:9:305:71 | ... \| ... | -| main.rs:305:9:305:71 | ... \| ... | main.rs:305:9:305:38 | ...::C {...} | -| main.rs:305:9:305:71 | ... \| ... | main.rs:305:42:305:71 | ...::D {...} | -| main.rs:305:9:305:71 | [SSA] [match(true)] phi | main.rs:305:81:305:81 | n | -| main.rs:305:36:305:36 | [SSA] [input] [match(true)] phi | main.rs:305:9:305:71 | [SSA] [match(true)] phi | -| main.rs:305:36:305:36 | [SSA] n | main.rs:305:36:305:36 | [SSA] [input] [match(true)] phi | -| main.rs:305:36:305:36 | n | main.rs:305:36:305:36 | [SSA] n | -| main.rs:305:69:305:69 | [SSA] [input] [match(true)] phi | main.rs:305:9:305:71 | [SSA] [match(true)] phi | -| main.rs:305:69:305:69 | [SSA] n | main.rs:305:69:305:69 | [SSA] [input] [match(true)] phi | -| main.rs:305:69:305:69 | n | main.rs:305:69:305:69 | [SSA] n | -| main.rs:305:76:305:82 | sink(...) | main.rs:304:5:306:5 | match s1 { ... } | -| main.rs:307:5:310:5 | match s2 { ... } | main.rs:295:49:311:1 | { ... } | -| main.rs:307:11:307:12 | s2 | main.rs:308:9:308:38 | ...::C {...} | -| main.rs:307:11:307:12 | s2 | main.rs:309:9:309:38 | ...::D {...} | +| main.rs:301:43:301:49 | sink(...) | main.rs:299:5:302:5 | match s1 { ... } | +| main.rs:303:11:303:12 | s1 | main.rs:304:9:304:71 | ... \| ... | +| main.rs:304:9:304:71 | ... \| ... | main.rs:304:9:304:38 | ...::C {...} | +| main.rs:304:9:304:71 | ... \| ... | main.rs:304:42:304:71 | ...::D {...} | +| main.rs:304:9:304:71 | [SSA] [match(true)] phi | main.rs:304:81:304:81 | n | +| main.rs:304:36:304:36 | [SSA] [input] [match(true)] phi | main.rs:304:9:304:71 | [SSA] [match(true)] phi | +| main.rs:304:36:304:36 | [SSA] n | main.rs:304:36:304:36 | [SSA] [input] [match(true)] phi | +| main.rs:304:36:304:36 | n | main.rs:304:36:304:36 | [SSA] n | +| main.rs:304:69:304:69 | [SSA] [input] [match(true)] phi | main.rs:304:9:304:71 | [SSA] [match(true)] phi | +| main.rs:304:69:304:69 | [SSA] n | main.rs:304:69:304:69 | [SSA] [input] [match(true)] phi | +| main.rs:304:69:304:69 | n | main.rs:304:69:304:69 | [SSA] n | +| main.rs:304:76:304:82 | sink(...) | main.rs:303:5:305:5 | match s1 { ... } | +| main.rs:306:5:309:5 | match s2 { ... } | main.rs:294:49:310:1 | { ... } | +| main.rs:306:11:306:12 | s2 | main.rs:307:9:307:38 | ...::C {...} | +| main.rs:306:11:306:12 | s2 | main.rs:308:9:308:38 | ...::D {...} | +| main.rs:307:36:307:36 | [SSA] n | main.rs:307:48:307:48 | n | +| main.rs:307:36:307:36 | n | main.rs:307:36:307:36 | [SSA] n | +| main.rs:307:43:307:49 | sink(...) | main.rs:306:5:309:5 | match s2 { ... } | | main.rs:308:36:308:36 | [SSA] n | main.rs:308:48:308:48 | n | | main.rs:308:36:308:36 | n | main.rs:308:36:308:36 | [SSA] n | -| main.rs:308:43:308:49 | sink(...) | main.rs:307:5:310:5 | match s2 { ... } | -| main.rs:309:36:309:36 | [SSA] n | main.rs:309:48:309:48 | n | -| main.rs:309:36:309:36 | n | main.rs:309:36:309:36 | [SSA] n | -| main.rs:309:43:309:49 | sink(...) | main.rs:307:5:310:5 | match s2 { ... } | -| main.rs:316:9:316:10 | [SSA] s1 | main.rs:320:11:320:12 | s1 | -| main.rs:316:9:316:10 | s1 | main.rs:316:9:316:10 | [SSA] s1 | -| main.rs:316:14:318:5 | C {...} | main.rs:316:9:316:10 | s1 | -| main.rs:319:9:319:10 | [SSA] s2 | main.rs:327:11:327:12 | s2 | -| main.rs:319:9:319:10 | s2 | main.rs:319:9:319:10 | [SSA] s2 | -| main.rs:319:14:319:29 | D {...} | main.rs:319:9:319:10 | s2 | -| main.rs:320:11:320:12 | s1 | main.rs:321:9:321:24 | C {...} | -| main.rs:320:11:320:12 | s1 | main.rs:322:9:322:24 | D {...} | -| main.rs:320:11:320:12 | s1 | main.rs:324:11:324:12 | s1 | +| main.rs:308:43:308:49 | sink(...) | main.rs:306:5:309:5 | match s2 { ... } | +| main.rs:315:9:315:10 | [SSA] s1 | main.rs:319:11:319:12 | s1 | +| main.rs:315:9:315:10 | s1 | main.rs:315:9:315:10 | [SSA] s1 | +| main.rs:315:14:317:5 | C {...} | main.rs:315:9:315:10 | s1 | +| main.rs:318:9:318:10 | [SSA] s2 | main.rs:326:11:326:12 | s2 | +| main.rs:318:9:318:10 | s2 | main.rs:318:9:318:10 | [SSA] s2 | +| main.rs:318:14:318:29 | D {...} | main.rs:318:9:318:10 | s2 | +| main.rs:319:11:319:12 | s1 | main.rs:320:9:320:24 | C {...} | +| main.rs:319:11:319:12 | s1 | main.rs:321:9:321:24 | D {...} | +| main.rs:319:11:319:12 | s1 | main.rs:323:11:323:12 | s1 | +| main.rs:320:22:320:22 | [SSA] n | main.rs:320:34:320:34 | n | +| main.rs:320:22:320:22 | n | main.rs:320:22:320:22 | [SSA] n | +| main.rs:320:29:320:35 | sink(...) | main.rs:319:5:322:5 | match s1 { ... } | | main.rs:321:22:321:22 | [SSA] n | main.rs:321:34:321:34 | n | | main.rs:321:22:321:22 | n | main.rs:321:22:321:22 | [SSA] n | -| main.rs:321:29:321:35 | sink(...) | main.rs:320:5:323:5 | match s1 { ... } | -| main.rs:322:22:322:22 | [SSA] n | main.rs:322:34:322:34 | n | -| main.rs:322:22:322:22 | n | main.rs:322:22:322:22 | [SSA] n | -| main.rs:322:29:322:35 | sink(...) | main.rs:320:5:323:5 | match s1 { ... } | -| main.rs:324:11:324:12 | s1 | main.rs:325:9:325:43 | ... \| ... | -| main.rs:325:9:325:43 | ... \| ... | main.rs:325:9:325:24 | C {...} | -| main.rs:325:9:325:43 | ... \| ... | main.rs:325:28:325:43 | D {...} | -| main.rs:325:9:325:43 | [SSA] [match(true)] phi | main.rs:325:53:325:53 | n | -| main.rs:325:22:325:22 | [SSA] [input] [match(true)] phi | main.rs:325:9:325:43 | [SSA] [match(true)] phi | -| main.rs:325:22:325:22 | [SSA] n | main.rs:325:22:325:22 | [SSA] [input] [match(true)] phi | -| main.rs:325:22:325:22 | n | main.rs:325:22:325:22 | [SSA] n | -| main.rs:325:41:325:41 | [SSA] [input] [match(true)] phi | main.rs:325:9:325:43 | [SSA] [match(true)] phi | -| main.rs:325:41:325:41 | [SSA] n | main.rs:325:41:325:41 | [SSA] [input] [match(true)] phi | -| main.rs:325:41:325:41 | n | main.rs:325:41:325:41 | [SSA] n | -| main.rs:325:48:325:54 | sink(...) | main.rs:324:5:326:5 | match s1 { ... } | -| main.rs:327:5:330:5 | match s2 { ... } | main.rs:315:51:331:1 | { ... } | -| main.rs:327:11:327:12 | s2 | main.rs:328:9:328:24 | C {...} | -| main.rs:327:11:327:12 | s2 | main.rs:329:9:329:24 | D {...} | +| main.rs:321:29:321:35 | sink(...) | main.rs:319:5:322:5 | match s1 { ... } | +| main.rs:323:11:323:12 | s1 | main.rs:324:9:324:43 | ... \| ... | +| main.rs:324:9:324:43 | ... \| ... | main.rs:324:9:324:24 | C {...} | +| main.rs:324:9:324:43 | ... \| ... | main.rs:324:28:324:43 | D {...} | +| main.rs:324:9:324:43 | [SSA] [match(true)] phi | main.rs:324:53:324:53 | n | +| main.rs:324:22:324:22 | [SSA] [input] [match(true)] phi | main.rs:324:9:324:43 | [SSA] [match(true)] phi | +| main.rs:324:22:324:22 | [SSA] n | main.rs:324:22:324:22 | [SSA] [input] [match(true)] phi | +| main.rs:324:22:324:22 | n | main.rs:324:22:324:22 | [SSA] n | +| main.rs:324:41:324:41 | [SSA] [input] [match(true)] phi | main.rs:324:9:324:43 | [SSA] [match(true)] phi | +| main.rs:324:41:324:41 | [SSA] n | main.rs:324:41:324:41 | [SSA] [input] [match(true)] phi | +| main.rs:324:41:324:41 | n | main.rs:324:41:324:41 | [SSA] n | +| main.rs:324:48:324:54 | sink(...) | main.rs:323:5:325:5 | match s1 { ... } | +| main.rs:326:5:329:5 | match s2 { ... } | main.rs:314:51:330:1 | { ... } | +| main.rs:326:11:326:12 | s2 | main.rs:327:9:327:24 | C {...} | +| main.rs:326:11:326:12 | s2 | main.rs:328:9:328:24 | D {...} | +| main.rs:327:22:327:22 | [SSA] n | main.rs:327:34:327:34 | n | +| main.rs:327:22:327:22 | n | main.rs:327:22:327:22 | [SSA] n | +| main.rs:327:29:327:35 | sink(...) | main.rs:326:5:329:5 | match s2 { ... } | | main.rs:328:22:328:22 | [SSA] n | main.rs:328:34:328:34 | n | | main.rs:328:22:328:22 | n | main.rs:328:22:328:22 | [SSA] n | -| main.rs:328:29:328:35 | sink(...) | main.rs:327:5:330:5 | match s2 { ... } | -| main.rs:329:22:329:22 | [SSA] n | main.rs:329:34:329:34 | n | -| main.rs:329:22:329:22 | n | main.rs:329:22:329:22 | [SSA] n | -| main.rs:329:29:329:35 | sink(...) | main.rs:327:5:330:5 | match s2 { ... } | -| main.rs:354:13:354:33 | result_questionmark(...) | main.rs:354:9:354:9 | _ | +| main.rs:328:29:328:35 | sink(...) | main.rs:326:5:329:5 | match s2 { ... } | +| main.rs:353:13:353:33 | result_questionmark(...) | main.rs:353:9:353:9 | _ | storeStep | main.rs:94:14:94:22 | source(...) | tuple.0 | main.rs:94:13:94:26 | TupleExpr | | main.rs:94:25:94:25 | 2 | tuple.1 | main.rs:94:13:94:26 | TupleExpr | @@ -412,20 +409,20 @@ storeStep | main.rs:224:19:224:28 | source(...) | Some | main.rs:224:14:224:29 | Some(...) | | main.rs:229:19:229:28 | source(...) | Some | main.rs:229:14:229:29 | Some(...) | | main.rs:230:19:230:19 | 2 | Some | main.rs:230:14:230:20 | Some(...) | -| main.rs:235:10:235:10 | 0 | Some | main.rs:235:5:235:11 | Some(...) | -| main.rs:239:35:239:44 | source(...) | Ok | main.rs:239:32:239:45 | Ok(...) | -| main.rs:240:35:240:35 | 2 | Ok | main.rs:240:32:240:36 | Ok(...) | -| main.rs:241:36:241:45 | source(...) | Err | main.rs:241:32:241:46 | Err(...) | -| main.rs:248:8:248:8 | 0 | Ok | main.rs:248:5:248:9 | Ok(...) | -| main.rs:257:29:257:38 | source(...) | A | main.rs:257:14:257:39 | ...::A(...) | -| main.rs:258:29:258:29 | 2 | B | main.rs:258:14:258:30 | ...::B(...) | -| main.rs:275:16:275:25 | source(...) | A | main.rs:275:14:275:26 | A(...) | -| main.rs:276:16:276:16 | 2 | B | main.rs:276:14:276:17 | B(...) | -| main.rs:297:18:297:27 | source(...) | C | main.rs:296:14:298:5 | ...::C {...} | -| main.rs:299:41:299:41 | 2 | D | main.rs:299:14:299:43 | ...::D {...} | -| main.rs:317:18:317:27 | source(...) | C | main.rs:316:14:318:5 | C {...} | -| main.rs:319:27:319:27 | 2 | D | main.rs:319:14:319:29 | D {...} | -| main.rs:337:27:337:27 | 0 | Some | main.rs:337:22:337:28 | Some(...) | +| main.rs:234:10:234:10 | 0 | Some | main.rs:234:5:234:11 | Some(...) | +| main.rs:238:35:238:44 | source(...) | Ok | main.rs:238:32:238:45 | Ok(...) | +| main.rs:239:35:239:35 | 2 | Ok | main.rs:239:32:239:36 | Ok(...) | +| main.rs:240:36:240:45 | source(...) | Err | main.rs:240:32:240:46 | Err(...) | +| main.rs:247:8:247:8 | 0 | Ok | main.rs:247:5:247:9 | Ok(...) | +| main.rs:256:29:256:38 | source(...) | A | main.rs:256:14:256:39 | ...::A(...) | +| main.rs:257:29:257:29 | 2 | B | main.rs:257:14:257:30 | ...::B(...) | +| main.rs:274:16:274:25 | source(...) | A | main.rs:274:14:274:26 | A(...) | +| main.rs:275:16:275:16 | 2 | B | main.rs:275:14:275:17 | B(...) | +| main.rs:296:18:296:27 | source(...) | C | main.rs:295:14:297:5 | ...::C {...} | +| main.rs:298:41:298:41 | 2 | D | main.rs:298:14:298:43 | ...::D {...} | +| main.rs:316:18:316:27 | source(...) | C | main.rs:315:14:317:5 | C {...} | +| main.rs:318:27:318:27 | 2 | D | main.rs:318:14:318:29 | D {...} | +| main.rs:336:27:336:27 | 0 | Some | main.rs:336:22:336:28 | Some(...) | readStep | file://:0:0:0:0 | [summary param] self in lang:core::_::::unwrap | Some | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)] in lang:core::_::::unwrap | | main.rs:33:9:33:15 | TupleStructPat | Some | main.rs:33:14:33:14 | _ | @@ -449,27 +446,37 @@ readStep | main.rs:205:9:205:23 | TupleStructPat | Some | main.rs:205:22:205:22 | n | | main.rs:214:9:214:15 | TupleStructPat | Some | main.rs:214:14:214:14 | n | | main.rs:218:9:218:15 | TupleStructPat | Some | main.rs:218:14:218:14 | n | -| main.rs:260:9:260:25 | TupleStructPat | A | main.rs:260:24:260:24 | n | -| main.rs:261:9:261:25 | TupleStructPat | B | main.rs:261:24:261:24 | n | -| main.rs:264:9:264:25 | TupleStructPat | A | main.rs:264:24:264:24 | n | -| main.rs:264:29:264:45 | TupleStructPat | B | main.rs:264:44:264:44 | n | -| main.rs:267:9:267:25 | TupleStructPat | A | main.rs:267:24:267:24 | n | -| main.rs:268:9:268:25 | TupleStructPat | B | main.rs:268:24:268:24 | n | -| main.rs:278:9:278:12 | TupleStructPat | A | main.rs:278:11:278:11 | n | -| main.rs:279:9:279:12 | TupleStructPat | B | main.rs:279:11:279:11 | n | -| main.rs:282:9:282:12 | TupleStructPat | A | main.rs:282:11:282:11 | n | -| main.rs:282:16:282:19 | TupleStructPat | B | main.rs:282:18:282:18 | n | -| main.rs:285:9:285:12 | TupleStructPat | A | main.rs:285:11:285:11 | n | -| main.rs:286:9:286:12 | TupleStructPat | B | main.rs:286:11:286:11 | n | -| main.rs:301:9:301:38 | ...::C {...} | C | main.rs:301:36:301:36 | n | -| main.rs:302:9:302:38 | ...::D {...} | D | main.rs:302:36:302:36 | n | -| main.rs:305:9:305:38 | ...::C {...} | C | main.rs:305:36:305:36 | n | -| main.rs:305:42:305:71 | ...::D {...} | D | main.rs:305:69:305:69 | n | -| main.rs:308:9:308:38 | ...::C {...} | C | main.rs:308:36:308:36 | n | -| main.rs:309:9:309:38 | ...::D {...} | D | main.rs:309:36:309:36 | n | -| main.rs:321:9:321:24 | C {...} | C | main.rs:321:22:321:22 | n | -| main.rs:322:9:322:24 | D {...} | D | main.rs:322:22:322:22 | n | -| main.rs:325:9:325:24 | C {...} | C | main.rs:325:22:325:22 | n | -| main.rs:325:28:325:43 | D {...} | D | main.rs:325:41:325:41 | n | -| main.rs:328:9:328:24 | C {...} | C | main.rs:328:22:328:22 | n | -| main.rs:329:9:329:24 | D {...} | D | main.rs:329:22:329:22 | n | +| main.rs:231:14:231:15 | s1 | Ok | main.rs:231:14:231:16 | TryExpr | +| main.rs:231:14:231:15 | s1 | Some | main.rs:231:14:231:16 | TryExpr | +| main.rs:233:10:233:11 | s2 | Ok | main.rs:233:10:233:12 | TryExpr | +| main.rs:233:10:233:11 | s2 | Some | main.rs:233:10:233:12 | TryExpr | +| main.rs:241:14:241:15 | s1 | Ok | main.rs:241:14:241:16 | TryExpr | +| main.rs:241:14:241:15 | s1 | Some | main.rs:241:14:241:16 | TryExpr | +| main.rs:242:14:242:15 | s2 | Ok | main.rs:242:14:242:16 | TryExpr | +| main.rs:242:14:242:15 | s2 | Some | main.rs:242:14:242:16 | TryExpr | +| main.rs:245:14:245:15 | s3 | Ok | main.rs:245:14:245:16 | TryExpr | +| main.rs:245:14:245:15 | s3 | Some | main.rs:245:14:245:16 | TryExpr | +| main.rs:259:9:259:25 | TupleStructPat | A | main.rs:259:24:259:24 | n | +| main.rs:260:9:260:25 | TupleStructPat | B | main.rs:260:24:260:24 | n | +| main.rs:263:9:263:25 | TupleStructPat | A | main.rs:263:24:263:24 | n | +| main.rs:263:29:263:45 | TupleStructPat | B | main.rs:263:44:263:44 | n | +| main.rs:266:9:266:25 | TupleStructPat | A | main.rs:266:24:266:24 | n | +| main.rs:267:9:267:25 | TupleStructPat | B | main.rs:267:24:267:24 | n | +| main.rs:277:9:277:12 | TupleStructPat | A | main.rs:277:11:277:11 | n | +| main.rs:278:9:278:12 | TupleStructPat | B | main.rs:278:11:278:11 | n | +| main.rs:281:9:281:12 | TupleStructPat | A | main.rs:281:11:281:11 | n | +| main.rs:281:16:281:19 | TupleStructPat | B | main.rs:281:18:281:18 | n | +| main.rs:284:9:284:12 | TupleStructPat | A | main.rs:284:11:284:11 | n | +| main.rs:285:9:285:12 | TupleStructPat | B | main.rs:285:11:285:11 | n | +| main.rs:300:9:300:38 | ...::C {...} | C | main.rs:300:36:300:36 | n | +| main.rs:301:9:301:38 | ...::D {...} | D | main.rs:301:36:301:36 | n | +| main.rs:304:9:304:38 | ...::C {...} | C | main.rs:304:36:304:36 | n | +| main.rs:304:42:304:71 | ...::D {...} | D | main.rs:304:69:304:69 | n | +| main.rs:307:9:307:38 | ...::C {...} | C | main.rs:307:36:307:36 | n | +| main.rs:308:9:308:38 | ...::D {...} | D | main.rs:308:36:308:36 | n | +| main.rs:320:9:320:24 | C {...} | C | main.rs:320:22:320:22 | n | +| main.rs:321:9:321:24 | D {...} | D | main.rs:321:22:321:22 | n | +| main.rs:324:9:324:24 | C {...} | C | main.rs:324:22:324:22 | n | +| main.rs:324:28:324:43 | D {...} | D | main.rs:324:41:324:41 | n | +| main.rs:327:9:327:24 | C {...} | C | main.rs:327:22:327:22 | n | +| main.rs:328:9:328:24 | D {...} | D | main.rs:328:22:328:22 | n | 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 75b0273f8e60..ceff7cf93be5 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -36,34 +36,42 @@ edges | main.rs:224:14:224:29 | Some(...) [Some] | main.rs:225:10:225:11 | s1 [Some] | provenance | | | main.rs:224:19:224:28 | source(...) | main.rs:224:14:224:29 | Some(...) [Some] | provenance | | | main.rs:225:10:225:11 | s1 [Some] | main.rs:225:10:225:20 | ... .unwrap(...) | provenance | | -| main.rs:257:14:257:39 | ...::A(...) [A] | main.rs:260:9:260:25 | TupleStructPat [A] | provenance | | -| main.rs:257:14:257:39 | ...::A(...) [A] | main.rs:264:9:264:25 | TupleStructPat [A] | provenance | | -| main.rs:257:29:257:38 | source(...) | main.rs:257:14:257:39 | ...::A(...) [A] | provenance | | -| main.rs:260:9:260:25 | TupleStructPat [A] | main.rs:260:24:260:24 | n | provenance | | -| main.rs:260:24:260:24 | n | main.rs:260:35:260:35 | n | provenance | | -| main.rs:264:9:264:25 | TupleStructPat [A] | main.rs:264:24:264:24 | n | provenance | | -| main.rs:264:24:264:24 | n | main.rs:264:55:264:55 | n | provenance | | -| main.rs:275:14:275:26 | A(...) [A] | main.rs:278:9:278:12 | TupleStructPat [A] | provenance | | -| main.rs:275:14:275:26 | A(...) [A] | main.rs:282:9:282:12 | TupleStructPat [A] | provenance | | -| main.rs:275:16:275:25 | source(...) | main.rs:275:14:275:26 | A(...) [A] | provenance | | -| main.rs:278:9:278:12 | TupleStructPat [A] | main.rs:278:11:278:11 | n | provenance | | -| main.rs:278:11:278:11 | n | main.rs:278:22:278:22 | n | provenance | | -| main.rs:282:9:282:12 | TupleStructPat [A] | main.rs:282:11:282:11 | n | provenance | | -| main.rs:282:11:282:11 | n | main.rs:282:29:282:29 | n | provenance | | -| main.rs:296:14:298:5 | ...::C {...} [C] | main.rs:301:9:301:38 | ...::C {...} [C] | provenance | | -| main.rs:296:14:298:5 | ...::C {...} [C] | main.rs:305:9:305:38 | ...::C {...} [C] | provenance | | -| main.rs:297:18:297:27 | source(...) | main.rs:296:14:298:5 | ...::C {...} [C] | provenance | | -| main.rs:301:9:301:38 | ...::C {...} [C] | main.rs:301:36:301:36 | n | provenance | | -| main.rs:301:36:301:36 | n | main.rs:301:48:301:48 | n | provenance | | -| main.rs:305:9:305:38 | ...::C {...} [C] | main.rs:305:36:305:36 | n | provenance | | -| main.rs:305:36:305:36 | n | main.rs:305:81:305:81 | n | provenance | | -| main.rs:316:14:318:5 | C {...} [C] | main.rs:321:9:321:24 | C {...} [C] | provenance | | -| main.rs:316:14:318:5 | C {...} [C] | main.rs:325:9:325:24 | C {...} [C] | provenance | | -| main.rs:317:18:317:27 | source(...) | main.rs:316:14:318:5 | C {...} [C] | provenance | | -| main.rs:321:9:321:24 | C {...} [C] | main.rs:321:22:321:22 | n | provenance | | -| main.rs:321:22:321:22 | n | main.rs:321:34:321:34 | n | provenance | | -| main.rs:325:9:325:24 | C {...} [C] | main.rs:325:22:325:22 | n | provenance | | -| main.rs:325:22:325:22 | n | main.rs:325:53:325:53 | n | provenance | | +| main.rs:229:14:229:29 | Some(...) [Some] | main.rs:231:14:231:15 | s1 [Some] | provenance | | +| main.rs:229:19:229:28 | source(...) | main.rs:229:14:229:29 | Some(...) [Some] | provenance | | +| main.rs:231:14:231:15 | s1 [Some] | main.rs:231:14:231:16 | TryExpr | provenance | | +| main.rs:231:14:231:16 | TryExpr | main.rs:232:10:232:11 | i1 | provenance | | +| main.rs:238:32:238:45 | Ok(...) [Ok] | main.rs:241:14:241:15 | s1 [Ok] | provenance | | +| main.rs:238:35:238:44 | source(...) | main.rs:238:32:238:45 | Ok(...) [Ok] | provenance | | +| main.rs:241:14:241:15 | s1 [Ok] | main.rs:241:14:241:16 | TryExpr | provenance | | +| main.rs:241:14:241:16 | TryExpr | main.rs:243:10:243:11 | i1 | provenance | | +| main.rs:256:14:256:39 | ...::A(...) [A] | main.rs:259:9:259:25 | TupleStructPat [A] | provenance | | +| main.rs:256:14:256:39 | ...::A(...) [A] | main.rs:263:9:263:25 | TupleStructPat [A] | provenance | | +| main.rs:256:29:256:38 | source(...) | main.rs:256:14:256:39 | ...::A(...) [A] | provenance | | +| main.rs:259:9:259:25 | TupleStructPat [A] | main.rs:259:24:259:24 | n | provenance | | +| main.rs:259:24:259:24 | n | main.rs:259:35:259:35 | n | provenance | | +| main.rs:263:9:263:25 | TupleStructPat [A] | main.rs:263:24:263:24 | n | provenance | | +| main.rs:263:24:263:24 | n | main.rs:263:55:263:55 | n | provenance | | +| main.rs:274:14:274:26 | A(...) [A] | main.rs:277:9:277:12 | TupleStructPat [A] | provenance | | +| main.rs:274:14:274:26 | A(...) [A] | main.rs:281:9:281:12 | TupleStructPat [A] | provenance | | +| main.rs:274:16:274:25 | source(...) | main.rs:274:14:274:26 | A(...) [A] | provenance | | +| main.rs:277:9:277:12 | TupleStructPat [A] | main.rs:277:11:277:11 | n | provenance | | +| main.rs:277:11:277:11 | n | main.rs:277:22:277:22 | n | provenance | | +| main.rs:281:9:281:12 | TupleStructPat [A] | main.rs:281:11:281:11 | n | provenance | | +| main.rs:281:11:281:11 | n | main.rs:281:29:281:29 | n | provenance | | +| main.rs:295:14:297:5 | ...::C {...} [C] | main.rs:300:9:300:38 | ...::C {...} [C] | provenance | | +| main.rs:295:14:297:5 | ...::C {...} [C] | main.rs:304:9:304:38 | ...::C {...} [C] | provenance | | +| main.rs:296:18:296:27 | source(...) | main.rs:295:14:297:5 | ...::C {...} [C] | provenance | | +| main.rs:300:9:300:38 | ...::C {...} [C] | main.rs:300:36:300:36 | n | provenance | | +| main.rs:300:36:300:36 | n | main.rs:300:48:300:48 | n | provenance | | +| main.rs:304:9:304:38 | ...::C {...} [C] | main.rs:304:36:304:36 | n | provenance | | +| main.rs:304:36:304:36 | n | main.rs:304:81:304:81 | n | provenance | | +| main.rs:315:14:317:5 | C {...} [C] | main.rs:320:9:320:24 | C {...} [C] | provenance | | +| main.rs:315:14:317:5 | C {...} [C] | main.rs:324:9:324:24 | C {...} [C] | provenance | | +| main.rs:316:18:316:27 | source(...) | main.rs:315:14:317:5 | C {...} [C] | provenance | | +| main.rs:320:9:320:24 | C {...} [C] | main.rs:320:22:320:22 | n | provenance | | +| main.rs:320:22:320:22 | n | main.rs:320:34:320:34 | n | provenance | | +| main.rs:324:9:324:24 | C {...} [C] | main.rs:324:22:324:22 | n | provenance | | +| main.rs:324:22:324:22 | n | main.rs:324:53:324:53 | n | provenance | | nodes | main.rs:15:10:15:18 | source(...) | semmle.label | source(...) | | main.rs:19:13:19:21 | source(...) | semmle.label | source(...) | @@ -115,38 +123,48 @@ nodes | main.rs:224:19:224:28 | source(...) | semmle.label | source(...) | | main.rs:225:10:225:11 | s1 [Some] | semmle.label | s1 [Some] | | main.rs:225:10:225:20 | ... .unwrap(...) | semmle.label | ... .unwrap(...) | -| main.rs:257:14:257:39 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | -| main.rs:257:29:257:38 | source(...) | semmle.label | source(...) | -| main.rs:260:9:260:25 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | -| main.rs:260:24:260:24 | n | semmle.label | n | -| main.rs:260:35:260:35 | n | semmle.label | n | -| main.rs:264:9:264:25 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | -| main.rs:264:24:264:24 | n | semmle.label | n | -| main.rs:264:55:264:55 | n | semmle.label | n | -| main.rs:275:14:275:26 | A(...) [A] | semmle.label | A(...) [A] | -| main.rs:275:16:275:25 | source(...) | semmle.label | source(...) | -| main.rs:278:9:278:12 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | -| main.rs:278:11:278:11 | n | semmle.label | n | -| main.rs:278:22:278:22 | n | semmle.label | n | -| main.rs:282:9:282:12 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | -| main.rs:282:11:282:11 | n | semmle.label | n | -| main.rs:282:29:282:29 | n | semmle.label | n | -| main.rs:296:14:298:5 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:297:18:297:27 | source(...) | semmle.label | source(...) | -| main.rs:301:9:301:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:301:36:301:36 | n | semmle.label | n | -| main.rs:301:48:301:48 | n | semmle.label | n | -| main.rs:305:9:305:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:305:36:305:36 | n | semmle.label | n | -| main.rs:305:81:305:81 | n | semmle.label | n | -| main.rs:316:14:318:5 | C {...} [C] | semmle.label | C {...} [C] | -| main.rs:317:18:317:27 | source(...) | semmle.label | source(...) | -| main.rs:321:9:321:24 | C {...} [C] | semmle.label | C {...} [C] | -| main.rs:321:22:321:22 | n | semmle.label | n | -| main.rs:321:34:321:34 | n | semmle.label | n | -| main.rs:325:9:325:24 | C {...} [C] | semmle.label | C {...} [C] | -| main.rs:325:22:325:22 | n | semmle.label | n | -| main.rs:325:53:325:53 | n | semmle.label | n | +| main.rs:229:14:229:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | +| main.rs:229:19:229:28 | source(...) | semmle.label | source(...) | +| main.rs:231:14:231:15 | s1 [Some] | semmle.label | s1 [Some] | +| main.rs:231:14:231:16 | TryExpr | semmle.label | TryExpr | +| main.rs:232:10:232:11 | i1 | semmle.label | i1 | +| main.rs:238:32:238:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | +| main.rs:238:35:238:44 | source(...) | semmle.label | source(...) | +| main.rs:241:14:241:15 | s1 [Ok] | semmle.label | s1 [Ok] | +| main.rs:241:14:241:16 | TryExpr | semmle.label | TryExpr | +| main.rs:243:10:243:11 | i1 | semmle.label | i1 | +| main.rs:256:14:256:39 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | +| main.rs:256:29:256:38 | source(...) | semmle.label | source(...) | +| main.rs:259:9:259:25 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | +| main.rs:259:24:259:24 | n | semmle.label | n | +| main.rs:259:35:259:35 | n | semmle.label | n | +| main.rs:263:9:263:25 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | +| main.rs:263:24:263:24 | n | semmle.label | n | +| main.rs:263:55:263:55 | n | semmle.label | n | +| main.rs:274:14:274:26 | A(...) [A] | semmle.label | A(...) [A] | +| main.rs:274:16:274:25 | source(...) | semmle.label | source(...) | +| main.rs:277:9:277:12 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | +| main.rs:277:11:277:11 | n | semmle.label | n | +| main.rs:277:22:277:22 | n | semmle.label | n | +| main.rs:281:9:281:12 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | +| main.rs:281:11:281:11 | n | semmle.label | n | +| main.rs:281:29:281:29 | n | semmle.label | n | +| main.rs:295:14:297:5 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:296:18:296:27 | source(...) | semmle.label | source(...) | +| main.rs:300:9:300:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:300:36:300:36 | n | semmle.label | n | +| main.rs:300:48:300:48 | n | semmle.label | n | +| main.rs:304:9:304:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:304:36:304:36 | n | semmle.label | n | +| main.rs:304:81:304:81 | n | semmle.label | n | +| main.rs:315:14:317:5 | C {...} [C] | semmle.label | C {...} [C] | +| main.rs:316:18:316:27 | source(...) | semmle.label | source(...) | +| main.rs:320:9:320:24 | C {...} [C] | semmle.label | C {...} [C] | +| main.rs:320:22:320:22 | n | semmle.label | n | +| main.rs:320:34:320:34 | n | semmle.label | n | +| main.rs:324:9:324:24 | C {...} [C] | semmle.label | C {...} [C] | +| main.rs:324:22:324:22 | n | semmle.label | n | +| main.rs:324:53:324:53 | n | semmle.label | n | subpaths testFailures #select @@ -164,11 +182,13 @@ testFailures | main.rs:201:33:201:33 | n | main.rs:198:27:198:36 | source(...) | main.rs:201:33:201:33 | n | $@ | main.rs:198:27:198:36 | source(...) | source(...) | | main.rs:214:25:214:25 | n | main.rs:211:19:211:28 | source(...) | main.rs:214:25:214:25 | n | $@ | main.rs:211:19:211:28 | source(...) | source(...) | | main.rs:225:10:225:20 | ... .unwrap(...) | main.rs:224:19:224:28 | source(...) | main.rs:225:10:225:20 | ... .unwrap(...) | $@ | main.rs:224:19:224:28 | source(...) | source(...) | -| main.rs:260:35:260:35 | n | main.rs:257:29:257:38 | source(...) | main.rs:260:35:260:35 | n | $@ | main.rs:257:29:257:38 | source(...) | source(...) | -| main.rs:264:55:264:55 | n | main.rs:257:29:257:38 | source(...) | main.rs:264:55:264:55 | n | $@ | main.rs:257:29:257:38 | source(...) | source(...) | -| main.rs:278:22:278:22 | n | main.rs:275:16:275:25 | source(...) | main.rs:278:22:278:22 | n | $@ | main.rs:275:16:275:25 | source(...) | source(...) | -| main.rs:282:29:282:29 | n | main.rs:275:16:275:25 | source(...) | main.rs:282:29:282:29 | n | $@ | main.rs:275:16:275:25 | source(...) | source(...) | -| main.rs:301:48:301:48 | n | main.rs:297:18:297:27 | source(...) | main.rs:301:48:301:48 | n | $@ | main.rs:297:18:297:27 | source(...) | source(...) | -| main.rs:305:81:305:81 | n | main.rs:297:18:297:27 | source(...) | main.rs:305:81:305:81 | n | $@ | main.rs:297:18:297:27 | source(...) | source(...) | -| main.rs:321:34:321:34 | n | main.rs:317:18:317:27 | source(...) | main.rs:321:34:321:34 | n | $@ | main.rs:317:18:317:27 | source(...) | source(...) | -| main.rs:325:53:325:53 | n | main.rs:317:18:317:27 | source(...) | main.rs:325:53:325:53 | n | $@ | main.rs:317:18:317:27 | source(...) | source(...) | +| main.rs:232:10:232:11 | i1 | main.rs:229:19:229:28 | source(...) | main.rs:232:10:232:11 | i1 | $@ | main.rs:229:19:229:28 | source(...) | source(...) | +| main.rs:243:10:243:11 | i1 | main.rs:238:35:238:44 | source(...) | main.rs:243:10:243:11 | i1 | $@ | main.rs:238:35:238:44 | source(...) | source(...) | +| main.rs:259:35:259:35 | n | main.rs:256:29:256:38 | source(...) | main.rs:259:35:259:35 | n | $@ | main.rs:256:29:256:38 | source(...) | source(...) | +| main.rs:263:55:263:55 | n | main.rs:256:29:256:38 | source(...) | main.rs:263:55:263:55 | n | $@ | main.rs:256:29:256:38 | source(...) | source(...) | +| main.rs:277:22:277:22 | n | main.rs:274:16:274:25 | source(...) | main.rs:277:22:277:22 | n | $@ | main.rs:274:16:274:25 | source(...) | source(...) | +| main.rs:281:29:281:29 | n | main.rs:274:16:274:25 | source(...) | main.rs:281:29:281:29 | n | $@ | main.rs:274:16:274:25 | source(...) | source(...) | +| main.rs:300:48:300:48 | n | main.rs:296:18:296:27 | source(...) | main.rs:300:48:300:48 | n | $@ | main.rs:296:18:296:27 | source(...) | source(...) | +| main.rs:304:81:304:81 | n | main.rs:296:18:296:27 | source(...) | main.rs:304:81:304:81 | n | $@ | main.rs:296:18:296:27 | source(...) | source(...) | +| main.rs:320:34:320:34 | n | main.rs:316:18:316:27 | source(...) | main.rs:320:34:320:34 | n | $@ | main.rs:316:18:316:27 | source(...) | source(...) | +| main.rs:324:53:324:53 | n | main.rs:316:18:316:27 | source(...) | main.rs:324:53:324:53 | n | $@ | main.rs:316:18:316:27 | 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 8ddfcfbf1309..5f24267f8ff1 100644 --- a/rust/ql/test/library-tests/dataflow/local/main.rs +++ b/rust/ql/test/library-tests/dataflow/local/main.rs @@ -229,9 +229,8 @@ fn option_questionmark() -> Option { let s1 = Some(source(20)); let s2 = Some(2); let i1 = s1?; - let i2 = s2?; - sink(i1); // $ MISSING: hasValueFlow=20 - sink(i2); + sink(i1); // $ hasValueFlow=20 + sink(s2?); Some(0) } @@ -241,7 +240,7 @@ fn result_questionmark() -> Result { let s3: Result = Err(source(77)); let i1 = s1?; let i2 = s2?; - sink(i1); // $ MISSING: hasValueFlow=20 + sink(i1); // $ hasValueFlow=20 sink(i2); let i3 = s3?; sink(i3); // No flow since value is in `Err`.