From 077fc9fc0c848b7b133958d24211171816cecc24 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 5 Feb 2026 13:15:22 +0100 Subject: [PATCH 1/2] Rust: Add type inference test for associated type acces on a type parameter of an impl block --- .../type-inference/associated_types.rs | 13 + .../type-inference/type-inference.expected | 1010 +++++++++-------- 2 files changed, 528 insertions(+), 495 deletions(-) diff --git a/rust/ql/test/library-tests/type-inference/associated_types.rs b/rust/ql/test/library-tests/type-inference/associated_types.rs index 1d8657b29a0e..567d4449150e 100644 --- a/rust/ql/test/library-tests/type-inference/associated_types.rs +++ b/rust/ql/test/library-tests/type-inference/associated_types.rs @@ -260,6 +260,16 @@ mod type_param_access_associated_type { ) } + // Associated type accessed on a type parameter of an impl block + impl Wrapper + where + TI: GetSet, + { + fn extract(&self) -> TI::Output { + self.0.get() // $ fieldof=Wrapper target=GetSet::get + } + } + pub fn test() { let _o1 = tp_with_as(S); // $ target=tp_with_as MISSING: type=_o1:S3 let _o2 = tp_without_as(S); // $ target=tp_without_as MISSING: type=_o2:S3 @@ -267,6 +277,9 @@ mod type_param_access_associated_type { _o3, // $ MISSING: type=_o3:S3 _o4, // $ MISSING: type=_o4:bool ) = tp_assoc_from_supertrait(S); // $ target=tp_assoc_from_supertrait + + let w = Wrapper(S); + let _extracted = w.extract(); // $ target=extract MISSING: type=_extracted:S3 } } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 19e46b1cae65..bef7f4c7c150 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -119,189 +119,195 @@ inferCertainType | associated_types.rs:257:9:260:9 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | associated_types.rs:258:13:258:17 | thing | | associated_types.rs:256:33:256:45 | T | | associated_types.rs:259:13:259:17 | thing | | associated_types.rs:256:33:256:45 | T | -| associated_types.rs:263:19:270:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:266:13:269:9 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| associated_types.rs:269:13:269:39 | tp_assoc_from_supertrait(...) | | {EXTERNAL LOCATION} | (T_2) | -| associated_types.rs:277:26:277:26 | x | | associated_types.rs:277:23:277:23 | T | -| associated_types.rs:280:5:282:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:281:18:281:18 | x | | associated_types.rs:277:23:277:23 | T | -| associated_types.rs:285:24:285:24 | x | | associated_types.rs:285:21:285:21 | T | -| associated_types.rs:288:5:292:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:289:19:289:19 | x | | associated_types.rs:285:21:285:21 | T | -| associated_types.rs:290:23:290:24 | &x | | {EXTERNAL LOCATION} | & | -| associated_types.rs:290:24:290:24 | x | | associated_types.rs:285:21:285:21 | T | -| associated_types.rs:291:18:291:18 | x | | associated_types.rs:285:21:285:21 | T | -| associated_types.rs:295:23:295:23 | x | | associated_types.rs:295:20:295:20 | T | -| associated_types.rs:299:5:303:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:300:19:300:19 | x | | associated_types.rs:295:20:295:20 | T | -| associated_types.rs:301:23:301:24 | &x | | {EXTERNAL LOCATION} | & | -| associated_types.rs:301:24:301:24 | x | | associated_types.rs:295:20:295:20 | T | -| associated_types.rs:302:18:302:18 | x | | associated_types.rs:295:20:295:20 | T | -| associated_types.rs:309:17:309:21 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:309:17:309:21 | SelfParam | TRef | associated_types.rs:305:5:310:5 | Self [trait AssocNameClash] | -| associated_types.rs:312:34:312:34 | x | | associated_types.rs:312:31:312:31 | T | -| associated_types.rs:316:5:319:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:317:18:317:18 | x | | associated_types.rs:312:31:312:31 | T | -| associated_types.rs:318:18:318:18 | x | | associated_types.rs:312:31:312:31 | T | -| associated_types.rs:329:19:329:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:329:19:329:23 | SelfParam | TRef | associated_types.rs:325:5:336:5 | Self [trait MyTraitAssoc2] | -| associated_types.rs:329:26:329:26 | a | | associated_types.rs:329:16:329:16 | A | -| associated_types.rs:332:23:332:27 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:332:23:332:27 | SelfParam | TRef | associated_types.rs:325:5:336:5 | Self [trait MyTraitAssoc2] | -| associated_types.rs:332:30:332:30 | a | | associated_types.rs:332:20:332:20 | A | -| associated_types.rs:332:36:332:36 | b | | associated_types.rs:332:20:332:20 | A | -| associated_types.rs:332:76:335:9 | { ... } | | associated_types.rs:326:9:326:52 | GenericAssociatedType[MyTraitAssoc2] | -| associated_types.rs:333:13:333:16 | self | | {EXTERNAL LOCATION} | & | -| associated_types.rs:333:13:333:16 | self | TRef | associated_types.rs:325:5:336:5 | Self [trait MyTraitAssoc2] | -| associated_types.rs:333:22:333:22 | a | | associated_types.rs:332:20:332:20 | A | -| associated_types.rs:334:13:334:16 | self | | {EXTERNAL LOCATION} | & | -| associated_types.rs:334:13:334:16 | self | TRef | associated_types.rs:325:5:336:5 | Self [trait MyTraitAssoc2] | -| associated_types.rs:334:22:334:22 | b | | associated_types.rs:332:20:332:20 | A | -| associated_types.rs:343:19:343:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:343:19:343:23 | SelfParam | TRef | associated_types.rs:10:1:11:9 | S | -| associated_types.rs:343:26:343:26 | a | | associated_types.rs:343:16:343:16 | A | -| associated_types.rs:343:46:345:9 | { ... } | | associated_types.rs:1:1:2:21 | Wrapper | -| associated_types.rs:343:46:345:9 | { ... } | A | associated_types.rs:343:16:343:16 | A | -| associated_types.rs:344:21:344:21 | a | | associated_types.rs:343:16:343:16 | A | -| associated_types.rs:348:19:355:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:351:25:351:28 | 1i32 | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:354:29:354:32 | true | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:354:35:354:39 | false | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:366:21:366:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:366:21:366:25 | SelfParam | TRef | associated_types.rs:361:5:371:5 | Self [trait TraitMultipleAssoc] | -| associated_types.rs:368:20:368:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:368:20:368:24 | SelfParam | TRef | associated_types.rs:361:5:371:5 | Self [trait TraitMultipleAssoc] | -| associated_types.rs:370:20:370:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:370:20:370:24 | SelfParam | TRef | associated_types.rs:361:5:371:5 | Self [trait TraitMultipleAssoc] | -| associated_types.rs:377:21:377:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:377:21:377:25 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | -| associated_types.rs:377:34:379:9 | { ... } | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:268:20:268:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:268:20:268:24 | SelfParam | TRef | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:268:20:268:24 | SelfParam | TRef.A | associated_types.rs:264:10:264:11 | TI | +| associated_types.rs:269:13:269:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:269:13:269:16 | self | TRef | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:269:13:269:16 | self | TRef.A | associated_types.rs:264:10:264:11 | TI | +| associated_types.rs:273:19:283:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:276:13:279:9 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| associated_types.rs:279:13:279:39 | tp_assoc_from_supertrait(...) | | {EXTERNAL LOCATION} | (T_2) | +| associated_types.rs:290:26:290:26 | x | | associated_types.rs:290:23:290:23 | T | +| associated_types.rs:293:5:295:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:294:18:294:18 | x | | associated_types.rs:290:23:290:23 | T | +| associated_types.rs:298:24:298:24 | x | | associated_types.rs:298:21:298:21 | T | +| associated_types.rs:301:5:305:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:302:19:302:19 | x | | associated_types.rs:298:21:298:21 | T | +| associated_types.rs:303:23:303:24 | &x | | {EXTERNAL LOCATION} | & | +| associated_types.rs:303:24:303:24 | x | | associated_types.rs:298:21:298:21 | T | +| associated_types.rs:304:18:304:18 | x | | associated_types.rs:298:21:298:21 | T | +| associated_types.rs:308:23:308:23 | x | | associated_types.rs:308:20:308:20 | T | +| associated_types.rs:312:5:316:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:313:19:313:19 | x | | associated_types.rs:308:20:308:20 | T | +| associated_types.rs:314:23:314:24 | &x | | {EXTERNAL LOCATION} | & | +| associated_types.rs:314:24:314:24 | x | | associated_types.rs:308:20:308:20 | T | +| associated_types.rs:315:18:315:18 | x | | associated_types.rs:308:20:308:20 | T | +| associated_types.rs:322:17:322:21 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:322:17:322:21 | SelfParam | TRef | associated_types.rs:318:5:323:5 | Self [trait AssocNameClash] | +| associated_types.rs:325:34:325:34 | x | | associated_types.rs:325:31:325:31 | T | +| associated_types.rs:329:5:332:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:330:18:330:18 | x | | associated_types.rs:325:31:325:31 | T | +| associated_types.rs:331:18:331:18 | x | | associated_types.rs:325:31:325:31 | T | +| associated_types.rs:342:19:342:23 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:342:19:342:23 | SelfParam | TRef | associated_types.rs:338:5:349:5 | Self [trait MyTraitAssoc2] | +| associated_types.rs:342:26:342:26 | a | | associated_types.rs:342:16:342:16 | A | +| associated_types.rs:345:23:345:27 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:345:23:345:27 | SelfParam | TRef | associated_types.rs:338:5:349:5 | Self [trait MyTraitAssoc2] | +| associated_types.rs:345:30:345:30 | a | | associated_types.rs:345:20:345:20 | A | +| associated_types.rs:345:36:345:36 | b | | associated_types.rs:345:20:345:20 | A | +| associated_types.rs:345:76:348:9 | { ... } | | associated_types.rs:339:9:339:52 | GenericAssociatedType[MyTraitAssoc2] | +| associated_types.rs:346:13:346:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:346:13:346:16 | self | TRef | associated_types.rs:338:5:349:5 | Self [trait MyTraitAssoc2] | +| associated_types.rs:346:22:346:22 | a | | associated_types.rs:345:20:345:20 | A | +| associated_types.rs:347:13:347:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:347:13:347:16 | self | TRef | associated_types.rs:338:5:349:5 | Self [trait MyTraitAssoc2] | +| associated_types.rs:347:22:347:22 | b | | associated_types.rs:345:20:345:20 | A | +| associated_types.rs:356:19:356:23 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:356:19:356:23 | SelfParam | TRef | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:356:26:356:26 | a | | associated_types.rs:356:16:356:16 | A | +| associated_types.rs:356:46:358:9 | { ... } | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:356:46:358:9 | { ... } | A | associated_types.rs:356:16:356:16 | A | +| associated_types.rs:357:21:357:21 | a | | associated_types.rs:356:16:356:16 | A | +| associated_types.rs:361:19:368:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:364:25:364:28 | 1i32 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:367:29:367:32 | true | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:367:35:367:39 | false | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:379:21:379:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:379:21:379:25 | SelfParam | TRef | associated_types.rs:374:5:384:5 | Self [trait TraitMultipleAssoc] | | associated_types.rs:381:20:381:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:381:20:381:24 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | -| associated_types.rs:381:43:383:9 | { ... } | | associated_types.rs:10:1:11:9 | S | -| associated_types.rs:385:20:385:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:385:20:385:24 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | -| associated_types.rs:385:43:387:9 | { ... } | | associated_types.rs:13:1:14:10 | S2 | -| associated_types.rs:390:19:394:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:402:24:402:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:402:24:402:28 | SelfParam | TRef | associated_types.rs:400:5:403:5 | Self [trait Subtrait] | -| associated_types.rs:411:23:411:27 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:411:23:411:27 | SelfParam | TRef | associated_types.rs:405:5:415:5 | Self [trait Subtrait2] | -| associated_types.rs:411:30:411:31 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | -| associated_types.rs:411:48:411:49 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | -| associated_types.rs:411:66:414:9 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:412:13:412:16 | self | | {EXTERNAL LOCATION} | & | -| associated_types.rs:412:13:412:16 | self | TRef | associated_types.rs:405:5:415:5 | Self [trait Subtrait2] | -| associated_types.rs:412:22:412:23 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | -| associated_types.rs:413:13:413:16 | self | | {EXTERNAL LOCATION} | & | -| associated_types.rs:413:13:413:16 | self | TRef | associated_types.rs:405:5:415:5 | Self [trait Subtrait2] | -| associated_types.rs:413:22:413:23 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | -| associated_types.rs:422:16:422:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:422:16:422:20 | SelfParam | TRef | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:422:16:422:20 | SelfParam | TRef.T | associated_types.rs:419:10:419:16 | T | -| associated_types.rs:422:39:424:9 | { ... } | | associated_types.rs:419:10:419:16 | T | -| associated_types.rs:423:13:423:16 | self | | {EXTERNAL LOCATION} | & | -| associated_types.rs:423:13:423:16 | self | TRef | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:423:13:423:16 | self | TRef.T | associated_types.rs:419:10:419:16 | T | -| associated_types.rs:426:16:426:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:426:16:426:20 | SelfParam | TRef | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:426:16:426:20 | SelfParam | TRef.T | associated_types.rs:419:10:419:16 | T | -| associated_types.rs:426:23:426:30 | _content | | associated_types.rs:419:10:419:16 | T | -| associated_types.rs:426:47:428:9 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:427:22:427:42 | "Inserting content: \\n" | | {EXTERNAL LOCATION} | & | -| associated_types.rs:427:22:427:42 | "Inserting content: \\n" | TRef | {EXTERNAL LOCATION} | str | -| associated_types.rs:427:22:427:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:427:22:427:42 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:433:24:433:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:433:24:433:28 | SelfParam | TRef | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:433:24:433:28 | SelfParam | TRef.T | associated_types.rs:431:10:431:16 | T | -| associated_types.rs:433:47:435:9 | { ... } | | associated_types.rs:431:10:431:16 | T | -| associated_types.rs:434:15:434:18 | self | | {EXTERNAL LOCATION} | & | -| associated_types.rs:434:15:434:18 | self | TRef | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:434:15:434:18 | self | TRef.T | associated_types.rs:431:10:431:16 | T | -| associated_types.rs:440:24:440:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:440:24:440:28 | SelfParam | TRef | associated_types.rs:67:1:67:23 | Odd | -| associated_types.rs:440:24:440:28 | SelfParam | TRef.OddT | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:440:47:443:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:448:24:448:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:448:24:448:28 | SelfParam | TRef | associated_types.rs:67:1:67:23 | Odd | -| associated_types.rs:448:24:448:28 | SelfParam | TRef.OddT | {EXTERNAL LOCATION} | bool | -| associated_types.rs:448:47:450:9 | { ... } | | {EXTERNAL LOCATION} | char | -| associated_types.rs:453:33:453:36 | item | | {EXTERNAL LOCATION} | & | -| associated_types.rs:453:33:453:36 | item | TRef | associated_types.rs:453:20:453:30 | T | -| associated_types.rs:454:9:454:12 | item | | {EXTERNAL LOCATION} | & | -| associated_types.rs:454:9:454:12 | item | TRef | associated_types.rs:453:20:453:30 | T | -| associated_types.rs:457:35:457:38 | item | | {EXTERNAL LOCATION} | & | -| associated_types.rs:457:35:457:38 | item | TRef | associated_types.rs:457:21:457:32 | T | -| associated_types.rs:457:90:460:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:458:9:458:12 | item | | {EXTERNAL LOCATION} | & | -| associated_types.rs:458:9:458:12 | item | TRef | associated_types.rs:457:21:457:32 | T | -| associated_types.rs:459:9:459:12 | item | | {EXTERNAL LOCATION} | & | -| associated_types.rs:459:9:459:12 | item | TRef | associated_types.rs:457:21:457:32 | T | -| associated_types.rs:462:19:471:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:463:28:463:32 | 42i64 | | {EXTERNAL LOCATION} | i64 | -| associated_types.rs:466:28:466:31 | true | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:467:37:467:42 | &item2 | | {EXTERNAL LOCATION} | & | -| associated_types.rs:469:29:469:33 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:470:29:470:32 | true | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:484:16:484:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:484:16:484:20 | SelfParam | TRef | associated_types.rs:477:5:477:20 | ST | -| associated_types.rs:484:16:484:20 | SelfParam | TRef.T | associated_types.rs:479:10:479:21 | Output | -| associated_types.rs:484:39:486:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| associated_types.rs:484:39:486:9 | { ... } | E | associated_types.rs:479:10:479:21 | Output | -| associated_types.rs:484:39:486:9 | { ... } | T | associated_types.rs:479:10:479:21 | Output | -| associated_types.rs:485:16:485:19 | self | | {EXTERNAL LOCATION} | & | -| associated_types.rs:485:16:485:19 | self | TRef | associated_types.rs:477:5:477:20 | ST | -| associated_types.rs:485:16:485:19 | self | TRef.T | associated_types.rs:479:10:479:21 | Output | -| associated_types.rs:489:19:491:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:490:21:490:24 | true | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:498:31:498:31 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:498:31:498:31 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | -| associated_types.rs:498:31:498:31 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:498:61:506:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:500:21:500:21 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:500:21:500:21 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | -| associated_types.rs:500:21:500:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:503:19:503:19 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:503:19:503:19 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | -| associated_types.rs:503:19:503:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:505:23:505:23 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:505:23:505:23 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | -| associated_types.rs:505:23:505:23 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:508:36:508:36 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:508:36:508:36 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:508:36:508:36 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:508:36:508:36 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:508:92:514:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:509:21:509:21 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:509:21:509:21 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:509:21:509:21 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:509:21:509:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:510:19:510:19 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:510:19:510:19 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:510:19:510:19 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:510:19:510:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:511:23:511:23 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:511:23:511:23 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:511:23:511:23 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:511:23:511:23 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:512:21:512:21 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:512:21:512:21 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:512:21:512:21 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:512:21:512:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:513:19:513:19 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:513:19:513:19 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:513:19:513:19 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:513:19:513:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:517:15:526:1 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:518:5:518:48 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:519:5:519:48 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:520:5:520:59 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:521:5:521:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:522:5:522:35 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:523:5:523:37 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:524:5:524:41 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:525:5:525:46 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:381:20:381:24 | SelfParam | TRef | associated_types.rs:374:5:384:5 | Self [trait TraitMultipleAssoc] | +| associated_types.rs:383:20:383:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:383:20:383:24 | SelfParam | TRef | associated_types.rs:374:5:384:5 | Self [trait TraitMultipleAssoc] | +| associated_types.rs:390:21:390:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:390:21:390:25 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:390:34:392:9 | { ... } | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:394:20:394:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:394:20:394:24 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:394:43:396:9 | { ... } | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:398:20:398:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:398:20:398:24 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:398:43:400:9 | { ... } | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:403:19:407:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:415:24:415:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:415:24:415:28 | SelfParam | TRef | associated_types.rs:413:5:416:5 | Self [trait Subtrait] | +| associated_types.rs:424:23:424:27 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:424:23:424:27 | SelfParam | TRef | associated_types.rs:418:5:428:5 | Self [trait Subtrait2] | +| associated_types.rs:424:30:424:31 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:424:48:424:49 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:424:66:427:9 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:425:13:425:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:425:13:425:16 | self | TRef | associated_types.rs:418:5:428:5 | Self [trait Subtrait2] | +| associated_types.rs:425:22:425:23 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:426:13:426:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:426:13:426:16 | self | TRef | associated_types.rs:418:5:428:5 | Self [trait Subtrait2] | +| associated_types.rs:426:22:426:23 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:435:16:435:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:435:16:435:20 | SelfParam | TRef | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:435:16:435:20 | SelfParam | TRef.T | associated_types.rs:432:10:432:16 | T | +| associated_types.rs:435:39:437:9 | { ... } | | associated_types.rs:432:10:432:16 | T | +| associated_types.rs:436:13:436:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:436:13:436:16 | self | TRef | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:436:13:436:16 | self | TRef.T | associated_types.rs:432:10:432:16 | T | +| associated_types.rs:439:16:439:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:439:16:439:20 | SelfParam | TRef | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:439:16:439:20 | SelfParam | TRef.T | associated_types.rs:432:10:432:16 | T | +| associated_types.rs:439:23:439:30 | _content | | associated_types.rs:432:10:432:16 | T | +| associated_types.rs:439:47:441:9 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:440:22:440:42 | "Inserting content: \\n" | | {EXTERNAL LOCATION} | & | +| associated_types.rs:440:22:440:42 | "Inserting content: \\n" | TRef | {EXTERNAL LOCATION} | str | +| associated_types.rs:440:22:440:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:440:22:440:42 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:446:24:446:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:446:24:446:28 | SelfParam | TRef | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:446:24:446:28 | SelfParam | TRef.T | associated_types.rs:444:10:444:16 | T | +| associated_types.rs:446:47:448:9 | { ... } | | associated_types.rs:444:10:444:16 | T | +| associated_types.rs:447:15:447:18 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:447:15:447:18 | self | TRef | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:447:15:447:18 | self | TRef.T | associated_types.rs:444:10:444:16 | T | +| associated_types.rs:453:24:453:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:453:24:453:28 | SelfParam | TRef | associated_types.rs:67:1:67:23 | Odd | +| associated_types.rs:453:24:453:28 | SelfParam | TRef.OddT | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:453:47:456:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:461:24:461:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:461:24:461:28 | SelfParam | TRef | associated_types.rs:67:1:67:23 | Odd | +| associated_types.rs:461:24:461:28 | SelfParam | TRef.OddT | {EXTERNAL LOCATION} | bool | +| associated_types.rs:461:47:463:9 | { ... } | | {EXTERNAL LOCATION} | char | +| associated_types.rs:466:33:466:36 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:466:33:466:36 | item | TRef | associated_types.rs:466:20:466:30 | T | +| associated_types.rs:467:9:467:12 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:467:9:467:12 | item | TRef | associated_types.rs:466:20:466:30 | T | +| associated_types.rs:470:35:470:38 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:470:35:470:38 | item | TRef | associated_types.rs:470:21:470:32 | T | +| associated_types.rs:470:90:473:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:471:9:471:12 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:471:9:471:12 | item | TRef | associated_types.rs:470:21:470:32 | T | +| associated_types.rs:472:9:472:12 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:472:9:472:12 | item | TRef | associated_types.rs:470:21:470:32 | T | +| associated_types.rs:475:19:484:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:476:28:476:32 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| associated_types.rs:479:28:479:31 | true | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:480:37:480:42 | &item2 | | {EXTERNAL LOCATION} | & | +| associated_types.rs:482:29:482:33 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:483:29:483:32 | true | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:497:16:497:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:497:16:497:20 | SelfParam | TRef | associated_types.rs:490:5:490:20 | ST | +| associated_types.rs:497:16:497:20 | SelfParam | TRef.T | associated_types.rs:492:10:492:21 | Output | +| associated_types.rs:497:39:499:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| associated_types.rs:497:39:499:9 | { ... } | E | associated_types.rs:492:10:492:21 | Output | +| associated_types.rs:497:39:499:9 | { ... } | T | associated_types.rs:492:10:492:21 | Output | +| associated_types.rs:498:16:498:19 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:498:16:498:19 | self | TRef | associated_types.rs:490:5:490:20 | ST | +| associated_types.rs:498:16:498:19 | self | TRef.T | associated_types.rs:492:10:492:21 | Output | +| associated_types.rs:502:19:504:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:503:21:503:24 | true | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:511:31:511:31 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:511:31:511:31 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:511:31:511:31 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:511:61:519:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:513:21:513:21 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:513:21:513:21 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:513:21:513:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:516:19:516:19 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:516:19:516:19 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:516:19:516:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:518:23:518:23 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:518:23:518:23 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:518:23:518:23 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:521:36:521:36 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:521:36:521:36 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:521:36:521:36 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:521:36:521:36 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:521:92:527:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:522:21:522:21 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:522:21:522:21 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:522:21:522:21 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:522:21:522:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:523:19:523:19 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:523:19:523:19 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:523:19:523:19 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:523:19:523:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:524:23:524:23 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:524:23:524:23 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:524:23:524:23 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:524:23:524:23 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:525:21:525:21 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:525:21:525:21 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:525:21:525:21 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:525:21:525:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:526:19:526:19 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:526:19:526:19 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:526:19:526:19 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:526:19:526:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:530:15:539:1 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:531:5:531:48 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:532:5:532:48 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:533:5:533:59 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:534:5:534:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:535:5:535:35 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:536:5:536:37 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:537:5:537:41 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:538:5:538:46 | ...::test(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:15:18:15:22 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:15:18:15:22 | SelfParam | TRef | blanket_impl.rs:9:5:10:14 | S2 | | blanket_impl.rs:15:42:17:9 | { ... } | | {EXTERNAL LOCATION} | & | @@ -4974,320 +4980,334 @@ inferType | associated_types.rs:257:9:260:9 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | associated_types.rs:258:13:258:17 | thing | | associated_types.rs:256:33:256:45 | T | | associated_types.rs:259:13:259:17 | thing | | associated_types.rs:256:33:256:45 | T | -| associated_types.rs:263:19:270:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:264:30:264:30 | S | | associated_types.rs:10:1:11:9 | S | -| associated_types.rs:265:33:265:33 | S | | associated_types.rs:10:1:11:9 | S | -| associated_types.rs:266:13:269:9 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| associated_types.rs:269:13:269:39 | tp_assoc_from_supertrait(...) | | {EXTERNAL LOCATION} | (T_2) | -| associated_types.rs:269:38:269:38 | S | | associated_types.rs:10:1:11:9 | S | -| associated_types.rs:277:26:277:26 | x | | associated_types.rs:277:23:277:23 | T | -| associated_types.rs:280:5:282:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:281:13:281:14 | _a | | {EXTERNAL LOCATION} | char | -| associated_types.rs:281:18:281:18 | x | | associated_types.rs:277:23:277:23 | T | -| associated_types.rs:281:18:281:24 | x.get() | | {EXTERNAL LOCATION} | char | -| associated_types.rs:285:24:285:24 | x | | associated_types.rs:285:21:285:21 | T | -| associated_types.rs:288:5:292:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:289:13:289:15 | _a1 | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:289:19:289:19 | x | | associated_types.rs:285:21:285:21 | T | -| associated_types.rs:289:19:289:25 | x.get() | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:290:13:290:15 | _a2 | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:290:19:290:25 | get(...) | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:290:23:290:24 | &x | | {EXTERNAL LOCATION} | & | -| associated_types.rs:290:23:290:24 | &x | TRef | associated_types.rs:285:21:285:21 | T | -| associated_types.rs:290:24:290:24 | x | | associated_types.rs:285:21:285:21 | T | -| associated_types.rs:291:13:291:14 | _b | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:291:18:291:18 | x | | associated_types.rs:285:21:285:21 | T | -| associated_types.rs:291:18:291:32 | x.get_another() | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:295:23:295:23 | x | | associated_types.rs:295:20:295:20 | T | -| associated_types.rs:299:5:303:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:300:13:300:15 | _a1 | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:300:19:300:19 | x | | associated_types.rs:295:20:295:20 | T | -| associated_types.rs:300:19:300:25 | x.get() | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:301:13:301:15 | _a2 | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:301:19:301:25 | get(...) | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:301:23:301:24 | &x | | {EXTERNAL LOCATION} | & | -| associated_types.rs:301:23:301:24 | &x | TRef | associated_types.rs:295:20:295:20 | T | -| associated_types.rs:301:24:301:24 | x | | associated_types.rs:295:20:295:20 | T | -| associated_types.rs:302:13:302:14 | _b | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:302:18:302:18 | x | | associated_types.rs:295:20:295:20 | T | -| associated_types.rs:302:18:302:32 | x.get_another() | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:309:17:309:21 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:309:17:309:21 | SelfParam | TRef | associated_types.rs:305:5:310:5 | Self [trait AssocNameClash] | -| associated_types.rs:312:34:312:34 | x | | associated_types.rs:312:31:312:31 | T | -| associated_types.rs:316:5:319:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:317:13:317:14 | _a | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:317:18:317:18 | x | | associated_types.rs:312:31:312:31 | T | -| associated_types.rs:317:18:317:24 | x.get() | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:318:13:318:14 | _b | | {EXTERNAL LOCATION} | char | -| associated_types.rs:318:18:318:18 | x | | associated_types.rs:312:31:312:31 | T | -| associated_types.rs:318:18:318:25 | x.get2() | | {EXTERNAL LOCATION} | char | -| associated_types.rs:329:19:329:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:329:19:329:23 | SelfParam | TRef | associated_types.rs:325:5:336:5 | Self [trait MyTraitAssoc2] | -| associated_types.rs:329:26:329:26 | a | | associated_types.rs:329:16:329:16 | A | -| associated_types.rs:332:23:332:27 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:332:23:332:27 | SelfParam | TRef | associated_types.rs:325:5:336:5 | Self [trait MyTraitAssoc2] | -| associated_types.rs:332:30:332:30 | a | | associated_types.rs:332:20:332:20 | A | -| associated_types.rs:332:36:332:36 | b | | associated_types.rs:332:20:332:20 | A | -| associated_types.rs:332:76:335:9 | { ... } | | associated_types.rs:326:9:326:52 | GenericAssociatedType[MyTraitAssoc2] | -| associated_types.rs:333:13:333:16 | self | | {EXTERNAL LOCATION} | & | -| associated_types.rs:333:13:333:16 | self | TRef | associated_types.rs:325:5:336:5 | Self [trait MyTraitAssoc2] | -| associated_types.rs:333:13:333:23 | self.put(...) | | associated_types.rs:326:9:326:52 | GenericAssociatedType[MyTraitAssoc2] | -| associated_types.rs:333:22:333:22 | a | | associated_types.rs:332:20:332:20 | A | -| associated_types.rs:334:13:334:16 | self | | {EXTERNAL LOCATION} | & | -| associated_types.rs:334:13:334:16 | self | TRef | associated_types.rs:325:5:336:5 | Self [trait MyTraitAssoc2] | -| associated_types.rs:334:13:334:23 | self.put(...) | | associated_types.rs:326:9:326:52 | GenericAssociatedType[MyTraitAssoc2] | -| associated_types.rs:334:22:334:22 | b | | associated_types.rs:332:20:332:20 | A | -| associated_types.rs:343:19:343:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:343:19:343:23 | SelfParam | TRef | associated_types.rs:10:1:11:9 | S | -| associated_types.rs:343:26:343:26 | a | | associated_types.rs:343:16:343:16 | A | -| associated_types.rs:343:46:345:9 | { ... } | | associated_types.rs:1:1:2:21 | Wrapper | -| associated_types.rs:343:46:345:9 | { ... } | A | associated_types.rs:343:16:343:16 | A | -| associated_types.rs:344:13:344:22 | Wrapper(...) | | associated_types.rs:1:1:2:21 | Wrapper | -| associated_types.rs:344:13:344:22 | Wrapper(...) | A | associated_types.rs:343:16:343:16 | A | -| associated_types.rs:344:21:344:21 | a | | associated_types.rs:343:16:343:16 | A | -| associated_types.rs:348:19:355:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:349:13:349:13 | s | | associated_types.rs:10:1:11:9 | S | -| associated_types.rs:349:17:349:17 | S | | associated_types.rs:10:1:11:9 | S | -| associated_types.rs:351:13:351:15 | _g1 | | associated_types.rs:1:1:2:21 | Wrapper | -| associated_types.rs:351:13:351:15 | _g1 | A | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:351:19:351:19 | s | | associated_types.rs:10:1:11:9 | S | -| associated_types.rs:351:19:351:29 | s.put(...) | | associated_types.rs:1:1:2:21 | Wrapper | -| associated_types.rs:351:19:351:29 | s.put(...) | A | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:351:25:351:28 | 1i32 | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:354:13:354:15 | _g2 | | associated_types.rs:1:1:2:21 | Wrapper | -| associated_types.rs:354:19:354:19 | s | | associated_types.rs:10:1:11:9 | S | -| associated_types.rs:354:19:354:40 | s.put_two(...) | | associated_types.rs:1:1:2:21 | Wrapper | -| associated_types.rs:354:29:354:32 | true | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:354:35:354:39 | false | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:366:21:366:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:366:21:366:25 | SelfParam | TRef | associated_types.rs:361:5:371:5 | Self [trait TraitMultipleAssoc] | -| associated_types.rs:368:20:368:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:368:20:368:24 | SelfParam | TRef | associated_types.rs:361:5:371:5 | Self [trait TraitMultipleAssoc] | -| associated_types.rs:370:20:370:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:370:20:370:24 | SelfParam | TRef | associated_types.rs:361:5:371:5 | Self [trait TraitMultipleAssoc] | -| associated_types.rs:377:21:377:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:377:21:377:25 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | -| associated_types.rs:377:34:379:9 | { ... } | | associated_types.rs:16:1:17:10 | S3 | -| associated_types.rs:378:13:378:14 | S3 | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:268:20:268:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:268:20:268:24 | SelfParam | TRef | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:268:20:268:24 | SelfParam | TRef.A | associated_types.rs:264:10:264:11 | TI | +| associated_types.rs:269:13:269:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:269:13:269:16 | self | TRef | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:269:13:269:16 | self | TRef.A | associated_types.rs:264:10:264:11 | TI | +| associated_types.rs:269:13:269:18 | self.0 | | associated_types.rs:264:10:264:11 | TI | +| associated_types.rs:273:19:283:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:274:30:274:30 | S | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:275:33:275:33 | S | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:276:13:279:9 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| associated_types.rs:279:13:279:39 | tp_assoc_from_supertrait(...) | | {EXTERNAL LOCATION} | (T_2) | +| associated_types.rs:279:38:279:38 | S | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:281:13:281:13 | w | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:281:13:281:13 | w | A | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:281:17:281:26 | Wrapper(...) | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:281:17:281:26 | Wrapper(...) | A | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:281:25:281:25 | S | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:282:26:282:26 | w | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:282:26:282:26 | w | A | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:290:26:290:26 | x | | associated_types.rs:290:23:290:23 | T | +| associated_types.rs:293:5:295:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:294:13:294:14 | _a | | {EXTERNAL LOCATION} | char | +| associated_types.rs:294:18:294:18 | x | | associated_types.rs:290:23:290:23 | T | +| associated_types.rs:294:18:294:24 | x.get() | | {EXTERNAL LOCATION} | char | +| associated_types.rs:298:24:298:24 | x | | associated_types.rs:298:21:298:21 | T | +| associated_types.rs:301:5:305:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:302:13:302:15 | _a1 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:302:19:302:19 | x | | associated_types.rs:298:21:298:21 | T | +| associated_types.rs:302:19:302:25 | x.get() | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:303:13:303:15 | _a2 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:303:19:303:25 | get(...) | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:303:23:303:24 | &x | | {EXTERNAL LOCATION} | & | +| associated_types.rs:303:23:303:24 | &x | TRef | associated_types.rs:298:21:298:21 | T | +| associated_types.rs:303:24:303:24 | x | | associated_types.rs:298:21:298:21 | T | +| associated_types.rs:304:13:304:14 | _b | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:304:18:304:18 | x | | associated_types.rs:298:21:298:21 | T | +| associated_types.rs:304:18:304:32 | x.get_another() | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:308:23:308:23 | x | | associated_types.rs:308:20:308:20 | T | +| associated_types.rs:312:5:316:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:313:13:313:15 | _a1 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:313:19:313:19 | x | | associated_types.rs:308:20:308:20 | T | +| associated_types.rs:313:19:313:25 | x.get() | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:314:13:314:15 | _a2 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:314:19:314:25 | get(...) | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:314:23:314:24 | &x | | {EXTERNAL LOCATION} | & | +| associated_types.rs:314:23:314:24 | &x | TRef | associated_types.rs:308:20:308:20 | T | +| associated_types.rs:314:24:314:24 | x | | associated_types.rs:308:20:308:20 | T | +| associated_types.rs:315:13:315:14 | _b | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:315:18:315:18 | x | | associated_types.rs:308:20:308:20 | T | +| associated_types.rs:315:18:315:32 | x.get_another() | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:322:17:322:21 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:322:17:322:21 | SelfParam | TRef | associated_types.rs:318:5:323:5 | Self [trait AssocNameClash] | +| associated_types.rs:325:34:325:34 | x | | associated_types.rs:325:31:325:31 | T | +| associated_types.rs:329:5:332:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:330:13:330:14 | _a | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:330:18:330:18 | x | | associated_types.rs:325:31:325:31 | T | +| associated_types.rs:330:18:330:24 | x.get() | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:331:13:331:14 | _b | | {EXTERNAL LOCATION} | char | +| associated_types.rs:331:18:331:18 | x | | associated_types.rs:325:31:325:31 | T | +| associated_types.rs:331:18:331:25 | x.get2() | | {EXTERNAL LOCATION} | char | +| associated_types.rs:342:19:342:23 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:342:19:342:23 | SelfParam | TRef | associated_types.rs:338:5:349:5 | Self [trait MyTraitAssoc2] | +| associated_types.rs:342:26:342:26 | a | | associated_types.rs:342:16:342:16 | A | +| associated_types.rs:345:23:345:27 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:345:23:345:27 | SelfParam | TRef | associated_types.rs:338:5:349:5 | Self [trait MyTraitAssoc2] | +| associated_types.rs:345:30:345:30 | a | | associated_types.rs:345:20:345:20 | A | +| associated_types.rs:345:36:345:36 | b | | associated_types.rs:345:20:345:20 | A | +| associated_types.rs:345:76:348:9 | { ... } | | associated_types.rs:339:9:339:52 | GenericAssociatedType[MyTraitAssoc2] | +| associated_types.rs:346:13:346:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:346:13:346:16 | self | TRef | associated_types.rs:338:5:349:5 | Self [trait MyTraitAssoc2] | +| associated_types.rs:346:13:346:23 | self.put(...) | | associated_types.rs:339:9:339:52 | GenericAssociatedType[MyTraitAssoc2] | +| associated_types.rs:346:22:346:22 | a | | associated_types.rs:345:20:345:20 | A | +| associated_types.rs:347:13:347:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:347:13:347:16 | self | TRef | associated_types.rs:338:5:349:5 | Self [trait MyTraitAssoc2] | +| associated_types.rs:347:13:347:23 | self.put(...) | | associated_types.rs:339:9:339:52 | GenericAssociatedType[MyTraitAssoc2] | +| associated_types.rs:347:22:347:22 | b | | associated_types.rs:345:20:345:20 | A | +| associated_types.rs:356:19:356:23 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:356:19:356:23 | SelfParam | TRef | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:356:26:356:26 | a | | associated_types.rs:356:16:356:16 | A | +| associated_types.rs:356:46:358:9 | { ... } | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:356:46:358:9 | { ... } | A | associated_types.rs:356:16:356:16 | A | +| associated_types.rs:357:13:357:22 | Wrapper(...) | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:357:13:357:22 | Wrapper(...) | A | associated_types.rs:356:16:356:16 | A | +| associated_types.rs:357:21:357:21 | a | | associated_types.rs:356:16:356:16 | A | +| associated_types.rs:361:19:368:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:362:13:362:13 | s | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:362:17:362:17 | S | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:364:13:364:15 | _g1 | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:364:13:364:15 | _g1 | A | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:364:19:364:19 | s | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:364:19:364:29 | s.put(...) | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:364:19:364:29 | s.put(...) | A | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:364:25:364:28 | 1i32 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:367:13:367:15 | _g2 | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:367:19:367:19 | s | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:367:19:367:40 | s.put_two(...) | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:367:29:367:32 | true | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:367:35:367:39 | false | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:379:21:379:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:379:21:379:25 | SelfParam | TRef | associated_types.rs:374:5:384:5 | Self [trait TraitMultipleAssoc] | | associated_types.rs:381:20:381:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:381:20:381:24 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | -| associated_types.rs:381:43:383:9 | { ... } | | associated_types.rs:10:1:11:9 | S | -| associated_types.rs:382:13:382:13 | S | | associated_types.rs:10:1:11:9 | S | -| associated_types.rs:385:20:385:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:385:20:385:24 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | -| associated_types.rs:385:43:387:9 | { ... } | | associated_types.rs:13:1:14:10 | S2 | -| associated_types.rs:386:13:386:14 | S2 | | associated_types.rs:13:1:14:10 | S2 | -| associated_types.rs:390:19:394:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:391:13:391:23 | _assoc_zero | | associated_types.rs:16:1:17:10 | S3 | -| associated_types.rs:391:27:391:28 | S3 | | associated_types.rs:16:1:17:10 | S3 | -| associated_types.rs:391:27:391:39 | S3.get_zero() | | associated_types.rs:16:1:17:10 | S3 | -| associated_types.rs:392:13:392:22 | _assoc_one | | associated_types.rs:10:1:11:9 | S | -| associated_types.rs:392:26:392:27 | S3 | | associated_types.rs:16:1:17:10 | S3 | -| associated_types.rs:392:26:392:37 | S3.get_one() | | associated_types.rs:10:1:11:9 | S | -| associated_types.rs:393:13:393:22 | _assoc_two | | associated_types.rs:13:1:14:10 | S2 | -| associated_types.rs:393:26:393:27 | S3 | | associated_types.rs:16:1:17:10 | S3 | -| associated_types.rs:393:26:393:37 | S3.get_two() | | associated_types.rs:13:1:14:10 | S2 | -| associated_types.rs:402:24:402:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:402:24:402:28 | SelfParam | TRef | associated_types.rs:400:5:403:5 | Self [trait Subtrait] | -| associated_types.rs:411:23:411:27 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:411:23:411:27 | SelfParam | TRef | associated_types.rs:405:5:415:5 | Self [trait Subtrait2] | -| associated_types.rs:411:30:411:31 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | -| associated_types.rs:411:48:411:49 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | -| associated_types.rs:411:66:414:9 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:412:13:412:16 | self | | {EXTERNAL LOCATION} | & | -| associated_types.rs:412:13:412:16 | self | TRef | associated_types.rs:405:5:415:5 | Self [trait Subtrait2] | -| associated_types.rs:412:13:412:24 | self.set(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:412:22:412:23 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | -| associated_types.rs:413:13:413:16 | self | | {EXTERNAL LOCATION} | & | -| associated_types.rs:413:13:413:16 | self | TRef | associated_types.rs:405:5:415:5 | Self [trait Subtrait2] | -| associated_types.rs:413:13:413:24 | self.set(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:413:22:413:23 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | -| associated_types.rs:422:16:422:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:422:16:422:20 | SelfParam | TRef | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:422:16:422:20 | SelfParam | TRef.T | associated_types.rs:419:10:419:16 | T | -| associated_types.rs:422:39:424:9 | { ... } | | associated_types.rs:419:10:419:16 | T | -| associated_types.rs:423:13:423:16 | self | | {EXTERNAL LOCATION} | & | -| associated_types.rs:423:13:423:16 | self | TRef | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:423:13:423:16 | self | TRef.T | associated_types.rs:419:10:419:16 | T | -| associated_types.rs:423:13:423:18 | self.0 | | associated_types.rs:419:10:419:16 | T | -| associated_types.rs:426:16:426:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:426:16:426:20 | SelfParam | TRef | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:426:16:426:20 | SelfParam | TRef.T | associated_types.rs:419:10:419:16 | T | -| associated_types.rs:426:23:426:30 | _content | | associated_types.rs:419:10:419:16 | T | -| associated_types.rs:426:47:428:9 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:427:13:427:43 | MacroExpr | | {EXTERNAL LOCATION} | () | -| associated_types.rs:427:22:427:42 | "Inserting content: \\n" | | {EXTERNAL LOCATION} | & | -| associated_types.rs:427:22:427:42 | "Inserting content: \\n" | TRef | {EXTERNAL LOCATION} | str | -| associated_types.rs:427:22:427:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:427:22:427:42 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:427:22:427:42 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:433:24:433:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:433:24:433:28 | SelfParam | TRef | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:433:24:433:28 | SelfParam | TRef.T | associated_types.rs:431:10:431:16 | T | -| associated_types.rs:433:47:435:9 | { ... } | | associated_types.rs:431:10:431:16 | T | -| associated_types.rs:434:13:434:19 | (...) | | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:434:13:434:19 | (...) | T | associated_types.rs:431:10:431:16 | T | -| associated_types.rs:434:13:434:21 | ... .0 | | associated_types.rs:431:10:431:16 | T | -| associated_types.rs:434:14:434:18 | * ... | | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:434:14:434:18 | * ... | T | associated_types.rs:431:10:431:16 | T | -| associated_types.rs:434:15:434:18 | self | | {EXTERNAL LOCATION} | & | -| associated_types.rs:434:15:434:18 | self | TRef | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:434:15:434:18 | self | TRef.T | associated_types.rs:431:10:431:16 | T | -| associated_types.rs:440:24:440:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:440:24:440:28 | SelfParam | TRef | associated_types.rs:67:1:67:23 | Odd | -| associated_types.rs:440:24:440:28 | SelfParam | TRef.OddT | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:440:47:443:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:442:13:442:30 | ...::default(...) | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:448:24:448:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:448:24:448:28 | SelfParam | TRef | associated_types.rs:67:1:67:23 | Odd | -| associated_types.rs:448:24:448:28 | SelfParam | TRef.OddT | {EXTERNAL LOCATION} | bool | -| associated_types.rs:448:47:450:9 | { ... } | | {EXTERNAL LOCATION} | char | -| associated_types.rs:449:13:449:30 | ...::default(...) | | {EXTERNAL LOCATION} | char | -| associated_types.rs:453:33:453:36 | item | | {EXTERNAL LOCATION} | & | -| associated_types.rs:453:33:453:36 | item | TRef | associated_types.rs:453:20:453:30 | T | -| associated_types.rs:454:9:454:12 | item | | {EXTERNAL LOCATION} | & | -| associated_types.rs:454:9:454:12 | item | TRef | associated_types.rs:453:20:453:30 | T | -| associated_types.rs:457:35:457:38 | item | | {EXTERNAL LOCATION} | & | -| associated_types.rs:457:35:457:38 | item | TRef | associated_types.rs:457:21:457:32 | T | -| associated_types.rs:457:90:460:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:458:9:458:12 | item | | {EXTERNAL LOCATION} | & | -| associated_types.rs:458:9:458:12 | item | TRef | associated_types.rs:457:21:457:32 | T | -| associated_types.rs:458:9:458:20 | item.set(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:459:9:459:12 | item | | {EXTERNAL LOCATION} | & | -| associated_types.rs:459:9:459:12 | item | TRef | associated_types.rs:457:21:457:32 | T | -| associated_types.rs:459:9:459:31 | item.insert_two(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:462:19:471:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:463:13:463:17 | item1 | | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:463:13:463:17 | item1 | T | {EXTERNAL LOCATION} | i64 | -| associated_types.rs:463:21:463:33 | MyType(...) | | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:463:21:463:33 | MyType(...) | T | {EXTERNAL LOCATION} | i64 | -| associated_types.rs:463:28:463:32 | 42i64 | | {EXTERNAL LOCATION} | i64 | -| associated_types.rs:464:13:464:21 | _content1 | | {EXTERNAL LOCATION} | i64 | -| associated_types.rs:464:25:464:29 | item1 | | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:464:25:464:29 | item1 | T | {EXTERNAL LOCATION} | i64 | -| associated_types.rs:464:25:464:43 | item1.get_content() | | {EXTERNAL LOCATION} | i64 | -| associated_types.rs:466:13:466:17 | item2 | | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:466:13:466:17 | item2 | T | {EXTERNAL LOCATION} | bool | -| associated_types.rs:466:21:466:32 | MyType(...) | | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:466:21:466:32 | MyType(...) | T | {EXTERNAL LOCATION} | bool | -| associated_types.rs:466:28:466:31 | true | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:467:37:467:42 | &item2 | | {EXTERNAL LOCATION} | & | -| associated_types.rs:467:37:467:42 | &item2 | TRef | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:467:37:467:42 | &item2 | TRef.T | {EXTERNAL LOCATION} | bool | -| associated_types.rs:467:38:467:42 | item2 | | associated_types.rs:417:5:417:24 | MyType | -| associated_types.rs:467:38:467:42 | item2 | T | {EXTERNAL LOCATION} | bool | -| associated_types.rs:469:13:469:21 | _content3 | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:469:25:469:34 | Odd(...) | | associated_types.rs:67:1:67:23 | Odd | -| associated_types.rs:469:25:469:34 | Odd(...) | OddT | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:469:25:469:48 | ... .get_content() | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:469:29:469:33 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:470:13:470:21 | _content4 | | {EXTERNAL LOCATION} | char | -| associated_types.rs:470:25:470:33 | Odd(...) | | associated_types.rs:67:1:67:23 | Odd | -| associated_types.rs:470:25:470:33 | Odd(...) | OddT | {EXTERNAL LOCATION} | bool | -| associated_types.rs:470:25:470:47 | ... .get_content() | | {EXTERNAL LOCATION} | char | -| associated_types.rs:470:29:470:32 | true | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:484:16:484:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| associated_types.rs:484:16:484:20 | SelfParam | TRef | associated_types.rs:477:5:477:20 | ST | -| associated_types.rs:484:16:484:20 | SelfParam | TRef.T | associated_types.rs:479:10:479:21 | Output | -| associated_types.rs:484:39:486:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| associated_types.rs:484:39:486:9 | { ... } | E | associated_types.rs:479:10:479:21 | Output | -| associated_types.rs:484:39:486:9 | { ... } | T | associated_types.rs:479:10:479:21 | Output | -| associated_types.rs:485:13:485:22 | Ok(...) | | {EXTERNAL LOCATION} | Result | -| associated_types.rs:485:13:485:22 | Ok(...) | E | associated_types.rs:479:10:479:21 | Output | -| associated_types.rs:485:13:485:22 | Ok(...) | T | associated_types.rs:479:10:479:21 | Output | -| associated_types.rs:485:16:485:19 | self | | {EXTERNAL LOCATION} | & | -| associated_types.rs:485:16:485:19 | self | TRef | associated_types.rs:477:5:477:20 | ST | -| associated_types.rs:485:16:485:19 | self | TRef.T | associated_types.rs:479:10:479:21 | Output | -| associated_types.rs:485:16:485:21 | self.0 | | associated_types.rs:479:10:479:21 | Output | -| associated_types.rs:489:19:491:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:490:13:490:14 | _y | | {EXTERNAL LOCATION} | Result | -| associated_types.rs:490:13:490:14 | _y | E | {EXTERNAL LOCATION} | bool | -| associated_types.rs:490:13:490:14 | _y | T | {EXTERNAL LOCATION} | bool | -| associated_types.rs:490:18:490:25 | ST(...) | | associated_types.rs:477:5:477:20 | ST | -| associated_types.rs:490:18:490:25 | ST(...) | T | {EXTERNAL LOCATION} | bool | -| associated_types.rs:490:18:490:31 | ... .get() | | {EXTERNAL LOCATION} | Result | -| associated_types.rs:490:18:490:31 | ... .get() | E | {EXTERNAL LOCATION} | bool | -| associated_types.rs:490:18:490:31 | ... .get() | T | {EXTERNAL LOCATION} | bool | -| associated_types.rs:490:21:490:24 | true | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:498:31:498:31 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:498:31:498:31 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | -| associated_types.rs:498:31:498:31 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:498:61:506:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:500:13:500:15 | _a1 | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:500:19:500:22 | (...) | | associated_types.rs:19:1:27:1 | dyn GetSet | -| associated_types.rs:500:19:500:22 | (...) | dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:500:19:500:28 | ... .get() | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:500:20:500:21 | * ... | | associated_types.rs:19:1:27:1 | dyn GetSet | -| associated_types.rs:500:20:500:21 | * ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:500:21:500:21 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:500:21:500:21 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | -| associated_types.rs:500:21:500:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:503:13:503:15 | _a2 | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:503:19:503:19 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:503:19:503:19 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | -| associated_types.rs:503:19:503:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:503:19:503:25 | t.get() | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:505:13:505:15 | _a3 | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:505:19:505:24 | get(...) | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:505:23:505:23 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:505:23:505:23 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | -| associated_types.rs:505:23:505:23 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:508:36:508:36 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:508:36:508:36 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:508:36:508:36 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:508:36:508:36 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:508:92:514:5 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:509:13:509:15 | _a1 | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:509:19:509:22 | (...) | | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:509:19:509:22 | (...) | dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:509:19:509:22 | (...) | dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:509:19:509:28 | ... .get() | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:509:20:509:21 | * ... | | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:509:20:509:21 | * ... | dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:509:20:509:21 | * ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:509:21:509:21 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:509:21:509:21 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:509:21:509:21 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:509:21:509:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:510:13:510:15 | _a2 | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:510:19:510:19 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:510:19:510:19 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:510:19:510:19 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:510:19:510:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:510:19:510:25 | t.get() | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:511:13:511:15 | _a3 | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:511:19:511:24 | get(...) | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:511:23:511:23 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:511:23:511:23 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:511:23:511:23 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:511:23:511:23 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:512:13:512:15 | _b1 | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:512:19:512:22 | (...) | | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:512:19:512:22 | (...) | dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:512:19:512:22 | (...) | dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:512:19:512:36 | ... .get_another() | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:512:20:512:21 | * ... | | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:512:20:512:21 | * ... | dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:512:20:512:21 | * ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:512:21:512:21 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:512:21:512:21 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:512:21:512:21 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:512:21:512:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:513:13:513:15 | _b2 | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:513:19:513:19 | t | | {EXTERNAL LOCATION} | & | -| associated_types.rs:513:19:513:19 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:513:19:513:19 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:513:19:513:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:513:19:513:33 | t.get_another() | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:517:15:526:1 | { ... } | | {EXTERNAL LOCATION} | () | -| associated_types.rs:518:5:518:48 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:519:5:519:48 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:520:5:520:59 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:521:5:521:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:522:5:522:35 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:523:5:523:37 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:524:5:524:41 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:525:5:525:46 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:381:20:381:24 | SelfParam | TRef | associated_types.rs:374:5:384:5 | Self [trait TraitMultipleAssoc] | +| associated_types.rs:383:20:383:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:383:20:383:24 | SelfParam | TRef | associated_types.rs:374:5:384:5 | Self [trait TraitMultipleAssoc] | +| associated_types.rs:390:21:390:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:390:21:390:25 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:390:34:392:9 | { ... } | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:391:13:391:14 | S3 | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:394:20:394:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:394:20:394:24 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:394:43:396:9 | { ... } | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:395:13:395:13 | S | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:398:20:398:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:398:20:398:24 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:398:43:400:9 | { ... } | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:399:13:399:14 | S2 | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:403:19:407:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:404:13:404:23 | _assoc_zero | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:404:27:404:28 | S3 | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:404:27:404:39 | S3.get_zero() | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:405:13:405:22 | _assoc_one | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:405:26:405:27 | S3 | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:405:26:405:37 | S3.get_one() | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:406:13:406:22 | _assoc_two | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:406:26:406:27 | S3 | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:406:26:406:37 | S3.get_two() | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:415:24:415:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:415:24:415:28 | SelfParam | TRef | associated_types.rs:413:5:416:5 | Self [trait Subtrait] | +| associated_types.rs:424:23:424:27 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:424:23:424:27 | SelfParam | TRef | associated_types.rs:418:5:428:5 | Self [trait Subtrait2] | +| associated_types.rs:424:30:424:31 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:424:48:424:49 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:424:66:427:9 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:425:13:425:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:425:13:425:16 | self | TRef | associated_types.rs:418:5:428:5 | Self [trait Subtrait2] | +| associated_types.rs:425:13:425:24 | self.set(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:425:22:425:23 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:426:13:426:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:426:13:426:16 | self | TRef | associated_types.rs:418:5:428:5 | Self [trait Subtrait2] | +| associated_types.rs:426:13:426:24 | self.set(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:426:22:426:23 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:435:16:435:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:435:16:435:20 | SelfParam | TRef | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:435:16:435:20 | SelfParam | TRef.T | associated_types.rs:432:10:432:16 | T | +| associated_types.rs:435:39:437:9 | { ... } | | associated_types.rs:432:10:432:16 | T | +| associated_types.rs:436:13:436:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:436:13:436:16 | self | TRef | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:436:13:436:16 | self | TRef.T | associated_types.rs:432:10:432:16 | T | +| associated_types.rs:436:13:436:18 | self.0 | | associated_types.rs:432:10:432:16 | T | +| associated_types.rs:439:16:439:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:439:16:439:20 | SelfParam | TRef | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:439:16:439:20 | SelfParam | TRef.T | associated_types.rs:432:10:432:16 | T | +| associated_types.rs:439:23:439:30 | _content | | associated_types.rs:432:10:432:16 | T | +| associated_types.rs:439:47:441:9 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:440:13:440:43 | MacroExpr | | {EXTERNAL LOCATION} | () | +| associated_types.rs:440:22:440:42 | "Inserting content: \\n" | | {EXTERNAL LOCATION} | & | +| associated_types.rs:440:22:440:42 | "Inserting content: \\n" | TRef | {EXTERNAL LOCATION} | str | +| associated_types.rs:440:22:440:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:440:22:440:42 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:440:22:440:42 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:446:24:446:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:446:24:446:28 | SelfParam | TRef | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:446:24:446:28 | SelfParam | TRef.T | associated_types.rs:444:10:444:16 | T | +| associated_types.rs:446:47:448:9 | { ... } | | associated_types.rs:444:10:444:16 | T | +| associated_types.rs:447:13:447:19 | (...) | | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:447:13:447:19 | (...) | T | associated_types.rs:444:10:444:16 | T | +| associated_types.rs:447:13:447:21 | ... .0 | | associated_types.rs:444:10:444:16 | T | +| associated_types.rs:447:14:447:18 | * ... | | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:447:14:447:18 | * ... | T | associated_types.rs:444:10:444:16 | T | +| associated_types.rs:447:15:447:18 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:447:15:447:18 | self | TRef | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:447:15:447:18 | self | TRef.T | associated_types.rs:444:10:444:16 | T | +| associated_types.rs:453:24:453:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:453:24:453:28 | SelfParam | TRef | associated_types.rs:67:1:67:23 | Odd | +| associated_types.rs:453:24:453:28 | SelfParam | TRef.OddT | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:453:47:456:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:455:13:455:30 | ...::default(...) | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:461:24:461:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:461:24:461:28 | SelfParam | TRef | associated_types.rs:67:1:67:23 | Odd | +| associated_types.rs:461:24:461:28 | SelfParam | TRef.OddT | {EXTERNAL LOCATION} | bool | +| associated_types.rs:461:47:463:9 | { ... } | | {EXTERNAL LOCATION} | char | +| associated_types.rs:462:13:462:30 | ...::default(...) | | {EXTERNAL LOCATION} | char | +| associated_types.rs:466:33:466:36 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:466:33:466:36 | item | TRef | associated_types.rs:466:20:466:30 | T | +| associated_types.rs:467:9:467:12 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:467:9:467:12 | item | TRef | associated_types.rs:466:20:466:30 | T | +| associated_types.rs:470:35:470:38 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:470:35:470:38 | item | TRef | associated_types.rs:470:21:470:32 | T | +| associated_types.rs:470:90:473:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:471:9:471:12 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:471:9:471:12 | item | TRef | associated_types.rs:470:21:470:32 | T | +| associated_types.rs:471:9:471:20 | item.set(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:472:9:472:12 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:472:9:472:12 | item | TRef | associated_types.rs:470:21:470:32 | T | +| associated_types.rs:472:9:472:31 | item.insert_two(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:475:19:484:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:476:13:476:17 | item1 | | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:476:13:476:17 | item1 | T | {EXTERNAL LOCATION} | i64 | +| associated_types.rs:476:21:476:33 | MyType(...) | | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:476:21:476:33 | MyType(...) | T | {EXTERNAL LOCATION} | i64 | +| associated_types.rs:476:28:476:32 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| associated_types.rs:477:13:477:21 | _content1 | | {EXTERNAL LOCATION} | i64 | +| associated_types.rs:477:25:477:29 | item1 | | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:477:25:477:29 | item1 | T | {EXTERNAL LOCATION} | i64 | +| associated_types.rs:477:25:477:43 | item1.get_content() | | {EXTERNAL LOCATION} | i64 | +| associated_types.rs:479:13:479:17 | item2 | | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:479:13:479:17 | item2 | T | {EXTERNAL LOCATION} | bool | +| associated_types.rs:479:21:479:32 | MyType(...) | | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:479:21:479:32 | MyType(...) | T | {EXTERNAL LOCATION} | bool | +| associated_types.rs:479:28:479:31 | true | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:480:37:480:42 | &item2 | | {EXTERNAL LOCATION} | & | +| associated_types.rs:480:37:480:42 | &item2 | TRef | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:480:37:480:42 | &item2 | TRef.T | {EXTERNAL LOCATION} | bool | +| associated_types.rs:480:38:480:42 | item2 | | associated_types.rs:430:5:430:24 | MyType | +| associated_types.rs:480:38:480:42 | item2 | T | {EXTERNAL LOCATION} | bool | +| associated_types.rs:482:13:482:21 | _content3 | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:482:25:482:34 | Odd(...) | | associated_types.rs:67:1:67:23 | Odd | +| associated_types.rs:482:25:482:34 | Odd(...) | OddT | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:482:25:482:48 | ... .get_content() | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:482:29:482:33 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:483:13:483:21 | _content4 | | {EXTERNAL LOCATION} | char | +| associated_types.rs:483:25:483:33 | Odd(...) | | associated_types.rs:67:1:67:23 | Odd | +| associated_types.rs:483:25:483:33 | Odd(...) | OddT | {EXTERNAL LOCATION} | bool | +| associated_types.rs:483:25:483:47 | ... .get_content() | | {EXTERNAL LOCATION} | char | +| associated_types.rs:483:29:483:32 | true | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:497:16:497:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:497:16:497:20 | SelfParam | TRef | associated_types.rs:490:5:490:20 | ST | +| associated_types.rs:497:16:497:20 | SelfParam | TRef.T | associated_types.rs:492:10:492:21 | Output | +| associated_types.rs:497:39:499:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| associated_types.rs:497:39:499:9 | { ... } | E | associated_types.rs:492:10:492:21 | Output | +| associated_types.rs:497:39:499:9 | { ... } | T | associated_types.rs:492:10:492:21 | Output | +| associated_types.rs:498:13:498:22 | Ok(...) | | {EXTERNAL LOCATION} | Result | +| associated_types.rs:498:13:498:22 | Ok(...) | E | associated_types.rs:492:10:492:21 | Output | +| associated_types.rs:498:13:498:22 | Ok(...) | T | associated_types.rs:492:10:492:21 | Output | +| associated_types.rs:498:16:498:19 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:498:16:498:19 | self | TRef | associated_types.rs:490:5:490:20 | ST | +| associated_types.rs:498:16:498:19 | self | TRef.T | associated_types.rs:492:10:492:21 | Output | +| associated_types.rs:498:16:498:21 | self.0 | | associated_types.rs:492:10:492:21 | Output | +| associated_types.rs:502:19:504:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:503:13:503:14 | _y | | {EXTERNAL LOCATION} | Result | +| associated_types.rs:503:13:503:14 | _y | E | {EXTERNAL LOCATION} | bool | +| associated_types.rs:503:13:503:14 | _y | T | {EXTERNAL LOCATION} | bool | +| associated_types.rs:503:18:503:25 | ST(...) | | associated_types.rs:490:5:490:20 | ST | +| associated_types.rs:503:18:503:25 | ST(...) | T | {EXTERNAL LOCATION} | bool | +| associated_types.rs:503:18:503:31 | ... .get() | | {EXTERNAL LOCATION} | Result | +| associated_types.rs:503:18:503:31 | ... .get() | E | {EXTERNAL LOCATION} | bool | +| associated_types.rs:503:18:503:31 | ... .get() | T | {EXTERNAL LOCATION} | bool | +| associated_types.rs:503:21:503:24 | true | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:511:31:511:31 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:511:31:511:31 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:511:31:511:31 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:511:61:519:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:513:13:513:15 | _a1 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:513:19:513:22 | (...) | | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:513:19:513:22 | (...) | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:513:19:513:28 | ... .get() | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:513:20:513:21 | * ... | | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:513:20:513:21 | * ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:513:21:513:21 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:513:21:513:21 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:513:21:513:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:516:13:516:15 | _a2 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:516:19:516:19 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:516:19:516:19 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:516:19:516:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:516:19:516:25 | t.get() | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:518:13:518:15 | _a3 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:518:19:518:24 | get(...) | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:518:23:518:23 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:518:23:518:23 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:518:23:518:23 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:521:36:521:36 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:521:36:521:36 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:521:36:521:36 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:521:36:521:36 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:521:92:527:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:522:13:522:15 | _a1 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:522:19:522:22 | (...) | | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:522:19:522:22 | (...) | dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:522:19:522:22 | (...) | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:522:19:522:28 | ... .get() | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:522:20:522:21 | * ... | | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:522:20:522:21 | * ... | dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:522:20:522:21 | * ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:522:21:522:21 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:522:21:522:21 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:522:21:522:21 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:522:21:522:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:523:13:523:15 | _a2 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:523:19:523:19 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:523:19:523:19 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:523:19:523:19 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:523:19:523:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:523:19:523:25 | t.get() | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:524:13:524:15 | _a3 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:524:19:524:24 | get(...) | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:524:23:524:23 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:524:23:524:23 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:524:23:524:23 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:524:23:524:23 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:525:13:525:15 | _b1 | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:525:19:525:22 | (...) | | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:525:19:525:22 | (...) | dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:525:19:525:22 | (...) | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:525:19:525:36 | ... .get_another() | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:525:20:525:21 | * ... | | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:525:20:525:21 | * ... | dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:525:20:525:21 | * ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:525:21:525:21 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:525:21:525:21 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:525:21:525:21 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:525:21:525:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:526:13:526:15 | _b2 | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:526:19:526:19 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:526:19:526:19 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:526:19:526:19 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:526:19:526:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:526:19:526:33 | t.get_another() | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:530:15:539:1 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:531:5:531:48 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:532:5:532:48 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:533:5:533:59 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:534:5:534:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:535:5:535:35 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:536:5:536:37 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:537:5:537:41 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:538:5:538:46 | ...::test(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:15:18:15:22 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:15:18:15:22 | SelfParam | TRef | blanket_impl.rs:9:5:10:14 | S2 | | blanket_impl.rs:15:42:17:9 | { ... } | | {EXTERNAL LOCATION} | & | From 77d9d0a3c7fb83dad6f6f6a0e90f7095dec05f61 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 5 Feb 2026 13:25:05 +0100 Subject: [PATCH 2/2] Rust: Implement support for associated types accessed on type parameters --- .../typeinference/AssociatedTypes.qll | 65 +++++++++++++++++ .../rust/internal/typeinference/Type.qll | 61 +++++++++++++--- .../internal/typeinference/TypeInference.qll | 17 ++++- .../internal/typeinference/TypeMention.qll | 28 ++++++-- .../type-inference/associated_types.rs | 8 +-- .../test/library-tests/type-inference/main.rs | 4 +- .../type-inference/type-inference.expected | 72 +++++++++++++++++++ 7 files changed, 233 insertions(+), 22 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/internal/typeinference/AssociatedTypes.qll diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/AssociatedTypes.qll b/rust/ql/lib/codeql/rust/internal/typeinference/AssociatedTypes.qll new file mode 100644 index 000000000000..a31b2730def7 --- /dev/null +++ b/rust/ql/lib/codeql/rust/internal/typeinference/AssociatedTypes.qll @@ -0,0 +1,65 @@ +/** + * Provides classes and helper predicates for associated types. + */ + +private import rust +private import codeql.rust.internal.PathResolution +private import TypeMention +private import Type +private import TypeInference + +/** An associated type, that is, a type alias in a trait block. */ +final class AssocType extends TypeAlias { + Trait trait; + + AssocType() { this = trait.getAssocItemList().getAnAssocItem() } + + Trait getTrait() { result = trait } + + string getText() { result = this.getName().getText() } +} + +/** Gets an associated type of `trait` or of a supertrait of `trait`. */ +AssocType getTraitAssocType(Trait trait) { + result = trait.getSupertrait*().getAssocItemList().getAnAssocItem() +} + +/** Holds if `path` is of the form `::name` */ +predicate asTraitPath(Path path, TypeRepr typeRepr, Path traitPath, string name) { + exists(PathSegment segment | + segment = path.getQualifier().getSegment() and + typeRepr = segment.getTypeRepr() and + traitPath = segment.getTraitTypeRepr().getPath() and + name = path.getText() + ) +} + +/** + * Holds if `assoc` is accessed on `tp` in `path`. + * + * That is this is the case when `path` is of the form `::AssocType` or `tp::AssocType`; and `AssocType` resolves to `assoc`. + */ +predicate tpAssociatedType(TypeParam tp, AssocType assoc, Path path) { + resolvePath(path.getQualifier()) = tp and + resolvePath(path) = assoc + or + exists(TypeRepr typeRepr, Path traitPath, string name | + asTraitPath(path, typeRepr, traitPath, name) and + tp = resolvePath(typeRepr.(PathTypeRepr).getPath()) and + assoc = resolvePath(traitPath).(TraitItemNode).getAssocItem(name) + ) +} + +/** + * Holds if `bound` is a type bound for `tp` that gives rise to `assoc` being + * present for `tp`. + */ +predicate tpBoundAssociatedType( + TypeParam tp, TypeBound bound, Path path, TraitItemNode trait, AssocType assoc +) { + bound = tp.getATypeBound() and + path = bound.getTypeRepr().(PathTypeRepr).getPath() and + trait = resolvePath(path) and + assoc = getTraitAssocType(trait) +} diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/Type.qll b/rust/ql/lib/codeql/rust/internal/typeinference/Type.qll index 983e9a75ee5a..f9cebef35232 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/Type.qll @@ -8,11 +8,7 @@ private import codeql.rust.elements.internal.generated.Raw private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.frameworks.stdlib.Stdlib private import codeql.rust.frameworks.stdlib.Builtins as Builtins - -/** Gets a type alias of `trait` or of a supertrait of `trait`. */ -private TypeAlias getTraitTypeAlias(Trait trait) { - result = trait.getSupertrait*().getAssocItemList().getAnAssocItem() -} +private import AssociatedTypes /** * Holds if a dyn trait type for the trait `trait` should have a type parameter @@ -31,7 +27,7 @@ private TypeAlias getTraitTypeAlias(Trait trait) { */ private predicate dynTraitTypeParameter(Trait trait, AstNode n) { trait = any(DynTraitTypeRepr dt).getTrait() and - n = [trait.getGenericParamList().getATypeParam().(AstNode), getTraitTypeAlias(trait)] + n = [trait.getGenericParamList().getATypeParam().(AstNode), getTraitAssocType(trait)] } cached @@ -43,8 +39,11 @@ newtype TType = TNeverType() or TUnknownType() or TTypeParamTypeParameter(TypeParam t) or - TAssociatedTypeTypeParameter(Trait trait, TypeAlias typeAlias) { - getTraitTypeAlias(trait) = typeAlias + TAssociatedTypeTypeParameter(Trait trait, AssocType typeAlias) { + getTraitAssocType(trait) = typeAlias + } or + TTypeParamAssociatedTypeTypeParameter(TypeParam tp, AssocType assoc) { + tpAssociatedType(tp, assoc, _) } or TDynTraitTypeParameter(Trait trait, AstNode n) { dynTraitTypeParameter(trait, n) } or TImplTraitTypeParameter(ImplTraitTypeRepr implTrait, TypeParam tp) { @@ -464,6 +463,52 @@ class AssociatedTypeTypeParameter extends TypeParameter, TAssociatedTypeTypePara override Location getLocation() { result = typeAlias.getLocation() } } +/** + * A type parameter corresponding to an associated type accessed on a type + * parameter, for example `T::AssociatedType` where `T` is a type parameter. + * + * These type parameters are created when a function signature accesses an + * associated type on a type parameter. For example, in + * ```rust + * fn foo(arg: T::Assoc) { } + * ``` + * we create a `TypeParamAssociatedTypeTypeParameter` for `Assoc` on `T` and the + * mention `T::Assoc` resolves to this type parameter. If denoting the type + * parameter by `T_Assoc` then the above function is treated as if it was + * ```rust + * fn foo, T_Assoc>(arg: T_Assoc) { } + * ``` + */ +class TypeParamAssociatedTypeTypeParameter extends TypeParameter, + TTypeParamAssociatedTypeTypeParameter +{ + private TypeParam typeParam; + private AssocType assoc; + + TypeParamAssociatedTypeTypeParameter() { + this = TTypeParamAssociatedTypeTypeParameter(typeParam, assoc) + } + + /** Gets the type parameter that this associated type is accessed on. */ + TypeParam getTypeParam() { result = typeParam } + + /** Gets the associated type alias. */ + AssocType getTypeAlias() { result = assoc } + + /** Gets a path that accesses this type parameter. */ + Path getPath() { tpAssociatedType(typeParam, assoc, result) } + + override ItemNode getDeclaringItem() { result.getTypeParam(_) = typeParam } + + override string toString() { + result = + typeParam.toString() + "::" + assoc.getName().getText() + "[" + + assoc.getTrait().getName().getText() + "]" + } + + override Location getLocation() { result = typeParam.getLocation() } +} + /** Gets the associated type type-parameter corresponding directly to `typeAlias`. */ AssociatedTypeTypeParameter getAssociatedTypeTypeParameter(TypeAlias typeAlias) { result.isDirect() and result.getTypeAlias() = typeAlias diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index e8b5c9c7a19a..a1ccd3d470ca 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -108,6 +108,10 @@ private module Input1 implements InputSig1 { id2 = idOfTypeParameterAstNode(tp0.(AssociatedTypeTypeParameter).getTypeAlias()) or kind = 4 and + id1 = idOfTypeParameterAstNode(tp0.(TypeParamAssociatedTypeTypeParameter).getTypeParam()) and + id2 = idOfTypeParameterAstNode(tp0.(TypeParamAssociatedTypeTypeParameter).getTypeAlias()) + or + kind = 5 and id1 = 0 and exists(AstNode node | id2 = idOfTypeParameterAstNode(node) | node = tp0.(TypeParamTypeParameter).getTypeParam() or @@ -273,9 +277,16 @@ private class FunctionDeclaration extends Function { TypeParameter getTypeParameter(ImplOrTraitItemNodeOption i, TypeParameterPosition ppos) { i = parent and ( - typeParamMatchPosition(this.getGenericParamList().getATypeParam(), result, ppos) - or - typeParamMatchPosition(i.asSome().getTypeParam(_), result, ppos) + exists(TypeParam tp | + tp = [this.getGenericParamList().getATypeParam(), i.asSome().getTypeParam(_)] + | + typeParamMatchPosition(tp, result, ppos) + or + // If `tp` is a type parameter for this function, then any associated + // types accessed on `tp` are also type parameters. + ppos.isImplicit() and + result.(TypeParamAssociatedTypeTypeParameter).getTypeParam() = tp + ) or ppos.isImplicit() and result = TSelfTypeParameter(i.asSome()) or diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll index 4bff45ba0275..229bbd056a06 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll @@ -6,6 +6,7 @@ private import codeql.rust.frameworks.stdlib.Stdlib private import Type private import TypeAbstraction private import TypeInference +private import AssociatedTypes bindingset[trait, name] pragma[inline_late] @@ -290,6 +291,22 @@ private module MkTypeMention, T_Assoc>(arg: T_Assoc) { } + // ^^^^^^^^^ ^^^^^ ^^^^^^^ + // this path result + // ``` + exists(TypeParam typeParam, Trait trait, AssocType assoc | + tpBoundAssociatedType(typeParam, _, this, trait, assoc) and + tp = TAssociatedTypeTypeParameter(resolved, assoc) and + result = TTypeParamAssociatedTypeTypeParameter(typeParam, assoc) and + path.isEmpty() + ) } bindingset[name] @@ -343,6 +360,8 @@ private module MkTypeMention::AssocType` // ^^^ tm ^^^^^^^^^ name - exists(string name | - name = path.getText() and - trait = resolvePath(qualifier.getSegment().getTraitTypeRepr().getPath()) and - getTraitAssocType(trait, name) = alias and - tm = qualifier.getSegment().getTypeRepr() + exists(string name, Path traitPath | + asTraitPath(path, tm, traitPath, name) and + trait = resolvePath(traitPath) and + getTraitAssocType(trait, name) = alias ) or // path of the form `Self::AssocType` within an `impl` block diff --git a/rust/ql/test/library-tests/type-inference/associated_types.rs b/rust/ql/test/library-tests/type-inference/associated_types.rs index 567d4449150e..573404ebaf6f 100644 --- a/rust/ql/test/library-tests/type-inference/associated_types.rs +++ b/rust/ql/test/library-tests/type-inference/associated_types.rs @@ -271,15 +271,15 @@ mod type_param_access_associated_type { } pub fn test() { - let _o1 = tp_with_as(S); // $ target=tp_with_as MISSING: type=_o1:S3 - let _o2 = tp_without_as(S); // $ target=tp_without_as MISSING: type=_o2:S3 + let _o1 = tp_with_as(S); // $ target=tp_with_as type=_o1:S3 + let _o2 = tp_without_as(S); // $ target=tp_without_as type=_o2:S3 let ( _o3, // $ MISSING: type=_o3:S3 - _o4, // $ MISSING: type=_o4:bool + _o4, // $ type=_o4:bool ) = tp_assoc_from_supertrait(S); // $ target=tp_assoc_from_supertrait let w = Wrapper(S); - let _extracted = w.extract(); // $ target=extract MISSING: type=_extracted:S3 + let _extracted = w.extract(); // $ target=extract type=_extracted:S3 } } diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index b4f9b04f56f2..ecc2b576abfc 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1927,7 +1927,7 @@ mod overloadable_operators { let i64_mul = 17i64 * 18i64; // $ type=i64_mul:i64 target=mul let i64_div = 19i64 / 20i64; // $ type=i64_div:i64 target=div let i64_rem = 21i64 % 22i64; // $ type=i64_rem:i64 target=rem - let i64_param_add = param_add(1i64, 2i64); // $ target=param_add $ MISSING: type=i64_param_add:i64 + let i64_param_add = param_add(1i64, 2i64); // $ target=param_add $ type=i64_param_add:i64 // Arithmetic assignment operators let mut i64_add_assign = 23i64; @@ -2232,7 +2232,7 @@ mod indexers { let xs: [S; 1] = [S]; let x = xs[0].foo(); // $ target=foo type=x:S target=index - let y = param_index(vec, 0); // $ target=param_index $ MISSING: type=y:S + let y = param_index(vec, 0); // $ target=param_index $ type=y:S analyze_slice(&xs); // $ target=analyze_slice } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index bef7f4c7c150..7fc001f91915 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -111,17 +111,22 @@ inferCertainType | associated_types.rs:237:19:241:5 | { ... } | | {EXTERNAL LOCATION} | () | | associated_types.rs:239:28:239:31 | true | | {EXTERNAL LOCATION} | bool | | associated_types.rs:248:30:248:34 | thing | | associated_types.rs:248:19:248:27 | T | +| associated_types.rs:248:65:250:5 | { ... } | | associated_types.rs:248:19:248:27 | T::Output[GetSet] | | associated_types.rs:249:9:249:13 | thing | | associated_types.rs:248:19:248:27 | T | | associated_types.rs:252:33:252:37 | thing | | associated_types.rs:252:22:252:30 | T | +| associated_types.rs:252:56:254:5 | { ... } | | associated_types.rs:252:22:252:30 | T::Output[GetSet] | | associated_types.rs:253:9:253:13 | thing | | associated_types.rs:252:22:252:30 | T | | associated_types.rs:256:48:256:52 | thing | | associated_types.rs:256:33:256:45 | T | | associated_types.rs:256:91:261:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | +| associated_types.rs:256:91:261:5 | { ... } | T0 | associated_types.rs:256:33:256:45 | T::Output[GetSet] | +| associated_types.rs:256:91:261:5 | { ... } | T1 | associated_types.rs:256:33:256:45 | T::AnotherOutput[AnotherGet] | | associated_types.rs:257:9:260:9 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | associated_types.rs:258:13:258:17 | thing | | associated_types.rs:256:33:256:45 | T | | associated_types.rs:259:13:259:17 | thing | | associated_types.rs:256:33:256:45 | T | | associated_types.rs:268:20:268:24 | SelfParam | | {EXTERNAL LOCATION} | & | | associated_types.rs:268:20:268:24 | SelfParam | TRef | associated_types.rs:1:1:2:21 | Wrapper | | associated_types.rs:268:20:268:24 | SelfParam | TRef.A | associated_types.rs:264:10:264:11 | TI | +| associated_types.rs:268:41:270:9 | { ... } | | associated_types.rs:264:10:264:11 | TI::Output[GetSet] | | associated_types.rs:269:13:269:16 | self | | {EXTERNAL LOCATION} | & | | associated_types.rs:269:13:269:16 | self | TRef | associated_types.rs:1:1:2:21 | Wrapper | | associated_types.rs:269:13:269:16 | self | TRef.A | associated_types.rs:264:10:264:11 | TI | @@ -235,15 +240,22 @@ inferCertainType | associated_types.rs:461:47:463:9 | { ... } | | {EXTERNAL LOCATION} | char | | associated_types.rs:466:33:466:36 | item | | {EXTERNAL LOCATION} | & | | associated_types.rs:466:33:466:36 | item | TRef | associated_types.rs:466:20:466:30 | T | +| associated_types.rs:466:56:468:5 | { ... } | | associated_types.rs:466:20:466:30 | T::Output[GetSet] | | associated_types.rs:467:9:467:12 | item | | {EXTERNAL LOCATION} | & | | associated_types.rs:467:9:467:12 | item | TRef | associated_types.rs:466:20:466:30 | T | | associated_types.rs:470:35:470:38 | item | | {EXTERNAL LOCATION} | & | | associated_types.rs:470:35:470:38 | item | TRef | associated_types.rs:470:21:470:32 | T | +| associated_types.rs:470:45:470:46 | c1 | | associated_types.rs:470:21:470:32 | T::Output[GetSet] | +| associated_types.rs:470:60:470:61 | c2 | | associated_types.rs:470:21:470:32 | T::Output[GetSet] | +| associated_types.rs:470:75:470:76 | c3 | | associated_types.rs:470:21:470:32 | T::Output[GetSet] | | associated_types.rs:470:90:473:5 | { ... } | | {EXTERNAL LOCATION} | () | | associated_types.rs:471:9:471:12 | item | | {EXTERNAL LOCATION} | & | | associated_types.rs:471:9:471:12 | item | TRef | associated_types.rs:470:21:470:32 | T | +| associated_types.rs:471:18:471:19 | c1 | | associated_types.rs:470:21:470:32 | T::Output[GetSet] | | associated_types.rs:472:9:472:12 | item | | {EXTERNAL LOCATION} | & | | associated_types.rs:472:9:472:12 | item | TRef | associated_types.rs:470:21:470:32 | T | +| associated_types.rs:472:25:472:26 | c2 | | associated_types.rs:470:21:470:32 | T::Output[GetSet] | +| associated_types.rs:472:29:472:30 | c3 | | associated_types.rs:470:21:470:32 | T::Output[GetSet] | | associated_types.rs:475:19:484:5 | { ... } | | {EXTERNAL LOCATION} | () | | associated_types.rs:476:28:476:32 | 42i64 | | {EXTERNAL LOCATION} | i64 | | associated_types.rs:479:28:479:31 | true | | {EXTERNAL LOCATION} | bool | @@ -2871,6 +2883,7 @@ inferCertainType | main.rs:1905:44:1905:48 | other | TRef | main.rs:1672:5:1677:5 | Vec2 | | main.rs:1909:26:1909:26 | a | | main.rs:1909:18:1909:23 | T | | main.rs:1909:32:1909:32 | b | | main.rs:1909:18:1909:23 | T | +| main.rs:1909:51:1911:5 | { ... } | | main.rs:1909:18:1909:23 | T::Output[Add] | | main.rs:1910:9:1910:9 | a | | main.rs:1909:18:1909:23 | T | | main.rs:1910:13:1910:13 | b | | main.rs:1909:18:1909:23 | T | | main.rs:1913:16:2044:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -3154,6 +3167,7 @@ inferCertainType | main.rs:2217:17:2217:21 | slice | TRef.TSlice | main.rs:2183:5:2184:13 | S | | main.rs:2220:37:2220:37 | a | | main.rs:2220:20:2220:34 | T | | main.rs:2220:43:2220:43 | b | | {EXTERNAL LOCATION} | usize | +| main.rs:2223:5:2225:5 | { ... } | | main.rs:2220:20:2220:34 | T::Output[Index] | | main.rs:2224:9:2224:9 | a | | main.rs:2220:20:2220:34 | T | | main.rs:2224:11:2224:11 | b | | {EXTERNAL LOCATION} | usize | | main.rs:2227:16:2238:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -3198,6 +3212,7 @@ inferCertainType | main.rs:2292:25:2292:29 | other | | main.rs:2286:5:2286:19 | S | | main.rs:2292:25:2292:29 | other | T | main.rs:2288:10:2288:17 | T | | main.rs:2292:54:2294:9 | { ... } | | main.rs:2286:5:2286:19 | S | +| main.rs:2292:54:2294:9 | { ... } | T | main.rs:2288:10:2288:17 | T::Output[MyAdd] | | main.rs:2293:16:2293:19 | self | | main.rs:2286:5:2286:19 | S | | main.rs:2293:16:2293:19 | self | T | main.rs:2288:10:2288:17 | T | | main.rs:2293:31:2293:35 | other | | main.rs:2286:5:2286:19 | S | @@ -3206,6 +3221,7 @@ inferCertainType | main.rs:2301:19:2301:22 | SelfParam | T | main.rs:2297:10:2297:17 | T | | main.rs:2301:25:2301:29 | other | | main.rs:2297:10:2297:17 | T | | main.rs:2301:51:2303:9 | { ... } | | main.rs:2286:5:2286:19 | S | +| main.rs:2301:51:2303:9 | { ... } | T | main.rs:2297:10:2297:17 | T::Output[MyAdd] | | main.rs:2302:16:2302:19 | self | | main.rs:2286:5:2286:19 | S | | main.rs:2302:16:2302:19 | self | T | main.rs:2297:10:2297:17 | T | | main.rs:2302:31:2302:35 | other | | main.rs:2297:10:2297:17 | T | @@ -3214,6 +3230,7 @@ inferCertainType | main.rs:2313:25:2313:29 | other | | {EXTERNAL LOCATION} | & | | main.rs:2313:25:2313:29 | other | TRef | main.rs:2306:14:2306:14 | T | | main.rs:2313:55:2315:9 | { ... } | | main.rs:2286:5:2286:19 | S | +| main.rs:2313:55:2315:9 | { ... } | T | main.rs:2306:14:2306:14 | T::Output[MyAdd] | | main.rs:2314:16:2314:19 | self | | main.rs:2286:5:2286:19 | S | | main.rs:2314:16:2314:19 | self | T | main.rs:2306:14:2306:14 | T | | main.rs:2314:31:2314:35 | other | | {EXTERNAL LOCATION} | & | @@ -4972,34 +4989,55 @@ inferType | associated_types.rs:240:18:240:30 | s.convert(...) | | {EXTERNAL LOCATION} | i32 | | associated_types.rs:240:28:240:29 | 42 | | {EXTERNAL LOCATION} | i32 | | associated_types.rs:248:30:248:34 | thing | | associated_types.rs:248:19:248:27 | T | +| associated_types.rs:248:65:250:5 | { ... } | | associated_types.rs:248:19:248:27 | T::Output[GetSet] | | associated_types.rs:249:9:249:13 | thing | | associated_types.rs:248:19:248:27 | T | +| associated_types.rs:249:9:249:19 | thing.get() | | associated_types.rs:248:19:248:27 | T::Output[GetSet] | | associated_types.rs:252:33:252:37 | thing | | associated_types.rs:252:22:252:30 | T | +| associated_types.rs:252:56:254:5 | { ... } | | associated_types.rs:252:22:252:30 | T::Output[GetSet] | | associated_types.rs:253:9:253:13 | thing | | associated_types.rs:252:22:252:30 | T | +| associated_types.rs:253:9:253:19 | thing.get() | | associated_types.rs:252:22:252:30 | T::Output[GetSet] | | associated_types.rs:256:48:256:52 | thing | | associated_types.rs:256:33:256:45 | T | | associated_types.rs:256:91:261:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | +| associated_types.rs:256:91:261:5 | { ... } | T0 | associated_types.rs:256:33:256:45 | T::Output[GetSet] | +| associated_types.rs:256:91:261:5 | { ... } | T1 | associated_types.rs:256:33:256:45 | T::AnotherOutput[AnotherGet] | | associated_types.rs:257:9:260:9 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| associated_types.rs:257:9:260:9 | TupleExpr | T0 | associated_types.rs:256:33:256:45 | T::Output[GetSet] | +| associated_types.rs:257:9:260:9 | TupleExpr | T1 | associated_types.rs:256:33:256:45 | T::AnotherOutput[AnotherGet] | | associated_types.rs:258:13:258:17 | thing | | associated_types.rs:256:33:256:45 | T | +| associated_types.rs:258:13:258:23 | thing.get() | | associated_types.rs:256:33:256:45 | T::Output[GetSet] | | associated_types.rs:259:13:259:17 | thing | | associated_types.rs:256:33:256:45 | T | +| associated_types.rs:259:13:259:31 | thing.get_another() | | associated_types.rs:256:33:256:45 | T::AnotherOutput[AnotherGet] | | associated_types.rs:268:20:268:24 | SelfParam | | {EXTERNAL LOCATION} | & | | associated_types.rs:268:20:268:24 | SelfParam | TRef | associated_types.rs:1:1:2:21 | Wrapper | | associated_types.rs:268:20:268:24 | SelfParam | TRef.A | associated_types.rs:264:10:264:11 | TI | +| associated_types.rs:268:41:270:9 | { ... } | | associated_types.rs:264:10:264:11 | TI::Output[GetSet] | | associated_types.rs:269:13:269:16 | self | | {EXTERNAL LOCATION} | & | | associated_types.rs:269:13:269:16 | self | TRef | associated_types.rs:1:1:2:21 | Wrapper | | associated_types.rs:269:13:269:16 | self | TRef.A | associated_types.rs:264:10:264:11 | TI | | associated_types.rs:269:13:269:18 | self.0 | | associated_types.rs:264:10:264:11 | TI | +| associated_types.rs:269:13:269:24 | ... .get() | | associated_types.rs:264:10:264:11 | TI::Output[GetSet] | | associated_types.rs:273:19:283:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:274:13:274:15 | _o1 | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:274:19:274:31 | tp_with_as(...) | | associated_types.rs:16:1:17:10 | S3 | | associated_types.rs:274:30:274:30 | S | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:275:13:275:15 | _o2 | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:275:19:275:34 | tp_without_as(...) | | associated_types.rs:16:1:17:10 | S3 | | associated_types.rs:275:33:275:33 | S | | associated_types.rs:10:1:11:9 | S | | associated_types.rs:276:13:279:9 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| associated_types.rs:276:13:279:9 | TuplePat | T1 | {EXTERNAL LOCATION} | bool | +| associated_types.rs:278:13:278:15 | _o4 | | {EXTERNAL LOCATION} | bool | | associated_types.rs:279:13:279:39 | tp_assoc_from_supertrait(...) | | {EXTERNAL LOCATION} | (T_2) | +| associated_types.rs:279:13:279:39 | tp_assoc_from_supertrait(...) | T1 | {EXTERNAL LOCATION} | bool | | associated_types.rs:279:38:279:38 | S | | associated_types.rs:10:1:11:9 | S | | associated_types.rs:281:13:281:13 | w | | associated_types.rs:1:1:2:21 | Wrapper | | associated_types.rs:281:13:281:13 | w | A | associated_types.rs:10:1:11:9 | S | | associated_types.rs:281:17:281:26 | Wrapper(...) | | associated_types.rs:1:1:2:21 | Wrapper | | associated_types.rs:281:17:281:26 | Wrapper(...) | A | associated_types.rs:10:1:11:9 | S | | associated_types.rs:281:25:281:25 | S | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:282:13:282:22 | _extracted | | associated_types.rs:16:1:17:10 | S3 | | associated_types.rs:282:26:282:26 | w | | associated_types.rs:1:1:2:21 | Wrapper | | associated_types.rs:282:26:282:26 | w | A | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:282:26:282:36 | w.extract() | | associated_types.rs:16:1:17:10 | S3 | | associated_types.rs:290:26:290:26 | x | | associated_types.rs:290:23:290:23 | T | | associated_types.rs:293:5:295:5 | { ... } | | {EXTERNAL LOCATION} | () | | associated_types.rs:294:13:294:14 | _a | | {EXTERNAL LOCATION} | char | @@ -5165,17 +5203,25 @@ inferType | associated_types.rs:462:13:462:30 | ...::default(...) | | {EXTERNAL LOCATION} | char | | associated_types.rs:466:33:466:36 | item | | {EXTERNAL LOCATION} | & | | associated_types.rs:466:33:466:36 | item | TRef | associated_types.rs:466:20:466:30 | T | +| associated_types.rs:466:56:468:5 | { ... } | | associated_types.rs:466:20:466:30 | T::Output[GetSet] | | associated_types.rs:467:9:467:12 | item | | {EXTERNAL LOCATION} | & | | associated_types.rs:467:9:467:12 | item | TRef | associated_types.rs:466:20:466:30 | T | +| associated_types.rs:467:9:467:26 | item.get_content() | | associated_types.rs:466:20:466:30 | T::Output[GetSet] | | associated_types.rs:470:35:470:38 | item | | {EXTERNAL LOCATION} | & | | associated_types.rs:470:35:470:38 | item | TRef | associated_types.rs:470:21:470:32 | T | +| associated_types.rs:470:45:470:46 | c1 | | associated_types.rs:470:21:470:32 | T::Output[GetSet] | +| associated_types.rs:470:60:470:61 | c2 | | associated_types.rs:470:21:470:32 | T::Output[GetSet] | +| associated_types.rs:470:75:470:76 | c3 | | associated_types.rs:470:21:470:32 | T::Output[GetSet] | | associated_types.rs:470:90:473:5 | { ... } | | {EXTERNAL LOCATION} | () | | associated_types.rs:471:9:471:12 | item | | {EXTERNAL LOCATION} | & | | associated_types.rs:471:9:471:12 | item | TRef | associated_types.rs:470:21:470:32 | T | | associated_types.rs:471:9:471:20 | item.set(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:471:18:471:19 | c1 | | associated_types.rs:470:21:470:32 | T::Output[GetSet] | | associated_types.rs:472:9:472:12 | item | | {EXTERNAL LOCATION} | & | | associated_types.rs:472:9:472:12 | item | TRef | associated_types.rs:470:21:470:32 | T | | associated_types.rs:472:9:472:31 | item.insert_two(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:472:25:472:26 | c2 | | associated_types.rs:470:21:470:32 | T::Output[GetSet] | +| associated_types.rs:472:29:472:30 | c3 | | associated_types.rs:470:21:470:32 | T::Output[GetSet] | | associated_types.rs:475:19:484:5 | { ... } | | {EXTERNAL LOCATION} | () | | associated_types.rs:476:13:476:17 | item1 | | associated_types.rs:430:5:430:24 | MyType | | associated_types.rs:476:13:476:17 | item1 | T | {EXTERNAL LOCATION} | i64 | @@ -6004,6 +6050,7 @@ inferType | closure.rs:147:9:147:9 | f | A | {EXTERNAL LOCATION} | Global | | closure.rs:147:9:147:9 | f | T | closure.rs:146:26:146:51 | F | | closure.rs:147:9:147:14 | f(...) | | closure.rs:146:23:146:23 | B | +| closure.rs:147:9:147:14 | f(...) | | {EXTERNAL LOCATION} | F::Output[FnOnce] | | closure.rs:147:11:147:13 | arg | | closure.rs:146:20:146:20 | A | | closure.rs:150:30:150:30 | f | | {EXTERNAL LOCATION} | Box | | closure.rs:150:30:150:30 | f | A | {EXTERNAL LOCATION} | Global | @@ -9108,9 +9155,11 @@ inferType | main.rs:1377:26:1377:32 | "Hello" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1377:26:1377:44 | "Hello".to_string() | | {EXTERNAL LOCATION} | String | | main.rs:1381:13:1381:13 | u | | {EXTERNAL LOCATION} | Result | +| main.rs:1381:13:1381:13 | u | E | {EXTERNAL LOCATION} | ParseIntError | | main.rs:1381:13:1381:13 | u | T | {EXTERNAL LOCATION} | u32 | | main.rs:1381:17:1381:18 | x9 | | {EXTERNAL LOCATION} | String | | main.rs:1381:17:1381:33 | x9.parse() | | {EXTERNAL LOCATION} | Result | +| main.rs:1381:17:1381:33 | x9.parse() | E | {EXTERNAL LOCATION} | ParseIntError | | main.rs:1381:17:1381:33 | x9.parse() | T | {EXTERNAL LOCATION} | u32 | | main.rs:1383:13:1383:20 | my_thing | | {EXTERNAL LOCATION} | & | | main.rs:1383:13:1383:20 | my_thing | TRef | main.rs:1305:5:1308:5 | MyInt | @@ -9560,6 +9609,7 @@ inferType | main.rs:1591:17:1591:20 | self | TRef.TSlice | main.rs:1589:14:1589:23 | T | | main.rs:1591:17:1591:27 | self.get(...) | | {EXTERNAL LOCATION} | Option | | main.rs:1591:17:1591:27 | self.get(...) | T | {EXTERNAL LOCATION} | & | +| main.rs:1591:17:1591:27 | self.get(...) | T.TRef | main.rs:1589:14:1589:23 | T | | main.rs:1591:17:1591:36 | ... .unwrap() | | {EXTERNAL LOCATION} | & | | main.rs:1591:17:1591:36 | ... .unwrap() | TRef | main.rs:1589:14:1589:23 | T | | main.rs:1591:26:1591:26 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -10205,7 +10255,9 @@ inferType | main.rs:1905:44:1905:50 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1909:26:1909:26 | a | | main.rs:1909:18:1909:23 | T | | main.rs:1909:32:1909:32 | b | | main.rs:1909:18:1909:23 | T | +| main.rs:1909:51:1911:5 | { ... } | | main.rs:1909:18:1909:23 | T::Output[Add] | | main.rs:1910:9:1910:9 | a | | main.rs:1909:18:1909:23 | T | +| main.rs:1910:9:1910:13 | ... + ... | | main.rs:1909:18:1909:23 | T::Output[Add] | | main.rs:1910:13:1910:13 | b | | main.rs:1909:18:1909:23 | T | | main.rs:1913:16:2044:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1917:13:1917:18 | i64_eq | | {EXTERNAL LOCATION} | bool | @@ -10258,6 +10310,8 @@ inferType | main.rs:1929:23:1929:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1929:23:1929:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1929:31:1929:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1930:13:1930:25 | i64_param_add | | {EXTERNAL LOCATION} | i64 | +| main.rs:1930:29:1930:49 | param_add(...) | | {EXTERNAL LOCATION} | i64 | | main.rs:1930:39:1930:42 | 1i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1930:45:1930:48 | 2i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1933:17:1933:30 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | @@ -10692,6 +10746,7 @@ inferType | main.rs:2211:56:2213:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:2211:56:2213:9 | { ... } | TRef | main.rs:2207:10:2207:10 | T | | main.rs:2212:13:2212:29 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2212:13:2212:29 | &... | TRef | {EXTERNAL LOCATION} | u8 | | main.rs:2212:13:2212:29 | &... | TRef | main.rs:2207:10:2207:10 | T | | main.rs:2212:14:2212:17 | self | | {EXTERNAL LOCATION} | & | | main.rs:2212:14:2212:17 | self | TRef | main.rs:2192:5:2195:5 | MyVec | @@ -10699,6 +10754,7 @@ inferType | main.rs:2212:14:2212:22 | self.data | | {EXTERNAL LOCATION} | Vec | | main.rs:2212:14:2212:22 | self.data | A | {EXTERNAL LOCATION} | Global | | main.rs:2212:14:2212:22 | self.data | T | main.rs:2207:10:2207:10 | T | +| main.rs:2212:14:2212:29 | ...[index] | | {EXTERNAL LOCATION} | u8 | | main.rs:2212:14:2212:29 | ...[index] | | main.rs:2207:10:2207:10 | T | | main.rs:2212:24:2212:28 | index | | {EXTERNAL LOCATION} | usize | | main.rs:2216:22:2216:26 | slice | | {EXTERNAL LOCATION} | & | @@ -10714,7 +10770,9 @@ inferType | main.rs:2217:23:2217:23 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2220:37:2220:37 | a | | main.rs:2220:20:2220:34 | T | | main.rs:2220:43:2220:43 | b | | {EXTERNAL LOCATION} | usize | +| main.rs:2223:5:2225:5 | { ... } | | main.rs:2220:20:2220:34 | T::Output[Index] | | main.rs:2224:9:2224:9 | a | | main.rs:2220:20:2220:34 | T | +| main.rs:2224:9:2224:12 | a[b] | | main.rs:2220:20:2220:34 | T::Output[Index] | | main.rs:2224:11:2224:11 | b | | {EXTERNAL LOCATION} | usize | | main.rs:2227:16:2238:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2228:17:2228:19 | vec | | main.rs:2192:5:2195:5 | MyVec | @@ -10742,6 +10800,8 @@ inferType | main.rs:2233:17:2233:21 | xs[0] | | main.rs:2183:5:2184:13 | S | | main.rs:2233:17:2233:27 | ... .foo() | | main.rs:2183:5:2184:13 | S | | main.rs:2233:20:2233:20 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2235:13:2235:13 | y | | main.rs:2183:5:2184:13 | S | +| main.rs:2235:17:2235:35 | param_index(...) | | main.rs:2183:5:2184:13 | S | | main.rs:2235:29:2235:31 | vec | | main.rs:2192:5:2195:5 | MyVec | | main.rs:2235:29:2235:31 | vec | T | main.rs:2183:5:2184:13 | S | | main.rs:2235:34:2235:34 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -10793,8 +10853,11 @@ inferType | main.rs:2292:25:2292:29 | other | | main.rs:2286:5:2286:19 | S | | main.rs:2292:25:2292:29 | other | T | main.rs:2288:10:2288:17 | T | | main.rs:2292:54:2294:9 | { ... } | | main.rs:2286:5:2286:19 | S | +| main.rs:2292:54:2294:9 | { ... } | T | main.rs:2288:10:2288:17 | T::Output[MyAdd] | | main.rs:2293:13:2293:39 | S(...) | | main.rs:2286:5:2286:19 | S | +| main.rs:2293:13:2293:39 | S(...) | T | main.rs:2288:10:2288:17 | T::Output[MyAdd] | | main.rs:2293:15:2293:22 | (...) | | main.rs:2288:10:2288:17 | T | +| main.rs:2293:15:2293:38 | ... .my_add(...) | | main.rs:2288:10:2288:17 | T::Output[MyAdd] | | main.rs:2293:16:2293:19 | self | | main.rs:2286:5:2286:19 | S | | main.rs:2293:16:2293:19 | self | T | main.rs:2288:10:2288:17 | T | | main.rs:2293:16:2293:21 | self.0 | | main.rs:2288:10:2288:17 | T | @@ -10805,8 +10868,11 @@ inferType | main.rs:2301:19:2301:22 | SelfParam | T | main.rs:2297:10:2297:17 | T | | main.rs:2301:25:2301:29 | other | | main.rs:2297:10:2297:17 | T | | main.rs:2301:51:2303:9 | { ... } | | main.rs:2286:5:2286:19 | S | +| main.rs:2301:51:2303:9 | { ... } | T | main.rs:2297:10:2297:17 | T::Output[MyAdd] | | main.rs:2302:13:2302:37 | S(...) | | main.rs:2286:5:2286:19 | S | +| main.rs:2302:13:2302:37 | S(...) | T | main.rs:2297:10:2297:17 | T::Output[MyAdd] | | main.rs:2302:15:2302:22 | (...) | | main.rs:2297:10:2297:17 | T | +| main.rs:2302:15:2302:36 | ... .my_add(...) | | main.rs:2297:10:2297:17 | T::Output[MyAdd] | | main.rs:2302:16:2302:19 | self | | main.rs:2286:5:2286:19 | S | | main.rs:2302:16:2302:19 | self | T | main.rs:2297:10:2297:17 | T | | main.rs:2302:16:2302:21 | self.0 | | main.rs:2297:10:2297:17 | T | @@ -10816,8 +10882,11 @@ inferType | main.rs:2313:25:2313:29 | other | | {EXTERNAL LOCATION} | & | | main.rs:2313:25:2313:29 | other | TRef | main.rs:2306:14:2306:14 | T | | main.rs:2313:55:2315:9 | { ... } | | main.rs:2286:5:2286:19 | S | +| main.rs:2313:55:2315:9 | { ... } | T | main.rs:2306:14:2306:14 | T::Output[MyAdd] | | main.rs:2314:13:2314:37 | S(...) | | main.rs:2286:5:2286:19 | S | +| main.rs:2314:13:2314:37 | S(...) | T | main.rs:2306:14:2306:14 | T::Output[MyAdd] | | main.rs:2314:15:2314:22 | (...) | | main.rs:2306:14:2306:14 | T | +| main.rs:2314:15:2314:36 | ... .my_add(...) | | main.rs:2306:14:2306:14 | T::Output[MyAdd] | | main.rs:2314:16:2314:19 | self | | main.rs:2286:5:2286:19 | S | | main.rs:2314:16:2314:19 | self | T | main.rs:2306:14:2306:14 | T | | main.rs:2314:16:2314:21 | self.0 | | main.rs:2306:14:2306:14 | T | @@ -10892,6 +10961,7 @@ inferType | main.rs:2402:9:2402:15 | S(...) | | main.rs:2286:5:2286:19 | S | | main.rs:2402:9:2402:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | | main.rs:2402:9:2402:31 | ... .my_add(...) | | main.rs:2286:5:2286:19 | S | +| main.rs:2402:9:2402:31 | ... .my_add(...) | T | {EXTERNAL LOCATION} | i64 | | main.rs:2402:11:2402:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2402:24:2402:30 | S(...) | | main.rs:2286:5:2286:19 | S | | main.rs:2402:24:2402:30 | S(...) | T | {EXTERNAL LOCATION} | i64 | @@ -10903,6 +10973,7 @@ inferType | main.rs:2404:9:2404:15 | S(...) | | main.rs:2286:5:2286:19 | S | | main.rs:2404:9:2404:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | | main.rs:2404:9:2404:29 | ... .my_add(...) | | main.rs:2286:5:2286:19 | S | +| main.rs:2404:9:2404:29 | ... .my_add(...) | T | {EXTERNAL LOCATION} | i64 | | main.rs:2404:11:2404:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2404:24:2404:28 | &3i64 | | {EXTERNAL LOCATION} | & | | main.rs:2404:24:2404:28 | &3i64 | TRef | {EXTERNAL LOCATION} | i64 | @@ -11063,6 +11134,7 @@ inferType | main.rs:2457:19:2457:26 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | | main.rs:2457:28:2457:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2458:9:2458:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2458:13:2458:13 | s | | {EXTERNAL LOCATION} | I::Item[Iterator] | | main.rs:2458:13:2458:13 | s | | {EXTERNAL LOCATION} | &mut | | main.rs:2458:13:2458:13 | s | TRefMut | {EXTERNAL LOCATION} | & | | main.rs:2458:13:2458:13 | s | TRefMut.TRef | {EXTERNAL LOCATION} | str |