diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 54df4a3ca0c4..73be818e2cea 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -224,6 +224,9 @@ abstract class ItemNode extends Locatable { pragma[nomagic] ItemNode getImmediateParent() { this = result.getADescendant() } + /** Gets a child item of this item, if any. */ + ItemNode getAChild() { this = result.getImmediateParent() } + /** Gets the immediately enclosing module (or source file) of this item. */ pragma[nomagic] ModuleLikeNode getImmediateParentModule() { @@ -300,10 +303,13 @@ abstract class ItemNode extends Locatable { typeImplEdge(this, _, name, kind, result, useOpt) or // trait items with default implementations made available in an implementation - exists(ImplItemNodeImpl impl, ItemNode trait | + exists(ImplItemNodeImpl impl, TraitItemNode trait | this = impl and trait = impl.resolveTraitTyCand() and result = trait.getASuccessor(name, kind, useOpt) and + // do not inherit default implementations from super traits; those are inherited by + // their `impl` blocks + result = trait.getAssocItem(name) and result.(AssocItemNode).hasImplementation() and kind.isExternalOrBoth() and not impl.hasAssocItem(name) @@ -363,8 +369,14 @@ abstract class ItemNode extends Locatable { this instanceof SourceFile and builtin(name, result) or - name = "Self" and - this = result.(ImplOrTraitItemNode).getAnItemInSelfScope() + exists(ImplOrTraitItemNode i | + name = "Self" and + this = i.getAnItemInSelfScope() + | + result = i.(Trait) + or + result = i.(ImplItemNodeImpl).resolveSelfTyCand() + ) or name = "crate" and this = result.(CrateItemNode).getASourceFile() @@ -695,7 +707,7 @@ abstract class ImplOrTraitItemNode extends ItemNode { Path getASelfPath() { Stages::PathResolutionStage::ref() and isUnqualifiedSelfPath(result) and - this = unqualifiedPathLookup(result, _, _) + result = this.getAnItemInSelfScope().getADescendant() } /** Gets an associated item belonging to this trait or `impl` block. */ @@ -921,7 +933,7 @@ private class ImplItemNodeImpl extends ImplItemNode { result = this.resolveSelfTyBuiltin() } - TraitItemNode resolveTraitTyCand() { result = resolvePathCand(this.getTraitPath()) } + TraitItemNodeImpl resolveTraitTyCand() { result = resolvePathCand(this.getTraitPath()) } } private class StructItemNode extends TypeItemNode, ParameterizableItemNode instanceof Struct { @@ -1773,15 +1785,7 @@ private module DollarCrateResolution { pragma[nomagic] private ItemNode resolvePathCand0(RelevantPath path, Namespace ns) { - exists(ItemNode res | - res = unqualifiedPathLookup(path, ns, _) and - if - not any(RelevantPath parent).getQualifier() = path and - isUnqualifiedSelfPath(path) and - res instanceof ImplItemNode - then result = res.(ImplItemNodeImpl).resolveSelfTyCand() - else result = res - ) + result = unqualifiedPathLookup(path, ns, _) or DollarCrateResolution::resolveDollarCrate(path, result) and ns = result.getNamespace() diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index ccf5c7543639..4d10027b4acf 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -382,6 +382,8 @@ TypeParamTypeParameter getPtrTypeParameter() { /** A type parameter. */ abstract class TypeParameter extends Type { override TypeParameter getPositionalTypeParameter(int i) { none() } + + abstract ItemNode getDeclaringItem(); } private class RawTypeParameter = @type_param or @trait or @type_alias or @impl_trait_type_repr; @@ -400,6 +402,8 @@ class TypeParamTypeParameter extends TypeParameter, TTypeParamTypeParameter { TypeParam getTypeParam() { result = typeParam } + override ItemNode getDeclaringItem() { result.getTypeParam(_) = typeParam } + override string toString() { result = typeParam.toString() } override Location getLocation() { result = typeParam.getLocation() } @@ -433,6 +437,8 @@ class AssociatedTypeTypeParameter extends TypeParameter, TAssociatedTypeTypePara /** Gets the trait that contains this associated type declaration. */ TraitItemNode getTrait() { result.getAnAssocItem() = typeAlias } + override ItemNode getDeclaringItem() { result = this.getTrait() } + override string toString() { result = typeAlias.getName().getText() } override Location getLocation() { result = typeAlias.getLocation() } @@ -465,6 +471,8 @@ class DynTraitTypeParameter extends TypeParameter, TDynTraitTypeParameter { result = [this.getTypeParam().toString(), this.getTypeAlias().getName().toString()] } + override ItemNode getDeclaringItem() { none() } + override string toString() { result = "dyn(" + this.toStringInner() + ")" } override Location getLocation() { result = n.getLocation() } @@ -480,6 +488,8 @@ class ImplTraitTypeParameter extends TypeParameter, TImplTraitTypeParameter { ImplTraitTypeRepr getImplTraitTypeRepr() { result = implTrait } + override ItemNode getDeclaringItem() { none() } + override string toString() { result = "impl(" + typeParam.toString() + ")" } override Location getLocation() { result = typeParam.getLocation() } @@ -499,6 +509,8 @@ class SelfTypeParameter extends TypeParameter, TSelfTypeParameter { Trait getTrait() { result = trait } + override ItemNode getDeclaringItem() { result = trait } + override string toString() { result = "Self [" + trait.toString() + "]" } override Location getLocation() { result = trait.getLocation() } @@ -526,6 +538,8 @@ class ImplTraitTypeTypeParameter extends ImplTraitType, TypeParameter { ImplTraitTypeTypeParameter() { impl = function.getAParam().getTypeRepr() } + override ItemNode getDeclaringItem() { none() } + override Function getFunction() { result = function } override TypeParameter getPositionalTypeParameter(int i) { none() } diff --git a/rust/ql/lib/codeql/rust/internal/TypeInferenceConsistency.qll b/rust/ql/lib/codeql/rust/internal/TypeInferenceConsistency.qll index 16eaff92bb6c..11ad9bef2a21 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInferenceConsistency.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInferenceConsistency.qll @@ -11,7 +11,14 @@ import TypeInference::Consistency query predicate illFormedTypeMention(TypeMention tm) { Consistency::illFormedTypeMention(tm) and - not tm instanceof PathTypeReprMention and // avoid overlap with `PathTypeMention` + // avoid overlap with `PathTypeMention` + not tm instanceof PathTypeReprMention and + // known limitation for type mentions that would mention an escaping type parameter + not tm = + any(PathTypeMention ptm | + exists(ptm.resolvePathTypeAt(TypePath::nil())) and + not exists(ptm.resolveType()) + ) and // Only include inconsistencies in the source, as we otherwise get // inconsistencies from library code in every project. tm.fromSource() diff --git a/rust/ql/lib/codeql/rust/internal/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/TypeMention.qll index 90de48035e38..a88f3e20a964 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeMention.qll @@ -77,7 +77,19 @@ class SliceTypeReprMention extends TypeMention instanceof SliceTypeRepr { } } -abstract class PathTypeMention extends TypeMention, Path { } +abstract class PathTypeMention extends TypeMention, Path { + abstract Type resolvePathTypeAt(TypePath typePath); + + final override Type resolveTypeAt(TypePath typePath) { + result = this.resolvePathTypeAt(typePath) and + ( + not result instanceof TypeParameter + or + // Prevent type parameters from escaping their scope + this = result.(TypeParameter).getDeclaringItem().getAChild*().getADescendant() + ) + } +} class AliasPathTypeMention extends PathTypeMention { TypeAlias resolved; @@ -94,7 +106,7 @@ class AliasPathTypeMention extends PathTypeMention { * Holds if this path resolved to a type alias with a rhs. that has the * resulting type at `typePath`. */ - override Type resolveTypeAt(TypePath typePath) { + override Type resolvePathTypeAt(TypePath typePath) { result = rhs.resolveTypeAt(typePath) and not result = pathGetTypeParameter(resolved, _) or @@ -275,7 +287,7 @@ class NonAliasPathTypeMention extends PathTypeMention { result = TAssociatedTypeTypeParameter(resolved) } - override Type resolveTypeAt(TypePath typePath) { + override Type resolvePathTypeAt(TypePath typePath) { typePath.isEmpty() and result = this.resolveRootType() or @@ -307,7 +319,9 @@ class ImplSelfMention extends PathTypeMention { ImplSelfMention() { this = impl.getASelfPath() } - override Type resolveTypeAt(TypePath typePath) { result = resolveImplSelfTypeAt(impl, typePath) } + override Type resolvePathTypeAt(TypePath typePath) { + result = resolveImplSelfTypeAt(impl, typePath) + } } class PathTypeReprMention extends TypeMention, PathTypeRepr { diff --git a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected index 6b5461f37194..10da6bb9c375 100644 --- a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected @@ -2,5 +2,5 @@ multipleCallTargets | main.rs:126:9:126:11 | f(...) | | main.rs:366:9:368:16 | ...::f(...) | | main.rs:369:9:371:16 | ...::f(...) | -| main.rs:448:9:452:16 | ...::f(...) | -| main.rs:453:9:457:16 | ...::f(...) | +| main.rs:450:9:454:16 | ...::f(...) | +| main.rs:455:9:459:16 | ...::f(...) | diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index 9e7ebf5fb173..44fc999e25e5 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -381,8 +381,9 @@ mod m16 { > { fn f(&self) -> T; // $ item=I84 - fn g(&self) -> T // $ item=I84 - ; // I85 + fn g(&self) -> T {// $ item=I84 + self.f() // $ item=f + } // I85 fn h(&self) -> T { // $ item=I84 Self::g(&self); // $ item=I85 @@ -436,8 +437,9 @@ mod m16 { > // $ item=I89 for S { // $ item=I90 fn f(&self) -> S { // $ item=I90 + Self::g(&self); // $ item=I92 println!("m16::>::f"); // $ item=println - Self::c // $ MISSING: item=I95 + Self::c // $ item=I95 } // I93 } @@ -466,6 +468,27 @@ mod m16 { > // $ item=I86 >::c; // $ MISSING: item=I95 } // I83 + + trait Trait3 { + fn f(&self); + } + + trait Trait4 { + fn g(&self); + } + + struct S2; + + impl Trait3 for S2 { // $ item=Trait3 item=S2 + fn f(&self) { } // S2asTrait3::f + } + + impl Trait4 for S2 { // $ item=Trait4 item=S2 + fn g(&self) { + Self::f(&self); // $ item=S2asTrait3::f + S2::f(&self); // $ item=S2asTrait3::f + } + } } mod trait_visibility { diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 0ff48d11e8db..d65458ca4073 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -18,20 +18,20 @@ mod | main.rs:291:1:304:1 | mod m13 | | main.rs:295:5:303:5 | mod m14 | | main.rs:306:1:375:1 | mod m15 | -| main.rs:377:1:469:1 | mod m16 | -| main.rs:471:1:521:1 | mod trait_visibility | -| main.rs:472:5:494:5 | mod m | -| main.rs:523:1:553:1 | mod m17 | -| main.rs:555:1:573:1 | mod m18 | -| main.rs:560:5:572:5 | mod m19 | -| main.rs:565:9:571:9 | mod m20 | -| main.rs:575:1:600:1 | mod m21 | -| main.rs:576:5:582:5 | mod m22 | -| main.rs:584:5:599:5 | mod m33 | -| main.rs:602:1:627:1 | mod m23 | -| main.rs:629:1:697:1 | mod m24 | -| main.rs:714:1:766:1 | mod associated_types | -| main.rs:772:1:791:1 | mod impl_with_attribute_macro | +| main.rs:377:1:492:1 | mod m16 | +| main.rs:494:1:544:1 | mod trait_visibility | +| main.rs:495:5:517:5 | mod m | +| main.rs:546:1:576:1 | mod m17 | +| main.rs:578:1:596:1 | mod m18 | +| main.rs:583:5:595:5 | mod m19 | +| main.rs:588:9:594:9 | mod m20 | +| main.rs:598:1:623:1 | mod m21 | +| main.rs:599:5:605:5 | mod m22 | +| main.rs:607:5:622:5 | mod m33 | +| main.rs:625:1:650:1 | mod m23 | +| main.rs:652:1:720:1 | mod m24 | +| main.rs:737:1:789:1 | mod associated_types | +| main.rs:795:1:814:1 | mod impl_with_attribute_macro | | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:20:1:20:12 | mod my3 | | my2/mod.rs:22:1:23:10 | mod mymod | @@ -72,7 +72,7 @@ resolvePath | main.rs:37:17:37:24 | ...::f | main.rs:26:9:28:9 | fn f | | main.rs:39:17:39:23 | println | {EXTERNAL LOCATION} | MacroRules | | main.rs:40:17:40:17 | f | main.rs:26:9:28:9 | fn f | -| main.rs:47:9:47:13 | super | main.rs:1:1:829:2 | SourceFile | +| main.rs:47:9:47:13 | super | main.rs:1:1:852:2 | SourceFile | | main.rs:47:9:47:17 | ...::m1 | main.rs:20:1:44:1 | mod m1 | | main.rs:47:9:47:21 | ...::m2 | main.rs:25:5:43:5 | mod m2 | | main.rs:47:9:47:24 | ...::g | main.rs:30:9:34:9 | fn g | @@ -87,7 +87,7 @@ resolvePath | main.rs:68:17:68:19 | Foo | main.rs:66:9:66:21 | struct Foo | | main.rs:71:13:71:15 | Foo | main.rs:60:5:60:17 | struct Foo | | main.rs:73:5:73:5 | f | main.rs:62:5:69:5 | fn f | -| main.rs:75:5:75:8 | self | main.rs:1:1:829:2 | SourceFile | +| main.rs:75:5:75:8 | self | main.rs:1:1:852:2 | SourceFile | | main.rs:75:5:75:11 | ...::i | main.rs:78:1:90:1 | fn i | | main.rs:79:5:79:11 | println | {EXTERNAL LOCATION} | MacroRules | | main.rs:81:13:81:15 | Foo | main.rs:55:1:55:13 | struct Foo | @@ -109,7 +109,7 @@ resolvePath | main.rs:112:9:112:15 | println | {EXTERNAL LOCATION} | MacroRules | | main.rs:118:9:118:15 | println | {EXTERNAL LOCATION} | MacroRules | | main.rs:122:9:122:15 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:125:13:125:17 | super | main.rs:1:1:829:2 | SourceFile | +| main.rs:125:13:125:17 | super | main.rs:1:1:852:2 | SourceFile | | main.rs:125:13:125:21 | ...::m5 | main.rs:110:1:114:1 | mod m5 | | main.rs:126:9:126:9 | f | main.rs:111:5:113:5 | fn f | | main.rs:126:9:126:9 | f | main.rs:117:5:119:5 | fn f | @@ -132,7 +132,7 @@ resolvePath | main.rs:169:22:169:29 | MyStruct | main.rs:162:5:162:22 | struct MyStruct | | main.rs:171:13:171:19 | println | {EXTERNAL LOCATION} | MacroRules | | main.rs:172:13:172:13 | f | main.rs:164:5:166:5 | fn f | -| main.rs:173:13:173:16 | Self | main.rs:168:5:179:5 | impl MyTrait for MyStruct { ... } | +| main.rs:173:13:173:16 | Self | main.rs:162:5:162:22 | struct MyStruct | | main.rs:173:13:173:19 | ...::g | main.rs:176:9:178:9 | fn g | | main.rs:177:13:177:19 | println | {EXTERNAL LOCATION} | MacroRules | | main.rs:182:10:182:17 | MyStruct | main.rs:162:5:162:22 | struct MyStruct | @@ -196,7 +196,7 @@ resolvePath | main.rs:341:10:341:15 | Trait1 | main.rs:307:5:311:5 | trait Trait1 | | main.rs:342:11:342:11 | S | main.rs:338:5:338:13 | struct S | | main.rs:344:13:344:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:345:13:345:16 | Self | main.rs:340:5:352:5 | impl Trait1 for S { ... } | +| main.rs:345:13:345:16 | Self | main.rs:338:5:338:13 | struct S | | main.rs:345:13:345:19 | ...::g | main.rs:349:9:351:9 | fn g | | main.rs:350:13:350:19 | println | {EXTERNAL LOCATION} | MacroRules | | main.rs:355:10:355:15 | Trait2 | main.rs:313:5:321:5 | trait Trait2 | @@ -212,262 +212,273 @@ resolvePath | main.rs:372:9:372:12 | ...::g | main.rs:349:9:351:9 | fn g | | main.rs:382:24:382:24 | T | main.rs:380:7:380:7 | T | | main.rs:384:24:384:24 | T | main.rs:380:7:380:7 | T | -| main.rs:387:24:387:24 | T | main.rs:380:7:380:7 | T | -| main.rs:388:13:388:16 | Self | main.rs:378:5:394:5 | trait Trait1 | -| main.rs:388:13:388:19 | ...::g | main.rs:384:9:385:9 | fn g | -| main.rs:392:18:392:18 | T | main.rs:380:7:380:7 | T | -| main.rs:400:9:402:9 | Trait1::<...> | main.rs:378:5:394:5 | trait Trait1 | -| main.rs:401:11:401:11 | T | main.rs:398:7:398:7 | T | -| main.rs:403:24:403:24 | T | main.rs:398:7:398:7 | T | -| main.rs:404:13:404:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:405:13:405:16 | Self | main.rs:396:5:409:5 | trait Trait2 | -| main.rs:405:13:405:19 | ...::g | main.rs:384:9:385:9 | fn g | -| main.rs:407:13:407:16 | Self | main.rs:396:5:409:5 | trait Trait2 | -| main.rs:407:13:407:19 | ...::c | main.rs:392:9:393:9 | Const | -| main.rs:414:10:416:5 | Trait1::<...> | main.rs:378:5:394:5 | trait Trait1 | -| main.rs:415:7:415:7 | S | main.rs:411:5:411:13 | struct S | -| main.rs:417:11:417:11 | S | main.rs:411:5:411:13 | struct S | -| main.rs:418:24:418:24 | S | main.rs:411:5:411:13 | struct S | -| main.rs:419:13:419:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:420:13:420:16 | Self | main.rs:413:5:431:5 | impl Trait1::<...> for S { ... } | -| main.rs:420:13:420:19 | ...::g | main.rs:424:9:427:9 | fn g | -| main.rs:424:24:424:24 | S | main.rs:411:5:411:13 | struct S | -| main.rs:425:13:425:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:426:13:426:16 | Self | main.rs:413:5:431:5 | impl Trait1::<...> for S { ... } | -| main.rs:426:13:426:19 | ...::c | main.rs:429:9:430:9 | Const | -| main.rs:429:18:429:18 | S | main.rs:411:5:411:13 | struct S | -| main.rs:429:22:429:22 | S | main.rs:411:5:411:13 | struct S | -| main.rs:434:10:436:5 | Trait2::<...> | main.rs:396:5:409:5 | trait Trait2 | -| main.rs:435:7:435:7 | S | main.rs:411:5:411:13 | struct S | -| main.rs:437:11:437:11 | S | main.rs:411:5:411:13 | struct S | -| main.rs:438:24:438:24 | S | main.rs:411:5:411:13 | struct S | -| main.rs:439:13:439:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:440:13:440:16 | Self | main.rs:433:5:442:5 | impl Trait2::<...> for S { ... } | -| main.rs:446:9:446:15 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:447:17:447:17 | S | main.rs:411:5:411:13 | struct S | -| main.rs:448:10:448:10 | S | main.rs:411:5:411:13 | struct S | -| main.rs:449:14:451:11 | Trait1::<...> | main.rs:378:5:394:5 | trait Trait1 | -| main.rs:450:13:450:13 | S | main.rs:411:5:411:13 | struct S | -| main.rs:453:10:453:10 | S | main.rs:411:5:411:13 | struct S | -| main.rs:454:14:456:11 | Trait2::<...> | main.rs:396:5:409:5 | trait Trait2 | -| main.rs:455:13:455:13 | S | main.rs:411:5:411:13 | struct S | -| main.rs:458:9:458:9 | S | main.rs:411:5:411:13 | struct S | -| main.rs:458:9:458:12 | ...::g | main.rs:424:9:427:9 | fn g | -| main.rs:460:9:460:9 | S | main.rs:411:5:411:13 | struct S | -| main.rs:460:9:460:12 | ...::h | main.rs:387:9:390:9 | fn h | -| main.rs:462:9:462:9 | S | main.rs:411:5:411:13 | struct S | -| main.rs:462:9:462:12 | ...::c | main.rs:429:9:430:9 | Const | -| main.rs:463:10:463:10 | S | main.rs:411:5:411:13 | struct S | -| main.rs:464:14:466:11 | Trait1::<...> | main.rs:378:5:394:5 | trait Trait1 | -| main.rs:465:13:465:13 | S | main.rs:411:5:411:13 | struct S | -| main.rs:483:14:483:16 | Foo | main.rs:473:9:475:9 | trait Foo | -| main.rs:483:22:483:22 | X | main.rs:481:9:481:21 | struct X | -| main.rs:485:17:485:23 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:489:14:489:16 | Bar | main.rs:477:9:479:9 | trait Bar | -| main.rs:489:22:489:22 | X | main.rs:481:9:481:21 | struct X | -| main.rs:491:17:491:23 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:496:9:496:9 | m | main.rs:472:5:494:5 | mod m | -| main.rs:496:9:496:12 | ...::X | main.rs:481:9:481:21 | struct X | -| main.rs:499:17:499:17 | X | main.rs:481:9:481:21 | struct X | -| main.rs:502:17:502:17 | m | main.rs:472:5:494:5 | mod m | -| main.rs:502:17:502:22 | ...::Foo | main.rs:473:9:475:9 | trait Foo | -| main.rs:503:13:503:13 | X | main.rs:481:9:481:21 | struct X | -| main.rs:503:13:503:23 | ...::a_method | main.rs:483:26:486:13 | fn a_method | -| main.rs:507:17:507:17 | m | main.rs:472:5:494:5 | mod m | -| main.rs:507:17:507:22 | ...::Bar | main.rs:477:9:479:9 | trait Bar | -| main.rs:508:13:508:13 | X | main.rs:481:9:481:21 | struct X | -| main.rs:508:13:508:23 | ...::a_method | main.rs:489:26:492:13 | fn a_method | -| main.rs:512:17:512:17 | m | main.rs:472:5:494:5 | mod m | -| main.rs:512:17:512:22 | ...::Bar | main.rs:477:9:479:9 | trait Bar | -| main.rs:513:13:513:13 | X | main.rs:481:9:481:21 | struct X | -| main.rs:513:13:513:23 | ...::a_method | main.rs:489:26:492:13 | fn a_method | -| main.rs:518:13:518:13 | m | main.rs:472:5:494:5 | mod m | -| main.rs:518:13:518:18 | ...::Bar | main.rs:477:9:479:9 | trait Bar | -| main.rs:518:13:518:28 | ...::a_method | main.rs:478:13:478:31 | fn a_method | -| main.rs:531:10:531:16 | MyTrait | main.rs:524:5:526:5 | trait MyTrait | -| main.rs:532:9:532:9 | S | main.rs:528:5:528:13 | struct S | -| main.rs:534:13:534:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:540:7:540:13 | MyTrait | main.rs:524:5:526:5 | trait MyTrait | -| main.rs:541:10:541:10 | T | main.rs:539:10:539:10 | T | -| main.rs:543:9:543:9 | T | main.rs:539:10:539:10 | T | -| main.rs:543:9:543:12 | ...::f | main.rs:525:9:525:20 | fn f | -| main.rs:544:9:544:15 | MyTrait | main.rs:524:5:526:5 | trait MyTrait | -| main.rs:544:9:544:18 | ...::f | main.rs:525:9:525:20 | fn f | -| main.rs:549:9:549:9 | g | main.rs:538:5:545:5 | fn g | -| main.rs:550:11:550:11 | S | main.rs:528:5:528:13 | struct S | -| main.rs:557:9:557:15 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:562:13:562:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:567:17:567:23 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:568:17:568:21 | super | main.rs:560:5:572:5 | mod m19 | -| main.rs:568:17:568:24 | ...::f | main.rs:561:9:563:9 | fn f | -| main.rs:569:17:569:21 | super | main.rs:560:5:572:5 | mod m19 | -| main.rs:569:17:569:28 | ...::super | main.rs:555:1:573:1 | mod m18 | -| main.rs:569:17:569:31 | ...::f | main.rs:556:5:558:5 | fn f | -| main.rs:586:13:586:17 | super | main.rs:575:1:600:1 | mod m21 | -| main.rs:586:13:586:22 | ...::m22 | main.rs:576:5:582:5 | mod m22 | -| main.rs:586:13:586:30 | ...::MyEnum | main.rs:577:9:579:9 | enum MyEnum | -| main.rs:587:13:587:16 | self | main.rs:577:9:579:9 | enum MyEnum | -| main.rs:591:13:591:17 | super | main.rs:575:1:600:1 | mod m21 | -| main.rs:591:13:591:22 | ...::m22 | main.rs:576:5:582:5 | mod m22 | -| main.rs:591:13:591:32 | ...::MyStruct | main.rs:581:9:581:28 | struct MyStruct | -| main.rs:592:13:592:16 | self | main.rs:581:9:581:28 | struct MyStruct | -| main.rs:596:21:596:26 | MyEnum | main.rs:577:9:579:9 | enum MyEnum | -| main.rs:596:21:596:29 | ...::A | main.rs:578:13:578:13 | A | -| main.rs:597:21:597:28 | MyStruct | main.rs:581:9:581:28 | struct MyStruct | -| main.rs:613:10:615:5 | Trait1::<...> | main.rs:603:5:608:5 | trait Trait1 | -| main.rs:614:7:614:10 | Self | main.rs:610:5:610:13 | struct S | -| main.rs:616:11:616:11 | S | main.rs:610:5:610:13 | struct S | -| main.rs:618:13:618:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:624:17:624:17 | S | main.rs:610:5:610:13 | struct S | -| main.rs:640:15:640:15 | T | main.rs:639:26:639:26 | T | -| main.rs:645:9:645:24 | GenericStruct::<...> | main.rs:638:5:641:5 | struct GenericStruct | -| main.rs:645:23:645:23 | T | main.rs:644:10:644:10 | T | -| main.rs:647:9:647:9 | T | main.rs:644:10:644:10 | T | -| main.rs:647:12:647:17 | TraitA | main.rs:630:5:632:5 | trait TraitA | -| main.rs:656:9:656:24 | GenericStruct::<...> | main.rs:638:5:641:5 | struct GenericStruct | -| main.rs:656:23:656:23 | T | main.rs:655:10:655:10 | T | -| main.rs:658:9:658:9 | T | main.rs:655:10:655:10 | T | -| main.rs:658:12:658:17 | TraitB | main.rs:634:5:636:5 | trait TraitB | -| main.rs:659:9:659:9 | T | main.rs:655:10:655:10 | T | -| main.rs:659:12:659:17 | TraitA | main.rs:630:5:632:5 | trait TraitA | -| main.rs:670:10:670:15 | TraitA | main.rs:630:5:632:5 | trait TraitA | -| main.rs:670:21:670:31 | Implementor | main.rs:667:5:667:23 | struct Implementor | -| main.rs:672:13:672:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:677:10:677:15 | TraitB | main.rs:634:5:636:5 | trait TraitB | -| main.rs:677:21:677:31 | Implementor | main.rs:667:5:667:23 | struct Implementor | -| main.rs:679:13:679:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:685:24:685:34 | Implementor | main.rs:667:5:667:23 | struct Implementor | -| main.rs:686:23:686:35 | GenericStruct | main.rs:638:5:641:5 | struct GenericStruct | -| main.rs:692:9:692:36 | GenericStruct::<...> | main.rs:638:5:641:5 | struct GenericStruct | -| main.rs:692:9:692:50 | ...::call_trait_a | main.rs:649:9:651:9 | fn call_trait_a | -| main.rs:692:25:692:35 | Implementor | main.rs:667:5:667:23 | struct Implementor | -| main.rs:695:9:695:36 | GenericStruct::<...> | main.rs:638:5:641:5 | struct GenericStruct | -| main.rs:695:9:695:47 | ...::call_both | main.rs:661:9:664:9 | fn call_both | -| main.rs:695:25:695:35 | Implementor | main.rs:667:5:667:23 | struct Implementor | -| main.rs:701:3:701:12 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:701:3:701:24 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix | -| main.rs:705:6:705:12 | AStruct | main.rs:704:1:704:17 | struct AStruct | -| main.rs:707:7:707:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:707:7:707:28 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix | -| main.rs:710:7:710:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:710:7:710:28 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix | -| main.rs:715:9:715:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:715:9:715:19 | ...::marker | {EXTERNAL LOCATION} | mod marker | -| main.rs:715:9:715:32 | ...::PhantomData | {EXTERNAL LOCATION} | struct PhantomData | -| main.rs:716:9:716:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:716:9:716:19 | ...::result | {EXTERNAL LOCATION} | mod result | -| main.rs:716:9:716:27 | ...::Result | {EXTERNAL LOCATION} | enum Result | -| main.rs:724:19:724:22 | Self | main.rs:718:5:726:5 | trait Reduce | -| main.rs:724:19:724:29 | ...::Input | main.rs:719:9:719:19 | type Input | -| main.rs:725:14:725:46 | Result::<...> | {EXTERNAL LOCATION} | enum Result | -| main.rs:725:21:725:24 | Self | main.rs:718:5:726:5 | trait Reduce | -| main.rs:725:21:725:32 | ...::Output | main.rs:720:21:721:20 | type Output | -| main.rs:725:35:725:38 | Self | main.rs:718:5:726:5 | trait Reduce | -| main.rs:725:35:725:45 | ...::Error | main.rs:719:21:720:19 | type Error | -| main.rs:729:17:729:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | -| main.rs:729:29:729:33 | Input | main.rs:728:19:728:23 | Input | -| main.rs:730:17:730:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | -| main.rs:730:29:730:33 | Error | main.rs:728:26:728:30 | Error | -| main.rs:737:11:737:16 | Reduce | main.rs:718:5:726:5 | trait Reduce | -| main.rs:738:13:741:9 | MyImpl::<...> | main.rs:728:5:731:5 | struct MyImpl | -| main.rs:739:13:739:17 | Input | main.rs:735:13:735:17 | Input | -| main.rs:740:13:740:17 | Error | main.rs:736:13:736:17 | Error | -| main.rs:743:22:746:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | -| main.rs:744:13:744:17 | Input | main.rs:735:13:735:17 | Input | -| main.rs:745:13:745:16 | Self | main.rs:733:5:765:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:745:13:745:23 | ...::Error | main.rs:747:11:751:9 | type Error | -| main.rs:748:22:750:9 | Option::<...> | {EXTERNAL LOCATION} | enum Option | -| main.rs:749:11:749:15 | Error | main.rs:736:13:736:17 | Error | -| main.rs:753:13:753:17 | Input | main.rs:735:13:735:17 | Input | -| main.rs:758:19:758:22 | Self | main.rs:733:5:765:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:758:19:758:29 | ...::Input | main.rs:743:9:747:9 | type Input | -| main.rs:759:14:762:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | -| main.rs:760:13:760:16 | Self | main.rs:733:5:765:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:760:13:760:24 | ...::Output | main.rs:751:11:754:9 | type Output | -| main.rs:761:13:761:16 | Self | main.rs:733:5:765:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:761:13:761:23 | ...::Error | main.rs:747:11:751:9 | type Error | -| main.rs:768:5:768:7 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:768:11:768:14 | self | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:770:15:770:17 | ztd | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:770:15:770:25 | ...::string | {EXTERNAL LOCATION} | mod string | -| main.rs:770:15:770:33 | ...::String | {EXTERNAL LOCATION} | struct String | -| main.rs:780:7:780:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:780:7:780:26 | ...::identity | proc_macro.rs:15:1:18:1 | fn identity | -| main.rs:781:10:781:15 | ATrait | main.rs:776:5:778:5 | trait ATrait | -| main.rs:781:21:781:23 | i64 | {EXTERNAL LOCATION} | struct i64 | -| main.rs:783:11:783:13 | i64 | {EXTERNAL LOCATION} | struct i64 | -| main.rs:789:17:789:19 | Foo | main.rs:774:5:774:15 | struct Foo | -| main.rs:794:5:794:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:794:5:794:14 | ...::nested | my.rs:1:1:1:15 | mod nested | -| main.rs:794:5:794:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | -| main.rs:794:5:794:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | -| main.rs:794:5:794:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | -| main.rs:795:5:795:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:795:5:795:9 | ...::f | my.rs:5:1:7:1 | fn f | -| main.rs:796:5:796:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | -| main.rs:796:5:796:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | -| main.rs:796:5:796:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | -| main.rs:796:5:796:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:797:5:797:5 | f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:798:5:798:5 | g | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:799:5:799:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:799:5:799:12 | ...::h | main.rs:57:1:76:1 | fn h | -| main.rs:800:5:800:6 | m1 | main.rs:20:1:44:1 | mod m1 | -| main.rs:800:5:800:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 | -| main.rs:800:5:800:13 | ...::g | main.rs:30:9:34:9 | fn g | -| main.rs:801:5:801:6 | m1 | main.rs:20:1:44:1 | mod m1 | -| main.rs:801:5:801:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 | -| main.rs:801:5:801:14 | ...::m3 | main.rs:36:9:42:9 | mod m3 | -| main.rs:801:5:801:17 | ...::h | main.rs:37:27:41:13 | fn h | -| main.rs:802:5:802:6 | m4 | main.rs:46:1:53:1 | mod m4 | -| main.rs:802:5:802:9 | ...::i | main.rs:49:5:52:5 | fn i | -| main.rs:803:5:803:5 | h | main.rs:57:1:76:1 | fn h | -| main.rs:804:5:804:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:805:5:805:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:806:5:806:5 | j | main.rs:104:1:108:1 | fn j | -| main.rs:807:5:807:6 | m6 | main.rs:116:1:128:1 | mod m6 | -| main.rs:807:5:807:9 | ...::g | main.rs:121:5:127:5 | fn g | -| main.rs:808:5:808:6 | m7 | main.rs:130:1:149:1 | mod m7 | -| main.rs:808:5:808:9 | ...::f | main.rs:141:5:148:5 | fn f | -| main.rs:809:5:809:6 | m8 | main.rs:151:1:205:1 | mod m8 | -| main.rs:809:5:809:9 | ...::g | main.rs:189:5:204:5 | fn g | -| main.rs:810:5:810:6 | m9 | main.rs:207:1:215:1 | mod m9 | -| main.rs:810:5:810:9 | ...::f | main.rs:210:5:214:5 | fn f | -| main.rs:811:5:811:7 | m11 | main.rs:238:1:275:1 | mod m11 | -| main.rs:811:5:811:10 | ...::f | main.rs:243:5:246:5 | fn f | -| main.rs:812:5:812:7 | m15 | main.rs:306:1:375:1 | mod m15 | -| main.rs:812:5:812:10 | ...::f | main.rs:362:5:374:5 | fn f | -| main.rs:813:5:813:7 | m16 | main.rs:377:1:469:1 | mod m16 | -| main.rs:813:5:813:10 | ...::f | main.rs:444:5:468:5 | fn f | -| main.rs:814:5:814:20 | trait_visibility | main.rs:471:1:521:1 | mod trait_visibility | -| main.rs:814:5:814:23 | ...::f | main.rs:498:5:520:5 | fn f | -| main.rs:815:5:815:7 | m17 | main.rs:523:1:553:1 | mod m17 | -| main.rs:815:5:815:10 | ...::f | main.rs:547:5:552:5 | fn f | -| main.rs:816:5:816:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | -| main.rs:816:5:816:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | -| main.rs:817:5:817:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | -| main.rs:817:5:817:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | -| main.rs:818:5:818:7 | my3 | my2/mod.rs:20:1:20:12 | mod my3 | -| main.rs:818:5:818:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | -| main.rs:819:5:819:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | -| main.rs:820:5:820:12 | my_alias | main.rs:1:1:1:7 | mod my | -| main.rs:820:5:820:22 | ...::nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | -| main.rs:821:5:821:7 | m18 | main.rs:555:1:573:1 | mod m18 | -| main.rs:821:5:821:12 | ...::m19 | main.rs:560:5:572:5 | mod m19 | -| main.rs:821:5:821:17 | ...::m20 | main.rs:565:9:571:9 | mod m20 | -| main.rs:821:5:821:20 | ...::g | main.rs:566:13:570:13 | fn g | -| main.rs:822:5:822:7 | m23 | main.rs:602:1:627:1 | mod m23 | -| main.rs:822:5:822:10 | ...::f | main.rs:622:5:626:5 | fn f | -| main.rs:823:5:823:7 | m24 | main.rs:629:1:697:1 | mod m24 | -| main.rs:823:5:823:10 | ...::f | main.rs:683:5:696:5 | fn f | -| main.rs:824:5:824:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:824:5:824:11 | ...::h | main.rs:57:1:76:1 | fn h | -| main.rs:825:5:825:13 | z_changed | main.rs:702:1:702:9 | fn z_changed | -| main.rs:826:5:826:11 | AStruct | main.rs:704:1:704:17 | struct AStruct | -| main.rs:826:5:826:22 | ...::z_on_type | main.rs:708:5:708:17 | fn z_on_type | -| main.rs:827:5:827:11 | AStruct | main.rs:704:1:704:17 | struct AStruct | -| main.rs:828:5:828:29 | impl_with_attribute_macro | main.rs:772:1:791:1 | mod impl_with_attribute_macro | -| main.rs:828:5:828:35 | ...::test | main.rs:787:5:790:5 | fn test | +| main.rs:388:24:388:24 | T | main.rs:380:7:380:7 | T | +| main.rs:389:13:389:16 | Self | main.rs:378:5:395:5 | trait Trait1 | +| main.rs:389:13:389:19 | ...::g | main.rs:384:9:386:9 | fn g | +| main.rs:393:18:393:18 | T | main.rs:380:7:380:7 | T | +| main.rs:401:9:403:9 | Trait1::<...> | main.rs:378:5:395:5 | trait Trait1 | +| main.rs:402:11:402:11 | T | main.rs:399:7:399:7 | T | +| main.rs:404:24:404:24 | T | main.rs:399:7:399:7 | T | +| main.rs:405:13:405:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:406:13:406:16 | Self | main.rs:397:5:410:5 | trait Trait2 | +| main.rs:406:13:406:19 | ...::g | main.rs:384:9:386:9 | fn g | +| main.rs:408:13:408:16 | Self | main.rs:397:5:410:5 | trait Trait2 | +| main.rs:408:13:408:19 | ...::c | main.rs:393:9:394:9 | Const | +| main.rs:415:10:417:5 | Trait1::<...> | main.rs:378:5:395:5 | trait Trait1 | +| main.rs:416:7:416:7 | S | main.rs:412:5:412:13 | struct S | +| main.rs:418:11:418:11 | S | main.rs:412:5:412:13 | struct S | +| main.rs:419:24:419:24 | S | main.rs:412:5:412:13 | struct S | +| main.rs:420:13:420:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:421:13:421:16 | Self | main.rs:412:5:412:13 | struct S | +| main.rs:421:13:421:19 | ...::g | main.rs:425:9:428:9 | fn g | +| main.rs:425:24:425:24 | S | main.rs:412:5:412:13 | struct S | +| main.rs:426:13:426:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:427:13:427:16 | Self | main.rs:412:5:412:13 | struct S | +| main.rs:427:13:427:19 | ...::c | main.rs:430:9:431:9 | Const | +| main.rs:430:18:430:18 | S | main.rs:412:5:412:13 | struct S | +| main.rs:430:22:430:22 | S | main.rs:412:5:412:13 | struct S | +| main.rs:435:10:437:5 | Trait2::<...> | main.rs:397:5:410:5 | trait Trait2 | +| main.rs:436:7:436:7 | S | main.rs:412:5:412:13 | struct S | +| main.rs:438:11:438:11 | S | main.rs:412:5:412:13 | struct S | +| main.rs:439:24:439:24 | S | main.rs:412:5:412:13 | struct S | +| main.rs:440:13:440:16 | Self | main.rs:412:5:412:13 | struct S | +| main.rs:440:13:440:19 | ...::g | main.rs:425:9:428:9 | fn g | +| main.rs:441:13:441:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:442:13:442:16 | Self | main.rs:412:5:412:13 | struct S | +| main.rs:442:13:442:19 | ...::c | main.rs:430:9:431:9 | Const | +| main.rs:448:9:448:15 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:449:17:449:17 | S | main.rs:412:5:412:13 | struct S | +| main.rs:450:10:450:10 | S | main.rs:412:5:412:13 | struct S | +| main.rs:451:14:453:11 | Trait1::<...> | main.rs:378:5:395:5 | trait Trait1 | +| main.rs:452:13:452:13 | S | main.rs:412:5:412:13 | struct S | +| main.rs:455:10:455:10 | S | main.rs:412:5:412:13 | struct S | +| main.rs:456:14:458:11 | Trait2::<...> | main.rs:397:5:410:5 | trait Trait2 | +| main.rs:457:13:457:13 | S | main.rs:412:5:412:13 | struct S | +| main.rs:460:9:460:9 | S | main.rs:412:5:412:13 | struct S | +| main.rs:460:9:460:12 | ...::g | main.rs:425:9:428:9 | fn g | +| main.rs:462:9:462:9 | S | main.rs:412:5:412:13 | struct S | +| main.rs:462:9:462:12 | ...::h | main.rs:388:9:391:9 | fn h | +| main.rs:464:9:464:9 | S | main.rs:412:5:412:13 | struct S | +| main.rs:464:9:464:12 | ...::c | main.rs:430:9:431:9 | Const | +| main.rs:465:10:465:10 | S | main.rs:412:5:412:13 | struct S | +| main.rs:466:14:468:11 | Trait1::<...> | main.rs:378:5:395:5 | trait Trait1 | +| main.rs:467:13:467:13 | S | main.rs:412:5:412:13 | struct S | +| main.rs:482:10:482:15 | Trait3 | main.rs:472:5:474:5 | trait Trait3 | +| main.rs:482:21:482:22 | S2 | main.rs:480:5:480:14 | struct S2 | +| main.rs:486:10:486:15 | Trait4 | main.rs:476:5:478:5 | trait Trait4 | +| main.rs:486:21:486:22 | S2 | main.rs:480:5:480:14 | struct S2 | +| main.rs:488:13:488:16 | Self | main.rs:480:5:480:14 | struct S2 | +| main.rs:488:13:488:19 | ...::f | main.rs:482:26:483:23 | fn f | +| main.rs:489:13:489:14 | S2 | main.rs:480:5:480:14 | struct S2 | +| main.rs:489:13:489:17 | ...::f | main.rs:482:26:483:23 | fn f | +| main.rs:506:14:506:16 | Foo | main.rs:496:9:498:9 | trait Foo | +| main.rs:506:22:506:22 | X | main.rs:504:9:504:21 | struct X | +| main.rs:508:17:508:23 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:512:14:512:16 | Bar | main.rs:500:9:502:9 | trait Bar | +| main.rs:512:22:512:22 | X | main.rs:504:9:504:21 | struct X | +| main.rs:514:17:514:23 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:519:9:519:9 | m | main.rs:495:5:517:5 | mod m | +| main.rs:519:9:519:12 | ...::X | main.rs:504:9:504:21 | struct X | +| main.rs:522:17:522:17 | X | main.rs:504:9:504:21 | struct X | +| main.rs:525:17:525:17 | m | main.rs:495:5:517:5 | mod m | +| main.rs:525:17:525:22 | ...::Foo | main.rs:496:9:498:9 | trait Foo | +| main.rs:526:13:526:13 | X | main.rs:504:9:504:21 | struct X | +| main.rs:526:13:526:23 | ...::a_method | main.rs:506:26:509:13 | fn a_method | +| main.rs:530:17:530:17 | m | main.rs:495:5:517:5 | mod m | +| main.rs:530:17:530:22 | ...::Bar | main.rs:500:9:502:9 | trait Bar | +| main.rs:531:13:531:13 | X | main.rs:504:9:504:21 | struct X | +| main.rs:531:13:531:23 | ...::a_method | main.rs:512:26:515:13 | fn a_method | +| main.rs:535:17:535:17 | m | main.rs:495:5:517:5 | mod m | +| main.rs:535:17:535:22 | ...::Bar | main.rs:500:9:502:9 | trait Bar | +| main.rs:536:13:536:13 | X | main.rs:504:9:504:21 | struct X | +| main.rs:536:13:536:23 | ...::a_method | main.rs:512:26:515:13 | fn a_method | +| main.rs:541:13:541:13 | m | main.rs:495:5:517:5 | mod m | +| main.rs:541:13:541:18 | ...::Bar | main.rs:500:9:502:9 | trait Bar | +| main.rs:541:13:541:28 | ...::a_method | main.rs:501:13:501:31 | fn a_method | +| main.rs:554:10:554:16 | MyTrait | main.rs:547:5:549:5 | trait MyTrait | +| main.rs:555:9:555:9 | S | main.rs:551:5:551:13 | struct S | +| main.rs:557:13:557:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:563:7:563:13 | MyTrait | main.rs:547:5:549:5 | trait MyTrait | +| main.rs:564:10:564:10 | T | main.rs:562:10:562:10 | T | +| main.rs:566:9:566:9 | T | main.rs:562:10:562:10 | T | +| main.rs:566:9:566:12 | ...::f | main.rs:548:9:548:20 | fn f | +| main.rs:567:9:567:15 | MyTrait | main.rs:547:5:549:5 | trait MyTrait | +| main.rs:567:9:567:18 | ...::f | main.rs:548:9:548:20 | fn f | +| main.rs:572:9:572:9 | g | main.rs:561:5:568:5 | fn g | +| main.rs:573:11:573:11 | S | main.rs:551:5:551:13 | struct S | +| main.rs:580:9:580:15 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:585:13:585:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:590:17:590:23 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:591:17:591:21 | super | main.rs:583:5:595:5 | mod m19 | +| main.rs:591:17:591:24 | ...::f | main.rs:584:9:586:9 | fn f | +| main.rs:592:17:592:21 | super | main.rs:583:5:595:5 | mod m19 | +| main.rs:592:17:592:28 | ...::super | main.rs:578:1:596:1 | mod m18 | +| main.rs:592:17:592:31 | ...::f | main.rs:579:5:581:5 | fn f | +| main.rs:609:13:609:17 | super | main.rs:598:1:623:1 | mod m21 | +| main.rs:609:13:609:22 | ...::m22 | main.rs:599:5:605:5 | mod m22 | +| main.rs:609:13:609:30 | ...::MyEnum | main.rs:600:9:602:9 | enum MyEnum | +| main.rs:610:13:610:16 | self | main.rs:600:9:602:9 | enum MyEnum | +| main.rs:614:13:614:17 | super | main.rs:598:1:623:1 | mod m21 | +| main.rs:614:13:614:22 | ...::m22 | main.rs:599:5:605:5 | mod m22 | +| main.rs:614:13:614:32 | ...::MyStruct | main.rs:604:9:604:28 | struct MyStruct | +| main.rs:615:13:615:16 | self | main.rs:604:9:604:28 | struct MyStruct | +| main.rs:619:21:619:26 | MyEnum | main.rs:600:9:602:9 | enum MyEnum | +| main.rs:619:21:619:29 | ...::A | main.rs:601:13:601:13 | A | +| main.rs:620:21:620:28 | MyStruct | main.rs:604:9:604:28 | struct MyStruct | +| main.rs:636:10:638:5 | Trait1::<...> | main.rs:626:5:631:5 | trait Trait1 | +| main.rs:637:7:637:10 | Self | main.rs:633:5:633:13 | struct S | +| main.rs:639:11:639:11 | S | main.rs:633:5:633:13 | struct S | +| main.rs:641:13:641:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:647:17:647:17 | S | main.rs:633:5:633:13 | struct S | +| main.rs:663:15:663:15 | T | main.rs:662:26:662:26 | T | +| main.rs:668:9:668:24 | GenericStruct::<...> | main.rs:661:5:664:5 | struct GenericStruct | +| main.rs:668:23:668:23 | T | main.rs:667:10:667:10 | T | +| main.rs:670:9:670:9 | T | main.rs:667:10:667:10 | T | +| main.rs:670:12:670:17 | TraitA | main.rs:653:5:655:5 | trait TraitA | +| main.rs:679:9:679:24 | GenericStruct::<...> | main.rs:661:5:664:5 | struct GenericStruct | +| main.rs:679:23:679:23 | T | main.rs:678:10:678:10 | T | +| main.rs:681:9:681:9 | T | main.rs:678:10:678:10 | T | +| main.rs:681:12:681:17 | TraitB | main.rs:657:5:659:5 | trait TraitB | +| main.rs:682:9:682:9 | T | main.rs:678:10:678:10 | T | +| main.rs:682:12:682:17 | TraitA | main.rs:653:5:655:5 | trait TraitA | +| main.rs:693:10:693:15 | TraitA | main.rs:653:5:655:5 | trait TraitA | +| main.rs:693:21:693:31 | Implementor | main.rs:690:5:690:23 | struct Implementor | +| main.rs:695:13:695:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:700:10:700:15 | TraitB | main.rs:657:5:659:5 | trait TraitB | +| main.rs:700:21:700:31 | Implementor | main.rs:690:5:690:23 | struct Implementor | +| main.rs:702:13:702:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:708:24:708:34 | Implementor | main.rs:690:5:690:23 | struct Implementor | +| main.rs:709:23:709:35 | GenericStruct | main.rs:661:5:664:5 | struct GenericStruct | +| main.rs:715:9:715:36 | GenericStruct::<...> | main.rs:661:5:664:5 | struct GenericStruct | +| main.rs:715:9:715:50 | ...::call_trait_a | main.rs:672:9:674:9 | fn call_trait_a | +| main.rs:715:25:715:35 | Implementor | main.rs:690:5:690:23 | struct Implementor | +| main.rs:718:9:718:36 | GenericStruct::<...> | main.rs:661:5:664:5 | struct GenericStruct | +| main.rs:718:9:718:47 | ...::call_both | main.rs:684:9:687:9 | fn call_both | +| main.rs:718:25:718:35 | Implementor | main.rs:690:5:690:23 | struct Implementor | +| main.rs:724:3:724:12 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:724:3:724:24 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix | +| main.rs:728:6:728:12 | AStruct | main.rs:727:1:727:17 | struct AStruct | +| main.rs:730:7:730:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:730:7:730:28 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix | +| main.rs:733:7:733:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:733:7:733:28 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix | +| main.rs:738:9:738:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:738:9:738:19 | ...::marker | {EXTERNAL LOCATION} | mod marker | +| main.rs:738:9:738:32 | ...::PhantomData | {EXTERNAL LOCATION} | struct PhantomData | +| main.rs:739:9:739:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:739:9:739:19 | ...::result | {EXTERNAL LOCATION} | mod result | +| main.rs:739:9:739:27 | ...::Result | {EXTERNAL LOCATION} | enum Result | +| main.rs:747:19:747:22 | Self | main.rs:741:5:749:5 | trait Reduce | +| main.rs:747:19:747:29 | ...::Input | main.rs:742:9:742:19 | type Input | +| main.rs:748:14:748:46 | Result::<...> | {EXTERNAL LOCATION} | enum Result | +| main.rs:748:21:748:24 | Self | main.rs:741:5:749:5 | trait Reduce | +| main.rs:748:21:748:32 | ...::Output | main.rs:743:21:744:20 | type Output | +| main.rs:748:35:748:38 | Self | main.rs:741:5:749:5 | trait Reduce | +| main.rs:748:35:748:45 | ...::Error | main.rs:742:21:743:19 | type Error | +| main.rs:752:17:752:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | +| main.rs:752:29:752:33 | Input | main.rs:751:19:751:23 | Input | +| main.rs:753:17:753:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | +| main.rs:753:29:753:33 | Error | main.rs:751:26:751:30 | Error | +| main.rs:760:11:760:16 | Reduce | main.rs:741:5:749:5 | trait Reduce | +| main.rs:761:13:764:9 | MyImpl::<...> | main.rs:751:5:754:5 | struct MyImpl | +| main.rs:762:13:762:17 | Input | main.rs:758:13:758:17 | Input | +| main.rs:763:13:763:17 | Error | main.rs:759:13:759:17 | Error | +| main.rs:766:22:769:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | +| main.rs:767:13:767:17 | Input | main.rs:758:13:758:17 | Input | +| main.rs:768:13:768:16 | Self | main.rs:751:5:754:5 | struct MyImpl | +| main.rs:768:13:768:23 | ...::Error | main.rs:770:11:774:9 | type Error | +| main.rs:771:22:773:9 | Option::<...> | {EXTERNAL LOCATION} | enum Option | +| main.rs:772:11:772:15 | Error | main.rs:759:13:759:17 | Error | +| main.rs:776:13:776:17 | Input | main.rs:758:13:758:17 | Input | +| main.rs:781:19:781:22 | Self | main.rs:751:5:754:5 | struct MyImpl | +| main.rs:781:19:781:29 | ...::Input | main.rs:766:9:770:9 | type Input | +| main.rs:782:14:785:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | +| main.rs:783:13:783:16 | Self | main.rs:751:5:754:5 | struct MyImpl | +| main.rs:783:13:783:24 | ...::Output | main.rs:774:11:777:9 | type Output | +| main.rs:784:13:784:16 | Self | main.rs:751:5:754:5 | struct MyImpl | +| main.rs:784:13:784:23 | ...::Error | main.rs:770:11:774:9 | type Error | +| main.rs:791:5:791:7 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:791:11:791:14 | self | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:793:15:793:17 | ztd | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:793:15:793:25 | ...::string | {EXTERNAL LOCATION} | mod string | +| main.rs:793:15:793:33 | ...::String | {EXTERNAL LOCATION} | struct String | +| main.rs:803:7:803:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:803:7:803:26 | ...::identity | proc_macro.rs:15:1:18:1 | fn identity | +| main.rs:804:10:804:15 | ATrait | main.rs:799:5:801:5 | trait ATrait | +| main.rs:804:21:804:23 | i64 | {EXTERNAL LOCATION} | struct i64 | +| main.rs:806:11:806:13 | i64 | {EXTERNAL LOCATION} | struct i64 | +| main.rs:812:17:812:19 | Foo | main.rs:797:5:797:15 | struct Foo | +| main.rs:817:5:817:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:817:5:817:14 | ...::nested | my.rs:1:1:1:15 | mod nested | +| main.rs:817:5:817:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | +| main.rs:817:5:817:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | +| main.rs:817:5:817:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | +| main.rs:818:5:818:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:818:5:818:9 | ...::f | my.rs:5:1:7:1 | fn f | +| main.rs:819:5:819:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | +| main.rs:819:5:819:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | +| main.rs:819:5:819:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | +| main.rs:819:5:819:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:820:5:820:5 | f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:821:5:821:5 | g | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:822:5:822:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:822:5:822:12 | ...::h | main.rs:57:1:76:1 | fn h | +| main.rs:823:5:823:6 | m1 | main.rs:20:1:44:1 | mod m1 | +| main.rs:823:5:823:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 | +| main.rs:823:5:823:13 | ...::g | main.rs:30:9:34:9 | fn g | +| main.rs:824:5:824:6 | m1 | main.rs:20:1:44:1 | mod m1 | +| main.rs:824:5:824:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 | +| main.rs:824:5:824:14 | ...::m3 | main.rs:36:9:42:9 | mod m3 | +| main.rs:824:5:824:17 | ...::h | main.rs:37:27:41:13 | fn h | +| main.rs:825:5:825:6 | m4 | main.rs:46:1:53:1 | mod m4 | +| main.rs:825:5:825:9 | ...::i | main.rs:49:5:52:5 | fn i | +| main.rs:826:5:826:5 | h | main.rs:57:1:76:1 | fn h | +| main.rs:827:5:827:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:828:5:828:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:829:5:829:5 | j | main.rs:104:1:108:1 | fn j | +| main.rs:830:5:830:6 | m6 | main.rs:116:1:128:1 | mod m6 | +| main.rs:830:5:830:9 | ...::g | main.rs:121:5:127:5 | fn g | +| main.rs:831:5:831:6 | m7 | main.rs:130:1:149:1 | mod m7 | +| main.rs:831:5:831:9 | ...::f | main.rs:141:5:148:5 | fn f | +| main.rs:832:5:832:6 | m8 | main.rs:151:1:205:1 | mod m8 | +| main.rs:832:5:832:9 | ...::g | main.rs:189:5:204:5 | fn g | +| main.rs:833:5:833:6 | m9 | main.rs:207:1:215:1 | mod m9 | +| main.rs:833:5:833:9 | ...::f | main.rs:210:5:214:5 | fn f | +| main.rs:834:5:834:7 | m11 | main.rs:238:1:275:1 | mod m11 | +| main.rs:834:5:834:10 | ...::f | main.rs:243:5:246:5 | fn f | +| main.rs:835:5:835:7 | m15 | main.rs:306:1:375:1 | mod m15 | +| main.rs:835:5:835:10 | ...::f | main.rs:362:5:374:5 | fn f | +| main.rs:836:5:836:7 | m16 | main.rs:377:1:492:1 | mod m16 | +| main.rs:836:5:836:10 | ...::f | main.rs:446:5:470:5 | fn f | +| main.rs:837:5:837:20 | trait_visibility | main.rs:494:1:544:1 | mod trait_visibility | +| main.rs:837:5:837:23 | ...::f | main.rs:521:5:543:5 | fn f | +| main.rs:838:5:838:7 | m17 | main.rs:546:1:576:1 | mod m17 | +| main.rs:838:5:838:10 | ...::f | main.rs:570:5:575:5 | fn f | +| main.rs:839:5:839:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | +| main.rs:839:5:839:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | +| main.rs:840:5:840:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | +| main.rs:840:5:840:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | +| main.rs:841:5:841:7 | my3 | my2/mod.rs:20:1:20:12 | mod my3 | +| main.rs:841:5:841:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | +| main.rs:842:5:842:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | +| main.rs:843:5:843:12 | my_alias | main.rs:1:1:1:7 | mod my | +| main.rs:843:5:843:22 | ...::nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | +| main.rs:844:5:844:7 | m18 | main.rs:578:1:596:1 | mod m18 | +| main.rs:844:5:844:12 | ...::m19 | main.rs:583:5:595:5 | mod m19 | +| main.rs:844:5:844:17 | ...::m20 | main.rs:588:9:594:9 | mod m20 | +| main.rs:844:5:844:20 | ...::g | main.rs:589:13:593:13 | fn g | +| main.rs:845:5:845:7 | m23 | main.rs:625:1:650:1 | mod m23 | +| main.rs:845:5:845:10 | ...::f | main.rs:645:5:649:5 | fn f | +| main.rs:846:5:846:7 | m24 | main.rs:652:1:720:1 | mod m24 | +| main.rs:846:5:846:10 | ...::f | main.rs:706:5:719:5 | fn f | +| main.rs:847:5:847:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:847:5:847:11 | ...::h | main.rs:57:1:76:1 | fn h | +| main.rs:848:5:848:13 | z_changed | main.rs:725:1:725:9 | fn z_changed | +| main.rs:849:5:849:11 | AStruct | main.rs:727:1:727:17 | struct AStruct | +| main.rs:849:5:849:22 | ...::z_on_type | main.rs:731:5:731:17 | fn z_on_type | +| main.rs:850:5:850:11 | AStruct | main.rs:727:1:727:17 | struct AStruct | +| main.rs:851:5:851:29 | impl_with_attribute_macro | main.rs:795:1:814:1 | mod impl_with_attribute_macro | +| main.rs:851:5:851:35 | ...::test | main.rs:810:5:813:5 | fn test | | my2/mod.rs:4:5:4:11 | println | {EXTERNAL LOCATION} | MacroRules | | my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | @@ -493,7 +504,7 @@ resolvePath | my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g | | my2/my3/mod.rs:4:5:4:5 | h | main.rs:57:1:76:1 | fn h | | my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:25:34 | SourceFile | -| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:829:2 | SourceFile | +| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:852:2 | SourceFile | | my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:57:1:76:1 | fn h | | my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:25:34 | SourceFile | | my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g | diff --git a/rust/ql/test/library-tests/sensitivedata/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/sensitivedata/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index ce79c75327ab..000000000000 --- a/rust/ql/test/library-tests/sensitivedata/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -multipleCallTargets -| test.rs:288:7:288:36 | ... .as_str() | diff --git a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected index 7ee176a136f8..e78621bebd5b 100644 --- a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected @@ -5,10 +5,13 @@ multipleCallTargets | dereference.rs:184:17:184:30 | ... .foo() | | dereference.rs:186:17:186:25 | S.bar(...) | | dereference.rs:187:17:187:29 | S.bar(...) | -| main.rs:590:9:590:18 | ...::m(...) | | main.rs:2634:13:2634:31 | ...::from(...) | | main.rs:2635:13:2635:31 | ...::from(...) | | main.rs:2636:13:2636:31 | ...::from(...) | | main.rs:2642:13:2642:31 | ...::from(...) | | main.rs:2643:13:2643:31 | ...::from(...) | | main.rs:2644:13:2644:31 | ...::from(...) | +multiplePathResolutions +| main.rs:2463:41:2463:52 | ...::Output | +| main.rs:2472:38:2472:49 | ...::Output | +| main.rs:2484:42:2484:53 | ...::Output | diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index bf53c4906e30..f78202969b8a 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -587,7 +587,7 @@ mod impl_overlap { println!("{:?}", S3::m(&w, x)); // $ target=S3::m S4.m(); // $ target=::m - S4::m(&S4); // $ target=::m $ SPURIOUS: target=MyTrait1::m + S4::m(&S4); // $ target=::m S5(0i32).m(); // $ target=_as_MyTrait1>::m S5::m(&S5(0i32)); // $ target=_as_MyTrait1>::m S5(true).m(); // $ target=MyTrait1::m 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 a56b6b7c4754..c8557a59381d 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -2615,8 +2615,6 @@ inferType | main.rs:1025:18:1025:49 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1025:26:1025:27 | x3 | | main.rs:943:5:944:13 | S | | main.rs:1025:26:1025:40 | x3.putTwo(...) | | main.rs:892:5:895:5 | Wrapper | -| main.rs:1025:26:1025:40 | x3.putTwo(...) | A | main.rs:963:36:963:50 | AssociatedParam | -| main.rs:1025:26:1025:49 | ... .unwrap() | | main.rs:963:36:963:50 | AssociatedParam | | main.rs:1025:36:1025:36 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:1025:39:1025:39 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:1027:20:1027:20 | S | | main.rs:943:5:944:13 | S | @@ -2658,17 +2656,13 @@ inferType | main.rs:1050:24:1050:28 | SelfParam | TRef | main.rs:1048:5:1051:5 | Self [trait Subtrait] | | main.rs:1059:23:1059:27 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1059:23:1059:27 | SelfParam | TRef | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | -| main.rs:1059:30:1059:31 | c1 | | main.rs:1043:9:1043:21 | Content | -| main.rs:1059:49:1059:50 | c2 | | main.rs:1043:9:1043:21 | Content | | main.rs:1059:68:1062:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1060:13:1060:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1060:13:1060:16 | self | TRef | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | | main.rs:1060:13:1060:27 | self.insert(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1060:25:1060:26 | c1 | | main.rs:1043:9:1043:21 | Content | | main.rs:1061:13:1061:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1061:13:1061:16 | self | TRef | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | | main.rs:1061:13:1061:27 | self.insert(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1061:25:1061:26 | c2 | | main.rs:1043:9:1043:21 | Content | | main.rs:1069:19:1069:23 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1069:19:1069:23 | SelfParam | TRef | main.rs:1065:5:1065:24 | MyType | | main.rs:1069:19:1069:23 | SelfParam | TRef.T | main.rs:1067:10:1067:10 | T | @@ -2693,25 +2687,17 @@ inferType | main.rs:1077:15:1077:18 | self | TRef.T | main.rs:1074:10:1074:17 | T | | main.rs:1081:33:1081:36 | item | | {EXTERNAL LOCATION} | & | | main.rs:1081:33:1081:36 | item | TRef | main.rs:1081:20:1081:30 | T | -| main.rs:1081:57:1083:5 | { ... } | | main.rs:1043:9:1043:21 | Content | | main.rs:1082:9:1082:12 | item | | {EXTERNAL LOCATION} | & | | main.rs:1082:9:1082:12 | item | TRef | main.rs:1081:20:1081:30 | T | -| main.rs:1082:9:1082:26 | item.get_content() | | main.rs:1043:9:1043:21 | Content | | main.rs:1085:35:1085:38 | item | | {EXTERNAL LOCATION} | & | | main.rs:1085:35:1085:38 | item | TRef | main.rs:1085:21:1085:32 | T | -| main.rs:1085:45:1085:46 | c1 | | main.rs:1043:9:1043:21 | Content | -| main.rs:1085:61:1085:62 | c2 | | main.rs:1043:9:1043:21 | Content | -| main.rs:1085:77:1085:78 | c3 | | main.rs:1043:9:1043:21 | Content | | main.rs:1085:93:1088:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1086:9:1086:12 | item | | {EXTERNAL LOCATION} | & | | main.rs:1086:9:1086:12 | item | TRef | main.rs:1085:21:1085:32 | T | | main.rs:1086:9:1086:23 | item.insert(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1086:21:1086:22 | c1 | | main.rs:1043:9:1043:21 | Content | | main.rs:1087:9:1087:12 | item | | {EXTERNAL LOCATION} | & | | main.rs:1087:9:1087:12 | item | TRef | main.rs:1085:21:1085:32 | T | | main.rs:1087:9:1087:31 | item.insert_two(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1087:25:1087:26 | c2 | | main.rs:1043:9:1043:21 | Content | -| main.rs:1087:29:1087:30 | c3 | | main.rs:1043:9:1043:21 | Content | | main.rs:1090:15:1096:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1091:13:1091:17 | item1 | | main.rs:1065:5:1065:24 | MyType | | main.rs:1091:13:1091:17 | item1 | T | {EXTERNAL LOCATION} | i64 | @@ -3980,7 +3966,6 @@ inferType | main.rs:1762:17:1762:20 | self | TRef.TSlice | main.rs:1760:14:1760:23 | T | | main.rs:1762:17:1762:27 | self.get(...) | | {EXTERNAL LOCATION} | Option | | main.rs:1762:17:1762:27 | self.get(...) | T | {EXTERNAL LOCATION} | & | -| main.rs:1762:17:1762:27 | self.get(...) | T.TRef | main.rs:1760:14:1760:23 | T | | main.rs:1762:17:1762:36 | ... .unwrap() | | {EXTERNAL LOCATION} | & | | main.rs:1762:17:1762:36 | ... .unwrap() | TRef | main.rs:1760:14:1760:23 | T | | main.rs:1762:26:1762:26 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -4626,9 +4611,7 @@ inferType | main.rs:2076:44:2076:50 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2080:26:2080:26 | a | | main.rs:2080:18:2080:23 | T | | main.rs:2080:32:2080:32 | b | | main.rs:2080:18:2080:23 | T | -| main.rs:2080:51:2082:5 | { ... } | | {EXTERNAL LOCATION} | Output | | main.rs:2081:9:2081:9 | a | | main.rs:2080:18:2080:23 | T | -| main.rs:2081:9:2081:13 | ... + ... | | {EXTERNAL LOCATION} | Output | | main.rs:2081:13:2081:13 | b | | main.rs:2080:18:2080:23 | T | | main.rs:2084:16:2215:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2088:13:2088:18 | i64_eq | | {EXTERNAL LOCATION} | bool | @@ -5138,9 +5121,7 @@ inferType | main.rs:2388:23:2388:23 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2391:37:2391:37 | a | | main.rs:2391:20:2391:34 | T | | main.rs:2391:43:2391:43 | b | | {EXTERNAL LOCATION} | usize | -| main.rs:2394:5:2396:5 | { ... } | | {EXTERNAL LOCATION} | Output | | main.rs:2395:9:2395:9 | a | | main.rs:2391:20:2391:34 | T | -| main.rs:2395:9:2395:12 | a[b] | | {EXTERNAL LOCATION} | Output | | main.rs:2395:11:2395:11 | b | | {EXTERNAL LOCATION} | usize | | main.rs:2398:16:2409:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2399:17:2399:19 | vec | | main.rs:2363:5:2366:5 | MyVec | @@ -5219,9 +5200,7 @@ inferType | main.rs:2463:25:2463:29 | other | | main.rs:2457:5:2457:19 | S | | main.rs:2463:25:2463:29 | other | T | main.rs:2459:10:2459:17 | T | | main.rs:2463:54:2465:9 | { ... } | | main.rs:2457:5:2457:19 | S | -| main.rs:2463:54:2465:9 | { ... } | T | main.rs:2420:9:2420:20 | Output | | main.rs:2464:13:2464:39 | S(...) | | main.rs:2457:5:2457:19 | S | -| main.rs:2464:13:2464:39 | S(...) | T | main.rs:2420:9:2420:20 | Output | | main.rs:2464:15:2464:22 | (...) | | main.rs:2459:10:2459:17 | T | | main.rs:2464:16:2464:19 | self | | main.rs:2457:5:2457:19 | S | | main.rs:2464:16:2464:19 | self | T | main.rs:2459:10:2459:17 | T | @@ -5233,9 +5212,7 @@ inferType | main.rs:2472:19:2472:22 | SelfParam | T | main.rs:2468:10:2468:17 | T | | main.rs:2472:25:2472:29 | other | | main.rs:2468:10:2468:17 | T | | main.rs:2472:51:2474:9 | { ... } | | main.rs:2457:5:2457:19 | S | -| main.rs:2472:51:2474:9 | { ... } | T | main.rs:2420:9:2420:20 | Output | | main.rs:2473:13:2473:37 | S(...) | | main.rs:2457:5:2457:19 | S | -| main.rs:2473:13:2473:37 | S(...) | T | main.rs:2420:9:2420:20 | Output | | main.rs:2473:15:2473:22 | (...) | | main.rs:2468:10:2468:17 | T | | main.rs:2473:16:2473:19 | self | | main.rs:2457:5:2457:19 | S | | main.rs:2473:16:2473:19 | self | T | main.rs:2468:10:2468:17 | T | @@ -5481,7 +5458,6 @@ inferType | main.rs:2627:43:2627:47 | "baz" | | {EXTERNAL LOCATION} | & | | main.rs:2627:43:2627:47 | "baz" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2628:9:2628:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2628:13:2628:13 | s | | {EXTERNAL LOCATION} | Item | | main.rs:2628:13:2628:13 | s | | {EXTERNAL LOCATION} | & | | main.rs:2628:13:2628:13 | s | TRef | {EXTERNAL LOCATION} | & | | main.rs:2628:13:2628:13 | s | TRef.TRef | {EXTERNAL LOCATION} | str | @@ -5494,7 +5470,6 @@ inferType | main.rs:2628:19:2628:26 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | | main.rs:2628:28:2628:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2629:9:2629:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2629:13:2629:13 | s | | {EXTERNAL LOCATION} | Item | | main.rs:2629:13:2629:13 | s | | {EXTERNAL LOCATION} | & | | main.rs:2629:13:2629:13 | s | TRef | {EXTERNAL LOCATION} | & | | main.rs:2629:13:2629:13 | s | TRef.TRef | {EXTERNAL LOCATION} | str | @@ -5549,7 +5524,6 @@ inferType | main.rs:2644:26:2644:30 | "baz" | | {EXTERNAL LOCATION} | & | | main.rs:2644:26:2644:30 | "baz" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2646:9:2646:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2646:13:2646:13 | s | | {EXTERNAL LOCATION} | Item | | main.rs:2646:13:2646:13 | s | | {EXTERNAL LOCATION} | & | | main.rs:2646:13:2646:13 | s | TRef | {EXTERNAL LOCATION} | String | | main.rs:2646:18:2646:25 | strings3 | | {EXTERNAL LOCATION} | & | @@ -5607,7 +5581,6 @@ inferType | main.rs:2661:13:2661:22 | range_full | | {EXTERNAL LOCATION} | RangeFull | | main.rs:2661:26:2661:27 | .. | | {EXTERNAL LOCATION} | RangeFull | | main.rs:2662:9:2662:51 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2662:13:2662:13 | i | | {EXTERNAL LOCATION} | Item | | main.rs:2662:18:2662:48 | &... | | {EXTERNAL LOCATION} | & | | main.rs:2662:19:2662:36 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2662:19:2662:36 | [...] | TArray | {EXTERNAL LOCATION} | i64 |