Skip to content

Commit e4624f2

Browse files
committed
Address review comments
1 parent f15f4ce commit e4624f2

5 files changed

Lines changed: 175 additions & 169 deletions

File tree

rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2368,7 +2368,7 @@ private module Input3 implements InputSig3 {
23682368
final class VariableDeclaration = VariableDeclarationImpl;
23692369

23702370
abstract private class VariableDeclarationImpl extends DeclarationImpl {
2371-
abstract predicate isCoercionSite();
2371+
abstract predicate preservesInitializerType();
23722372

23732373
abstract AstNode getPattern();
23742374

@@ -2378,7 +2378,7 @@ private module Input3 implements InputSig3 {
23782378
}
23792379

23802380
private class LetExprDeclaration extends VariableDeclarationImpl instanceof LetExpr {
2381-
override predicate isCoercionSite() { not super.getPat() instanceof IdentPat }
2381+
override predicate preservesInitializerType() { super.getPat() instanceof IdentPat }
23822382

23832383
override TypeMention getType() { none() }
23842384

@@ -2388,14 +2388,13 @@ private module Input3 implements InputSig3 {
23882388
}
23892389

23902390
private class LetStmtDeclaration extends VariableDeclarationImpl instanceof LetStmt {
2391-
override predicate isCoercionSite() {
2392-
super.hasTypeRepr()
2393-
or
2391+
override predicate preservesInitializerType() {
2392+
not super.hasTypeRepr() and
23942393
// Due to "binding modes" the type of the pattern is not necessarily the
23952394
// same as the type of the initializer. However, when the pattern is an
23962395
// identifier pattern, its type is guaranteed to be the same as the type of the
23972396
// initializer.
2398-
not super.getPat() instanceof IdentPat
2397+
super.getPat() instanceof IdentPat
23992398
}
24002399

24012400
override TypeMention getType() { result = super.getTypeRepr() }
@@ -2406,7 +2405,7 @@ private module Input3 implements InputSig3 {
24062405
}
24072406

24082407
private class ConstDeclaration extends VariableDeclarationImpl instanceof Const {
2409-
override predicate isCoercionSite() { any() }
2408+
override predicate preservesInitializerType() { none() }
24102409

24112410
override TypeMention getType() { result = super.getTypeRepr() }
24122411

@@ -2416,7 +2415,7 @@ private module Input3 implements InputSig3 {
24162415
}
24172416

24182417
private class StaticDeclaration extends VariableDeclarationImpl instanceof Static {
2419-
override predicate isCoercionSite() { any() }
2418+
override predicate preservesInitializerType() { none() }
24202419

24212420
override TypeMention getType() { result = super.getTypeRepr() }
24222421

@@ -2491,7 +2490,7 @@ private module Input3 implements InputSig3 {
24912490
final class Parameter = ParameterImpl;
24922491

24932492
abstract private class ParameterImpl extends VariableDeclarationImpl {
2494-
override predicate isCoercionSite() { any() } // doesn't really matter, since there are no initializers/default values
2493+
override predicate preservesInitializerType() { none() } // doesn't really matter, since there are no initializers/default values
24952494

24962495
override AstNode getInitializer() { none() }
24972496
}
@@ -2520,17 +2519,19 @@ private module Input3 implements InputSig3 {
25202519
override TypeMention getType() { result = super.getTypeRepr() }
25212520
}
25222521

2523-
final class Parameterizable = ParameterizableImpl;
2522+
final class Callable = CallableImpl;
25242523

2525-
abstract private class ParameterizableImpl extends DeclarationImpl {
2524+
abstract private class CallableImpl extends DeclarationImpl {
25262525
abstract TypeParameter getTypeParameter(int pos);
25272526

25282527
abstract TypeMention getAdditionalTypeParameterConstraint(TypeParameter tp);
25292528

25302529
abstract Parameter getParameter(int i);
2530+
2531+
abstract AstNode getBody();
25312532
}
25322533

2533-
class Callable extends ParameterizableImpl instanceof Rust::Callable {
2534+
private class CallableCallable extends CallableImpl instanceof Rust::Callable {
25342535
override TypeMention getDeclaringType() {
25352536
exists(ImplOrTraitItemNode implOrTrait | this = implOrTrait.getAnAssocItem() |
25362537
result = implOrTrait.(Impl).getSelfTy() or
@@ -2558,14 +2559,14 @@ private module Input3 implements InputSig3 {
25582559

25592560
override TypeMention getType() { result = getReturnTypeMention(this) }
25602561

2561-
AstNode getBody() { result = Rust::Callable.super.getBody() }
2562+
override AstNode getBody() { result = Rust::Callable.super.getBody() }
25622563
}
25632564

25642565
Callable getEnclosingCallable(AstNode node) { result = node.getEnclosingCallable() }
25652566

25662567
additional final class Constructor = ConstructorImpl;
25672568

2568-
abstract private class ConstructorImpl extends ParameterizableImpl {
2569+
abstract private class ConstructorImpl extends CallableImpl {
25692570
abstract TypeItem getTypeItem();
25702571

25712572
override TypeMention getDeclaringType() { result = this.getTypeItem() }
@@ -2577,6 +2578,8 @@ private module Input3 implements InputSig3 {
25772578
}
25782579

25792580
override TypeMention getType() { result = this.getTypeItem() }
2581+
2582+
override AstNode getBody() { none() }
25802583
}
25812584

25822585
private class StructConstructor extends ConstructorImpl instanceof Struct {
@@ -2596,6 +2599,8 @@ private module Input3 implements InputSig3 {
25962599
}
25972600

25982601
Type getCallableReturnType(Callable c, TypePath path) {
2602+
result = c.(Constructor).getType().getTypeAt(path)
2603+
or
25992604
if c.(Function).isAsync() or c.(ClosureExpr).isAsync()
26002605
then
26012606
path.isEmpty() and
@@ -2608,10 +2613,12 @@ private module Input3 implements InputSig3 {
26082613
else result = getReturnTypeMention(c).getTypeAt(path)
26092614
}
26102615

2611-
class ResolutionContext = string;
2616+
class InvocationResolutionContext = string;
26122617

26132618
bindingset[derefChain, borrow]
2614-
private ResolutionContext encodeDerefChainBorrow(DerefChain derefChain, BorrowKind borrow) {
2619+
private InvocationResolutionContext encodeDerefChainBorrow(
2620+
DerefChain derefChain, BorrowKind borrow
2621+
) {
26152622
result = derefChain + ";" + borrow
26162623
}
26172624

@@ -2643,9 +2650,9 @@ private module Input3 implements InputSig3 {
26432650

26442651
abstract Expr getArgument(int i);
26452652

2646-
abstract Parameterizable getTarget(string derefChainBorrow);
2653+
abstract Callable getTarget(string derefChainBorrow);
26472654

2648-
abstract Parameterizable getATargetForTypeQualifierMatching();
2655+
abstract Callable getATargetForTypeQualifierMatching();
26492656
}
26502657

26512658
pragma[nomagic]
@@ -2703,7 +2710,7 @@ private module Input3 implements InputSig3 {
27032710
)
27042711
}
27052712

2706-
override Parameterizable getATargetForTypeQualifierMatching() {
2713+
override Callable getATargetForTypeQualifierMatching() {
27072714
result = CallExprImpl::getResolvedFunction(this)
27082715
}
27092716
}
@@ -2728,20 +2735,20 @@ private module Input3 implements InputSig3 {
27282735
derefChainBorrow = noDerefChainBorrow()
27292736
}
27302737

2731-
override Parameterizable getATargetForTypeQualifierMatching() {
2738+
override Callable getATargetForTypeQualifierMatching() {
27322739
none() // non-assoc function calls cannot have type qualifiers
27332740
}
27342741
}
27352742

27362743
abstract private class Construction extends InvocationImpl {
27372744
abstract Constructor getTarget();
27382745

2739-
override Parameterizable getTarget(string derefChainBorrow) {
2746+
override Callable getTarget(string derefChainBorrow) {
27402747
result = this.getTarget() and
27412748
derefChainBorrow = noDerefChainBorrow()
27422749
}
27432750

2744-
override Parameterizable getATargetForTypeQualifierMatching() { result = this.getTarget() }
2751+
override Callable getATargetForTypeQualifierMatching() { result = this.getTarget() }
27452752
}
27462753

27472754
private class NonAssocCallConstruction extends Construction instanceof NonAssocCallExpr {
@@ -3006,7 +3013,7 @@ private module Input3 implements InputSig3 {
30063013
else prefix2.isEmpty()
30073014
)
30083015
or
3009-
// Rust closure types like `Fn<(A, B) -> C>` are syntactic sugar for `Fn<Args = (A, B), Output = C>`,
3016+
// Rust closure types like `Fn(A, B) -> C` are syntactic sugar for `Fn<Args = (A, B), Output = C>`,
30103017
// so in calls to a closure, we consider the entire argument list as a single tuple argument.
30113018
exists(CallExprImpl::DynamicCallExpr dce, TupleType tt, int i |
30123019
n1 = dce.getSyntacticPositionalArgument(i) and

rust/ql/test/library-tests/type-inference/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2803,6 +2803,7 @@ mod arg_trait_bounds {
28032803
fn empty_array() {
28042804
let arr1: [i32; 0] = []; // $ type=arr1@[;]<TArray>:i32
28052805
let arr2 = [true; 0]; // $ type=arr2@[;]<TArray>:bool
2806+
28062807
let arr3 = []; // $ type=arr3@[;]<TArray>:i32
28072808

28082809
fn pin_array<T>(arr: [T; 0], x: T) {}

rust/ql/test/library-tests/type-inference/type-inference.expected

Lines changed: 69 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -3733,7 +3733,7 @@ inferCertainType
37333733
| main.rs:2792:13:2792:16 | self | TRef.T | main.rs:2790:10:2790:17 | GT |
37343734
| main.rs:2796:15:2800:5 | { ... } | | {EXTERNAL LOCATION} | () |
37353735
| main.rs:2799:24:2799:25 | &g | | {EXTERNAL LOCATION} | & |
3736-
| main.rs:2803:18:2810:1 | { ... } | | {EXTERNAL LOCATION} | () |
3736+
| main.rs:2803:18:2811:1 | { ... } | | {EXTERNAL LOCATION} | () |
37373737
| main.rs:2804:9:2804:12 | arr1 | | {EXTERNAL LOCATION} | [;] |
37383738
| main.rs:2804:9:2804:12 | arr1 | TArray | {EXTERNAL LOCATION} | i32 |
37393739
| main.rs:2804:26:2804:27 | [...] | | {EXTERNAL LOCATION} | [;] |
@@ -3742,17 +3742,17 @@ inferCertainType
37423742
| main.rs:2805:16:2805:24 | [true; 0] | | {EXTERNAL LOCATION} | [;] |
37433743
| main.rs:2805:16:2805:24 | [true; 0] | TArray | {EXTERNAL LOCATION} | bool |
37443744
| main.rs:2805:17:2805:20 | true | | {EXTERNAL LOCATION} | bool |
3745-
| main.rs:2806:9:2806:12 | arr3 | | {EXTERNAL LOCATION} | [;] |
3746-
| main.rs:2806:16:2806:17 | [...] | | {EXTERNAL LOCATION} | [;] |
3747-
| main.rs:2808:21:2808:23 | arr | | {EXTERNAL LOCATION} | [;] |
3748-
| main.rs:2808:21:2808:23 | arr | TArray | main.rs:2808:18:2808:18 | T |
3749-
| main.rs:2808:34:2808:34 | x | | main.rs:2808:18:2808:18 | T |
3750-
| main.rs:2808:40:2808:41 | { ... } | | {EXTERNAL LOCATION} | () |
3751-
| main.rs:2809:15:2809:18 | arr3 | | {EXTERNAL LOCATION} | [;] |
3752-
| main.rs:2812:11:2848:1 | { ... } | | {EXTERNAL LOCATION} | () |
3753-
| main.rs:2815:20:2815:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
3754-
| main.rs:2815:41:2815:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
3755-
| main.rs:2845:16:2845:19 | true | | {EXTERNAL LOCATION} | bool |
3745+
| main.rs:2807:9:2807:12 | arr3 | | {EXTERNAL LOCATION} | [;] |
3746+
| main.rs:2807:16:2807:17 | [...] | | {EXTERNAL LOCATION} | [;] |
3747+
| main.rs:2809:21:2809:23 | arr | | {EXTERNAL LOCATION} | [;] |
3748+
| main.rs:2809:21:2809:23 | arr | TArray | main.rs:2809:18:2809:18 | T |
3749+
| main.rs:2809:34:2809:34 | x | | main.rs:2809:18:2809:18 | T |
3750+
| main.rs:2809:40:2809:41 | { ... } | | {EXTERNAL LOCATION} | () |
3751+
| main.rs:2810:15:2810:18 | arr3 | | {EXTERNAL LOCATION} | [;] |
3752+
| main.rs:2813:11:2849:1 | { ... } | | {EXTERNAL LOCATION} | () |
3753+
| main.rs:2816:20:2816:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
3754+
| main.rs:2816:41:2816:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
3755+
| main.rs:2846:16:2846:19 | true | | {EXTERNAL LOCATION} | bool |
37563756
| overloading.rs:4:19:4:23 | SelfParam | | {EXTERNAL LOCATION} | & |
37573757
| overloading.rs:4:19:4:23 | SelfParam | TRef | overloading.rs:2:5:11:5 | Self [trait FirstTrait] |
37583758
| overloading.rs:4:34:6:9 | { ... } | | {EXTERNAL LOCATION} | bool |
@@ -12573,7 +12573,7 @@ inferType
1257312573
| main.rs:2799:24:2799:25 | &g | TRef.T | {EXTERNAL LOCATION} | i64 |
1257412574
| main.rs:2799:25:2799:25 | g | | main.rs:2780:5:2780:21 | Gen |
1257512575
| main.rs:2799:25:2799:25 | g | T | {EXTERNAL LOCATION} | i64 |
12576-
| main.rs:2803:18:2810:1 | { ... } | | {EXTERNAL LOCATION} | () |
12576+
| main.rs:2803:18:2811:1 | { ... } | | {EXTERNAL LOCATION} | () |
1257712577
| main.rs:2804:9:2804:12 | arr1 | | {EXTERNAL LOCATION} | [;] |
1257812578
| main.rs:2804:9:2804:12 | arr1 | TArray | {EXTERNAL LOCATION} | i32 |
1257912579
| main.rs:2804:21:2804:21 | 0 | | {EXTERNAL LOCATION} | i32 |
@@ -12585,62 +12585,62 @@ inferType
1258512585
| main.rs:2805:16:2805:24 | [true; 0] | TArray | {EXTERNAL LOCATION} | bool |
1258612586
| main.rs:2805:17:2805:20 | true | | {EXTERNAL LOCATION} | bool |
1258712587
| main.rs:2805:23:2805:23 | 0 | | {EXTERNAL LOCATION} | i32 |
12588-
| main.rs:2806:9:2806:12 | arr3 | | {EXTERNAL LOCATION} | [;] |
12589-
| main.rs:2806:9:2806:12 | arr3 | TArray | {EXTERNAL LOCATION} | i32 |
12590-
| main.rs:2806:16:2806:17 | [...] | | {EXTERNAL LOCATION} | [;] |
12591-
| main.rs:2806:16:2806:17 | [...] | TArray | {EXTERNAL LOCATION} | i32 |
12592-
| main.rs:2808:21:2808:23 | arr | | {EXTERNAL LOCATION} | [;] |
12593-
| main.rs:2808:21:2808:23 | arr | TArray | main.rs:2808:18:2808:18 | T |
12594-
| main.rs:2808:30:2808:30 | 0 | | {EXTERNAL LOCATION} | i32 |
12595-
| main.rs:2808:34:2808:34 | x | | main.rs:2808:18:2808:18 | T |
12596-
| main.rs:2808:40:2808:41 | { ... } | | {EXTERNAL LOCATION} | () |
12597-
| main.rs:2809:5:2809:22 | pin_array(...) | | {EXTERNAL LOCATION} | () |
12598-
| main.rs:2809:15:2809:18 | arr3 | | {EXTERNAL LOCATION} | [;] |
12599-
| main.rs:2809:15:2809:18 | arr3 | TArray | {EXTERNAL LOCATION} | i32 |
12600-
| main.rs:2809:21:2809:21 | 1 | | {EXTERNAL LOCATION} | i32 |
12601-
| main.rs:2812:11:2848:1 | { ... } | | {EXTERNAL LOCATION} | () |
12602-
| main.rs:2813:5:2813:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12603-
| main.rs:2814:5:2814:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
12604-
| main.rs:2815:5:2815:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
12605-
| main.rs:2815:20:2815:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
12606-
| main.rs:2815:41:2815:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
12607-
| main.rs:2816:5:2816:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12608-
| main.rs:2817:5:2817:41 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12609-
| main.rs:2818:5:2818:45 | ...::test(...) | | {EXTERNAL LOCATION} | () |
12610-
| main.rs:2819:5:2819:30 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12611-
| main.rs:2820:5:2820:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12612-
| main.rs:2821:5:2821:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12613-
| main.rs:2822:5:2822:32 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12614-
| main.rs:2823:5:2823:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12615-
| main.rs:2824:5:2824:36 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12616-
| main.rs:2825:5:2825:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12617-
| main.rs:2826:5:2826:29 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12618-
| main.rs:2827:5:2827:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12619-
| main.rs:2828:5:2828:24 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12620-
| main.rs:2829:5:2829:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12621-
| main.rs:2830:5:2830:18 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12622-
| main.rs:2831:5:2831:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future |
12623-
| main.rs:2831:5:2831:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () |
12624-
| main.rs:2832:5:2832:19 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12625-
| main.rs:2833:5:2833:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12626-
| main.rs:2834:5:2834:14 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12627-
| main.rs:2835:5:2835:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12628-
| main.rs:2836:5:2836:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12629-
| main.rs:2837:5:2837:43 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12630-
| main.rs:2838:5:2838:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12631-
| main.rs:2839:5:2839:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12632-
| main.rs:2840:5:2840:28 | ...::test(...) | | {EXTERNAL LOCATION} | () |
12633-
| main.rs:2841:5:2841:23 | ...::test(...) | | {EXTERNAL LOCATION} | () |
12634-
| main.rs:2842:5:2842:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () |
12635-
| main.rs:2843:5:2843:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () |
12636-
| main.rs:2844:5:2844:20 | ...::test(...) | | {EXTERNAL LOCATION} | () |
12637-
| main.rs:2845:5:2845:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box |
12638-
| main.rs:2845:5:2845:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global |
12639-
| main.rs:2845:5:2845:20 | ...::f(...) | T | main.rs:2564:5:2566:5 | dyn MyTrait |
12640-
| main.rs:2845:5:2845:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 |
12641-
| main.rs:2845:16:2845:19 | true | | {EXTERNAL LOCATION} | bool |
12642-
| main.rs:2846:5:2846:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12643-
| main.rs:2847:5:2847:17 | empty_array(...) | | {EXTERNAL LOCATION} | () |
12588+
| main.rs:2807:9:2807:12 | arr3 | | {EXTERNAL LOCATION} | [;] |
12589+
| main.rs:2807:9:2807:12 | arr3 | TArray | {EXTERNAL LOCATION} | i32 |
12590+
| main.rs:2807:16:2807:17 | [...] | | {EXTERNAL LOCATION} | [;] |
12591+
| main.rs:2807:16:2807:17 | [...] | TArray | {EXTERNAL LOCATION} | i32 |
12592+
| main.rs:2809:21:2809:23 | arr | | {EXTERNAL LOCATION} | [;] |
12593+
| main.rs:2809:21:2809:23 | arr | TArray | main.rs:2809:18:2809:18 | T |
12594+
| main.rs:2809:30:2809:30 | 0 | | {EXTERNAL LOCATION} | i32 |
12595+
| main.rs:2809:34:2809:34 | x | | main.rs:2809:18:2809:18 | T |
12596+
| main.rs:2809:40:2809:41 | { ... } | | {EXTERNAL LOCATION} | () |
12597+
| main.rs:2810:5:2810:22 | pin_array(...) | | {EXTERNAL LOCATION} | () |
12598+
| main.rs:2810:15:2810:18 | arr3 | | {EXTERNAL LOCATION} | [;] |
12599+
| main.rs:2810:15:2810:18 | arr3 | TArray | {EXTERNAL LOCATION} | i32 |
12600+
| main.rs:2810:21:2810:21 | 1 | | {EXTERNAL LOCATION} | i32 |
12601+
| main.rs:2813:11:2849:1 | { ... } | | {EXTERNAL LOCATION} | () |
12602+
| main.rs:2814:5:2814:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12603+
| main.rs:2815:5:2815:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
12604+
| main.rs:2816:5:2816:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
12605+
| main.rs:2816:20:2816:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
12606+
| main.rs:2816:41:2816:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
12607+
| main.rs:2817:5:2817:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12608+
| main.rs:2818:5:2818:41 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12609+
| main.rs:2819:5:2819:45 | ...::test(...) | | {EXTERNAL LOCATION} | () |
12610+
| main.rs:2820:5:2820:30 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12611+
| main.rs:2821:5:2821:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12612+
| main.rs:2822:5:2822:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12613+
| main.rs:2823:5:2823:32 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12614+
| main.rs:2824:5:2824:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12615+
| main.rs:2825:5:2825:36 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12616+
| main.rs:2826:5:2826:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12617+
| main.rs:2827:5:2827:29 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12618+
| main.rs:2828:5:2828:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12619+
| main.rs:2829:5:2829:24 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12620+
| main.rs:2830:5:2830:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12621+
| main.rs:2831:5:2831:18 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12622+
| main.rs:2832:5:2832:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future |
12623+
| main.rs:2832:5:2832:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () |
12624+
| main.rs:2833:5:2833:19 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12625+
| main.rs:2834:5:2834:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12626+
| main.rs:2835:5:2835:14 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12627+
| main.rs:2836:5:2836:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12628+
| main.rs:2837:5:2837:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12629+
| main.rs:2838:5:2838:43 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12630+
| main.rs:2839:5:2839:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12631+
| main.rs:2840:5:2840:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12632+
| main.rs:2841:5:2841:28 | ...::test(...) | | {EXTERNAL LOCATION} | () |
12633+
| main.rs:2842:5:2842:23 | ...::test(...) | | {EXTERNAL LOCATION} | () |
12634+
| main.rs:2843:5:2843:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () |
12635+
| main.rs:2844:5:2844:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () |
12636+
| main.rs:2845:5:2845:20 | ...::test(...) | | {EXTERNAL LOCATION} | () |
12637+
| main.rs:2846:5:2846:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box |
12638+
| main.rs:2846:5:2846:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global |
12639+
| main.rs:2846:5:2846:20 | ...::f(...) | T | main.rs:2564:5:2566:5 | dyn MyTrait |
12640+
| main.rs:2846:5:2846:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 |
12641+
| main.rs:2846:16:2846:19 | true | | {EXTERNAL LOCATION} | bool |
12642+
| main.rs:2847:5:2847:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
12643+
| main.rs:2848:5:2848:17 | empty_array(...) | | {EXTERNAL LOCATION} | () |
1264412644
| overloading.rs:4:19:4:23 | SelfParam | | {EXTERNAL LOCATION} | & |
1264512645
| overloading.rs:4:19:4:23 | SelfParam | TRef | overloading.rs:2:5:11:5 | Self [trait FirstTrait] |
1264612646
| overloading.rs:4:34:6:9 | { ... } | | {EXTERNAL LOCATION} | bool |

0 commit comments

Comments
 (0)