From 73f854f07355b712ac46df6ef16b4d07d2ee29ac Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 8 Jul 2025 10:15:08 +0200 Subject: [PATCH 1/3] Rust: Adjust the inferred type of string literals --- .../codeql/rust/internal/TypeInference.qll | 17 +- .../test/library-tests/type-inference/main.rs | 10 +- .../type-inference/type-inference.expected | 396 ++++++++++++------ 3 files changed, 280 insertions(+), 143 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 5cb61961ae4b..b0348d7400a8 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -1045,14 +1045,12 @@ private Type inferTryExprType(TryExpr te, TypePath path) { } pragma[nomagic] -private StructType inferLiteralType(LiteralExpr le) { +private Type inferLiteralType(LiteralExpr le, TypePath path) { + path.isEmpty() and exists(Builtins::BuiltinType t | result = TStruct(t) | le instanceof CharLiteralExpr and t instanceof Builtins::Char or - le instanceof StringLiteralExpr and - t instanceof Builtins::Str - or le = any(NumberLiteralExpr ne | t.getName() = ne.getSuffix() @@ -1070,6 +1068,14 @@ private StructType inferLiteralType(LiteralExpr le) { le instanceof BooleanLiteralExpr and t instanceof Builtins::Bool ) + or + le instanceof StringLiteralExpr and + ( + path.isEmpty() and result = TRefType() + or + path = TypePath::singleton(TRefTypeParameter()) and + result = TStruct(any(Builtins::Str s)) + ) } pragma[nomagic] @@ -1635,8 +1641,7 @@ private module Cached { or result = inferTryExprType(n, path) or - result = inferLiteralType(n) and - path.isEmpty() + result = inferLiteralType(n, path) or result = inferAsyncBlockExprRootType(n) and path.isEmpty() diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 839bde516b66..7535df34ee81 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1413,7 +1413,7 @@ mod builtins { let z = x + y; // $ type=z:i32 method=add let z = x.abs(); // $ method=abs $ type=z:i32 let c = 'c'; // $ type=c:char - let hello = "Hello"; // $ type=hello:str + let hello = "Hello"; // $ type=hello:&T.str let f = 123.0f64; // $ type=f:f64 let t = true; // $ type=t:bool let f = false; // $ type=f:bool @@ -2086,10 +2086,10 @@ mod loops { let vals4: [u64; 3] = [1; 3]; // $ type=vals4:[T;...].u64 for u in vals4 {} // $ type=u:u64 - let mut strings1 = ["foo", "bar", "baz"]; // $ type=strings1:[T;...].str - for s in &strings1 {} // $ type=s:&T.str - for s in &mut strings1 {} // $ type=s:&T.str - for s in strings1 {} // $ type=s:str + let mut strings1 = ["foo", "bar", "baz"]; // $ type=strings1:[T;...].&T.str + for s in &strings1 {} // $ type=s:&T.&T.str + for s in &mut strings1 {} // $ type=s:&T.&T.str + for s in strings1 {} // $ type=s:&T.str let strings2 = // $ type=strings2:[T;...].String [ 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 9ede48aba897..cf14df7e9af7 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -162,7 +162,8 @@ inferType | main.rs:26:13:26:13 | x | | main.rs:5:5:8:5 | MyThing | | main.rs:26:17:26:32 | MyThing {...} | | main.rs:5:5:8:5 | MyThing | | main.rs:26:30:26:30 | S | | main.rs:2:5:3:13 | S | -| main.rs:27:18:27:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:27:18:27:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:27:18:27:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:27:26:27:26 | x | | main.rs:5:5:8:5 | MyThing | | main.rs:27:26:27:28 | x.a | | main.rs:2:5:3:13 | S | | main.rs:30:29:30:29 | x | | main.rs:16:5:19:5 | GenericThing | @@ -171,14 +172,16 @@ inferType | main.rs:31:17:31:17 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:31:17:31:17 | x | A | {EXTERNAL LOCATION} | bool | | main.rs:31:17:31:19 | x.a | | {EXTERNAL LOCATION} | bool | -| main.rs:32:18:32:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:32:18:32:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:32:18:32:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:32:26:32:26 | a | | {EXTERNAL LOCATION} | bool | | main.rs:37:13:37:13 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:37:13:37:13 | x | A | main.rs:2:5:3:13 | S | | main.rs:37:17:37:42 | GenericThing::<...> {...} | | main.rs:16:5:19:5 | GenericThing | | main.rs:37:17:37:42 | GenericThing::<...> {...} | A | main.rs:2:5:3:13 | S | | main.rs:37:40:37:40 | S | | main.rs:2:5:3:13 | S | -| main.rs:38:18:38:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:38:18:38:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:38:18:38:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:38:26:38:26 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:38:26:38:26 | x | A | main.rs:2:5:3:13 | S | | main.rs:38:26:38:28 | x.a | | main.rs:2:5:3:13 | S | @@ -187,7 +190,8 @@ inferType | main.rs:41:17:41:37 | GenericThing {...} | | main.rs:16:5:19:5 | GenericThing | | main.rs:41:17:41:37 | GenericThing {...} | A | main.rs:2:5:3:13 | S | | main.rs:41:35:41:35 | S | | main.rs:2:5:3:13 | S | -| main.rs:42:18:42:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:42:18:42:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:42:18:42:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:42:26:42:26 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:42:26:42:26 | x | A | main.rs:2:5:3:13 | S | | main.rs:42:26:42:28 | x.a | | main.rs:2:5:3:13 | S | @@ -195,7 +199,8 @@ inferType | main.rs:46:17:48:9 | OptionS {...} | | main.rs:21:5:23:5 | OptionS | | main.rs:47:16:47:33 | ...::MyNone(...) | | main.rs:10:5:14:5 | MyOption | | main.rs:47:16:47:33 | ...::MyNone(...) | T | main.rs:2:5:3:13 | S | -| main.rs:49:18:49:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:49:18:49:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:49:18:49:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:49:26:49:26 | x | | main.rs:21:5:23:5 | OptionS | | main.rs:49:26:49:28 | x.a | | main.rs:10:5:14:5 | MyOption | | main.rs:49:26:49:28 | x.a | T | main.rs:2:5:3:13 | S | @@ -207,7 +212,8 @@ inferType | main.rs:52:17:54:9 | GenericThing::<...> {...} | A.T | main.rs:2:5:3:13 | S | | main.rs:53:16:53:33 | ...::MyNone(...) | | main.rs:10:5:14:5 | MyOption | | main.rs:53:16:53:33 | ...::MyNone(...) | T | main.rs:2:5:3:13 | S | -| main.rs:55:18:55:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:55:18:55:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:55:18:55:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:55:26:55:26 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:55:26:55:26 | x | A | main.rs:10:5:14:5 | MyOption | | main.rs:55:26:55:26 | x | A.T | main.rs:2:5:3:13 | S | @@ -228,7 +234,8 @@ inferType | main.rs:61:30:61:30 | x | A.T | main.rs:2:5:3:13 | S | | main.rs:61:30:61:32 | x.a | | main.rs:10:5:14:5 | MyOption | | main.rs:61:30:61:32 | x.a | T | main.rs:2:5:3:13 | S | -| main.rs:62:18:62:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:62:18:62:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:62:18:62:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:62:26:62:26 | a | | main.rs:10:5:14:5 | MyOption | | main.rs:62:26:62:26 | a | T | main.rs:2:5:3:13 | S | | main.rs:75:19:75:22 | SelfParam | | main.rs:72:5:72:21 | Foo | @@ -238,7 +245,8 @@ inferType | main.rs:79:32:81:9 | { ... } | | main.rs:72:5:72:21 | Foo | | main.rs:80:13:80:16 | self | | main.rs:72:5:72:21 | Foo | | main.rs:84:23:89:5 | { ... } | | main.rs:72:5:72:21 | Foo | -| main.rs:85:18:85:33 | "main.rs::m1::f\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:85:18:85:33 | "main.rs::m1::f\\n" | | file://:0:0:0:0 | & | +| main.rs:85:18:85:33 | "main.rs::m1::f\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:86:13:86:13 | x | | main.rs:72:5:72:21 | Foo | | main.rs:86:17:86:22 | Foo {...} | | main.rs:72:5:72:21 | Foo | | main.rs:87:13:87:13 | y | | main.rs:72:5:72:21 | Foo | @@ -247,7 +255,8 @@ inferType | main.rs:91:14:91:14 | x | | main.rs:72:5:72:21 | Foo | | main.rs:91:22:91:22 | y | | main.rs:72:5:72:21 | Foo | | main.rs:91:37:95:5 | { ... } | | main.rs:72:5:72:21 | Foo | -| main.rs:92:18:92:33 | "main.rs::m1::g\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:92:18:92:33 | "main.rs::m1::g\\n" | | file://:0:0:0:0 | & | +| main.rs:92:18:92:33 | "main.rs::m1::g\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:93:9:93:9 | x | | main.rs:72:5:72:21 | Foo | | main.rs:93:9:93:14 | x.m1() | | main.rs:72:5:72:21 | Foo | | main.rs:94:9:94:9 | y | | main.rs:72:5:72:21 | Foo | @@ -303,19 +312,23 @@ inferType | main.rs:157:17:157:33 | MyThing {...} | | main.rs:125:5:128:5 | MyThing | | main.rs:157:17:157:33 | MyThing {...} | A | main.rs:132:5:133:14 | S2 | | main.rs:157:30:157:31 | S2 | | main.rs:132:5:133:14 | S2 | -| main.rs:160:18:160:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:160:18:160:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:160:18:160:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:160:26:160:26 | x | | main.rs:125:5:128:5 | MyThing | | main.rs:160:26:160:26 | x | A | main.rs:130:5:131:14 | S1 | | main.rs:160:26:160:28 | x.a | | main.rs:130:5:131:14 | S1 | -| main.rs:161:18:161:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:161:18:161:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:161:18:161:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:161:26:161:26 | y | | main.rs:125:5:128:5 | MyThing | | main.rs:161:26:161:26 | y | A | main.rs:132:5:133:14 | S2 | | main.rs:161:26:161:28 | y.a | | main.rs:132:5:133:14 | S2 | -| main.rs:163:18:163:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:163:18:163:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:163:18:163:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:163:26:163:26 | x | | main.rs:125:5:128:5 | MyThing | | main.rs:163:26:163:26 | x | A | main.rs:130:5:131:14 | S1 | | main.rs:163:26:163:31 | x.m1() | | main.rs:130:5:131:14 | S1 | -| main.rs:164:18:164:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:164:18:164:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:164:18:164:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:164:26:164:26 | y | | main.rs:125:5:128:5 | MyThing | | main.rs:164:26:164:26 | y | A | main.rs:132:5:133:14 | S2 | | main.rs:164:26:164:31 | y.m1() | | main.rs:125:5:128:5 | MyThing | @@ -331,11 +344,13 @@ inferType | main.rs:167:17:167:33 | MyThing {...} | | main.rs:125:5:128:5 | MyThing | | main.rs:167:17:167:33 | MyThing {...} | A | main.rs:132:5:133:14 | S2 | | main.rs:167:30:167:31 | S2 | | main.rs:132:5:133:14 | S2 | -| main.rs:169:18:169:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:169:18:169:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:169:18:169:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:169:26:169:26 | x | | main.rs:125:5:128:5 | MyThing | | main.rs:169:26:169:26 | x | A | main.rs:130:5:131:14 | S1 | | main.rs:169:26:169:31 | x.m2() | | main.rs:130:5:131:14 | S1 | -| main.rs:170:18:170:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:170:18:170:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:170:18:170:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:170:26:170:26 | y | | main.rs:125:5:128:5 | MyThing | | main.rs:170:26:170:26 | y | A | main.rs:132:5:133:14 | S2 | | main.rs:170:26:170:31 | y.m2() | | main.rs:132:5:133:14 | S2 | @@ -474,11 +489,13 @@ inferType | main.rs:325:24:325:40 | MyThing {...} | | main.rs:175:5:178:5 | MyThing | | main.rs:325:24:325:40 | MyThing {...} | A | main.rs:190:5:191:14 | S3 | | main.rs:325:37:325:38 | S3 | | main.rs:190:5:191:14 | S3 | -| main.rs:329:18:329:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:329:18:329:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:329:18:329:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:329:26:329:33 | thing_s1 | | main.rs:175:5:178:5 | MyThing | | main.rs:329:26:329:33 | thing_s1 | A | main.rs:186:5:187:14 | S1 | | main.rs:329:26:329:38 | thing_s1.m1() | | main.rs:186:5:187:14 | S1 | -| main.rs:330:18:330:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:330:18:330:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:330:18:330:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:330:26:330:33 | thing_s2 | | main.rs:175:5:178:5 | MyThing | | main.rs:330:26:330:33 | thing_s2 | A | main.rs:188:5:189:14 | S2 | | main.rs:330:26:330:38 | thing_s2.m1() | | main.rs:175:5:178:5 | MyThing | @@ -488,7 +505,8 @@ inferType | main.rs:331:22:331:29 | thing_s3 | | main.rs:175:5:178:5 | MyThing | | main.rs:331:22:331:29 | thing_s3 | A | main.rs:190:5:191:14 | S3 | | main.rs:331:22:331:34 | thing_s3.m1() | | main.rs:190:5:191:14 | S3 | -| main.rs:332:18:332:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:332:18:332:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:332:18:332:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:332:26:332:27 | s3 | | main.rs:190:5:191:14 | S3 | | main.rs:334:13:334:14 | p1 | | main.rs:180:5:184:5 | MyPair | | main.rs:334:13:334:14 | p1 | P1 | main.rs:186:5:187:14 | S1 | @@ -498,7 +516,8 @@ inferType | main.rs:334:18:334:42 | MyPair {...} | P2 | main.rs:186:5:187:14 | S1 | | main.rs:334:31:334:32 | S1 | | main.rs:186:5:187:14 | S1 | | main.rs:334:39:334:40 | S1 | | main.rs:186:5:187:14 | S1 | -| main.rs:335:18:335:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:335:18:335:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:335:18:335:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:335:26:335:27 | p1 | | main.rs:180:5:184:5 | MyPair | | main.rs:335:26:335:27 | p1 | P1 | main.rs:186:5:187:14 | S1 | | main.rs:335:26:335:27 | p1 | P2 | main.rs:186:5:187:14 | S1 | @@ -511,7 +530,8 @@ inferType | main.rs:337:18:337:42 | MyPair {...} | P2 | main.rs:188:5:189:14 | S2 | | main.rs:337:31:337:32 | S1 | | main.rs:186:5:187:14 | S1 | | main.rs:337:39:337:40 | S2 | | main.rs:188:5:189:14 | S2 | -| main.rs:338:18:338:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:338:18:338:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:338:18:338:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:338:26:338:27 | p2 | | main.rs:180:5:184:5 | MyPair | | main.rs:338:26:338:27 | p2 | P1 | main.rs:186:5:187:14 | S1 | | main.rs:338:26:338:27 | p2 | P2 | main.rs:188:5:189:14 | S2 | @@ -528,7 +548,8 @@ inferType | main.rs:341:17:341:33 | MyThing {...} | A | main.rs:186:5:187:14 | S1 | | main.rs:341:30:341:31 | S1 | | main.rs:186:5:187:14 | S1 | | main.rs:342:17:342:18 | S3 | | main.rs:190:5:191:14 | S3 | -| main.rs:344:18:344:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:344:18:344:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:344:18:344:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:344:26:344:27 | p3 | | main.rs:180:5:184:5 | MyPair | | main.rs:344:26:344:27 | p3 | P1 | main.rs:175:5:178:5 | MyThing | | main.rs:344:26:344:27 | p3 | P1.A | main.rs:186:5:187:14 | S1 | @@ -547,14 +568,16 @@ inferType | main.rs:348:17:348:17 | a | P1 | main.rs:186:5:187:14 | S1 | | main.rs:348:17:348:17 | a | P2 | main.rs:186:5:187:14 | S1 | | main.rs:348:17:348:23 | a.fst() | | main.rs:186:5:187:14 | S1 | -| main.rs:349:18:349:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:349:18:349:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:349:18:349:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:349:26:349:26 | x | | main.rs:186:5:187:14 | S1 | | main.rs:350:13:350:13 | y | | main.rs:186:5:187:14 | S1 | | main.rs:350:17:350:17 | a | | main.rs:180:5:184:5 | MyPair | | main.rs:350:17:350:17 | a | P1 | main.rs:186:5:187:14 | S1 | | main.rs:350:17:350:17 | a | P2 | main.rs:186:5:187:14 | S1 | | main.rs:350:17:350:23 | a.snd() | | main.rs:186:5:187:14 | S1 | -| main.rs:351:18:351:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:351:18:351:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:351:18:351:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:351:26:351:26 | y | | main.rs:186:5:187:14 | S1 | | main.rs:357:13:357:13 | b | | main.rs:180:5:184:5 | MyPair | | main.rs:357:13:357:13 | b | P1 | main.rs:188:5:189:14 | S2 | @@ -569,20 +592,23 @@ inferType | main.rs:358:17:358:17 | b | P1 | main.rs:188:5:189:14 | S2 | | main.rs:358:17:358:17 | b | P2 | main.rs:186:5:187:14 | S1 | | main.rs:358:17:358:23 | b.fst() | | main.rs:186:5:187:14 | S1 | -| main.rs:359:18:359:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:359:18:359:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:359:18:359:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:359:26:359:26 | x | | main.rs:186:5:187:14 | S1 | | main.rs:360:13:360:13 | y | | main.rs:188:5:189:14 | S2 | | main.rs:360:17:360:17 | b | | main.rs:180:5:184:5 | MyPair | | main.rs:360:17:360:17 | b | P1 | main.rs:188:5:189:14 | S2 | | main.rs:360:17:360:17 | b | P2 | main.rs:186:5:187:14 | S1 | | main.rs:360:17:360:23 | b.snd() | | main.rs:188:5:189:14 | S2 | -| main.rs:361:18:361:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:361:18:361:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:361:18:361:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:361:26:361:26 | y | | main.rs:188:5:189:14 | S2 | | main.rs:365:13:365:13 | x | | main.rs:186:5:187:14 | S1 | | main.rs:365:17:365:39 | call_trait_m1(...) | | main.rs:186:5:187:14 | S1 | | main.rs:365:31:365:38 | thing_s1 | | main.rs:175:5:178:5 | MyThing | | main.rs:365:31:365:38 | thing_s1 | A | main.rs:186:5:187:14 | S1 | -| main.rs:366:18:366:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:366:18:366:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:366:18:366:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:366:26:366:26 | x | | main.rs:186:5:187:14 | S1 | | main.rs:367:13:367:13 | y | | main.rs:175:5:178:5 | MyThing | | main.rs:367:13:367:13 | y | A | main.rs:188:5:189:14 | S2 | @@ -590,7 +616,8 @@ inferType | main.rs:367:17:367:39 | call_trait_m1(...) | A | main.rs:188:5:189:14 | S2 | | main.rs:367:31:367:38 | thing_s2 | | main.rs:175:5:178:5 | MyThing | | main.rs:367:31:367:38 | thing_s2 | A | main.rs:188:5:189:14 | S2 | -| main.rs:368:18:368:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:368:18:368:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:368:18:368:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:368:26:368:26 | y | | main.rs:175:5:178:5 | MyThing | | main.rs:368:26:368:26 | y | A | main.rs:188:5:189:14 | S2 | | main.rs:368:26:368:28 | y.a | | main.rs:188:5:189:14 | S2 | @@ -607,14 +634,16 @@ inferType | main.rs:372:25:372:25 | a | | main.rs:180:5:184:5 | MyPair | | main.rs:372:25:372:25 | a | P1 | main.rs:186:5:187:14 | S1 | | main.rs:372:25:372:25 | a | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:373:18:373:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:373:18:373:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:373:18:373:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:373:26:373:26 | x | | main.rs:186:5:187:14 | S1 | | main.rs:374:13:374:13 | y | | main.rs:186:5:187:14 | S1 | | main.rs:374:17:374:26 | get_snd(...) | | main.rs:186:5:187:14 | S1 | | main.rs:374:25:374:25 | a | | main.rs:180:5:184:5 | MyPair | | main.rs:374:25:374:25 | a | P1 | main.rs:186:5:187:14 | S1 | | main.rs:374:25:374:25 | a | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:375:18:375:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:375:18:375:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:375:18:375:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:375:26:375:26 | y | | main.rs:186:5:187:14 | S1 | | main.rs:378:13:378:13 | b | | main.rs:180:5:184:5 | MyPair | | main.rs:378:13:378:13 | b | P1 | main.rs:188:5:189:14 | S2 | @@ -629,14 +658,16 @@ inferType | main.rs:379:25:379:25 | b | | main.rs:180:5:184:5 | MyPair | | main.rs:379:25:379:25 | b | P1 | main.rs:188:5:189:14 | S2 | | main.rs:379:25:379:25 | b | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:380:18:380:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:380:18:380:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:380:18:380:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:380:26:380:26 | x | | main.rs:186:5:187:14 | S1 | | main.rs:381:13:381:13 | y | | main.rs:188:5:189:14 | S2 | | main.rs:381:17:381:26 | get_snd(...) | | main.rs:188:5:189:14 | S2 | | main.rs:381:25:381:25 | b | | main.rs:180:5:184:5 | MyPair | | main.rs:381:25:381:25 | b | P1 | main.rs:188:5:189:14 | S2 | | main.rs:381:25:381:25 | b | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:382:18:382:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:382:18:382:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:382:18:382:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:382:26:382:26 | y | | main.rs:188:5:189:14 | S2 | | main.rs:384:13:384:13 | c | | main.rs:180:5:184:5 | MyPair | | main.rs:384:13:384:13 | c | P1 | main.rs:190:5:191:14 | S3 | @@ -741,10 +772,12 @@ inferType | main.rs:485:13:485:16 | self | &T.T3 | main.rs:482:10:482:10 | T | | main.rs:490:13:490:13 | x | | main.rs:397:5:398:14 | S1 | | main.rs:490:17:490:18 | S1 | | main.rs:397:5:398:14 | S1 | -| main.rs:491:18:491:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:491:18:491:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:491:18:491:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:491:26:491:26 | x | | main.rs:397:5:398:14 | S1 | | main.rs:491:26:491:42 | x.common_method() | | main.rs:397:5:398:14 | S1 | -| main.rs:492:18:492:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:492:18:492:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:492:18:492:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:492:26:492:26 | x | | main.rs:397:5:398:14 | S1 | | main.rs:492:26:492:44 | x.common_method_2() | | main.rs:397:5:398:14 | S1 | | main.rs:494:13:494:13 | y | | main.rs:430:5:430:22 | S2 | @@ -752,7 +785,8 @@ inferType | main.rs:494:17:494:22 | S2(...) | | main.rs:430:5:430:22 | S2 | | main.rs:494:17:494:22 | S2(...) | T2 | main.rs:397:5:398:14 | S1 | | main.rs:494:20:494:21 | S1 | | main.rs:397:5:398:14 | S1 | -| main.rs:495:18:495:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:495:18:495:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:495:18:495:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:495:26:495:26 | y | | main.rs:430:5:430:22 | S2 | | main.rs:495:26:495:26 | y | T2 | main.rs:397:5:398:14 | S1 | | main.rs:495:26:495:42 | y.common_method() | | main.rs:397:5:398:14 | S1 | @@ -761,7 +795,8 @@ inferType | main.rs:497:17:497:21 | S2(...) | | main.rs:430:5:430:22 | S2 | | main.rs:497:17:497:21 | S2(...) | T2 | {EXTERNAL LOCATION} | i32 | | main.rs:497:20:497:20 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:498:18:498:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:498:18:498:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:498:18:498:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:498:26:498:26 | z | | main.rs:430:5:430:22 | S2 | | main.rs:498:26:498:26 | z | T2 | {EXTERNAL LOCATION} | i32 | | main.rs:498:26:498:42 | z.common_method() | | main.rs:397:5:398:14 | S1 | @@ -770,7 +805,8 @@ inferType | main.rs:500:17:500:22 | S3(...) | | main.rs:468:5:469:22 | S3 | | main.rs:500:17:500:22 | S3(...) | T3 | main.rs:397:5:398:14 | S1 | | main.rs:500:20:500:21 | S1 | | main.rs:397:5:398:14 | S1 | -| main.rs:501:18:501:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:501:18:501:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:501:18:501:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:501:26:501:26 | w | | main.rs:468:5:469:22 | S3 | | main.rs:501:26:501:26 | w | T3 | main.rs:397:5:398:14 | S1 | | main.rs:501:26:501:31 | w.m(...) | | file://:0:0:0:0 | & | @@ -783,25 +819,29 @@ inferType | main.rs:528:13:528:14 | s1 | | main.rs:526:35:526:42 | I | | main.rs:528:18:528:18 | x | | main.rs:526:45:526:61 | T | | main.rs:528:18:528:27 | x.method() | | main.rs:526:35:526:42 | I | -| main.rs:529:18:529:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:529:18:529:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:529:18:529:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:529:26:529:27 | s1 | | main.rs:526:35:526:42 | I | | main.rs:532:65:532:65 | x | | main.rs:532:46:532:62 | T | | main.rs:534:13:534:14 | s2 | | main.rs:532:36:532:43 | I | | main.rs:534:18:534:18 | x | | main.rs:532:46:532:62 | T | | main.rs:534:18:534:27 | x.method() | | main.rs:532:36:532:43 | I | -| main.rs:535:18:535:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:535:18:535:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:535:18:535:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:535:26:535:27 | s2 | | main.rs:532:36:532:43 | I | | main.rs:538:49:538:49 | x | | main.rs:538:30:538:46 | T | | main.rs:539:13:539:13 | s | | main.rs:508:5:509:14 | S1 | | main.rs:539:17:539:17 | x | | main.rs:538:30:538:46 | T | | main.rs:539:17:539:26 | x.method() | | main.rs:508:5:509:14 | S1 | -| main.rs:540:18:540:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:540:18:540:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:540:18:540:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:540:26:540:26 | s | | main.rs:508:5:509:14 | S1 | | main.rs:543:53:543:53 | x | | main.rs:543:34:543:50 | T | | main.rs:544:13:544:13 | s | | main.rs:508:5:509:14 | S1 | | main.rs:544:17:544:17 | x | | main.rs:543:34:543:50 | T | | main.rs:544:17:544:26 | x.method() | | main.rs:508:5:509:14 | S1 | -| main.rs:545:18:545:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:545:18:545:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:545:18:545:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:545:26:545:26 | s | | main.rs:508:5:509:14 | S1 | | main.rs:549:16:549:19 | SelfParam | | main.rs:548:5:552:5 | Self [trait Pair] | | main.rs:551:16:551:19 | SelfParam | | main.rs:548:5:552:5 | Self [trait Pair] | @@ -813,7 +853,8 @@ inferType | main.rs:557:13:557:14 | s2 | | main.rs:511:5:512:14 | S2 | | main.rs:557:18:557:18 | y | | main.rs:554:41:554:55 | T | | main.rs:557:18:557:24 | y.snd() | | main.rs:511:5:512:14 | S2 | -| main.rs:558:18:558:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:558:18:558:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:558:18:558:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:558:32:558:33 | s1 | | main.rs:508:5:509:14 | S1 | | main.rs:558:36:558:37 | s2 | | main.rs:511:5:512:14 | S2 | | main.rs:561:69:561:69 | x | | main.rs:561:52:561:66 | T | @@ -824,7 +865,8 @@ inferType | main.rs:564:13:564:14 | s2 | | main.rs:561:41:561:49 | T2 | | main.rs:564:18:564:18 | y | | main.rs:561:52:561:66 | T | | main.rs:564:18:564:24 | y.snd() | | main.rs:561:41:561:49 | T2 | -| main.rs:565:18:565:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:565:18:565:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:565:18:565:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:565:32:565:33 | s1 | | main.rs:508:5:509:14 | S1 | | main.rs:565:36:565:37 | s2 | | main.rs:561:41:561:49 | T2 | | main.rs:568:50:568:50 | x | | main.rs:568:41:568:47 | T | @@ -835,7 +877,8 @@ inferType | main.rs:571:13:571:14 | s2 | | {EXTERNAL LOCATION} | i64 | | main.rs:571:18:571:18 | y | | main.rs:568:41:568:47 | T | | main.rs:571:18:571:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | -| main.rs:572:18:572:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:572:18:572:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:572:18:572:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:572:32:572:33 | s1 | | {EXTERNAL LOCATION} | bool | | main.rs:572:36:572:37 | s2 | | {EXTERNAL LOCATION} | i64 | | main.rs:575:54:575:54 | x | | main.rs:575:41:575:51 | T | @@ -846,7 +889,8 @@ inferType | main.rs:578:13:578:14 | s2 | | {EXTERNAL LOCATION} | i64 | | main.rs:578:18:578:18 | y | | main.rs:575:41:575:51 | T | | main.rs:578:18:578:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | -| main.rs:579:18:579:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:579:18:579:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:579:18:579:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:579:32:579:33 | s1 | | {EXTERNAL LOCATION} | u8 | | main.rs:579:36:579:37 | s2 | | {EXTERNAL LOCATION} | i64 | | main.rs:595:15:595:18 | SelfParam | | main.rs:594:5:603:5 | Self [trait MyTrait] | @@ -881,11 +925,13 @@ inferType | main.rs:625:17:625:33 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | | main.rs:625:17:625:33 | MyThing {...} | T | main.rs:591:5:592:14 | S2 | | main.rs:625:30:625:31 | S2 | | main.rs:591:5:592:14 | S2 | -| main.rs:627:18:627:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:627:18:627:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:627:18:627:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:627:26:627:26 | x | | main.rs:584:5:587:5 | MyThing | | main.rs:627:26:627:26 | x | T | main.rs:589:5:590:14 | S1 | | main.rs:627:26:627:31 | x.m1() | | main.rs:589:5:590:14 | S1 | -| main.rs:628:18:628:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:628:18:628:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:628:18:628:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:628:26:628:26 | y | | main.rs:584:5:587:5 | MyThing | | main.rs:628:26:628:26 | y | T | main.rs:591:5:592:14 | S2 | | main.rs:628:26:628:31 | y.m1() | | main.rs:591:5:592:14 | S2 | @@ -899,11 +945,13 @@ inferType | main.rs:631:17:631:33 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | | main.rs:631:17:631:33 | MyThing {...} | T | main.rs:591:5:592:14 | S2 | | main.rs:631:30:631:31 | S2 | | main.rs:591:5:592:14 | S2 | -| main.rs:633:18:633:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:633:18:633:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:633:18:633:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:633:26:633:26 | x | | main.rs:584:5:587:5 | MyThing | | main.rs:633:26:633:26 | x | T | main.rs:589:5:590:14 | S1 | | main.rs:633:26:633:31 | x.m2() | | main.rs:589:5:590:14 | S1 | -| main.rs:634:18:634:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:634:18:634:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:634:18:634:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:634:26:634:26 | y | | main.rs:584:5:587:5 | MyThing | | main.rs:634:26:634:26 | y | T | main.rs:591:5:592:14 | S2 | | main.rs:634:26:634:31 | y.m2() | | main.rs:591:5:592:14 | S2 | @@ -917,11 +965,13 @@ inferType | main.rs:637:18:637:34 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | | main.rs:637:18:637:34 | MyThing {...} | T | main.rs:591:5:592:14 | S2 | | main.rs:637:31:637:32 | S2 | | main.rs:591:5:592:14 | S2 | -| main.rs:639:18:639:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:639:18:639:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:639:18:639:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:639:26:639:42 | call_trait_m1(...) | | main.rs:589:5:590:14 | S1 | | main.rs:639:40:639:41 | x2 | | main.rs:584:5:587:5 | MyThing | | main.rs:639:40:639:41 | x2 | T | main.rs:589:5:590:14 | S1 | -| main.rs:640:18:640:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:640:18:640:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:640:18:640:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:640:26:640:42 | call_trait_m1(...) | | main.rs:591:5:592:14 | S2 | | main.rs:640:40:640:41 | y2 | | main.rs:584:5:587:5 | MyThing | | main.rs:640:40:640:41 | y2 | T | main.rs:591:5:592:14 | S2 | @@ -948,14 +998,16 @@ inferType | main.rs:649:37:649:38 | x3 | | main.rs:584:5:587:5 | MyThing | | main.rs:649:37:649:38 | x3 | T | main.rs:584:5:587:5 | MyThing | | main.rs:649:37:649:38 | x3 | T.T | main.rs:589:5:590:14 | S1 | -| main.rs:650:18:650:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:650:18:650:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:650:18:650:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:650:26:650:26 | a | | main.rs:589:5:590:14 | S1 | | main.rs:651:13:651:13 | b | | main.rs:591:5:592:14 | S2 | | main.rs:651:17:651:39 | call_trait_thing_m1(...) | | main.rs:591:5:592:14 | S2 | | main.rs:651:37:651:38 | y3 | | main.rs:584:5:587:5 | MyThing | | main.rs:651:37:651:38 | y3 | T | main.rs:584:5:587:5 | MyThing | | main.rs:651:37:651:38 | y3 | T.T | main.rs:591:5:592:14 | S2 | -| main.rs:652:18:652:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:652:18:652:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:652:18:652:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:652:26:652:26 | b | | main.rs:591:5:592:14 | S2 | | main.rs:663:19:663:22 | SelfParam | | main.rs:657:5:660:5 | Wrapper | | main.rs:663:19:663:22 | SelfParam | A | main.rs:662:10:662:10 | A | @@ -1029,7 +1081,8 @@ inferType | main.rs:771:13:771:14 | S2 | | main.rs:711:5:712:14 | S2 | | main.rs:776:13:776:14 | x1 | | main.rs:708:5:709:13 | S | | main.rs:776:18:776:18 | S | | main.rs:708:5:709:13 | S | -| main.rs:778:18:778:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:778:18:778:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:778:18:778:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:778:26:778:27 | x1 | | main.rs:708:5:709:13 | S | | main.rs:778:26:778:32 | x1.m1() | | main.rs:714:5:715:14 | AT | | main.rs:780:13:780:14 | x2 | | main.rs:708:5:709:13 | S | @@ -1037,17 +1090,20 @@ inferType | main.rs:782:13:782:13 | y | | main.rs:714:5:715:14 | AT | | main.rs:782:17:782:18 | x2 | | main.rs:708:5:709:13 | S | | main.rs:782:17:782:23 | x2.m2() | | main.rs:714:5:715:14 | AT | -| main.rs:783:18:783:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:783:18:783:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:783:18:783:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:783:26:783:26 | y | | main.rs:714:5:715:14 | AT | | main.rs:785:13:785:14 | x3 | | main.rs:708:5:709:13 | S | | main.rs:785:18:785:18 | S | | main.rs:708:5:709:13 | S | -| main.rs:787:18:787:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:787:18:787:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:787:18:787:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:787:26:787:27 | x3 | | main.rs:708:5:709:13 | S | | main.rs:787:26:787:34 | x3.put(...) | | main.rs:657:5:660:5 | Wrapper | | main.rs:787:26:787:34 | x3.put(...) | A | {EXTERNAL LOCATION} | i32 | | main.rs:787:26:787:43 | ... .unwrap() | | {EXTERNAL LOCATION} | i32 | | main.rs:787:33:787:33 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:790:18:790:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:790:18:790:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:790:18:790:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:790:26:790:27 | x3 | | main.rs:708:5:709:13 | S | | main.rs:790:26:790:40 | x3.putTwo(...) | | main.rs:657:5:660:5 | Wrapper | | main.rs:790:26:790:40 | x3.putTwo(...) | A | main.rs:728:36:728:50 | AssociatedParam | @@ -1055,16 +1111,19 @@ inferType | main.rs:790:36:790:36 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:790:39:790:39 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:792:20:792:20 | S | | main.rs:708:5:709:13 | S | -| main.rs:793:18:793:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:793:18:793:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:793:18:793:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:795:13:795:14 | x5 | | main.rs:711:5:712:14 | S2 | | main.rs:795:18:795:19 | S2 | | main.rs:711:5:712:14 | S2 | -| main.rs:796:18:796:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:796:18:796:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:796:18:796:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:796:26:796:27 | x5 | | main.rs:711:5:712:14 | S2 | | main.rs:796:26:796:32 | x5.m1() | | main.rs:657:5:660:5 | Wrapper | | main.rs:796:26:796:32 | x5.m1() | A | main.rs:711:5:712:14 | S2 | | main.rs:797:13:797:14 | x6 | | main.rs:711:5:712:14 | S2 | | main.rs:797:18:797:19 | S2 | | main.rs:711:5:712:14 | S2 | -| main.rs:798:18:798:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:798:18:798:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:798:18:798:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:798:26:798:27 | x6 | | main.rs:711:5:712:14 | S2 | | main.rs:798:26:798:32 | x6.m2() | | main.rs:657:5:660:5 | Wrapper | | main.rs:798:26:798:32 | x6.m2() | A | main.rs:711:5:712:14 | S2 | @@ -1097,11 +1156,13 @@ inferType | main.rs:829:17:829:36 | ...::C2 {...} | | main.rs:807:5:811:5 | MyEnum | | main.rs:829:17:829:36 | ...::C2 {...} | A | main.rs:815:5:816:14 | S2 | | main.rs:829:33:829:34 | S2 | | main.rs:815:5:816:14 | S2 | -| main.rs:831:18:831:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:831:18:831:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:831:18:831:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:831:26:831:26 | x | | main.rs:807:5:811:5 | MyEnum | | main.rs:831:26:831:26 | x | A | main.rs:813:5:814:14 | S1 | | main.rs:831:26:831:31 | x.m1() | | main.rs:813:5:814:14 | S1 | -| main.rs:832:18:832:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:832:18:832:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:832:18:832:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:832:26:832:26 | y | | main.rs:807:5:811:5 | MyEnum | | main.rs:832:26:832:26 | y | A | main.rs:815:5:816:14 | S2 | | main.rs:832:26:832:31 | y.m1() | | main.rs:815:5:816:14 | S2 | @@ -1159,7 +1220,8 @@ inferType | main.rs:911:17:911:17 | x | | main.rs:909:39:909:53 | T | | main.rs:911:17:911:22 | x.m1() | | main.rs:837:5:840:5 | MyThing | | main.rs:911:17:911:22 | x.m1() | A | main.rs:847:5:848:14 | S1 | -| main.rs:912:18:912:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:912:18:912:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:912:18:912:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:912:26:912:26 | a | | main.rs:837:5:840:5 | MyThing | | main.rs:912:26:912:26 | a | A | main.rs:847:5:848:14 | S1 | | main.rs:916:13:916:13 | x | | main.rs:837:5:840:5 | MyThing | @@ -1172,11 +1234,13 @@ inferType | main.rs:917:17:917:33 | MyThing {...} | | main.rs:837:5:840:5 | MyThing | | main.rs:917:17:917:33 | MyThing {...} | A | main.rs:849:5:850:14 | S2 | | main.rs:917:30:917:31 | S2 | | main.rs:849:5:850:14 | S2 | -| main.rs:919:18:919:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:919:18:919:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:919:18:919:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:919:26:919:26 | x | | main.rs:837:5:840:5 | MyThing | | main.rs:919:26:919:26 | x | A | main.rs:847:5:848:14 | S1 | | main.rs:919:26:919:31 | x.m1() | | main.rs:847:5:848:14 | S1 | -| main.rs:920:18:920:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:920:18:920:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:920:18:920:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:920:26:920:26 | y | | main.rs:837:5:840:5 | MyThing | | main.rs:920:26:920:26 | y | A | main.rs:849:5:850:14 | S2 | | main.rs:920:26:920:31 | y.m1() | | main.rs:849:5:850:14 | S2 | @@ -1190,11 +1254,13 @@ inferType | main.rs:923:17:923:33 | MyThing {...} | | main.rs:837:5:840:5 | MyThing | | main.rs:923:17:923:33 | MyThing {...} | A | main.rs:849:5:850:14 | S2 | | main.rs:923:30:923:31 | S2 | | main.rs:849:5:850:14 | S2 | -| main.rs:925:18:925:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:925:18:925:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:925:18:925:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:925:26:925:26 | x | | main.rs:837:5:840:5 | MyThing | | main.rs:925:26:925:26 | x | A | main.rs:847:5:848:14 | S1 | | main.rs:925:26:925:31 | x.m2() | | main.rs:847:5:848:14 | S1 | -| main.rs:926:18:926:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:926:18:926:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:926:18:926:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:926:26:926:26 | y | | main.rs:837:5:840:5 | MyThing | | main.rs:926:26:926:26 | y | A | main.rs:849:5:850:14 | S2 | | main.rs:926:26:926:31 | y.m2() | | main.rs:849:5:850:14 | S2 | @@ -1208,11 +1274,13 @@ inferType | main.rs:929:17:929:34 | MyThing2 {...} | | main.rs:842:5:845:5 | MyThing2 | | main.rs:929:17:929:34 | MyThing2 {...} | A | main.rs:849:5:850:14 | S2 | | main.rs:929:31:929:32 | S2 | | main.rs:849:5:850:14 | S2 | -| main.rs:931:18:931:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:931:18:931:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:931:18:931:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:931:26:931:26 | x | | main.rs:842:5:845:5 | MyThing2 | | main.rs:931:26:931:26 | x | A | main.rs:847:5:848:14 | S1 | | main.rs:931:26:931:31 | x.m3() | | main.rs:847:5:848:14 | S1 | -| main.rs:932:18:932:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:932:18:932:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:932:18:932:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:932:26:932:26 | y | | main.rs:842:5:845:5 | MyThing2 | | main.rs:932:26:932:26 | y | A | main.rs:849:5:850:14 | S2 | | main.rs:932:26:932:31 | y.m3() | | main.rs:849:5:850:14 | S2 | @@ -1251,7 +1319,8 @@ inferType | main.rs:969:9:969:16 | x.into() | | main.rs:965:17:965:18 | T2 | | main.rs:973:13:973:13 | x | | main.rs:945:5:946:14 | S1 | | main.rs:973:17:973:18 | S1 | | main.rs:945:5:946:14 | S1 | -| main.rs:974:18:974:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:974:18:974:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:974:18:974:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:974:26:974:31 | id(...) | | file://:0:0:0:0 | & | | main.rs:974:26:974:31 | id(...) | &T | main.rs:945:5:946:14 | S1 | | main.rs:974:29:974:30 | &x | | file://:0:0:0:0 | & | @@ -1259,7 +1328,8 @@ inferType | main.rs:974:30:974:30 | x | | main.rs:945:5:946:14 | S1 | | main.rs:976:13:976:13 | x | | main.rs:945:5:946:14 | S1 | | main.rs:976:17:976:18 | S1 | | main.rs:945:5:946:14 | S1 | -| main.rs:977:18:977:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:977:18:977:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:977:18:977:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:977:26:977:37 | id::<...>(...) | | file://:0:0:0:0 | & | | main.rs:977:26:977:37 | id::<...>(...) | &T | main.rs:945:5:946:14 | S1 | | main.rs:977:35:977:36 | &x | | file://:0:0:0:0 | & | @@ -1267,7 +1337,8 @@ inferType | main.rs:977:36:977:36 | x | | main.rs:945:5:946:14 | S1 | | main.rs:979:13:979:13 | x | | main.rs:945:5:946:14 | S1 | | main.rs:979:17:979:18 | S1 | | main.rs:945:5:946:14 | S1 | -| main.rs:981:18:981:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:981:18:981:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:981:18:981:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:981:26:981:44 | id::<...>(...) | | file://:0:0:0:0 | & | | main.rs:981:26:981:44 | id::<...>(...) | &T | main.rs:945:5:946:14 | S1 | | main.rs:981:42:981:43 | &x | | file://:0:0:0:0 | & | @@ -1291,11 +1362,13 @@ inferType | main.rs:1002:19:1002:22 | self | Fst | main.rs:1000:10:1000:12 | Fst | | main.rs:1002:19:1002:22 | self | Snd | main.rs:1000:15:1000:17 | Snd | | main.rs:1003:43:1003:82 | MacroExpr | | main.rs:1000:15:1000:17 | Snd | -| main.rs:1003:50:1003:81 | "PairNone has no second elemen... | | {EXTERNAL LOCATION} | str | +| main.rs:1003:50:1003:81 | "PairNone has no second elemen... | | file://:0:0:0:0 | & | +| main.rs:1003:50:1003:81 | "PairNone has no second elemen... | &T | {EXTERNAL LOCATION} | str | | main.rs:1003:50:1003:81 | MacroExpr | | main.rs:1000:15:1000:17 | Snd | | main.rs:1003:50:1003:81 | { ... } | | main.rs:1000:15:1000:17 | Snd | | main.rs:1004:43:1004:81 | MacroExpr | | main.rs:1000:15:1000:17 | Snd | -| main.rs:1004:50:1004:80 | "PairFst has no second element... | | {EXTERNAL LOCATION} | str | +| main.rs:1004:50:1004:80 | "PairFst has no second element... | | file://:0:0:0:0 | & | +| main.rs:1004:50:1004:80 | "PairFst has no second element... | &T | {EXTERNAL LOCATION} | str | | main.rs:1004:50:1004:80 | MacroExpr | | main.rs:1000:15:1000:17 | Snd | | main.rs:1004:50:1004:80 | { ... } | | main.rs:1000:15:1000:17 | Snd | | main.rs:1005:37:1005:39 | snd | | main.rs:1000:15:1000:17 | Snd | @@ -1317,7 +1390,8 @@ inferType | main.rs:1033:17:1033:29 | t.unwrapSnd() | Fst | main.rs:1014:5:1015:14 | S2 | | main.rs:1033:17:1033:29 | t.unwrapSnd() | Snd | main.rs:1017:5:1018:14 | S3 | | main.rs:1033:17:1033:41 | ... .unwrapSnd() | | main.rs:1017:5:1018:14 | S3 | -| main.rs:1034:18:1034:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1034:18:1034:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1034:18:1034:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1034:26:1034:26 | x | | main.rs:1017:5:1018:14 | S3 | | main.rs:1047:13:1047:14 | p1 | | main.rs:992:5:998:5 | PairOption | | main.rs:1047:13:1047:14 | p1 | Fst | main.rs:1011:5:1012:14 | S1 | @@ -1327,7 +1401,8 @@ inferType | main.rs:1047:26:1047:53 | ...::PairBoth(...) | Snd | main.rs:1014:5:1015:14 | S2 | | main.rs:1047:47:1047:48 | S1 | | main.rs:1011:5:1012:14 | S1 | | main.rs:1047:51:1047:52 | S2 | | main.rs:1014:5:1015:14 | S2 | -| main.rs:1048:18:1048:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1048:18:1048:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1048:18:1048:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1048:26:1048:27 | p1 | | main.rs:992:5:998:5 | PairOption | | main.rs:1048:26:1048:27 | p1 | Fst | main.rs:1011:5:1012:14 | S1 | | main.rs:1048:26:1048:27 | p1 | Snd | main.rs:1014:5:1015:14 | S2 | @@ -1337,7 +1412,8 @@ inferType | main.rs:1051:26:1051:47 | ...::PairNone(...) | | main.rs:992:5:998:5 | PairOption | | main.rs:1051:26:1051:47 | ...::PairNone(...) | Fst | main.rs:1011:5:1012:14 | S1 | | main.rs:1051:26:1051:47 | ...::PairNone(...) | Snd | main.rs:1014:5:1015:14 | S2 | -| main.rs:1052:18:1052:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1052:18:1052:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1052:18:1052:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1052:26:1052:27 | p2 | | main.rs:992:5:998:5 | PairOption | | main.rs:1052:26:1052:27 | p2 | Fst | main.rs:1011:5:1012:14 | S1 | | main.rs:1052:26:1052:27 | p2 | Snd | main.rs:1014:5:1015:14 | S2 | @@ -1348,7 +1424,8 @@ inferType | main.rs:1055:34:1055:56 | ...::PairSnd(...) | Fst | main.rs:1014:5:1015:14 | S2 | | main.rs:1055:34:1055:56 | ...::PairSnd(...) | Snd | main.rs:1017:5:1018:14 | S3 | | main.rs:1055:54:1055:55 | S3 | | main.rs:1017:5:1018:14 | S3 | -| main.rs:1056:18:1056:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1056:18:1056:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1056:18:1056:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1056:26:1056:27 | p3 | | main.rs:992:5:998:5 | PairOption | | main.rs:1056:26:1056:27 | p3 | Fst | main.rs:1014:5:1015:14 | S2 | | main.rs:1056:26:1056:27 | p3 | Snd | main.rs:1017:5:1018:14 | S3 | @@ -1358,7 +1435,8 @@ inferType | main.rs:1059:35:1059:56 | ...::PairNone(...) | | main.rs:992:5:998:5 | PairOption | | main.rs:1059:35:1059:56 | ...::PairNone(...) | Fst | main.rs:1014:5:1015:14 | S2 | | main.rs:1059:35:1059:56 | ...::PairNone(...) | Snd | main.rs:1017:5:1018:14 | S3 | -| main.rs:1060:18:1060:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1060:18:1060:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1060:18:1060:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1060:26:1060:27 | p3 | | main.rs:992:5:998:5 | PairOption | | main.rs:1060:26:1060:27 | p3 | Fst | main.rs:1014:5:1015:14 | S2 | | main.rs:1060:26:1060:27 | p3 | Snd | main.rs:1017:5:1018:14 | S3 | @@ -1414,7 +1492,8 @@ inferType | main.rs:1108:13:1108:14 | x1 | T | main.rs:1104:5:1105:13 | S | | main.rs:1108:18:1108:37 | ...::new(...) | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1108:18:1108:37 | ...::new(...) | T | main.rs:1104:5:1105:13 | S | -| main.rs:1109:18:1109:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1109:18:1109:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1109:18:1109:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1109:26:1109:27 | x1 | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1109:26:1109:27 | x1 | T | main.rs:1104:5:1105:13 | S | | main.rs:1111:13:1111:18 | mut x2 | | main.rs:1069:5:1073:5 | MyOption | @@ -1424,14 +1503,16 @@ inferType | main.rs:1112:9:1112:10 | x2 | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1112:9:1112:10 | x2 | T | main.rs:1104:5:1105:13 | S | | main.rs:1112:16:1112:16 | S | | main.rs:1104:5:1105:13 | S | -| main.rs:1113:18:1113:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1113:18:1113:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1113:18:1113:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1113:26:1113:27 | x2 | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1113:26:1113:27 | x2 | T | main.rs:1104:5:1105:13 | S | | main.rs:1116:13:1116:18 | mut x3 | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1116:22:1116:36 | ...::new(...) | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1117:9:1117:10 | x3 | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1117:21:1117:21 | S | | main.rs:1104:5:1105:13 | S | -| main.rs:1118:18:1118:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1118:18:1118:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1118:18:1118:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1118:26:1118:27 | x3 | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1120:13:1120:18 | mut x4 | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1120:13:1120:18 | mut x4 | T | main.rs:1104:5:1105:13 | S | @@ -1443,7 +1524,8 @@ inferType | main.rs:1121:28:1121:29 | x4 | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1121:28:1121:29 | x4 | T | main.rs:1104:5:1105:13 | S | | main.rs:1121:32:1121:32 | S | | main.rs:1104:5:1105:13 | S | -| main.rs:1122:18:1122:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1122:18:1122:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1122:18:1122:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1122:26:1122:27 | x4 | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1122:26:1122:27 | x4 | T | main.rs:1104:5:1105:13 | S | | main.rs:1124:13:1124:14 | x5 | | main.rs:1069:5:1073:5 | MyOption | @@ -1454,7 +1536,8 @@ inferType | main.rs:1124:18:1124:58 | ...::MySome(...) | T.T | main.rs:1104:5:1105:13 | S | | main.rs:1124:35:1124:57 | ...::MyNone(...) | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1124:35:1124:57 | ...::MyNone(...) | T | main.rs:1104:5:1105:13 | S | -| main.rs:1125:18:1125:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1125:18:1125:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1125:18:1125:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1125:26:1125:27 | x5 | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1125:26:1125:27 | x5 | T | main.rs:1069:5:1073:5 | MyOption | | main.rs:1125:26:1125:27 | x5 | T.T | main.rs:1104:5:1105:13 | S | @@ -1468,7 +1551,8 @@ inferType | main.rs:1127:18:1127:58 | ...::MySome(...) | T.T | main.rs:1104:5:1105:13 | S | | main.rs:1127:35:1127:57 | ...::MyNone(...) | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1127:35:1127:57 | ...::MyNone(...) | T | main.rs:1104:5:1105:13 | S | -| main.rs:1128:18:1128:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1128:18:1128:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1128:18:1128:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1128:26:1128:61 | ...::flatten(...) | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1128:26:1128:61 | ...::flatten(...) | T | main.rs:1104:5:1105:13 | S | | main.rs:1128:59:1128:60 | x6 | | main.rs:1069:5:1073:5 | MyOption | @@ -1490,7 +1574,8 @@ inferType | main.rs:1134:13:1134:31 | ...::MySome(...) | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1134:13:1134:31 | ...::MySome(...) | T | main.rs:1104:5:1105:13 | S | | main.rs:1134:30:1134:30 | S | | main.rs:1104:5:1105:13 | S | -| main.rs:1136:18:1136:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1136:18:1136:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1136:18:1136:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1136:26:1136:32 | from_if | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1136:26:1136:32 | from_if | T | main.rs:1104:5:1105:13 | S | | main.rs:1139:13:1139:22 | from_match | | main.rs:1069:5:1073:5 | MyOption | @@ -1507,7 +1592,8 @@ inferType | main.rs:1141:22:1141:40 | ...::MySome(...) | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1141:22:1141:40 | ...::MySome(...) | T | main.rs:1104:5:1105:13 | S | | main.rs:1141:39:1141:39 | S | | main.rs:1104:5:1105:13 | S | -| main.rs:1143:18:1143:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1143:18:1143:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1143:18:1143:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1143:26:1143:35 | from_match | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1143:26:1143:35 | from_match | T | main.rs:1104:5:1105:13 | S | | main.rs:1146:13:1146:21 | from_loop | | main.rs:1069:5:1073:5 | MyOption | @@ -1522,7 +1608,8 @@ inferType | main.rs:1150:19:1150:37 | ...::MySome(...) | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1150:19:1150:37 | ...::MySome(...) | T | main.rs:1104:5:1105:13 | S | | main.rs:1150:36:1150:36 | S | | main.rs:1104:5:1105:13 | S | -| main.rs:1152:18:1152:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1152:18:1152:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1152:18:1152:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1152:26:1152:34 | from_loop | | main.rs:1069:5:1073:5 | MyOption | | main.rs:1152:26:1152:34 | from_loop | T | main.rs:1104:5:1105:13 | S | | main.rs:1170:15:1170:18 | SelfParam | | main.rs:1158:5:1159:19 | S | @@ -1587,7 +1674,8 @@ inferType | main.rs:1202:18:1202:22 | S(...) | | main.rs:1158:5:1159:19 | S | | main.rs:1202:18:1202:22 | S(...) | T | main.rs:1161:5:1162:14 | S2 | | main.rs:1202:20:1202:21 | S2 | | main.rs:1161:5:1162:14 | S2 | -| main.rs:1203:18:1203:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1203:18:1203:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1203:18:1203:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1203:26:1203:27 | x1 | | main.rs:1158:5:1159:19 | S | | main.rs:1203:26:1203:27 | x1 | T | main.rs:1161:5:1162:14 | S2 | | main.rs:1203:26:1203:32 | x1.m1() | | main.rs:1161:5:1162:14 | S2 | @@ -1596,12 +1684,14 @@ inferType | main.rs:1205:18:1205:22 | S(...) | | main.rs:1158:5:1159:19 | S | | main.rs:1205:18:1205:22 | S(...) | T | main.rs:1161:5:1162:14 | S2 | | main.rs:1205:20:1205:21 | S2 | | main.rs:1161:5:1162:14 | S2 | -| main.rs:1207:18:1207:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1207:18:1207:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1207:18:1207:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1207:26:1207:27 | x2 | | main.rs:1158:5:1159:19 | S | | main.rs:1207:26:1207:27 | x2 | T | main.rs:1161:5:1162:14 | S2 | | main.rs:1207:26:1207:32 | x2.m2() | | file://:0:0:0:0 | & | | main.rs:1207:26:1207:32 | x2.m2() | &T | main.rs:1161:5:1162:14 | S2 | -| main.rs:1208:18:1208:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1208:18:1208:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1208:18:1208:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1208:26:1208:27 | x2 | | main.rs:1158:5:1159:19 | S | | main.rs:1208:26:1208:27 | x2 | T | main.rs:1161:5:1162:14 | S2 | | main.rs:1208:26:1208:32 | x2.m3() | | file://:0:0:0:0 | & | @@ -1611,7 +1701,8 @@ inferType | main.rs:1210:18:1210:22 | S(...) | | main.rs:1158:5:1159:19 | S | | main.rs:1210:18:1210:22 | S(...) | T | main.rs:1161:5:1162:14 | S2 | | main.rs:1210:20:1210:21 | S2 | | main.rs:1161:5:1162:14 | S2 | -| main.rs:1212:18:1212:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1212:18:1212:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1212:18:1212:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1212:26:1212:41 | ...::m2(...) | | file://:0:0:0:0 | & | | main.rs:1212:26:1212:41 | ...::m2(...) | &T | main.rs:1161:5:1162:14 | S2 | | main.rs:1212:38:1212:40 | &x3 | | file://:0:0:0:0 | & | @@ -1619,7 +1710,8 @@ inferType | main.rs:1212:38:1212:40 | &x3 | &T.T | main.rs:1161:5:1162:14 | S2 | | main.rs:1212:39:1212:40 | x3 | | main.rs:1158:5:1159:19 | S | | main.rs:1212:39:1212:40 | x3 | T | main.rs:1161:5:1162:14 | S2 | -| main.rs:1213:18:1213:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1213:18:1213:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1213:18:1213:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1213:26:1213:41 | ...::m3(...) | | file://:0:0:0:0 | & | | main.rs:1213:26:1213:41 | ...::m3(...) | &T | main.rs:1161:5:1162:14 | S2 | | main.rs:1213:38:1213:40 | &x3 | | file://:0:0:0:0 | & | @@ -1636,13 +1728,15 @@ inferType | main.rs:1215:19:1215:23 | S(...) | | main.rs:1158:5:1159:19 | S | | main.rs:1215:19:1215:23 | S(...) | T | main.rs:1161:5:1162:14 | S2 | | main.rs:1215:21:1215:22 | S2 | | main.rs:1161:5:1162:14 | S2 | -| main.rs:1217:18:1217:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1217:18:1217:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1217:18:1217:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1217:26:1217:27 | x4 | | file://:0:0:0:0 | & | | main.rs:1217:26:1217:27 | x4 | &T | main.rs:1158:5:1159:19 | S | | main.rs:1217:26:1217:27 | x4 | &T.T | main.rs:1161:5:1162:14 | S2 | | main.rs:1217:26:1217:32 | x4.m2() | | file://:0:0:0:0 | & | | main.rs:1217:26:1217:32 | x4.m2() | &T | main.rs:1161:5:1162:14 | S2 | -| main.rs:1218:18:1218:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1218:18:1218:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1218:18:1218:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1218:26:1218:27 | x4 | | file://:0:0:0:0 | & | | main.rs:1218:26:1218:27 | x4 | &T | main.rs:1158:5:1159:19 | S | | main.rs:1218:26:1218:27 | x4 | &T.T | main.rs:1161:5:1162:14 | S2 | @@ -1657,12 +1751,14 @@ inferType | main.rs:1220:19:1220:23 | S(...) | | main.rs:1158:5:1159:19 | S | | main.rs:1220:19:1220:23 | S(...) | T | main.rs:1161:5:1162:14 | S2 | | main.rs:1220:21:1220:22 | S2 | | main.rs:1161:5:1162:14 | S2 | -| main.rs:1222:18:1222:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1222:18:1222:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1222:18:1222:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1222:26:1222:27 | x5 | | file://:0:0:0:0 | & | | main.rs:1222:26:1222:27 | x5 | &T | main.rs:1158:5:1159:19 | S | | main.rs:1222:26:1222:27 | x5 | &T.T | main.rs:1161:5:1162:14 | S2 | | main.rs:1222:26:1222:32 | x5.m1() | | main.rs:1161:5:1162:14 | S2 | -| main.rs:1223:18:1223:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1223:18:1223:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1223:18:1223:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1223:26:1223:27 | x5 | | file://:0:0:0:0 | & | | main.rs:1223:26:1223:27 | x5 | &T | main.rs:1158:5:1159:19 | S | | main.rs:1223:26:1223:27 | x5 | &T.T | main.rs:1161:5:1162:14 | S2 | @@ -1676,7 +1772,8 @@ inferType | main.rs:1225:19:1225:23 | S(...) | | main.rs:1158:5:1159:19 | S | | main.rs:1225:19:1225:23 | S(...) | T | main.rs:1161:5:1162:14 | S2 | | main.rs:1225:21:1225:22 | S2 | | main.rs:1161:5:1162:14 | S2 | -| main.rs:1228:18:1228:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1228:18:1228:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1228:18:1228:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1228:26:1228:30 | (...) | | main.rs:1158:5:1159:19 | S | | main.rs:1228:26:1228:30 | (...) | T | main.rs:1161:5:1162:14 | S2 | | main.rs:1228:26:1228:35 | ... .m1() | | main.rs:1161:5:1162:14 | S2 | @@ -1701,12 +1798,14 @@ inferType | main.rs:1233:17:1233:18 | x7 | T.&T | main.rs:1161:5:1162:14 | S2 | | main.rs:1233:17:1233:23 | x7.m1() | | file://:0:0:0:0 | & | | main.rs:1233:17:1233:23 | x7.m1() | &T | main.rs:1161:5:1162:14 | S2 | -| main.rs:1234:18:1234:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1234:18:1234:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1234:18:1234:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1234:26:1234:27 | x7 | | main.rs:1158:5:1159:19 | S | | main.rs:1234:26:1234:27 | x7 | T | file://:0:0:0:0 | & | | main.rs:1234:26:1234:27 | x7 | T.&T | main.rs:1161:5:1162:14 | S2 | | main.rs:1236:13:1236:14 | x9 | | {EXTERNAL LOCATION} | String | -| main.rs:1236:26:1236:32 | "Hello" | | {EXTERNAL LOCATION} | str | +| main.rs:1236:26:1236:32 | "Hello" | | file://:0:0:0:0 | & | +| main.rs:1236:26:1236:32 | "Hello" | &T | {EXTERNAL LOCATION} | str | | main.rs:1236:26:1236:44 | "Hello".to_string() | | {EXTERNAL LOCATION} | String | | main.rs:1240:13:1240:13 | u | | {EXTERNAL LOCATION} | Result | | main.rs:1240:13:1240:13 | u | T | {EXTERNAL LOCATION} | u32 | @@ -1722,7 +1821,8 @@ inferType | main.rs:1242:36:1242:37 | 37 | | {EXTERNAL LOCATION} | i64 | | main.rs:1244:17:1244:24 | my_thing | | file://:0:0:0:0 | & | | main.rs:1244:17:1244:24 | my_thing | &T | main.rs:1164:5:1167:5 | MyInt | -| main.rs:1245:18:1245:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1245:18:1245:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1245:18:1245:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1248:13:1248:20 | my_thing | | file://:0:0:0:0 | & | | main.rs:1248:13:1248:20 | my_thing | &T | main.rs:1164:5:1167:5 | MyInt | | main.rs:1248:24:1248:39 | &... | | file://:0:0:0:0 | & | @@ -1732,7 +1832,8 @@ inferType | main.rs:1248:36:1248:37 | 38 | | {EXTERNAL LOCATION} | i64 | | main.rs:1249:17:1249:24 | my_thing | | file://:0:0:0:0 | & | | main.rs:1249:17:1249:24 | my_thing | &T | main.rs:1164:5:1167:5 | MyInt | -| main.rs:1250:18:1250:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1250:18:1250:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1250:18:1250:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1257:16:1257:20 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1257:16:1257:20 | SelfParam | &T | main.rs:1255:5:1263:5 | Self [trait MyTrait] | | main.rs:1260:16:1260:20 | SelfParam | | file://:0:0:0:0 | & | @@ -1896,7 +1997,8 @@ inferType | main.rs:1340:22:1340:30 | &mut flag | &T | main.rs:1298:5:1301:5 | MyFlag | | main.rs:1340:27:1340:30 | flag | | {EXTERNAL LOCATION} | trait Default | | main.rs:1340:27:1340:30 | flag | | main.rs:1298:5:1301:5 | MyFlag | -| main.rs:1341:18:1341:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1341:18:1341:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1341:18:1341:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1341:26:1341:29 | flag | | {EXTERNAL LOCATION} | trait Default | | main.rs:1341:26:1341:29 | flag | | main.rs:1298:5:1301:5 | MyFlag | | main.rs:1356:43:1359:5 | { ... } | | {EXTERNAL LOCATION} | Result | @@ -1966,7 +2068,8 @@ inferType | main.rs:1382:33:1382:37 | value | | main.rs:1380:20:1380:27 | T | | main.rs:1382:53:1385:9 | { ... } | | {EXTERNAL LOCATION} | Result | | main.rs:1382:53:1385:9 | { ... } | E | main.rs:1348:5:1349:14 | S1 | -| main.rs:1383:22:1383:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1383:22:1383:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1383:22:1383:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1384:13:1384:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1384:13:1384:34 | ...::Ok::<...>(...) | E | main.rs:1348:5:1349:14 | S1 | | main.rs:1386:9:1386:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | @@ -1976,15 +2079,18 @@ inferType | main.rs:1391:37:1391:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1391:37:1391:52 | try_same_error(...) | E | main.rs:1348:5:1349:14 | S1 | | main.rs:1391:37:1391:52 | try_same_error(...) | T | main.rs:1348:5:1349:14 | S1 | -| main.rs:1392:22:1392:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1392:22:1392:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1392:22:1392:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1395:37:1395:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1395:37:1395:55 | try_convert_error(...) | E | main.rs:1351:5:1352:14 | S2 | | main.rs:1395:37:1395:55 | try_convert_error(...) | T | main.rs:1348:5:1349:14 | S1 | -| main.rs:1396:22:1396:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1396:22:1396:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1396:22:1396:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1399:37:1399:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1399:37:1399:49 | try_chained(...) | E | main.rs:1351:5:1352:14 | S2 | | main.rs:1399:37:1399:49 | try_chained(...) | T | main.rs:1348:5:1349:14 | S1 | -| main.rs:1400:22:1400:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1400:22:1400:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1400:22:1400:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1403:37:1403:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1403:37:1403:63 | try_complex(...) | E | main.rs:1348:5:1349:14 | S1 | | main.rs:1403:37:1403:63 | try_complex(...) | T | main.rs:1348:5:1349:14 | S1 | @@ -1992,7 +2098,8 @@ inferType | main.rs:1403:49:1403:62 | ...::Ok(...) | E | main.rs:1348:5:1349:14 | S1 | | main.rs:1403:49:1403:62 | ...::Ok(...) | T | main.rs:1348:5:1349:14 | S1 | | main.rs:1403:60:1403:61 | S1 | | main.rs:1348:5:1349:14 | S1 | -| main.rs:1404:22:1404:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1404:22:1404:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1404:22:1404:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1411:13:1411:13 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:1411:22:1411:22 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:1412:13:1412:13 | y | | {EXTERNAL LOCATION} | i32 | @@ -2006,8 +2113,10 @@ inferType | main.rs:1414:17:1414:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | | main.rs:1415:13:1415:13 | c | | {EXTERNAL LOCATION} | char | | main.rs:1415:17:1415:19 | 'c' | | {EXTERNAL LOCATION} | char | -| main.rs:1416:13:1416:17 | hello | | {EXTERNAL LOCATION} | str | -| main.rs:1416:21:1416:27 | "Hello" | | {EXTERNAL LOCATION} | str | +| main.rs:1416:13:1416:17 | hello | | file://:0:0:0:0 | & | +| main.rs:1416:13:1416:17 | hello | &T | {EXTERNAL LOCATION} | str | +| main.rs:1416:21:1416:27 | "Hello" | | file://:0:0:0:0 | & | +| main.rs:1416:21:1416:27 | "Hello" | &T | {EXTERNAL LOCATION} | str | | main.rs:1417:13:1417:13 | f | | {EXTERNAL LOCATION} | f64 | | main.rs:1417:17:1417:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | | main.rs:1418:13:1418:13 | t | | {EXTERNAL LOCATION} | bool | @@ -2951,10 +3060,12 @@ inferType | main.rs:1968:24:1968:25 | xs | | file://:0:0:0:0 | [] | | main.rs:1968:24:1968:25 | xs | [T;...] | main.rs:1917:5:1918:13 | S | | main.rs:1968:24:1968:25 | xs | [T] | main.rs:1917:5:1918:13 | S | -| main.rs:1974:25:1974:35 | "Hello, {}" | | {EXTERNAL LOCATION} | str | +| main.rs:1974:25:1974:35 | "Hello, {}" | | file://:0:0:0:0 | & | +| main.rs:1974:25:1974:35 | "Hello, {}" | &T | {EXTERNAL LOCATION} | str | | main.rs:1974:25:1974:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | | main.rs:1974:25:1974:45 | { ... } | | {EXTERNAL LOCATION} | String | -| main.rs:1974:38:1974:45 | "World!" | | {EXTERNAL LOCATION} | str | +| main.rs:1974:38:1974:45 | "World!" | | file://:0:0:0:0 | & | +| main.rs:1974:38:1974:45 | "World!" | &T | {EXTERNAL LOCATION} | str | | main.rs:1983:19:1983:22 | SelfParam | | main.rs:1979:5:1984:5 | Self [trait MyAdd] | | main.rs:1983:25:1983:27 | rhs | | main.rs:1979:17:1979:26 | Rhs | | main.rs:1990:19:1990:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | @@ -3151,41 +3262,57 @@ inferType | main.rs:2087:18:2087:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2087:18:2087:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | | main.rs:2089:13:2089:24 | mut strings1 | | file://:0:0:0:0 | [] | -| main.rs:2089:13:2089:24 | mut strings1 | [T;...] | {EXTERNAL LOCATION} | str | +| main.rs:2089:13:2089:24 | mut strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2089:13:2089:24 | mut strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | | main.rs:2089:28:2089:48 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2089:28:2089:48 | [...] | [T;...] | {EXTERNAL LOCATION} | str | -| main.rs:2089:29:2089:33 | "foo" | | {EXTERNAL LOCATION} | str | -| main.rs:2089:36:2089:40 | "bar" | | {EXTERNAL LOCATION} | str | -| main.rs:2089:43:2089:47 | "baz" | | {EXTERNAL LOCATION} | str | +| main.rs:2089:28:2089:48 | [...] | [T;...] | file://:0:0:0:0 | & | +| main.rs:2089:28:2089:48 | [...] | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2089:29:2089:33 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2089:29:2089:33 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2089:36:2089:40 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2089:36:2089:40 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2089:43:2089:47 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2089:43:2089:47 | "baz" | &T | {EXTERNAL LOCATION} | str | | main.rs:2090:13:2090:13 | s | | {EXTERNAL LOCATION} | Item | | main.rs:2090:13:2090:13 | s | | file://:0:0:0:0 | & | -| main.rs:2090:13:2090:13 | s | &T | {EXTERNAL LOCATION} | str | +| main.rs:2090:13:2090:13 | s | &T | file://:0:0:0:0 | & | +| main.rs:2090:13:2090:13 | s | &T.&T | {EXTERNAL LOCATION} | str | | main.rs:2090:18:2090:26 | &strings1 | | file://:0:0:0:0 | & | | main.rs:2090:18:2090:26 | &strings1 | &T | file://:0:0:0:0 | [] | -| main.rs:2090:18:2090:26 | &strings1 | &T.[T;...] | {EXTERNAL LOCATION} | str | +| main.rs:2090:18:2090:26 | &strings1 | &T.[T;...] | file://:0:0:0:0 | & | +| main.rs:2090:18:2090:26 | &strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | | main.rs:2090:19:2090:26 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2090:19:2090:26 | strings1 | [T;...] | {EXTERNAL LOCATION} | str | +| main.rs:2090:19:2090:26 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2090:19:2090:26 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | | main.rs:2091:13:2091:13 | s | | {EXTERNAL LOCATION} | Item | | main.rs:2091:13:2091:13 | s | | file://:0:0:0:0 | & | -| main.rs:2091:13:2091:13 | s | &T | {EXTERNAL LOCATION} | str | +| main.rs:2091:13:2091:13 | s | &T | file://:0:0:0:0 | & | +| main.rs:2091:13:2091:13 | s | &T.&T | {EXTERNAL LOCATION} | str | | main.rs:2091:18:2091:30 | &mut strings1 | | file://:0:0:0:0 | & | | main.rs:2091:18:2091:30 | &mut strings1 | &T | file://:0:0:0:0 | [] | -| main.rs:2091:18:2091:30 | &mut strings1 | &T.[T;...] | {EXTERNAL LOCATION} | str | +| main.rs:2091:18:2091:30 | &mut strings1 | &T.[T;...] | file://:0:0:0:0 | & | +| main.rs:2091:18:2091:30 | &mut strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | | main.rs:2091:23:2091:30 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2091:23:2091:30 | strings1 | [T;...] | {EXTERNAL LOCATION} | str | -| main.rs:2092:13:2092:13 | s | | {EXTERNAL LOCATION} | str | +| main.rs:2091:23:2091:30 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2091:23:2091:30 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2092:13:2092:13 | s | | file://:0:0:0:0 | & | +| main.rs:2092:13:2092:13 | s | &T | {EXTERNAL LOCATION} | str | | main.rs:2092:18:2092:25 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2092:18:2092:25 | strings1 | [T;...] | {EXTERNAL LOCATION} | str | +| main.rs:2092:18:2092:25 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2092:18:2092:25 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | | main.rs:2094:13:2094:20 | strings2 | | file://:0:0:0:0 | [] | | main.rs:2094:13:2094:20 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | | main.rs:2095:9:2099:9 | [...] | | file://:0:0:0:0 | [] | | main.rs:2095:9:2099:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | | main.rs:2096:13:2096:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2096:26:2096:30 | "foo" | | {EXTERNAL LOCATION} | str | +| main.rs:2096:26:2096:30 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2096:26:2096:30 | "foo" | &T | {EXTERNAL LOCATION} | str | | main.rs:2097:13:2097:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2097:26:2097:30 | "bar" | | {EXTERNAL LOCATION} | str | +| main.rs:2097:26:2097:30 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2097:26:2097:30 | "bar" | &T | {EXTERNAL LOCATION} | str | | main.rs:2098:13:2098:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2098:26:2098:30 | "baz" | | {EXTERNAL LOCATION} | str | +| main.rs:2098:26:2098:30 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2098:26:2098:30 | "baz" | &T | {EXTERNAL LOCATION} | str | | main.rs:2100:13:2100:13 | s | | {EXTERNAL LOCATION} | String | | main.rs:2100:18:2100:25 | strings2 | | file://:0:0:0:0 | [] | | main.rs:2100:18:2100:25 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | @@ -3198,11 +3325,14 @@ inferType | main.rs:2103:10:2107:9 | [...] | | file://:0:0:0:0 | [] | | main.rs:2103:10:2107:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | | main.rs:2104:13:2104:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2104:26:2104:30 | "foo" | | {EXTERNAL LOCATION} | str | +| main.rs:2104:26:2104:30 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2104:26:2104:30 | "foo" | &T | {EXTERNAL LOCATION} | str | | main.rs:2105:13:2105:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2105:26:2105:30 | "bar" | | {EXTERNAL LOCATION} | str | +| main.rs:2105:26:2105:30 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2105:26:2105:30 | "bar" | &T | {EXTERNAL LOCATION} | str | | main.rs:2106:13:2106:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2106:26:2106:30 | "baz" | | {EXTERNAL LOCATION} | str | +| main.rs:2106:26:2106:30 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2106:26:2106:30 | "baz" | &T | {EXTERNAL LOCATION} | str | | main.rs:2108:13:2108:13 | s | | {EXTERNAL LOCATION} | Item | | main.rs:2108:13:2108:13 | s | | file://:0:0:0:0 | & | | main.rs:2108:13:2108:13 | s | &T | {EXTERNAL LOCATION} | String | @@ -3373,14 +3503,16 @@ inferType | main.rs:2160:21:2160:21 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2160:24:2160:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2160:24:2160:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2160:33:2160:37 | "one" | | {EXTERNAL LOCATION} | str | +| main.rs:2160:33:2160:37 | "one" | | file://:0:0:0:0 | & | +| main.rs:2160:33:2160:37 | "one" | &T | {EXTERNAL LOCATION} | str | | main.rs:2161:9:2161:12 | map1 | | {EXTERNAL LOCATION} | HashMap | | main.rs:2161:9:2161:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2161:9:2161:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | | main.rs:2161:21:2161:21 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2161:24:2161:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2161:24:2161:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2161:33:2161:37 | "two" | | {EXTERNAL LOCATION} | str | +| main.rs:2161:33:2161:37 | "two" | | file://:0:0:0:0 | & | +| main.rs:2161:33:2161:37 | "two" | &T | {EXTERNAL LOCATION} | str | | main.rs:2162:13:2162:15 | key | | {EXTERNAL LOCATION} | Item | | main.rs:2162:13:2162:15 | key | | file://:0:0:0:0 | & | | main.rs:2162:20:2162:23 | map1 | | {EXTERNAL LOCATION} | HashMap | From 2a207f9f6ffb95980216f28ac44c5eb0f743da04 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 8 Jul 2025 11:41:01 +0200 Subject: [PATCH 2/3] Rust: Update inline expectations --- .../security/CWE-825/AccessAfterLifetime.expected | 2 -- rust/ql/test/query-tests/security/CWE-825/lifetime.rs | 6 +++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected b/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected index 65a8ba1953ae..c7e132bce89a 100644 --- a/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected +++ b/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected @@ -18,8 +18,6 @@ | lifetime.rs:433:7:433:8 | p1 | lifetime.rs:383:31:383:37 | &raw mut my_pair | lifetime.rs:433:7:433:8 | p1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:382:11:382:17 | my_pair | my_pair | | lifetime.rs:459:13:459:14 | p1 | lifetime.rs:442:17:442:23 | &my_val | lifetime.rs:459:13:459:14 | p1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:441:6:441:11 | my_val | my_val | | lifetime.rs:460:13:460:31 | get_ptr_from_ref(...) | lifetime.rs:442:17:442:23 | &my_val | lifetime.rs:460:13:460:31 | get_ptr_from_ref(...) | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:441:6:441:11 | my_val | my_val | -| lifetime.rs:659:15:659:18 | ref1 | lifetime.rs:654:31:654:35 | &str1 | lifetime.rs:659:15:659:18 | ref1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:653:8:653:11 | str1 | str1 | -| lifetime.rs:667:14:667:17 | ref1 | lifetime.rs:654:31:654:35 | &str1 | lifetime.rs:667:14:667:17 | ref1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:653:8:653:11 | str1 | str1 | | lifetime.rs:667:14:667:17 | ref1 | lifetime.rs:655:11:655:25 | &raw const str2 | lifetime.rs:667:14:667:17 | ref1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:651:7:651:10 | str2 | str2 | | lifetime.rs:789:12:789:13 | p1 | lifetime.rs:781:9:781:19 | &my_local10 | lifetime.rs:789:12:789:13 | p1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:779:6:779:15 | my_local10 | my_local10 | | lifetime.rs:808:23:808:25 | ptr | lifetime.rs:798:9:798:12 | &val | lifetime.rs:808:23:808:25 | ptr | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:796:6:796:8 | val | val | diff --git a/rust/ql/test/query-tests/security/CWE-825/lifetime.rs b/rust/ql/test/query-tests/security/CWE-825/lifetime.rs index f388aff5aaf2..ab03252b699c 100644 --- a/rust/ql/test/query-tests/security/CWE-825/lifetime.rs +++ b/rust/ql/test/query-tests/security/CWE-825/lifetime.rs @@ -651,12 +651,12 @@ pub fn test_implicit_derefs() { let str2; { let str1 = "bar"; - str2 = "foo".to_string() + &str1; // $ Source[rust/access-after-lifetime-ended]=str1 + str2 = "foo".to_string() + &str1; ref1 = &raw const str2; // $ Source[rust/access-after-lifetime-ended]=str2 } // (str1 goes out of scope, but it's been copied into str2) unsafe { - let v1 = &*ref1; // $ SPURIOUS: Alert[rust/access-after-lifetime-ended]=str1 + let v1 = &*ref1; println!(" v1 = {v1}"); } } // (str2 goes out of scope, thus ref1 is dangling) @@ -664,7 +664,7 @@ pub fn test_implicit_derefs() { use_the_stack(); unsafe { - let v2 = &*ref1; // $ Alert[rust/access-after-lifetime-ended]=str2 SPURIOUS: Alert[rust/access-after-lifetime-ended]=str1 + let v2 = &*ref1; // $ Alert[rust/access-after-lifetime-ended]=str2 println!(" v2 = {v2} (!)"); // corrupt in practice } } From 22b833fbda846ac6e83e3f36881ddc87bb3cf9df Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 8 Jul 2025 16:00:09 +0200 Subject: [PATCH 3/3] Rust: Fix bad join --- rust/ql/lib/codeql/rust/internal/TypeInference.qll | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index b0348d7400a8..abed5eb5672e 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -1044,6 +1044,9 @@ private Type inferTryExprType(TryExpr te, TypePath path) { ) } +pragma[nomagic] +private StructType getStrStruct() { result = TStruct(any(Builtins::Str s)) } + pragma[nomagic] private Type inferLiteralType(LiteralExpr le, TypePath path) { path.isEmpty() and @@ -1074,7 +1077,7 @@ private Type inferLiteralType(LiteralExpr le, TypePath path) { path.isEmpty() and result = TRefType() or path = TypePath::singleton(TRefTypeParameter()) and - result = TStruct(any(Builtins::Str s)) + result = getStrStruct() ) } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy