diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index a08cc8137beb..0bb6da4e48fd 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -654,7 +654,7 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { exists(Param p, int i | paramPos(this.getParamList(), p, i) and i = dpos.asPosition() and - result = inferAnnotatedType(p.getPat(), path) + result = p.getTypeRepr().(TypeMention).resolveTypeAt(path) ) or exists(SelfParam self | diff --git a/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected b/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected index cce06005edc7..d3eddedf983f 100644 --- a/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected @@ -3,15 +3,18 @@ models | 2 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | | 3 | Summary: ::zip; Argument[0].Field[core::option::Option::Some(0)]; ReturnValue.Field[core::option::Option::Some(0)].Field[1]; value | | 4 | Summary: ::into_inner; Argument[0].Field[core::pin::Pin::__pointer]; ReturnValue; value | -| 5 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::__pointer]; value | -| 6 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 7 | Summary: lang:alloc; ::into_pin; Argument[0]; ReturnValue; value | -| 8 | Summary: lang:alloc; ::new; Argument[0]; ReturnValue.Reference; value | -| 9 | Summary: lang:alloc; ::pin; Argument[0]; ReturnValue.Reference; value | -| 10 | Summary: lang:core; ::into_inner; Argument[0]; ReturnValue; value | -| 11 | Summary: lang:core; ::new; Argument[0]; ReturnValue; value | -| 12 | Summary: lang:core; crate::ptr::read; Argument[0].Reference; ReturnValue; value | -| 13 | Summary: lang:core; crate::ptr::write; Argument[1]; Argument[0].Reference; value | +| 5 | Summary: ::new; Argument[0].Reference; ReturnValue; value | +| 6 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::__pointer]; value | +| 7 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 8 | Summary: lang:alloc; ::into_pin; Argument[0]; ReturnValue; value | +| 9 | Summary: lang:alloc; ::new; Argument[0]; ReturnValue.Reference; value | +| 10 | Summary: lang:alloc; ::pin; Argument[0]; ReturnValue.Reference; value | +| 11 | Summary: lang:core; ::into_inner; Argument[0]; ReturnValue; value | +| 12 | Summary: lang:core; ::into_inner_unchecked; Argument[0]; ReturnValue; value | +| 13 | Summary: lang:core; ::new; Argument[0]; ReturnValue; value | +| 14 | Summary: lang:core; ::new_unchecked; Argument[0].Reference; ReturnValue; value | +| 15 | Summary: lang:core; crate::ptr::read; Argument[0].Reference; ReturnValue; value | +| 16 | Summary: lang:core; crate::ptr::write; Argument[1]; Argument[0].Reference; value | edges | main.rs:12:9:12:9 | a [Some] | main.rs:13:10:13:19 | a.unwrap() | provenance | MaD:2 | | main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:13 | a [Some] | provenance | | @@ -20,11 +23,11 @@ edges | main.rs:14:9:14:9 | b [Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:2 | | main.rs:14:13:14:13 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | generated | | main.rs:14:13:14:21 | a.clone() [Some] | main.rs:14:9:14:9 | b [Some] | provenance | | -| main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:6 | +| main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:7 | | main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:13 | a [Ok] | provenance | | | main.rs:19:31:19:44 | Ok(...) [Ok] | main.rs:19:9:19:9 | a [Ok] | provenance | | | main.rs:19:34:19:43 | source(...) | main.rs:19:31:19:44 | Ok(...) [Ok] | provenance | | -| main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:6 | +| main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:7 | | main.rs:21:13:21:13 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | generated | | main.rs:21:13:21:21 | a.clone() [Ok] | main.rs:21:9:21:9 | b [Ok] | provenance | | | main.rs:26:9:26:9 | a | main.rs:27:10:27:10 | a | provenance | | @@ -64,8 +67,8 @@ edges | main.rs:69:18:69:23 | TuplePat [tuple.1] | main.rs:69:22:69:22 | m | provenance | | | main.rs:69:22:69:22 | m | main.rs:71:22:71:22 | m | provenance | | | main.rs:92:29:92:29 | [post] y [&ref] | main.rs:93:33:93:33 | y [&ref] | provenance | | -| main.rs:92:32:92:41 | source(...) | main.rs:92:29:92:29 | [post] y [&ref] | provenance | MaD:13 | -| main.rs:93:33:93:33 | y [&ref] | main.rs:93:18:93:34 | ...::read(...) | provenance | MaD:12 | +| main.rs:92:32:92:41 | source(...) | main.rs:92:29:92:29 | [post] y [&ref] | provenance | MaD:16 | +| main.rs:93:33:93:33 | y [&ref] | main.rs:93:18:93:34 | ...::read(...) | provenance | MaD:15 | | main.rs:108:13:108:17 | mut i | main.rs:109:34:109:34 | i | provenance | | | main.rs:108:13:108:17 | mut i | main.rs:110:33:110:33 | i | provenance | | | main.rs:108:13:108:17 | mut i | main.rs:111:47:111:47 | i | provenance | | @@ -76,26 +79,42 @@ edges | main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | main.rs:115:31:115:34 | pin1 [Pin, &ref] | provenance | | | main.rs:109:24:109:35 | ...::new(...) [&ref] | main.rs:109:13:109:20 | mut pin1 [&ref] | provenance | | | main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | provenance | | -| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [&ref] | provenance | MaD:11 | -| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | provenance | MaD:5 | +| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [&ref] | provenance | MaD:13 | +| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | provenance | MaD:6 | | main.rs:109:34:109:34 | i | main.rs:109:33:109:34 | &i [&ref] | provenance | | | main.rs:110:13:110:20 | mut pin2 [&ref] | main.rs:116:15:116:18 | pin2 [&ref] | provenance | | | main.rs:110:24:110:34 | ...::pin(...) [&ref] | main.rs:110:13:110:20 | mut pin2 [&ref] | provenance | | -| main.rs:110:33:110:33 | i | main.rs:110:24:110:34 | ...::pin(...) [&ref] | provenance | MaD:9 | +| main.rs:110:33:110:33 | i | main.rs:110:24:110:34 | ...::pin(...) [&ref] | provenance | MaD:10 | | main.rs:111:13:111:20 | mut pin3 [&ref] | main.rs:117:15:117:18 | pin3 [&ref] | provenance | | | main.rs:111:24:111:49 | ...::into_pin(...) [&ref] | main.rs:111:13:111:20 | mut pin3 [&ref] | provenance | | -| main.rs:111:38:111:48 | ...::new(...) [&ref] | main.rs:111:24:111:49 | ...::into_pin(...) [&ref] | provenance | MaD:7 | -| main.rs:111:47:111:47 | i | main.rs:111:38:111:48 | ...::new(...) [&ref] | provenance | MaD:8 | +| main.rs:111:38:111:48 | ...::new(...) [&ref] | main.rs:111:24:111:49 | ...::into_pin(...) [&ref] | provenance | MaD:8 | +| main.rs:111:47:111:47 | i | main.rs:111:38:111:48 | ...::new(...) [&ref] | provenance | MaD:9 | | main.rs:114:15:114:18 | pin1 [&ref] | main.rs:114:14:114:18 | * ... | provenance | | | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | main.rs:115:14:115:35 | * ... | provenance | | -| main.rs:115:31:115:34 | pin1 [&ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:10 | +| main.rs:115:31:115:34 | pin1 [&ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:11 | | main.rs:115:31:115:34 | pin1 [Pin, &ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:4 | | main.rs:116:15:116:18 | pin2 [&ref] | main.rs:116:14:116:18 | * ... | provenance | | | main.rs:117:15:117:18 | pin3 [&ref] | main.rs:117:14:117:18 | * ... | provenance | | +| main.rs:122:13:122:18 | mut ms [MyStruct] | main.rs:123:34:123:35 | ms [MyStruct] | provenance | | | main.rs:122:13:122:18 | mut ms [MyStruct] | main.rs:127:14:127:15 | ms [MyStruct] | provenance | | | main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | main.rs:122:13:122:18 | mut ms [MyStruct] | provenance | | | main.rs:122:38:122:47 | source(...) | main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | provenance | | +| main.rs:123:13:123:20 | mut pin1 [MyStruct] | main.rs:129:30:129:33 | pin1 [MyStruct] | provenance | | +| main.rs:123:24:123:36 | ...::new(...) [MyStruct] | main.rs:123:13:123:20 | mut pin1 [MyStruct] | provenance | | +| main.rs:123:33:123:35 | &ms [&ref, MyStruct] | main.rs:123:24:123:36 | ...::new(...) [MyStruct] | provenance | MaD:5 | +| main.rs:123:34:123:35 | ms [MyStruct] | main.rs:123:33:123:35 | &ms [&ref, MyStruct] | provenance | | | main.rs:127:14:127:15 | ms [MyStruct] | main.rs:127:14:127:19 | ms.val | provenance | | +| main.rs:129:14:129:34 | ...::into_inner(...) [MyStruct] | main.rs:129:14:129:38 | ... .val | provenance | | +| main.rs:129:30:129:33 | pin1 [MyStruct] | main.rs:129:14:129:34 | ...::into_inner(...) [MyStruct] | provenance | MaD:11 | +| main.rs:136:13:136:18 | mut ms [MyStruct] | main.rs:137:44:137:45 | ms [MyStruct] | provenance | | +| main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | main.rs:136:13:136:18 | mut ms [MyStruct] | provenance | | +| main.rs:136:38:136:47 | source(...) | main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | provenance | | +| main.rs:137:13:137:20 | mut pin5 [MyStruct] | main.rs:139:40:139:43 | pin5 [MyStruct] | provenance | | +| main.rs:137:24:137:46 | ...::new_unchecked(...) [MyStruct] | main.rs:137:13:137:20 | mut pin5 [MyStruct] | provenance | | +| main.rs:137:43:137:45 | &ms [&ref, MyStruct] | main.rs:137:24:137:46 | ...::new_unchecked(...) [MyStruct] | provenance | MaD:14 | +| main.rs:137:44:137:45 | ms [MyStruct] | main.rs:137:43:137:45 | &ms [&ref, MyStruct] | provenance | | +| main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [MyStruct] | main.rs:139:14:139:48 | ... .val | provenance | | +| main.rs:139:40:139:43 | pin5 [MyStruct] | main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [MyStruct] | provenance | MaD:12 | nodes | main.rs:12:9:12:9 | a [Some] | semmle.label | a [Some] | | main.rs:12:13:12:28 | Some(...) [Some] | semmle.label | Some(...) [Some] | @@ -183,8 +202,25 @@ nodes | main.rs:122:13:122:18 | mut ms [MyStruct] | semmle.label | mut ms [MyStruct] | | main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | semmle.label | MyStruct {...} [MyStruct] | | main.rs:122:38:122:47 | source(...) | semmle.label | source(...) | +| main.rs:123:13:123:20 | mut pin1 [MyStruct] | semmle.label | mut pin1 [MyStruct] | +| main.rs:123:24:123:36 | ...::new(...) [MyStruct] | semmle.label | ...::new(...) [MyStruct] | +| main.rs:123:33:123:35 | &ms [&ref, MyStruct] | semmle.label | &ms [&ref, MyStruct] | +| main.rs:123:34:123:35 | ms [MyStruct] | semmle.label | ms [MyStruct] | | main.rs:127:14:127:15 | ms [MyStruct] | semmle.label | ms [MyStruct] | | main.rs:127:14:127:19 | ms.val | semmle.label | ms.val | +| main.rs:129:14:129:34 | ...::into_inner(...) [MyStruct] | semmle.label | ...::into_inner(...) [MyStruct] | +| main.rs:129:14:129:38 | ... .val | semmle.label | ... .val | +| main.rs:129:30:129:33 | pin1 [MyStruct] | semmle.label | pin1 [MyStruct] | +| main.rs:136:13:136:18 | mut ms [MyStruct] | semmle.label | mut ms [MyStruct] | +| main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | semmle.label | MyStruct {...} [MyStruct] | +| main.rs:136:38:136:47 | source(...) | semmle.label | source(...) | +| main.rs:137:13:137:20 | mut pin5 [MyStruct] | semmle.label | mut pin5 [MyStruct] | +| main.rs:137:24:137:46 | ...::new_unchecked(...) [MyStruct] | semmle.label | ...::new_unchecked(...) [MyStruct] | +| main.rs:137:43:137:45 | &ms [&ref, MyStruct] | semmle.label | &ms [&ref, MyStruct] | +| main.rs:137:44:137:45 | ms [MyStruct] | semmle.label | ms [MyStruct] | +| main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [MyStruct] | semmle.label | ...::into_inner_unchecked(...) [MyStruct] | +| main.rs:139:14:139:48 | ... .val | semmle.label | ... .val | +| main.rs:139:40:139:43 | pin5 [MyStruct] | semmle.label | pin5 [MyStruct] | subpaths | main.rs:50:15:50:15 | w [Wrapper] | main.rs:43:18:43:22 | SelfParam [Wrapper] | main.rs:43:33:45:9 | { ... } [Wrapper] | main.rs:53:17:53:25 | w.clone() [Wrapper] | testFailures @@ -205,3 +241,5 @@ testFailures | main.rs:116:14:116:18 | * ... | main.rs:108:21:108:30 | source(...) | main.rs:116:14:116:18 | * ... | $@ | main.rs:108:21:108:30 | source(...) | source(...) | | main.rs:117:14:117:18 | * ... | main.rs:108:21:108:30 | source(...) | main.rs:117:14:117:18 | * ... | $@ | main.rs:108:21:108:30 | source(...) | source(...) | | main.rs:127:14:127:19 | ms.val | main.rs:122:38:122:47 | source(...) | main.rs:127:14:127:19 | ms.val | $@ | main.rs:122:38:122:47 | source(...) | source(...) | +| main.rs:129:14:129:38 | ... .val | main.rs:122:38:122:47 | source(...) | main.rs:129:14:129:38 | ... .val | $@ | main.rs:122:38:122:47 | source(...) | source(...) | +| main.rs:139:14:139:48 | ... .val | main.rs:136:38:136:47 | source(...) | main.rs:139:14:139:48 | ... .val | $@ | main.rs:136:38:136:47 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/modeled/main.rs b/rust/ql/test/library-tests/dataflow/modeled/main.rs index 567fe9c59c78..66a928782267 100644 --- a/rust/ql/test/library-tests/dataflow/modeled/main.rs +++ b/rust/ql/test/library-tests/dataflow/modeled/main.rs @@ -95,8 +95,8 @@ mod ptr { } } -use std::pin::Pin; use std::pin::pin; +use std::pin::Pin; #[derive(Clone)] struct MyStruct { @@ -126,7 +126,7 @@ fn test_pin() { let mut pin4 = pin!(&ms); sink(ms.val); // $ hasValueFlow=41 sink(pin1.val); // $ MISSING: hasValueFlow=41 - sink(Pin::into_inner(pin1).val); // $ MISSING: hasValueFlow=41 + sink(Pin::into_inner(pin1).val); // $ hasValueFlow=41 sink(pin2.val); // $ MISSING: hasValueFlow=41 sink(pin3.val); // $ MISSING: hasValueFlow=41 sink(pin4.val); // $ MISSING: hasValueFlow=41 @@ -136,7 +136,7 @@ fn test_pin() { let mut ms = MyStruct { val: source(42) }; let mut pin5 = Pin::new_unchecked(&ms); sink(pin5.val); // $ MISSING: hasValueFlow=42 - sink(Pin::into_inner_unchecked(pin5).val); // $ MISSING: hasValueFlow=42 + sink(Pin::into_inner_unchecked(pin5).val); // $ hasValueFlow=42 } { diff --git a/rust/ql/test/library-tests/frameworks/postgres/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/frameworks/postgres/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..8c8a9767934d --- /dev/null +++ b/rust/ql/test/library-tests/frameworks/postgres/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,7 @@ +multipleCallTargets +| main.rs:22:18:22:31 | query.as_str() | +| main.rs:23:24:23:37 | query.as_str() | +| main.rs:25:18:25:31 | query.as_str() | +| main.rs:28:16:28:29 | query.as_str() | +| main.rs:29:20:29:33 | query.as_str() | +| main.rs:30:20:30:33 | query.as_str() | diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index dad278eaddc5..a9cc146bc096 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1971,7 +1971,7 @@ mod indexers { mod macros { pub fn f() { - let x = format!("Hello, {}", "World!"); // $ MISSING: type=x:String -- needs https://github.com/github/codeql/pull/19658 + let x = format!("Hello, {}", "World!"); // $ type=x:String } } @@ -2229,15 +2229,15 @@ mod loops { let vals4b = [1u16, 2, 3].to_vec(); // $ MISSING: type=vals4b:Vec type=vals4b:T.u16 for u in vals4b {} // $ MISSING: type=u:u16 - let vals5 = Vec::from([1u32, 2, 3]); // $ type=vals5:Vec method=from MISSING: type=vals5:T.u32 - for u in vals5 {} // $ MISSING: type=u:u32 + let vals5 = Vec::from([1u32, 2, 3]); // $ type=vals5:Vec method=from type=vals5:T.u32 + for u in vals5 {} // $ type=u:u32 let vals6: Vec<&u64> = [1u64, 2, 3].iter().collect(); // $ type=vals6:Vec type=vals6:T.&T.u64 for u in vals6 {} // $ type=u:&T.u64 - let mut vals7 = Vec::new(); // $ method=new type=vals7:Vec MISSING: type=vals7:T.u8 + let mut vals7 = Vec::new(); // $ method=new type=vals7:Vec type=vals7:T.u8 vals7.push(1u8); // $ method=push - for u in vals7 {} // $ MISSING: type=u:u8 + for u in vals7 {} // $ type=u:u8 let matrix1 = vec![vec![1, 2], vec![3, 4]]; // $ MISSING: type=matrix1:Vec type=matrix1:T.Vec type=matrix1:T.T.i32 #[rustfmt::skip] @@ -2246,7 +2246,7 @@ mod loops { } }; - let mut map1 = std::collections::HashMap::new(); // $ method=new $ MISSING: type=map1:Hashmap type=map1:K.i32 type=map1:V.Box type1=map1:V.T.&T.str + let mut map1 = std::collections::HashMap::new(); // $ method=new type=map1:K.i32 type=map1:V.Box $ MISSING: type=map1:Hashmap type1=map1:V.T.&T.str map1.insert(1, Box::new("one")); // $ method=insert method=new map1.insert(2, Box::new("two")); // $ method=insert method=new for key in map1.keys() {} // $ method=keys MISSING: type=key:i32 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 d1119f6e71fe..21cb6d0f7854 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -164,6 +164,8 @@ inferType | main.rs:26:30:26:30 | S | | main.rs:2:5:3:13 | S | | 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:18:27:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:27:18:27:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -174,6 +176,8 @@ inferType | main.rs:31:17:31:19 | x.a | | {EXTERNAL LOCATION} | bool | | 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:18:32:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:32:18:32:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -182,6 +186,8 @@ inferType | main.rs:37:40:37:40 | S | | main.rs:2:5:3:13 | S | | 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:18:38:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:38:18:38:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -192,6 +198,8 @@ inferType | main.rs:41:35:41:35 | S | | main.rs:2:5:3:13 | S | | 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:18:42:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:42:18:42:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -201,6 +209,8 @@ inferType | main.rs:47:16:47:33 | ...::MyNone(...) | T | main.rs:2:5:3:13 | S | | 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:18:49:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:49:18:49:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -214,6 +224,8 @@ inferType | main.rs:53:16:53:33 | ...::MyNone(...) | T | main.rs:2:5:3:13 | S | | 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:18:55:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:55:18:55:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -236,6 +248,8 @@ inferType | main.rs:61:30:61:32 | x.a | T | main.rs:2:5:3:13 | S | | 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:18:62:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:62:18:62:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -247,6 +261,8 @@ inferType | main.rs:84:23:89:5 | { ... } | | main.rs:72:5:72:21 | Foo | | 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:85:18:85:33 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:85:18:85:33 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -257,6 +273,8 @@ inferType | main.rs:91:37:95:5 | { ... } | | main.rs:72:5:72:21 | Foo | | 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:92:18:92:33 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:92:18:92:33 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -311,21 +329,29 @@ inferType | main.rs:157:30:157:31 | S2 | | main.rs:132:5:133:14 | S2 | | 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:18:160:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:160:18:160:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:161:18:161:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:161:18:161:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:161:18:161:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:163:18:163:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:163:18:163:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:163:18:163:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:164:18:164:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:164:18:164:33 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:164:18:164:33 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -343,11 +369,15 @@ inferType | main.rs:167:30:167:31 | S2 | | main.rs:132:5:133:14 | S2 | | 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:18:169:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:169:18:169:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:170:18:170:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:170:18:170:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:170:18:170:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -488,11 +518,15 @@ inferType | main.rs:325:37:325:38 | S3 | | main.rs:190:5:191:14 | S3 | | 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:18:329:38 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:329:18:329:38 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:330:18:330:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:330:18:330:40 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:330:18:330:40 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -504,6 +538,8 @@ inferType | main.rs:331:22:331:34 | thing_s3.m1() | | main.rs:190:5:191:14 | S3 | | 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:18:332:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:332:18:332:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -515,6 +551,8 @@ inferType | main.rs:334:39:334:40 | S1 | | main.rs:186:5:187:14 | S1 | | 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:18:335:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:335:18:335:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -529,6 +567,8 @@ inferType | main.rs:337:39:337:40 | S2 | | main.rs:188:5:189:14 | S2 | | 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:18:338:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:338:18:338:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -547,6 +587,8 @@ inferType | main.rs:342:17:342:18 | S3 | | main.rs:190:5:191:14 | S3 | | 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:18:344:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:344:18:344:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -567,6 +609,8 @@ inferType | main.rs:348:17:348:23 | a.fst() | | main.rs:186:5:187:14 | S1 | | 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:18:349:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:349:18:349:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -575,6 +619,8 @@ inferType | main.rs:350:17:350:23 | a.snd() | | main.rs:186:5:187:14 | S1 | | 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:18:351:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:351:18:351:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -591,6 +637,8 @@ inferType | main.rs:358:17:358:23 | b.fst() | | main.rs:186:5:187:14 | S1 | | 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:18:359:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:359:18:359:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -599,6 +647,8 @@ inferType | main.rs:360:17:360:23 | b.snd() | | main.rs:188:5:189:14 | S2 | | 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:18:361:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:361:18:361:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -606,6 +656,8 @@ inferType | main.rs:365:31:365:38 | thing_s1 | A | main.rs:186:5:187:14 | S1 | | 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:18:366:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:366:18:366:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -615,6 +667,8 @@ inferType | main.rs:367:31:367:38 | thing_s2 | A | main.rs:188:5:189:14 | S2 | | 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:18:368:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:368:18:368:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -633,6 +687,8 @@ inferType | main.rs:372:25:372:25 | a | P2 | main.rs:186:5:187:14 | S1 | | 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:18:373:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:373:18:373:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -641,6 +697,8 @@ inferType | main.rs:374:25:374:25 | a | P2 | main.rs:186:5:187:14 | S1 | | 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:18:375:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:375:18:375:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -657,6 +715,8 @@ inferType | main.rs:379:25:379:25 | b | P2 | main.rs:186:5:187:14 | S1 | | 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:18:380:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:380:18:380:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -665,6 +725,8 @@ inferType | main.rs:381:25:381:25 | b | P2 | main.rs:186:5:187:14 | S1 | | 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:18:382:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:382:18:382:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -771,10 +833,14 @@ inferType | main.rs:490:17:490:18 | S1 | | main.rs:397:5:398:14 | S1 | | 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:18:491:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:491:18:491:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:492:18:492:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:492:18:492:44 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:492:18:492:44 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -784,6 +850,8 @@ inferType | main.rs:494:20:494:21 | S1 | | main.rs:397:5:398:14 | S1 | | 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:18:495:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:495:18:495:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -794,6 +862,8 @@ inferType | main.rs:497:20:497:20 | 0 | | {EXTERNAL LOCATION} | i32 | | 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:18:498:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:498:18:498:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -804,6 +874,8 @@ inferType | main.rs:500:20:500:21 | S1 | | main.rs:397:5:398:14 | S1 | | 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:18:501:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:501:18:501:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | & | @@ -818,6 +890,8 @@ inferType | main.rs:528:18:528:27 | x.method() | | main.rs:526:35:526:42 | I | | 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:18:529:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:529:18:529:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -825,6 +899,8 @@ inferType | main.rs:534:18:534:27 | x.method() | | main.rs:532:36:532:43 | I | | 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:18:535:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:535:18:535:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -832,6 +908,8 @@ inferType | main.rs:539:17:539:26 | x.method() | | main.rs:508:5:509:14 | S1 | | 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:18:540:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:540:18:540:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -839,6 +917,8 @@ inferType | main.rs:544:17:544:26 | x.method() | | main.rs:508:5:509:14 | S1 | | 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:18:545:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:545:18:545:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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] | @@ -852,6 +932,8 @@ inferType | main.rs:557:18:557:24 | y.snd() | | main.rs:511:5:512:14 | S2 | | 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:18:558:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:558:18:558:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -864,6 +946,8 @@ inferType | main.rs:564:18:564:24 | y.snd() | | main.rs:561:41:561:49 | T2 | | 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:18:565:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:565:18:565:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -876,6 +960,8 @@ inferType | main.rs:571:18:571:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | | 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:18:572:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:572:18:572:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -888,6 +974,8 @@ inferType | main.rs:578:18:578:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | | 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:18:579:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:579:18:579:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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] | @@ -924,11 +1012,15 @@ inferType | main.rs:625:30:625:31 | S2 | | main.rs:591:5:592:14 | S2 | | 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:18:627:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:627:18:627:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:628:18:628:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:628:18:628:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:628:18:628:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -944,11 +1036,15 @@ inferType | main.rs:631:30:631:31 | S2 | | main.rs:591:5:592:14 | S2 | | 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:18:633:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:633:18:633:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:634:18:634:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:634:18:634:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:634:18:634:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -964,11 +1060,15 @@ inferType | main.rs:637:31:637:32 | S2 | | main.rs:591:5:592:14 | S2 | | 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:18:639:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:639:18:639:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:640:18:640:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:640:18:640:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:640:18:640:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -997,6 +1097,8 @@ inferType | main.rs:649:37:649:38 | x3 | T.T | main.rs:589:5:590:14 | S1 | | 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:18:650:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:650:18:650:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1005,6 +1107,8 @@ inferType | main.rs:651:37:651:38 | y3 | T.T | main.rs:591:5:592:14 | S2 | | 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:18:652:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:652:18:652:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1080,6 +1184,8 @@ inferType | main.rs:776:18:776:18 | S | | main.rs:708:5:709:13 | S | | 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:18:778:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:778:18:778:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1089,11 +1195,15 @@ inferType | main.rs:782:17:782:23 | x2.m2() | | main.rs:714:5:715:14 | AT | | 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:18:783:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:783:18:783:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:787:18:787:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:787:18:787:43 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:787:18:787:43 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1101,6 +1211,8 @@ inferType | main.rs:787:33:787:33 | 1 | | {EXTERNAL LOCATION} | i32 | | 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:18:790:49 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:790:18:790:49 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1110,10 +1222,14 @@ inferType | main.rs:792:20:792:20 | S | | main.rs:708:5:709:13 | S | | 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:793:18:793:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:793:18:793:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:796:18:796:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:796:18:796:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:796:18:796:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1121,6 +1237,8 @@ inferType | main.rs:797:18:797:19 | S2 | | main.rs:711:5:712:14 | S2 | | 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:18:798:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:798:18:798:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1155,11 +1273,15 @@ inferType | main.rs:829:33:829:34 | S2 | | main.rs:815:5:816:14 | S2 | | 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:18:831:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:831:18:831:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:832:18:832:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:832:18:832:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:832:18:832:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1219,6 +1341,8 @@ inferType | main.rs:911:17:911:22 | x.m1() | A | main.rs:847:5:848:14 | S1 | | 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:18:912:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:912:18:912:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1233,11 +1357,15 @@ inferType | main.rs:917:30:917:31 | S2 | | main.rs:849:5:850:14 | S2 | | 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:18:919:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:919:18:919:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:920:18:920:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:920:18:920:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:920:18:920:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1253,11 +1381,15 @@ inferType | main.rs:923:30:923:31 | S2 | | main.rs:849:5:850:14 | S2 | | 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:18:925:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:925:18:925:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:926:18:926:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:926:18:926:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:926:18:926:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1273,11 +1405,15 @@ inferType | main.rs:929:31:929:32 | S2 | | main.rs:849:5:850:14 | S2 | | 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:18:931:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:931:18:931:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:932:18:932:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:932:18:932:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:932:18:932:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1318,6 +1454,8 @@ inferType | main.rs:973:17:973:18 | S1 | | main.rs:945:5:946:14 | S1 | | 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:18:974:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:974:18:974:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | & | @@ -1327,6 +1465,8 @@ inferType | main.rs:976:17:976:18 | S1 | | main.rs:945:5:946:14 | S1 | | 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:18:977:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:977:18:977:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | & | @@ -1336,6 +1476,8 @@ inferType | main.rs:979:17:979:18 | S1 | | main.rs:945:5:946:14 | S1 | | 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:18:981:44 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:981:18:981:44 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | & | @@ -1361,11 +1503,15 @@ inferType | 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... | | 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 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1003:50:1003:81 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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... | | 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 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1004:50:1004:80 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1389,6 +1535,8 @@ inferType | main.rs:1033:17:1033:41 | ... .unwrapSnd() | | main.rs:1017:5:1018:14 | S3 | | 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:18:1034:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1034:18:1034:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1400,6 +1548,8 @@ inferType | main.rs:1047:51:1047:52 | S2 | | main.rs:1014:5:1015:14 | S2 | | 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:18:1048:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1048:18:1048:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1411,6 +1561,8 @@ inferType | main.rs:1051:26:1051:47 | ...::PairNone(...) | Snd | main.rs:1014:5:1015:14 | S2 | | 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:18:1052:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1052:18:1052:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1423,6 +1575,8 @@ inferType | main.rs:1055:54:1055:55 | S3 | | main.rs:1017:5:1018:14 | S3 | | 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:18:1056:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1056:18:1056:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1434,6 +1588,8 @@ inferType | main.rs:1059:35:1059:56 | ...::PairNone(...) | Snd | main.rs:1017:5:1018:14 | S3 | | 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:18:1060:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1060:18:1060:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1491,6 +1647,8 @@ inferType | main.rs:1108:18:1108:37 | ...::new(...) | T | main.rs:1104:5:1105:13 | S | | 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:18:1109:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1109:18:1109:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1502,6 +1660,8 @@ inferType | main.rs:1112:16:1112:16 | S | | main.rs:1104:5:1105:13 | S | | 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:18:1113:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1113:18:1113:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1510,6 +1670,8 @@ inferType | main.rs:1117:21:1117:21 | S | | main.rs:1104:5:1105:13 | S | | 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:18:1118:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1118:18:1118:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1523,6 +1685,8 @@ inferType | main.rs:1121:32:1121:32 | S | | main.rs:1104:5:1105:13 | S | | 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:18:1122:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1122:18:1122:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1535,6 +1699,8 @@ inferType | main.rs:1124:35:1124:57 | ...::MyNone(...) | T | main.rs:1104:5:1105:13 | S | | 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:18:1125:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1125:18:1125:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1550,6 +1716,8 @@ inferType | main.rs:1127:35:1127:57 | ...::MyNone(...) | T | main.rs:1104:5:1105:13 | S | | 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:18:1128:61 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1128:18:1128:61 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1573,6 +1741,8 @@ inferType | main.rs:1134:30:1134:30 | S | | main.rs:1104:5:1105:13 | S | | 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:18:1136:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1136:18:1136:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1591,6 +1761,8 @@ inferType | main.rs:1141:39:1141:39 | S | | main.rs:1104:5:1105:13 | S | | 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:18:1143:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1143:18:1143:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1607,6 +1779,8 @@ inferType | main.rs:1150:36:1150:36 | S | | main.rs:1104:5:1105:13 | S | | 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:18:1152:34 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1152:18:1152:34 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1673,6 +1847,8 @@ inferType | main.rs:1202:20:1202:21 | S2 | | main.rs:1161:5:1162:14 | S2 | | 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:18:1203:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1203:18:1203:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1683,12 +1859,16 @@ inferType | main.rs:1205:20:1205:21 | S2 | | main.rs:1161:5:1162:14 | S2 | | 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:18:1207:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1207:18:1207:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:1208:18:1208:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1208:18:1208:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1208:18:1208:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | & | @@ -1700,6 +1880,8 @@ inferType | main.rs:1210:20:1210:21 | S2 | | main.rs:1161:5:1162:14 | S2 | | 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:18:1212:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1212:18:1212:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | & | @@ -1709,6 +1891,8 @@ inferType | main.rs:1212:39:1212:40 | x3 | T | main.rs:1161:5:1162:14 | S2 | | 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:18:1213:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1213:18:1213:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | & | @@ -1727,6 +1911,8 @@ inferType | main.rs:1215:21:1215:22 | S2 | | main.rs:1161:5:1162:14 | S2 | | 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:18:1217:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1217:18:1217:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1734,6 +1920,8 @@ inferType | main.rs:1217:26:1217:32 | x4.m2() | &T | main.rs:1161:5:1162:14 | S2 | | 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:18:1218:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1218:18:1218:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1750,12 +1938,16 @@ inferType | main.rs:1220:21:1220:22 | S2 | | main.rs:1161:5:1162:14 | S2 | | 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:18:1222:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1222:18:1222:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:1223:18:1223:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1223:18:1223:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1223:18:1223:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1771,6 +1963,8 @@ inferType | main.rs:1225:21:1225:22 | S2 | | main.rs:1161:5:1162:14 | S2 | | 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:18:1228:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1228:18:1228:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1797,6 +1991,8 @@ inferType | main.rs:1233:17:1233:23 | x7.m1() | &T | main.rs:1161:5:1162:14 | S2 | | 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:18:1234:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1234:18:1234:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -1820,6 +2016,8 @@ inferType | main.rs:1244:17:1244:24 | my_thing | &T | main.rs:1164:5:1167:5 | MyInt | | 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:1245:18:1245:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1245:18:1245:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | & | @@ -1831,6 +2029,8 @@ inferType | main.rs:1249:17:1249:24 | my_thing | &T | main.rs:1164:5:1167:5 | MyInt | | 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:1250:18:1250:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1250:18:1250:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | & | @@ -1992,6 +2192,8 @@ inferType | main.rs:1340:27:1340:30 | flag | | main.rs:1298:5:1301:5 | MyFlag | | 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:18:1341:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1341:18:1341:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1341:26:1341:29 | flag | | main.rs:1298:5:1301:5 | MyFlag | | main.rs:1356:43:1359:5 | { ... } | | {EXTERNAL LOCATION} | Result | | main.rs:1356:43:1359:5 | { ... } | E | main.rs:1348:5:1349:14 | S1 | @@ -2062,6 +2264,8 @@ inferType | main.rs:1382:53:1385:9 | { ... } | E | main.rs:1348:5:1349:14 | S1 | | 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:1383:22:1383:30 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1383:22:1383:30 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -2073,16 +2277,22 @@ inferType | main.rs:1391:37:1391:52 | try_same_error(...) | T | main.rs:1348:5:1349:14 | S1 | | 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:1392:22:1392:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1392:22:1392:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:1396:22:1396:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1396:22:1396:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1396:22:1396:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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" | | file://:0:0:0:0 | & | | main.rs:1400:22:1400:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1400:22:1400:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1400:22:1400:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -2092,6 +2302,8 @@ inferType | main.rs:1403:60:1403:61 | S1 | | main.rs:1348:5:1349:14 | S1 | | 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:1404:22:1404:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1404:22:1404:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | 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 | @@ -3046,9 +3258,14 @@ 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:13:1974:13 | x | | {EXTERNAL LOCATION} | String | +| main.rs:1974:17:1974:46 | MacroExpr | | {EXTERNAL LOCATION} | String | | 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 | ...::must_use(...) | | {EXTERNAL LOCATION} | String | +| main.rs:1974:25:1974:45 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1974:25:1974:45 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1974:25:1974:45 | { ... } | | {EXTERNAL LOCATION} | String | | main.rs:1974:38:1974:45 | "World!" | | file://:0:0:0:0 | & | | main.rs:1974:38:1974:45 | "World!" | &T | {EXTERNAL LOCATION} | str | @@ -3497,8 +3714,12 @@ inferType | main.rs:2229:32:2229:32 | 3 | | {EXTERNAL LOCATION} | u16 | | main.rs:2232:13:2232:17 | vals5 | | {EXTERNAL LOCATION} | Vec | | main.rs:2232:13:2232:17 | vals5 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2232:13:2232:17 | vals5 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2232:13:2232:17 | vals5 | T | {EXTERNAL LOCATION} | u32 | | main.rs:2232:21:2232:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | | main.rs:2232:21:2232:43 | ...::from(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2232:21:2232:43 | ...::from(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2232:21:2232:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u32 | | main.rs:2232:31:2232:42 | [...] | | file://:0:0:0:0 | [] | | main.rs:2232:31:2232:42 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2232:31:2232:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | @@ -3509,10 +3730,16 @@ inferType | main.rs:2232:41:2232:41 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2232:41:2232:41 | 3 | | {EXTERNAL LOCATION} | u32 | | main.rs:2233:13:2233:13 | u | | {EXTERNAL LOCATION} | Vec | +| main.rs:2233:13:2233:13 | u | | {EXTERNAL LOCATION} | i32 | +| main.rs:2233:13:2233:13 | u | | {EXTERNAL LOCATION} | u32 | | main.rs:2233:13:2233:13 | u | | file://:0:0:0:0 | & | | main.rs:2233:13:2233:13 | u | A | {EXTERNAL LOCATION} | Global | +| main.rs:2233:13:2233:13 | u | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2233:13:2233:13 | u | T | {EXTERNAL LOCATION} | u32 | | main.rs:2233:18:2233:22 | vals5 | | {EXTERNAL LOCATION} | Vec | | main.rs:2233:18:2233:22 | vals5 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2233:18:2233:22 | vals5 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2233:18:2233:22 | vals5 | T | {EXTERNAL LOCATION} | u32 | | main.rs:2235:13:2235:17 | vals6 | | {EXTERNAL LOCATION} | Vec | | main.rs:2235:13:2235:17 | vals6 | A | {EXTERNAL LOCATION} | Global | | main.rs:2235:13:2235:17 | vals6 | T | file://:0:0:0:0 | & | @@ -3542,60 +3769,143 @@ inferType | main.rs:2236:18:2236:22 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | | main.rs:2238:13:2238:21 | mut vals7 | | {EXTERNAL LOCATION} | Vec | | main.rs:2238:13:2238:21 | mut vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2238:13:2238:21 | mut vals7 | T | {EXTERNAL LOCATION} | u8 | | main.rs:2238:25:2238:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | | main.rs:2238:25:2238:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2238:25:2238:34 | ...::new(...) | T | {EXTERNAL LOCATION} | u8 | | main.rs:2239:9:2239:13 | vals7 | | {EXTERNAL LOCATION} | Vec | | main.rs:2239:9:2239:13 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2239:9:2239:13 | vals7 | T | {EXTERNAL LOCATION} | u8 | | main.rs:2239:20:2239:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | | main.rs:2240:13:2240:13 | u | | {EXTERNAL LOCATION} | Vec | +| main.rs:2240:13:2240:13 | u | | {EXTERNAL LOCATION} | u8 | | main.rs:2240:13:2240:13 | u | | file://:0:0:0:0 | & | | main.rs:2240:13:2240:13 | u | A | {EXTERNAL LOCATION} | Global | +| main.rs:2240:13:2240:13 | u | T | {EXTERNAL LOCATION} | u8 | | main.rs:2240:18:2240:22 | vals7 | | {EXTERNAL LOCATION} | Vec | | main.rs:2240:18:2240:22 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2240:18:2240:22 | vals7 | T | {EXTERNAL LOCATION} | u8 | | main.rs:2242:33:2242:33 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2242:36:2242:36 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2242:45:2242:45 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2242:48:2242:48 | 4 | | {EXTERNAL LOCATION} | i32 | | main.rs:2249:13:2249:20 | mut map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2249:13:2249:20 | mut map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2249:13:2249:20 | mut map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2249:13:2249:20 | mut map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2249:13:2249:20 | mut map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2249:13:2249:20 | mut map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2249:13:2249:20 | mut map1 | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2249:24:2249:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2249:24:2249:55 | ...::new(...) | K | {EXTERNAL LOCATION} | i32 | | main.rs:2249:24:2249:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2249:24:2249:55 | ...::new(...) | V | {EXTERNAL LOCATION} | Box | +| main.rs:2249:24:2249:55 | ...::new(...) | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2249:24:2249:55 | ...::new(...) | V.T | file://:0:0:0:0 | & | +| main.rs:2249:24:2249:55 | ...::new(...) | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2250:9:2250:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2250:9:2250:12 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2250:9:2250:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2250:9:2250:12 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2250:9:2250:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2250:9:2250:12 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2250:9:2250:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2250:9:2250:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2250:9:2250:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2250:9:2250:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2250:9:2250:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | +| main.rs:2250:9:2250:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2250:21:2250:21 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2250:24:2250:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2250:24:2250:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2250:24:2250:38 | ...::new(...) | T | file://:0:0:0:0 | & | +| main.rs:2250:24:2250:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | | main.rs:2250:33:2250:37 | "one" | | file://:0:0:0:0 | & | | main.rs:2250:33:2250:37 | "one" | &T | {EXTERNAL LOCATION} | str | | main.rs:2251:9:2251:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2251:9:2251:12 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2251:9:2251:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2251:9:2251:12 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2251:9:2251:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2251:9:2251:12 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2251:9:2251:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2251:9:2251:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2251:9:2251:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2251:9:2251:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2251:9:2251:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | +| main.rs:2251:9:2251:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2251:21:2251:21 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2251:24:2251:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2251:24:2251:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2251:24:2251:38 | ...::new(...) | T | file://:0:0:0:0 | & | +| main.rs:2251:24:2251:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | | main.rs:2251:33:2251:37 | "two" | | file://:0:0:0:0 | & | | main.rs:2251:33:2251:37 | "two" | &T | {EXTERNAL LOCATION} | str | | main.rs:2252:13:2252:15 | key | | {EXTERNAL LOCATION} | Item | | main.rs:2252:13:2252:15 | key | | file://:0:0:0:0 | & | +| main.rs:2252:13:2252:15 | key | &T | {EXTERNAL LOCATION} | i32 | | main.rs:2252:20:2252:23 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2252:20:2252:23 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2252:20:2252:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2252:20:2252:23 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2252:20:2252:23 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2252:20:2252:23 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2252:20:2252:23 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2252:20:2252:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | +| main.rs:2252:20:2252:30 | map1.keys() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2252:20:2252:30 | map1.keys() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2252:20:2252:30 | map1.keys() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2252:20:2252:30 | map1.keys() | V.T | file://:0:0:0:0 | & | +| main.rs:2252:20:2252:30 | map1.keys() | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2253:13:2253:17 | value | | {EXTERNAL LOCATION} | Item | | main.rs:2253:13:2253:17 | value | | file://:0:0:0:0 | & | +| main.rs:2253:13:2253:17 | value | &T | {EXTERNAL LOCATION} | Box | +| main.rs:2253:13:2253:17 | value | &T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2253:13:2253:17 | value | &T.T | file://:0:0:0:0 | & | +| main.rs:2253:13:2253:17 | value | &T.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2253:22:2253:25 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2253:22:2253:25 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2253:22:2253:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2253:22:2253:25 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2253:22:2253:25 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2253:22:2253:25 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2253:22:2253:25 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2253:22:2253:34 | map1.values() | | {EXTERNAL LOCATION} | Values | +| main.rs:2253:22:2253:34 | map1.values() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2253:22:2253:34 | map1.values() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2253:22:2253:34 | map1.values() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2253:22:2253:34 | map1.values() | V.T | file://:0:0:0:0 | & | +| main.rs:2253:22:2253:34 | map1.values() | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2254:13:2254:24 | TuplePat | | {EXTERNAL LOCATION} | Item | | main.rs:2254:29:2254:32 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2254:29:2254:32 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2254:29:2254:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2254:29:2254:32 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2254:29:2254:32 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2254:29:2254:32 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2254:29:2254:32 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2254:29:2254:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | +| main.rs:2254:29:2254:39 | map1.iter() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2254:29:2254:39 | map1.iter() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2254:29:2254:39 | map1.iter() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2254:29:2254:39 | map1.iter() | V.T | file://:0:0:0:0 | & | +| main.rs:2254:29:2254:39 | map1.iter() | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2255:13:2255:24 | TuplePat | | {EXTERNAL LOCATION} | Item | | main.rs:2255:29:2255:33 | &map1 | | file://:0:0:0:0 | & | | main.rs:2255:29:2255:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap | +| main.rs:2255:29:2255:33 | &map1 | &T.K | {EXTERNAL LOCATION} | i32 | | main.rs:2255:29:2255:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2255:29:2255:33 | &map1 | &T.V | {EXTERNAL LOCATION} | Box | +| main.rs:2255:29:2255:33 | &map1 | &T.V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2255:29:2255:33 | &map1 | &T.V.T | file://:0:0:0:0 | & | +| main.rs:2255:29:2255:33 | &map1 | &T.V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2255:30:2255:33 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2255:30:2255:33 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2255:30:2255:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2255:30:2255:33 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2255:30:2255:33 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2255:30:2255:33 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2255:30:2255:33 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2259:13:2259:17 | mut a | | {EXTERNAL LOCATION} | i32 | | main.rs:2259:13:2259:17 | mut a | | {EXTERNAL LOCATION} | i64 | | main.rs:2259:26:2259:26 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -3604,6 +3914,7 @@ inferType | main.rs:2261:23:2261:23 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:2261:23:2261:28 | ... < ... | | {EXTERNAL LOCATION} | bool | | main.rs:2261:27:2261:28 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2261:27:2261:28 | 10 | | {EXTERNAL LOCATION} | i64 | | main.rs:2263:13:2263:13 | a | | {EXTERNAL LOCATION} | i32 | | main.rs:2263:13:2263:13 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:2263:13:2263:18 | ... += ... | | file://:0:0:0:0 | () | @@ -3713,10 +4024,14 @@ inferType | main.rs:2382:29:2382:33 | value | T | {EXTERNAL LOCATION} | i32 | | main.rs:2384:22:2384:29 | "{mesg}\\n" | | file://:0:0:0:0 | & | | main.rs:2384:22:2384:29 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2384:22:2384:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2384:22:2384:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:2386:15:2386:19 | value | | {EXTERNAL LOCATION} | Option | | main.rs:2386:15:2386:19 | value | T | {EXTERNAL LOCATION} | i32 | | main.rs:2389:26:2389:33 | "{mesg}\\n" | | file://:0:0:0:0 | & | | main.rs:2389:26:2389:33 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2389:26:2389:33 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2389:26:2389:33 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:2393:13:2393:16 | mesg | | {EXTERNAL LOCATION} | i32 | | main.rs:2393:20:2393:24 | value | | {EXTERNAL LOCATION} | Option | | main.rs:2393:20:2393:24 | value | T | {EXTERNAL LOCATION} | i32 | @@ -3725,6 +4040,8 @@ inferType | main.rs:2394:20:2394:23 | mesg | | {EXTERNAL LOCATION} | i32 | | main.rs:2395:18:2395:25 | "{mesg}\\n" | | file://:0:0:0:0 | & | | main.rs:2395:18:2395:25 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2395:18:2395:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2395:18:2395:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:2395:20:2395:23 | mesg | | {EXTERNAL LOCATION} | i32 | | main.rs:2396:13:2396:16 | mesg | | {EXTERNAL LOCATION} | i32 | | main.rs:2396:20:2396:24 | value | | {EXTERNAL LOCATION} | Option | @@ -3732,6 +4049,8 @@ inferType | main.rs:2396:20:2396:25 | TryExpr | | {EXTERNAL LOCATION} | i32 | | main.rs:2397:18:2397:25 | "{mesg}\\n" | | file://:0:0:0:0 | & | | main.rs:2397:18:2397:25 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2397:18:2397:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2397:18:2397:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:2397:20:2397:23 | mesg | | {EXTERNAL LOCATION} | i32 | | main.rs:2398:9:2398:12 | None | | {EXTERNAL LOCATION} | Option | testFailures diff --git a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected index cc35fcfde215..d8fcd1ec9f06 100644 --- a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected @@ -8,11 +8,13 @@ multipleCallTargets | sqlx.rs:61:28:61:81 | ...::from(...) | | sqlx.rs:64:26:64:46 | safe_query_1.as_str() | | sqlx.rs:65:26:65:46 | safe_query_2.as_str() | +| sqlx.rs:66:26:66:46 | safe_query_3.as_str() | | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | | sqlx.rs:70:30:70:52 | unsafe_query_3.as_str() | | sqlx.rs:75:25:75:45 | safe_query_1.as_str() | | sqlx.rs:76:25:76:45 | safe_query_2.as_str() | +| sqlx.rs:77:25:77:45 | safe_query_3.as_str() | | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() | diff --git a/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected b/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected index ff203271aba8..87d6b4af3321 100644 --- a/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected +++ b/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected @@ -1,32 +1,53 @@ #select +| sqlx.rs:66:26:66:46 | safe_query_3.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:47:22:47:35 | ...::args | user-provided value | | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | +| sqlx.rs:77:25:77:45 | safe_query_3.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:47:22:47:35 | ...::args | user-provided value | | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | edges | sqlx.rs:47:9:47:18 | arg_string | sqlx.rs:53:27:53:36 | arg_string | provenance | | | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:47:22:47:37 | ...::args(...) [element] | provenance | Src:MaD:2 | -| sqlx.rs:47:22:47:37 | ...::args(...) [element] | sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | provenance | MaD:8 | +| sqlx.rs:47:22:47:37 | ...::args(...) [element] | sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | provenance | MaD:11 | | sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | sqlx.rs:47:22:47:77 | ... .unwrap_or(...) | provenance | MaD:3 | | sqlx.rs:47:22:47:77 | ... .unwrap_or(...) | sqlx.rs:47:9:47:18 | arg_string | provenance | | +| sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | provenance | MaD:10 | | sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:54:27:54:39 | remote_string | provenance | | | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | provenance | Src:MaD:1 | | sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | sqlx.rs:48:25:48:78 | ... .unwrap() | provenance | MaD:4 | -| sqlx.rs:48:25:48:78 | ... .unwrap() | sqlx.rs:48:25:48:85 | ... .text() [Ok] | provenance | MaD:9 | +| sqlx.rs:48:25:48:78 | ... .unwrap() | sqlx.rs:48:25:48:85 | ... .text() [Ok] | provenance | MaD:12 | | sqlx.rs:48:25:48:85 | ... .text() [Ok] | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | provenance | MaD:5 | | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | sqlx.rs:48:9:48:21 | remote_string | provenance | | -| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | provenance | MaD:7 | +| sqlx.rs:49:9:49:21 | remote_number | sqlx.rs:52:32:52:87 | MacroExpr | provenance | | +| sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | provenance | MaD:5 | +| sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | sqlx.rs:49:9:49:21 | remote_number | provenance | | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:66:26:66:37 | safe_query_3 | provenance | | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | provenance | MaD:8 | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | provenance | MaD:6 | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:36 | safe_query_3 | provenance | | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:8 | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:6 | +| sqlx.rs:52:24:52:88 | res | sqlx.rs:52:32:52:87 | { ... } | provenance | | +| sqlx.rs:52:32:52:87 | ...::format(...) | sqlx.rs:52:24:52:88 | res | provenance | | +| sqlx.rs:52:32:52:87 | ...::must_use(...) | sqlx.rs:52:9:52:20 | safe_query_3 | provenance | | +| sqlx.rs:52:32:52:87 | MacroExpr | sqlx.rs:52:32:52:87 | ...::format(...) | provenance | MaD:9 | +| sqlx.rs:52:32:52:87 | { ... } | sqlx.rs:52:32:52:87 | ...::must_use(...) | provenance | MaD:7 | +| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | provenance | MaD:8 | | sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | provenance | MaD:6 | -| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | provenance | MaD:7 | +| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | provenance | MaD:8 | | sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | provenance | MaD:6 | | sqlx.rs:53:26:53:36 | &arg_string [&ref] | sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | provenance | | | sqlx.rs:53:27:53:36 | arg_string | sqlx.rs:53:26:53:36 | &arg_string [&ref] | provenance | | -| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | provenance | MaD:7 | +| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | provenance | MaD:8 | | sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | provenance | MaD:6 | -| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | provenance | MaD:7 | +| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | provenance | MaD:8 | | sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | provenance | MaD:6 | | sqlx.rs:54:26:54:39 | &remote_string [&ref] | sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | provenance | | | sqlx.rs:54:27:54:39 | remote_string | sqlx.rs:54:26:54:39 | &remote_string [&ref] | provenance | | +| sqlx.rs:66:26:66:37 | safe_query_3 | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | provenance | MaD:8 | +| sqlx.rs:66:26:66:37 | safe_query_3 | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | provenance | MaD:6 | +| sqlx.rs:77:25:77:36 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:8 | +| sqlx.rs:77:25:77:36 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:6 | models | 1 | Source: repo:https://github.com/seanmonstar/reqwest:reqwest; crate::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | | 2 | Source: std::env::args; ReturnValue.Element; commandargs | @@ -34,9 +55,12 @@ models | 4 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | | 5 | Summary: ::unwrap_or; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | | 6 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 7 | Summary: lang:alloc; ::as_str; Argument[self]; ReturnValue; value | -| 8 | Summary: lang:core; crate::iter::traits::iterator::Iterator::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 9 | Summary: repo:https://github.com/seanmonstar/reqwest:reqwest; ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 7 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | +| 8 | Summary: lang:alloc; ::as_str; Argument[self]; ReturnValue; value | +| 9 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint | +| 10 | Summary: lang:core; ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 11 | Summary: lang:core; crate::iter::traits::iterator::Iterator::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 12 | Summary: repo:https://github.com/seanmonstar/reqwest:reqwest; ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | nodes | sqlx.rs:47:9:47:18 | arg_string | semmle.label | arg_string | | sqlx.rs:47:22:47:35 | ...::args | semmle.label | ...::args | @@ -49,14 +73,27 @@ nodes | sqlx.rs:48:25:48:78 | ... .unwrap() | semmle.label | ... .unwrap() | | sqlx.rs:48:25:48:85 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | semmle.label | ... .unwrap_or(...) | +| sqlx.rs:49:9:49:21 | remote_number | semmle.label | remote_number | +| sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | semmle.label | remote_string.parse() [Ok] | +| sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | semmle.label | ... .unwrap_or(...) | +| sqlx.rs:52:9:52:20 | safe_query_3 | semmle.label | safe_query_3 | +| sqlx.rs:52:24:52:88 | res | semmle.label | res | +| sqlx.rs:52:32:52:87 | ...::format(...) | semmle.label | ...::format(...) | +| sqlx.rs:52:32:52:87 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| sqlx.rs:52:32:52:87 | MacroExpr | semmle.label | MacroExpr | +| sqlx.rs:52:32:52:87 | { ... } | semmle.label | { ... } | | sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | semmle.label | unsafe_query_1 [&ref] | | sqlx.rs:53:26:53:36 | &arg_string [&ref] | semmle.label | &arg_string [&ref] | | sqlx.rs:53:27:53:36 | arg_string | semmle.label | arg_string | | sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | semmle.label | unsafe_query_2 [&ref] | | sqlx.rs:54:26:54:39 | &remote_string [&ref] | semmle.label | &remote_string [&ref] | | sqlx.rs:54:27:54:39 | remote_string | semmle.label | remote_string | +| sqlx.rs:66:26:66:37 | safe_query_3 | semmle.label | safe_query_3 | +| sqlx.rs:66:26:66:46 | safe_query_3.as_str() | semmle.label | safe_query_3.as_str() | | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | semmle.label | unsafe_query_2.as_str() | +| sqlx.rs:77:25:77:36 | safe_query_3 | semmle.label | safe_query_3 | +| sqlx.rs:77:25:77:45 | safe_query_3.as_str() | semmle.label | safe_query_3.as_str() | | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | semmle.label | unsafe_query_2.as_str() | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-089/sqlx.rs b/rust/ql/test/query-tests/security/CWE-089/sqlx.rs index 4d121e86fee7..fd1153cffd38 100644 --- a/rust/ql/test/query-tests/security/CWE-089/sqlx.rs +++ b/rust/ql/test/query-tests/security/CWE-089/sqlx.rs @@ -63,7 +63,7 @@ async fn test_sqlx_mysql(url: &str, enable_remote: bool) -> Result<(), sqlx::Err // direct execution let _ = conn.execute(safe_query_1.as_str()).await?; // $ sql-sink let _ = conn.execute(safe_query_2.as_str()).await?; // $ sql-sink - let _ = conn.execute(safe_query_3.as_str()).await?; // $ sql-sink + let _ = conn.execute(safe_query_3.as_str()).await?; // $ sql-sink $ SPURIOUS: Alert[rust/sql-injection]=remote1 let _ = conn.execute(unsafe_query_1.as_str()).await?; // $ sql-sink Alert[rust/sql-injection]=args1 if enable_remote { let _ = conn.execute(unsafe_query_2.as_str()).await?; // $ sql-sink Alert[rust/sql-injection]=remote1 @@ -74,7 +74,7 @@ async fn test_sqlx_mysql(url: &str, enable_remote: bool) -> Result<(), sqlx::Err // prepared queries let _ = sqlx::query(safe_query_1.as_str()).execute(&pool).await?; // $ sql-sink let _ = sqlx::query(safe_query_2.as_str()).execute(&pool).await?; // $ sql-sink - let _ = sqlx::query(safe_query_3.as_str()).execute(&pool).await?; // $ sql-sink + let _ = sqlx::query(safe_query_3.as_str()).execute(&pool).await?; // $ sql-sink $ SPURIOUS: Alert[rust/sql-injection]=remote1 let _ = sqlx::query(unsafe_query_1.as_str()).execute(&pool).await?; // $ sql-sink Alert[rust/sql-injection]=args1 if enable_remote { let _ = sqlx::query(unsafe_query_2.as_str()).execute(&pool).await?; // $ sql-sink Alert[rust/sql-injection]=remote1 diff --git a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected index 564927f7ed34..c5b470fa9c3c 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected @@ -2,4 +2,9 @@ multipleCallTargets | test_logging.rs:77:20:77:36 | password.as_str() | | test_logging.rs:78:22:78:38 | password.as_str() | | test_logging.rs:88:18:88:34 | password.as_str() | +| test_logging.rs:229:30:229:71 | ... .as_str() | +| test_logging.rs:242:16:242:61 | ... .as_bytes() | | test_logging.rs:243:5:245:66 | ... .write_all(...) | +| test_logging.rs:245:20:245:65 | ... .as_bytes() | +| test_logging.rs:248:15:248:60 | ... .as_bytes() | +| test_logging.rs:251:15:251:60 | ... .as_bytes() | diff --git a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected index 8506a58effb3..9f3c9ea82a41 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected @@ -48,110 +48,116 @@ | test_logging.rs:220:13:220:58 | ...::panic_fmt | test_logging.rs:220:50:220:57 | password | test_logging.rs:220:13:220:58 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:220:50:220:57 | password | password | | test_logging.rs:223:13:223:60 | ...::assert_failed | test_logging.rs:223:52:223:59 | password | test_logging.rs:223:13:223:60 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:223:52:223:59 | password | password | | test_logging.rs:226:13:226:60 | ...::assert_failed | test_logging.rs:226:52:226:59 | password | test_logging.rs:226:13:226:60 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:226:52:226:59 | password | password | +| test_logging.rs:229:23:229:28 | expect | test_logging.rs:229:54:229:61 | password | test_logging.rs:229:23:229:28 | expect | This operation writes $@ to a log file. | test_logging.rs:229:54:229:61 | password | password | +| test_logging.rs:229:23:229:28 | expect | test_logging.rs:229:54:229:61 | password | test_logging.rs:229:23:229:28 | expect | This operation writes $@ to a log file. | test_logging.rs:229:54:229:61 | password | password | +| test_logging.rs:242:10:242:14 | write | test_logging.rs:242:42:242:49 | password | test_logging.rs:242:10:242:14 | write | This operation writes $@ to a log file. | test_logging.rs:242:42:242:49 | password | password | +| test_logging.rs:245:10:245:18 | write_all | test_logging.rs:245:46:245:53 | password | test_logging.rs:245:10:245:18 | write_all | This operation writes $@ to a log file. | test_logging.rs:245:46:245:53 | password | password | +| test_logging.rs:248:9:248:13 | write | test_logging.rs:248:41:248:48 | password | test_logging.rs:248:9:248:13 | write | This operation writes $@ to a log file. | test_logging.rs:248:41:248:48 | password | password | +| test_logging.rs:251:9:251:13 | write | test_logging.rs:251:41:251:48 | password | test_logging.rs:251:9:251:13 | write | This operation writes $@ to a log file. | test_logging.rs:251:41:251:48 | password | password | edges -| test_logging.rs:42:12:42:35 | MacroExpr | test_logging.rs:42:5:42:36 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:42:12:42:35 | MacroExpr | test_logging.rs:42:5:42:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:42:28:42:35 | password | test_logging.rs:42:12:42:35 | MacroExpr | provenance | | -| test_logging.rs:43:12:43:35 | MacroExpr | test_logging.rs:43:5:43:36 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:43:12:43:35 | MacroExpr | test_logging.rs:43:5:43:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:43:28:43:35 | password | test_logging.rs:43:12:43:35 | MacroExpr | provenance | | -| test_logging.rs:44:11:44:34 | MacroExpr | test_logging.rs:44:5:44:35 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:44:11:44:34 | MacroExpr | test_logging.rs:44:5:44:35 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:44:27:44:34 | password | test_logging.rs:44:11:44:34 | MacroExpr | provenance | | -| test_logging.rs:45:12:45:35 | MacroExpr | test_logging.rs:45:5:45:36 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:45:12:45:35 | MacroExpr | test_logging.rs:45:5:45:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:45:28:45:35 | password | test_logging.rs:45:12:45:35 | MacroExpr | provenance | | -| test_logging.rs:46:11:46:34 | MacroExpr | test_logging.rs:46:5:46:35 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:46:11:46:34 | MacroExpr | test_logging.rs:46:5:46:35 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:46:27:46:34 | password | test_logging.rs:46:11:46:34 | MacroExpr | provenance | | -| test_logging.rs:47:24:47:47 | MacroExpr | test_logging.rs:47:5:47:48 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:47:24:47:47 | MacroExpr | test_logging.rs:47:5:47:48 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:47:40:47:47 | password | test_logging.rs:47:24:47:47 | MacroExpr | provenance | | -| test_logging.rs:52:12:52:35 | MacroExpr | test_logging.rs:52:5:52:36 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:52:12:52:35 | MacroExpr | test_logging.rs:52:5:52:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:52:28:52:35 | password | test_logging.rs:52:12:52:35 | MacroExpr | provenance | | -| test_logging.rs:54:12:54:48 | MacroExpr | test_logging.rs:54:5:54:49 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:54:12:54:48 | MacroExpr | test_logging.rs:54:5:54:49 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:54:41:54:48 | password | test_logging.rs:54:12:54:48 | MacroExpr | provenance | | -| test_logging.rs:56:12:56:46 | MacroExpr | test_logging.rs:56:5:56:47 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:56:12:56:46 | MacroExpr | test_logging.rs:56:5:56:47 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:56:39:56:46 | password | test_logging.rs:56:12:56:46 | MacroExpr | provenance | | -| test_logging.rs:57:12:57:33 | MacroExpr | test_logging.rs:57:5:57:34 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:57:12:57:33 | MacroExpr | test_logging.rs:57:5:57:34 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:57:24:57:31 | password | test_logging.rs:57:12:57:33 | MacroExpr | provenance | | -| test_logging.rs:58:12:58:35 | MacroExpr | test_logging.rs:58:5:58:36 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:58:12:58:35 | MacroExpr | test_logging.rs:58:5:58:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:58:24:58:31 | password | test_logging.rs:58:12:58:35 | MacroExpr | provenance | | -| test_logging.rs:60:30:60:53 | MacroExpr | test_logging.rs:60:5:60:54 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:60:30:60:53 | MacroExpr | test_logging.rs:60:5:60:54 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:60:46:60:53 | password | test_logging.rs:60:30:60:53 | MacroExpr | provenance | | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 Sink:MaD:9 | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | | test_logging.rs:61:20:61:28 | &password | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:61:20:61:28 | &password [&ref] | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:61:21:61:28 | password | test_logging.rs:61:20:61:28 | &password | provenance | Config | | test_logging.rs:61:21:61:28 | password | test_logging.rs:61:20:61:28 | &password [&ref] | provenance | | -| test_logging.rs:65:24:65:47 | MacroExpr | test_logging.rs:65:5:65:48 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:65:24:65:47 | MacroExpr | test_logging.rs:65:5:65:48 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:65:40:65:47 | password | test_logging.rs:65:24:65:47 | MacroExpr | provenance | | -| test_logging.rs:67:42:67:65 | MacroExpr | test_logging.rs:67:5:67:66 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:67:42:67:65 | MacroExpr | test_logging.rs:67:5:67:66 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:67:58:67:65 | password | test_logging.rs:67:42:67:65 | MacroExpr | provenance | | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 Sink:MaD:9 | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | | test_logging.rs:68:18:68:26 | &password | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:68:18:68:26 | &password [&ref] | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:68:19:68:26 | password | test_logging.rs:68:18:68:26 | &password | provenance | Config | | test_logging.rs:68:19:68:26 | password | test_logging.rs:68:18:68:26 | &password [&ref] | provenance | | -| test_logging.rs:72:23:72:46 | MacroExpr | test_logging.rs:72:5:72:47 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:72:23:72:46 | MacroExpr | test_logging.rs:72:5:72:47 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:72:39:72:46 | password | test_logging.rs:72:23:72:46 | MacroExpr | provenance | | -| test_logging.rs:74:41:74:64 | MacroExpr | test_logging.rs:74:5:74:65 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:74:41:74:64 | MacroExpr | test_logging.rs:74:5:74:65 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:74:57:74:64 | password | test_logging.rs:74:41:74:64 | MacroExpr | provenance | | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 Sink:MaD:9 | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | | test_logging.rs:75:20:75:28 | &password | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:75:20:75:28 | &password [&ref] | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:75:21:75:28 | password | test_logging.rs:75:20:75:28 | &password | provenance | Config | | test_logging.rs:75:21:75:28 | password | test_logging.rs:75:20:75:28 | &password [&ref] | provenance | | -| test_logging.rs:76:23:76:46 | MacroExpr | test_logging.rs:76:5:76:47 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:76:23:76:46 | MacroExpr | test_logging.rs:76:5:76:47 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:76:39:76:46 | password | test_logging.rs:76:23:76:46 | MacroExpr | provenance | | -| test_logging.rs:82:20:82:43 | MacroExpr | test_logging.rs:82:5:82:44 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:82:20:82:43 | MacroExpr | test_logging.rs:82:5:82:44 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:82:36:82:43 | password | test_logging.rs:82:20:82:43 | MacroExpr | provenance | | -| test_logging.rs:84:38:84:61 | MacroExpr | test_logging.rs:84:5:84:62 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:84:38:84:61 | MacroExpr | test_logging.rs:84:5:84:62 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:84:54:84:61 | password | test_logging.rs:84:38:84:61 | MacroExpr | provenance | | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 Sink:MaD:9 | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | | test_logging.rs:85:20:85:28 | &password | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:85:20:85:28 | &password [&ref] | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:85:21:85:28 | password | test_logging.rs:85:20:85:28 | &password | provenance | Config | | test_logging.rs:85:21:85:28 | password | test_logging.rs:85:20:85:28 | &password [&ref] | provenance | | -| test_logging.rs:86:20:86:43 | MacroExpr | test_logging.rs:86:5:86:44 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:86:20:86:43 | MacroExpr | test_logging.rs:86:5:86:44 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:86:36:86:43 | password | test_logging.rs:86:20:86:43 | MacroExpr | provenance | | | test_logging.rs:93:9:93:10 | m1 | test_logging.rs:94:11:94:28 | MacroExpr | provenance | | | test_logging.rs:93:14:93:22 | &password | test_logging.rs:93:9:93:10 | m1 | provenance | | | test_logging.rs:93:15:93:22 | password | test_logging.rs:93:14:93:22 | &password | provenance | Config | -| test_logging.rs:94:11:94:28 | MacroExpr | test_logging.rs:94:5:94:29 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:94:11:94:28 | MacroExpr | test_logging.rs:94:5:94:29 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:96:9:96:10 | m2 | test_logging.rs:97:11:97:18 | MacroExpr | provenance | | | test_logging.rs:96:41:96:49 | &password | test_logging.rs:96:9:96:10 | m2 | provenance | | | test_logging.rs:96:42:96:49 | password | test_logging.rs:96:41:96:49 | &password | provenance | Config | -| test_logging.rs:97:11:97:18 | MacroExpr | test_logging.rs:97:5:97:19 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:97:11:97:18 | MacroExpr | test_logging.rs:97:5:97:19 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:99:9:99:10 | m3 | test_logging.rs:100:11:100:18 | MacroExpr | provenance | | | test_logging.rs:99:14:99:46 | res | test_logging.rs:99:22:99:45 | { ... } | provenance | | | test_logging.rs:99:22:99:45 | ...::format(...) | test_logging.rs:99:14:99:46 | res | provenance | | | test_logging.rs:99:22:99:45 | ...::must_use(...) | test_logging.rs:99:9:99:10 | m3 | provenance | | -| test_logging.rs:99:22:99:45 | MacroExpr | test_logging.rs:99:22:99:45 | ...::format(...) | provenance | MaD:13 | -| test_logging.rs:99:22:99:45 | { ... } | test_logging.rs:99:22:99:45 | ...::must_use(...) | provenance | MaD:12 | +| test_logging.rs:99:22:99:45 | MacroExpr | test_logging.rs:99:22:99:45 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:99:22:99:45 | { ... } | test_logging.rs:99:22:99:45 | ...::must_use(...) | provenance | MaD:17 | | test_logging.rs:99:38:99:45 | password | test_logging.rs:99:22:99:45 | MacroExpr | provenance | | -| test_logging.rs:100:11:100:18 | MacroExpr | test_logging.rs:100:5:100:19 | ...::log | provenance | MaD:8 Sink:MaD:8 | -| test_logging.rs:118:12:118:41 | MacroExpr | test_logging.rs:118:5:118:42 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:100:11:100:18 | MacroExpr | test_logging.rs:100:5:100:19 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:118:12:118:41 | MacroExpr | test_logging.rs:118:5:118:42 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:12:118:41 | MacroExpr | provenance | | | test_logging.rs:129:9:129:10 | t1 [tuple.1] | test_logging.rs:131:28:131:29 | t1 [tuple.1] | provenance | | | test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | test_logging.rs:129:9:129:10 | t1 [tuple.1] | provenance | | | test_logging.rs:129:25:129:32 | password | test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | provenance | | -| test_logging.rs:131:12:131:31 | MacroExpr | test_logging.rs:131:5:131:32 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:131:12:131:31 | MacroExpr | test_logging.rs:131:5:131:32 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:131:28:131:29 | t1 [tuple.1] | test_logging.rs:131:28:131:31 | t1.1 | provenance | | | test_logging.rs:131:28:131:31 | t1.1 | test_logging.rs:131:12:131:31 | MacroExpr | provenance | | -| test_logging.rs:141:11:141:37 | MacroExpr | test_logging.rs:141:5:141:38 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:141:11:141:37 | MacroExpr | test_logging.rs:141:5:141:38 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:141:27:141:37 | s1.password | test_logging.rs:141:11:141:37 | MacroExpr | provenance | | -| test_logging.rs:151:11:151:37 | MacroExpr | test_logging.rs:151:5:151:38 | ...::log | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:151:11:151:37 | MacroExpr | test_logging.rs:151:5:151:38 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:151:27:151:37 | s2.password | test_logging.rs:151:11:151:37 | MacroExpr | provenance | | | test_logging.rs:176:33:176:79 | &... | test_logging.rs:176:22:176:31 | log_expect | provenance | MaD:1 Sink:MaD:1 | | test_logging.rs:176:33:176:79 | &... [&ref] | test_logging.rs:176:22:176:31 | log_expect | provenance | MaD:1 Sink:MaD:1 | @@ -160,82 +166,143 @@ edges | test_logging.rs:176:34:176:79 | res | test_logging.rs:176:42:176:78 | { ... } | provenance | | | test_logging.rs:176:42:176:78 | ...::format(...) | test_logging.rs:176:34:176:79 | res | provenance | | | test_logging.rs:176:42:176:78 | ...::must_use(...) | test_logging.rs:176:34:176:79 | MacroExpr | provenance | | -| test_logging.rs:176:42:176:78 | MacroExpr | test_logging.rs:176:42:176:78 | ...::format(...) | provenance | MaD:13 | -| test_logging.rs:176:42:176:78 | { ... } | test_logging.rs:176:42:176:78 | ...::must_use(...) | provenance | MaD:12 | +| test_logging.rs:176:42:176:78 | MacroExpr | test_logging.rs:176:42:176:78 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:176:42:176:78 | { ... } | test_logging.rs:176:42:176:78 | ...::must_use(...) | provenance | MaD:17 | | test_logging.rs:176:70:176:78 | password2 | test_logging.rs:176:42:176:78 | MacroExpr | provenance | | -| test_logging.rs:180:35:180:81 | &... | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:2 Sink:MaD:2 | -| test_logging.rs:180:35:180:81 | &... [&ref] | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:180:35:180:81 | &... | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:180:35:180:81 | &... [&ref] | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:3 Sink:MaD:3 | | test_logging.rs:180:36:180:81 | MacroExpr | test_logging.rs:180:35:180:81 | &... | provenance | Config | | test_logging.rs:180:36:180:81 | MacroExpr | test_logging.rs:180:35:180:81 | &... [&ref] | provenance | | | test_logging.rs:180:36:180:81 | res | test_logging.rs:180:44:180:80 | { ... } | provenance | | | test_logging.rs:180:44:180:80 | ...::format(...) | test_logging.rs:180:36:180:81 | res | provenance | | | test_logging.rs:180:44:180:80 | ...::must_use(...) | test_logging.rs:180:36:180:81 | MacroExpr | provenance | | -| test_logging.rs:180:44:180:80 | MacroExpr | test_logging.rs:180:44:180:80 | ...::format(...) | provenance | MaD:13 | -| test_logging.rs:180:44:180:80 | { ... } | test_logging.rs:180:44:180:80 | ...::must_use(...) | provenance | MaD:12 | +| test_logging.rs:180:44:180:80 | MacroExpr | test_logging.rs:180:44:180:80 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:180:44:180:80 | { ... } | test_logging.rs:180:44:180:80 | ...::must_use(...) | provenance | MaD:17 | | test_logging.rs:180:72:180:80 | password2 | test_logging.rs:180:44:180:80 | MacroExpr | provenance | | | test_logging.rs:183:9:183:19 | err_result2 [Err] | test_logging.rs:184:13:184:23 | err_result2 [Err] | provenance | | | test_logging.rs:183:47:183:68 | Err(...) [Err] | test_logging.rs:183:9:183:19 | err_result2 [Err] | provenance | | | test_logging.rs:183:51:183:59 | password2 | test_logging.rs:183:51:183:67 | password2.clone() | provenance | generated | | test_logging.rs:183:51:183:67 | password2.clone() | test_logging.rs:183:47:183:68 | Err(...) [Err] | provenance | | -| test_logging.rs:184:13:184:23 | err_result2 [Err] | test_logging.rs:184:25:184:34 | log_expect | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:184:13:184:23 | err_result2 [Err] | test_logging.rs:184:25:184:34 | log_expect | provenance | MaD:4 Sink:MaD:4 | | test_logging.rs:187:9:187:19 | err_result3 [Err] | test_logging.rs:188:13:188:23 | err_result3 [Err] | provenance | | | test_logging.rs:187:47:187:60 | Err(...) [Err] | test_logging.rs:187:9:187:19 | err_result3 [Err] | provenance | | | test_logging.rs:187:51:187:59 | password2 | test_logging.rs:187:47:187:60 | Err(...) [Err] | provenance | | -| test_logging.rs:188:13:188:23 | err_result3 [Err] | test_logging.rs:188:25:188:34 | log_unwrap | provenance | MaD:4 Sink:MaD:4 | -| test_logging.rs:192:12:192:37 | MacroExpr | test_logging.rs:192:5:192:38 | ...::_print | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:188:13:188:23 | err_result3 [Err] | test_logging.rs:188:25:188:34 | log_unwrap | provenance | MaD:5 Sink:MaD:5 | +| test_logging.rs:192:12:192:37 | MacroExpr | test_logging.rs:192:5:192:38 | ...::_print | provenance | MaD:15 Sink:MaD:15 | | test_logging.rs:192:30:192:37 | password | test_logging.rs:192:12:192:37 | MacroExpr | provenance | | -| test_logging.rs:193:14:193:37 | MacroExpr | test_logging.rs:193:5:193:38 | ...::_print | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:193:14:193:37 | MacroExpr | test_logging.rs:193:5:193:38 | ...::_print | provenance | MaD:15 Sink:MaD:15 | | test_logging.rs:193:30:193:37 | password | test_logging.rs:193:14:193:37 | MacroExpr | provenance | | -| test_logging.rs:194:13:194:38 | MacroExpr | test_logging.rs:194:5:194:39 | ...::_eprint | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:194:13:194:38 | MacroExpr | test_logging.rs:194:5:194:39 | ...::_eprint | provenance | MaD:14 Sink:MaD:14 | | test_logging.rs:194:31:194:38 | password | test_logging.rs:194:13:194:38 | MacroExpr | provenance | | -| test_logging.rs:195:15:195:38 | MacroExpr | test_logging.rs:195:5:195:39 | ...::_eprint | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:195:15:195:38 | MacroExpr | test_logging.rs:195:5:195:39 | ...::_eprint | provenance | MaD:14 Sink:MaD:14 | | test_logging.rs:195:31:195:38 | password | test_logging.rs:195:15:195:38 | MacroExpr | provenance | | -| test_logging.rs:199:20:199:43 | MacroExpr | test_logging.rs:199:13:199:44 | ...::panic_fmt | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:199:20:199:43 | MacroExpr | test_logging.rs:199:13:199:44 | ...::panic_fmt | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:199:36:199:43 | password | test_logging.rs:199:20:199:43 | MacroExpr | provenance | | -| test_logging.rs:202:19:202:42 | MacroExpr | test_logging.rs:202:13:202:43 | ...::panic_fmt | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:202:19:202:42 | MacroExpr | test_logging.rs:202:13:202:43 | ...::panic_fmt | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:202:35:202:42 | password | test_logging.rs:202:19:202:42 | MacroExpr | provenance | | -| test_logging.rs:205:28:205:51 | MacroExpr | test_logging.rs:205:13:205:52 | ...::panic_fmt | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:205:28:205:51 | MacroExpr | test_logging.rs:205:13:205:52 | ...::panic_fmt | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:205:44:205:51 | password | test_logging.rs:205:28:205:51 | MacroExpr | provenance | | -| test_logging.rs:208:26:208:49 | MacroExpr | test_logging.rs:208:13:208:50 | ...::panic_fmt | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:208:26:208:49 | MacroExpr | test_logging.rs:208:13:208:50 | ...::panic_fmt | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:208:42:208:49 | password | test_logging.rs:208:26:208:49 | MacroExpr | provenance | | -| test_logging.rs:211:28:211:51 | MacroExpr | test_logging.rs:211:13:211:52 | ...::panic_fmt | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:211:28:211:51 | MacroExpr | test_logging.rs:211:13:211:52 | ...::panic_fmt | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:211:44:211:51 | password | test_logging.rs:211:28:211:51 | MacroExpr | provenance | | -| test_logging.rs:214:13:214:54 | ...::assert_failed [Some] | test_logging.rs:214:13:214:54 | ...::assert_failed | provenance | Sink:MaD:5 | -| test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | test_logging.rs:214:13:214:54 | ...::assert_failed | provenance | MaD:5 Sink:MaD:5 | -| test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | test_logging.rs:214:13:214:54 | ...::assert_failed [Some] | provenance | MaD:6 | +| test_logging.rs:214:13:214:54 | ...::assert_failed [Some] | test_logging.rs:214:13:214:54 | ...::assert_failed | provenance | Sink:MaD:9 | +| test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | test_logging.rs:214:13:214:54 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | test_logging.rs:214:13:214:54 | ...::assert_failed [Some] | provenance | MaD:10 | | test_logging.rs:214:30:214:53 | MacroExpr | test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | provenance | | | test_logging.rs:214:46:214:53 | password | test_logging.rs:214:30:214:53 | MacroExpr | provenance | | -| test_logging.rs:217:13:217:54 | ...::assert_failed [Some] | test_logging.rs:217:13:217:54 | ...::assert_failed | provenance | Sink:MaD:5 | -| test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | test_logging.rs:217:13:217:54 | ...::assert_failed | provenance | MaD:5 Sink:MaD:5 | -| test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | test_logging.rs:217:13:217:54 | ...::assert_failed [Some] | provenance | MaD:6 | +| test_logging.rs:217:13:217:54 | ...::assert_failed [Some] | test_logging.rs:217:13:217:54 | ...::assert_failed | provenance | Sink:MaD:9 | +| test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | test_logging.rs:217:13:217:54 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | test_logging.rs:217:13:217:54 | ...::assert_failed [Some] | provenance | MaD:10 | | test_logging.rs:217:30:217:53 | MacroExpr | test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | provenance | | | test_logging.rs:217:46:217:53 | password | test_logging.rs:217:30:217:53 | MacroExpr | provenance | | -| test_logging.rs:220:34:220:57 | MacroExpr | test_logging.rs:220:13:220:58 | ...::panic_fmt | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:220:34:220:57 | MacroExpr | test_logging.rs:220:13:220:58 | ...::panic_fmt | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:220:50:220:57 | password | test_logging.rs:220:34:220:57 | MacroExpr | provenance | | -| test_logging.rs:223:13:223:60 | ...::assert_failed [Some] | test_logging.rs:223:13:223:60 | ...::assert_failed | provenance | Sink:MaD:5 | -| test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | test_logging.rs:223:13:223:60 | ...::assert_failed | provenance | MaD:5 Sink:MaD:5 | -| test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | test_logging.rs:223:13:223:60 | ...::assert_failed [Some] | provenance | MaD:6 | +| test_logging.rs:223:13:223:60 | ...::assert_failed [Some] | test_logging.rs:223:13:223:60 | ...::assert_failed | provenance | Sink:MaD:9 | +| test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | test_logging.rs:223:13:223:60 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | test_logging.rs:223:13:223:60 | ...::assert_failed [Some] | provenance | MaD:10 | | test_logging.rs:223:36:223:59 | MacroExpr | test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | provenance | | | test_logging.rs:223:52:223:59 | password | test_logging.rs:223:36:223:59 | MacroExpr | provenance | | -| test_logging.rs:226:13:226:60 | ...::assert_failed [Some] | test_logging.rs:226:13:226:60 | ...::assert_failed | provenance | Sink:MaD:5 | -| test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | test_logging.rs:226:13:226:60 | ...::assert_failed | provenance | MaD:5 Sink:MaD:5 | -| test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | test_logging.rs:226:13:226:60 | ...::assert_failed [Some] | provenance | MaD:6 | +| test_logging.rs:226:13:226:60 | ...::assert_failed [Some] | test_logging.rs:226:13:226:60 | ...::assert_failed | provenance | Sink:MaD:9 | +| test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | test_logging.rs:226:13:226:60 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | test_logging.rs:226:13:226:60 | ...::assert_failed [Some] | provenance | MaD:10 | | test_logging.rs:226:36:226:59 | MacroExpr | test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | provenance | | | test_logging.rs:226:52:226:59 | password | test_logging.rs:226:36:226:59 | MacroExpr | provenance | | +| test_logging.rs:229:30:229:62 | MacroExpr | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | provenance | MaD:19 | +| test_logging.rs:229:30:229:62 | MacroExpr | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | provenance | MaD:16 | +| test_logging.rs:229:30:229:62 | res | test_logging.rs:229:38:229:61 | { ... } | provenance | | +| test_logging.rs:229:30:229:71 | ... .as_str() | test_logging.rs:229:23:229:28 | expect | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:229:30:229:71 | ... .as_str() | test_logging.rs:229:23:229:28 | expect | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | test_logging.rs:229:23:229:28 | expect | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | test_logging.rs:229:23:229:28 | expect | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:229:38:229:61 | ...::format(...) | test_logging.rs:229:30:229:62 | res | provenance | | +| test_logging.rs:229:38:229:61 | ...::must_use(...) | test_logging.rs:229:30:229:62 | MacroExpr | provenance | | +| test_logging.rs:229:38:229:61 | ...::must_use(...) | test_logging.rs:229:30:229:71 | ... .as_str() | provenance | MaD:19 | +| test_logging.rs:229:38:229:61 | ...::must_use(...) | test_logging.rs:229:30:229:71 | ... .as_str() | provenance | MaD:16 | +| test_logging.rs:229:38:229:61 | MacroExpr | test_logging.rs:229:38:229:61 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:229:38:229:61 | { ... } | test_logging.rs:229:38:229:61 | ...::must_use(...) | provenance | MaD:17 | +| test_logging.rs:229:54:229:61 | password | test_logging.rs:229:38:229:61 | MacroExpr | provenance | | +| test_logging.rs:242:16:242:50 | MacroExpr | test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref] | provenance | MaD:18 | +| test_logging.rs:242:16:242:50 | res | test_logging.rs:242:24:242:49 | { ... } | provenance | | +| test_logging.rs:242:16:242:61 | ... .as_bytes() | test_logging.rs:242:10:242:14 | write | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref] | test_logging.rs:242:10:242:14 | write | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:242:24:242:49 | ...::format(...) | test_logging.rs:242:16:242:50 | res | provenance | | +| test_logging.rs:242:24:242:49 | ...::must_use(...) | test_logging.rs:242:16:242:50 | MacroExpr | provenance | | +| test_logging.rs:242:24:242:49 | ...::must_use(...) | test_logging.rs:242:16:242:61 | ... .as_bytes() | provenance | MaD:18 | +| test_logging.rs:242:24:242:49 | MacroExpr | test_logging.rs:242:24:242:49 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:242:24:242:49 | { ... } | test_logging.rs:242:24:242:49 | ...::must_use(...) | provenance | MaD:17 | +| test_logging.rs:242:42:242:49 | password | test_logging.rs:242:24:242:49 | MacroExpr | provenance | | +| test_logging.rs:245:20:245:54 | MacroExpr | test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref] | provenance | MaD:18 | +| test_logging.rs:245:20:245:54 | res | test_logging.rs:245:28:245:53 | { ... } | provenance | | +| test_logging.rs:245:20:245:65 | ... .as_bytes() | test_logging.rs:245:10:245:18 | write_all | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref] | test_logging.rs:245:10:245:18 | write_all | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:245:28:245:53 | ...::format(...) | test_logging.rs:245:20:245:54 | res | provenance | | +| test_logging.rs:245:28:245:53 | ...::must_use(...) | test_logging.rs:245:20:245:54 | MacroExpr | provenance | | +| test_logging.rs:245:28:245:53 | ...::must_use(...) | test_logging.rs:245:20:245:65 | ... .as_bytes() | provenance | MaD:18 | +| test_logging.rs:245:28:245:53 | MacroExpr | test_logging.rs:245:28:245:53 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:245:28:245:53 | { ... } | test_logging.rs:245:28:245:53 | ...::must_use(...) | provenance | MaD:17 | +| test_logging.rs:245:46:245:53 | password | test_logging.rs:245:28:245:53 | MacroExpr | provenance | | +| test_logging.rs:248:15:248:49 | MacroExpr | test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref] | provenance | MaD:18 | +| test_logging.rs:248:15:248:49 | res | test_logging.rs:248:23:248:48 | { ... } | provenance | | +| test_logging.rs:248:15:248:60 | ... .as_bytes() | test_logging.rs:248:9:248:13 | write | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref] | test_logging.rs:248:9:248:13 | write | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:248:23:248:48 | ...::format(...) | test_logging.rs:248:15:248:49 | res | provenance | | +| test_logging.rs:248:23:248:48 | ...::must_use(...) | test_logging.rs:248:15:248:49 | MacroExpr | provenance | | +| test_logging.rs:248:23:248:48 | ...::must_use(...) | test_logging.rs:248:15:248:60 | ... .as_bytes() | provenance | MaD:18 | +| test_logging.rs:248:23:248:48 | MacroExpr | test_logging.rs:248:23:248:48 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:248:23:248:48 | { ... } | test_logging.rs:248:23:248:48 | ...::must_use(...) | provenance | MaD:17 | +| test_logging.rs:248:41:248:48 | password | test_logging.rs:248:23:248:48 | MacroExpr | provenance | | +| test_logging.rs:251:15:251:49 | MacroExpr | test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref] | provenance | MaD:18 | +| test_logging.rs:251:15:251:49 | res | test_logging.rs:251:23:251:48 | { ... } | provenance | | +| test_logging.rs:251:15:251:60 | ... .as_bytes() | test_logging.rs:251:9:251:13 | write | provenance | MaD:6 Sink:MaD:6 | +| test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref] | test_logging.rs:251:9:251:13 | write | provenance | MaD:6 Sink:MaD:6 | +| test_logging.rs:251:23:251:48 | ...::format(...) | test_logging.rs:251:15:251:49 | res | provenance | | +| test_logging.rs:251:23:251:48 | ...::must_use(...) | test_logging.rs:251:15:251:49 | MacroExpr | provenance | | +| test_logging.rs:251:23:251:48 | ...::must_use(...) | test_logging.rs:251:15:251:60 | ... .as_bytes() | provenance | MaD:18 | +| test_logging.rs:251:23:251:48 | MacroExpr | test_logging.rs:251:23:251:48 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:251:23:251:48 | { ... } | test_logging.rs:251:23:251:48 | ...::must_use(...) | provenance | MaD:17 | +| test_logging.rs:251:41:251:48 | password | test_logging.rs:251:23:251:48 | MacroExpr | provenance | | models | 1 | Sink: ::log_expect; Argument[0]; log-injection | -| 2 | Sink: ::log_expect; Argument[0]; log-injection | -| 3 | Sink: ::log_expect; Argument[self].Field[core::result::Result::Err(0)]; log-injection | -| 4 | Sink: ::log_unwrap; Argument[self].Field[core::result::Result::Err(0)]; log-injection | -| 5 | Sink: core::panicking::assert_failed; Argument[3].Field[core::option::Option::Some(0)]; log-injection | -| 6 | Sink: core::panicking::assert_failed; Argument[3]; log-injection | -| 7 | Sink: core::panicking::panic_fmt; Argument[0]; log-injection | -| 8 | Sink: log::__private_api::log; Argument[1]; log-injection | -| 9 | Sink: log::__private_api::log; Argument[3]; log-injection | -| 10 | Sink: std::io::stdio::_eprint; Argument[0]; log-injection | -| 11 | Sink: std::io::stdio::_print; Argument[0]; log-injection | -| 12 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | -| 13 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint | +| 2 | Sink: ::expect; Argument[0]; log-injection | +| 3 | Sink: ::log_expect; Argument[0]; log-injection | +| 4 | Sink: ::log_expect; Argument[self].Field[core::result::Result::Err(0)]; log-injection | +| 5 | Sink: ::log_unwrap; Argument[self].Field[core::result::Result::Err(0)]; log-injection | +| 6 | Sink: ::write; Argument[0]; log-injection | +| 7 | Sink: ::write; Argument[0]; log-injection | +| 8 | Sink: ::write_all; Argument[0]; log-injection | +| 9 | Sink: core::panicking::assert_failed; Argument[3].Field[core::option::Option::Some(0)]; log-injection | +| 10 | Sink: core::panicking::assert_failed; Argument[3]; log-injection | +| 11 | Sink: core::panicking::panic_fmt; Argument[0]; log-injection | +| 12 | Sink: log::__private_api::log; Argument[1]; log-injection | +| 13 | Sink: log::__private_api::log; Argument[3]; log-injection | +| 14 | Sink: std::io::stdio::_eprint; Argument[0]; log-injection | +| 15 | Sink: std::io::stdio::_print; Argument[0]; log-injection | +| 16 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 17 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | +| 18 | Summary: lang:alloc; ::as_bytes; Argument[self]; ReturnValue; value | +| 19 | Summary: lang:alloc; ::as_str; Argument[self]; ReturnValue; value | +| 20 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint | nodes | test_logging.rs:42:5:42:36 | ...::log | semmle.label | ...::log | | test_logging.rs:42:12:42:35 | MacroExpr | semmle.label | MacroExpr | @@ -445,4 +512,55 @@ nodes | test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | | test_logging.rs:226:36:226:59 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:226:52:226:59 | password | semmle.label | password | +| test_logging.rs:229:23:229:28 | expect | semmle.label | expect | +| test_logging.rs:229:23:229:28 | expect | semmle.label | expect | +| test_logging.rs:229:30:229:62 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:229:30:229:62 | res | semmle.label | res | +| test_logging.rs:229:30:229:71 | ... .as_str() | semmle.label | ... .as_str() | +| test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | semmle.label | ... .as_str() [&ref] | +| test_logging.rs:229:38:229:61 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:229:38:229:61 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:229:38:229:61 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:229:38:229:61 | { ... } | semmle.label | { ... } | +| test_logging.rs:229:54:229:61 | password | semmle.label | password | +| test_logging.rs:242:10:242:14 | write | semmle.label | write | +| test_logging.rs:242:16:242:50 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:242:16:242:50 | res | semmle.label | res | +| test_logging.rs:242:16:242:61 | ... .as_bytes() | semmle.label | ... .as_bytes() | +| test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref] | semmle.label | ... .as_bytes() [&ref] | +| test_logging.rs:242:24:242:49 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:242:24:242:49 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:242:24:242:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:242:24:242:49 | { ... } | semmle.label | { ... } | +| test_logging.rs:242:42:242:49 | password | semmle.label | password | +| test_logging.rs:245:10:245:18 | write_all | semmle.label | write_all | +| test_logging.rs:245:20:245:54 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:245:20:245:54 | res | semmle.label | res | +| test_logging.rs:245:20:245:65 | ... .as_bytes() | semmle.label | ... .as_bytes() | +| test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref] | semmle.label | ... .as_bytes() [&ref] | +| test_logging.rs:245:28:245:53 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:245:28:245:53 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:245:28:245:53 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:245:28:245:53 | { ... } | semmle.label | { ... } | +| test_logging.rs:245:46:245:53 | password | semmle.label | password | +| test_logging.rs:248:9:248:13 | write | semmle.label | write | +| test_logging.rs:248:15:248:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:248:15:248:49 | res | semmle.label | res | +| test_logging.rs:248:15:248:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | +| test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref] | semmle.label | ... .as_bytes() [&ref] | +| test_logging.rs:248:23:248:48 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:248:23:248:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:248:23:248:48 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:248:23:248:48 | { ... } | semmle.label | { ... } | +| test_logging.rs:248:41:248:48 | password | semmle.label | password | +| test_logging.rs:251:9:251:13 | write | semmle.label | write | +| test_logging.rs:251:15:251:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:251:15:251:49 | res | semmle.label | res | +| test_logging.rs:251:15:251:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | +| test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref] | semmle.label | ... .as_bytes() [&ref] | +| test_logging.rs:251:23:251:48 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:251:23:251:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:251:23:251:48 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:251:23:251:48 | { ... } | semmle.label | { ... } | +| test_logging.rs:251:41:251:48 | password | semmle.label | password | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-312/test_logging.rs b/rust/ql/test/query-tests/security/CWE-312/test_logging.rs index f5f94fc89f82..4b12005a6cb5 100644 --- a/rust/ql/test/query-tests/security/CWE-312/test_logging.rs +++ b/rust/ql/test/query-tests/security/CWE-312/test_logging.rs @@ -226,7 +226,7 @@ fn test_std(password: String, i: i32, opt_i: Option) { debug_assert_ne!(1, 1, "message = {}", password); // $ Alert[rust/cleartext-logging] } 11 => { - _ = opt_i.expect(format!("message = {}", password).as_str()); // $ MISSING: Alert[rust/cleartext-logging] (https://github.com/github/codeql/pull/19658) + _ = opt_i.expect(format!("message = {}", password).as_str()); // $ Alert[rust/cleartext-logging] } _ => {} } @@ -239,16 +239,16 @@ fn test_std(password: String, i: i32, opt_i: Option) { .write_fmt(format_args!("message = {}\n", password)); // $ MISSING: Alert[rust/cleartext-logging] std::io::stdout() .lock() - .write(format!("message = {}\n", password).as_bytes()); // $ MISSING: Alert[rust/cleartext-logging] (https://github.com/github/codeql/pull/19658) + .write(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] std::io::stdout() .lock() - .write_all(format!("message = {}\n", password).as_bytes()); // $ MISSING: Alert[rust/cleartext-logging] (https://github.com/github/codeql/pull/19658) + .write_all(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] let mut out = std::io::stdout().lock(); - out.write(format!("message = {}\n", password).as_bytes()); // $ MISSING: Alert[rust/cleartext-logging] (https://github.com/github/codeql/pull/19658) + out.write(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] let mut err = std::io::stderr().lock(); - err.write(format!("message = {}\n", password).as_bytes()); // $ MISSING: Alert[rust/cleartext-logging] (https://github.com/github/codeql/pull/19658) + err.write(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] } fn main() { diff --git a/rust/ql/test/query-tests/security/CWE-328/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-328/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..cb8b7cc4d6c5 --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-328/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,3 @@ +multipleCallTargets +| test.rs:82:26:82:44 | harmless.as_bytes() | +| test.rs:83:26:83:44 | password.as_bytes() | diff --git a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected index 5e99e62b9d27..0f22859a9b26 100644 --- a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected +++ b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected @@ -14,7 +14,9 @@ | main.rs:54:13:54:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:54:13:54:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:59:13:59:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:59:13:59:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:61:13:61:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:61:13:61:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | +| main.rs:63:13:63:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:63:13:63:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:64:13:64:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:64:13:64:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | +| main.rs:65:13:65:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:65:13:65:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:68:13:68:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:68:13:68:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:88:13:88:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:88:13:88:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:96:17:96:33 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:96:17:96:33 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | @@ -69,7 +71,7 @@ edges | main.rs:20:9:20:10 | l2 | main.rs:21:31:21:32 | l2 | provenance | | | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:35 | | main.rs:20:14:20:63 | ... .unwrap() | main.rs:20:9:20:10 | l2 | provenance | | -| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:44 | +| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:46 | | main.rs:21:31:21:32 | l2 | main.rs:21:13:21:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:21:31:21:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:40 | | main.rs:21:31:21:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:40 | @@ -77,17 +79,17 @@ edges | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:35 | | main.rs:22:31:22:53 | ... .unwrap() | main.rs:22:13:22:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:35 | -| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:46 | +| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:48 | | main.rs:23:31:23:68 | ... .pad_to_align() | main.rs:23:13:23:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:24:38:24:39 | l2 | main.rs:24:13:24:36 | ...::alloc_zeroed | provenance | MaD:18 Sink:MaD:18 | | main.rs:29:9:29:10 | l4 | main.rs:30:31:30:32 | l4 | provenance | | | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | main.rs:29:9:29:10 | l4 | provenance | | -| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:45 | +| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:47 | | main.rs:30:31:30:32 | l4 | main.rs:30:13:30:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:32:9:32:10 | l5 | main.rs:33:31:33:32 | l5 | provenance | | | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | main.rs:32:9:32:10 | l5 | provenance | | | main.rs:32:60:32:60 | v | main.rs:32:60:32:89 | ... * ... | provenance | MaD:37 | -| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:45 | +| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:47 | | main.rs:33:31:33:32 | l5 | main.rs:33:13:33:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:35:9:35:10 | s6 | main.rs:36:60:36:61 | s6 | provenance | | | main.rs:35:15:35:49 | ... * ... | main.rs:35:9:35:10 | s6 | provenance | | @@ -96,14 +98,14 @@ edges | main.rs:36:9:36:10 | l6 [Layout.size] | main.rs:37:31:37:32 | l6 [Layout.size] | provenance | | | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | main.rs:36:9:36:10 | l6 | provenance | | | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) [Layout.size] | main.rs:36:9:36:10 | l6 [Layout.size] | provenance | | -| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:45 | +| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:47 | | main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) [Layout.size] | provenance | MaD:31 | | main.rs:37:31:37:32 | l6 | main.rs:37:13:37:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | -| main.rs:37:31:37:32 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:49 | +| main.rs:37:31:37:32 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:51 | | main.rs:37:31:37:32 | l6 [Layout.size] | main.rs:39:60:39:68 | l6.size() | provenance | MaD:32 | | main.rs:39:9:39:10 | l7 | main.rs:40:31:40:32 | l7 | provenance | | | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | main.rs:39:9:39:10 | l7 | provenance | | -| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:45 | +| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:47 | | main.rs:40:31:40:32 | l7 | main.rs:40:13:40:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:43:44:43:51 | ...: usize | main.rs:50:41:50:41 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:51:41:51:45 | ... + ... | provenance | | @@ -114,34 +116,43 @@ edges | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:35 | | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | main.rs:50:31:50:53 | ... .0 | provenance | | | main.rs:50:31:50:53 | ... .0 | main.rs:50:13:50:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | -| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:47 | +| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:49 | | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:35 | | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | main.rs:51:31:51:57 | ... .0 | provenance | | | main.rs:51:31:51:57 | ... .0 | main.rs:51:13:51:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | -| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:47 | +| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:49 | | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:35 | | main.rs:53:31:53:58 | ... .unwrap() | main.rs:53:13:53:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | -| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:48 | +| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:50 | | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:35 | | main.rs:54:31:54:63 | ... .unwrap() | main.rs:54:13:54:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | -| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:48 | +| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:50 | | main.rs:58:9:58:20 | TuplePat [tuple.0] | main.rs:58:10:58:11 | k1 | provenance | | | main.rs:58:10:58:11 | k1 | main.rs:59:31:59:32 | k1 | provenance | | | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:34 | | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | main.rs:58:9:58:20 | TuplePat [tuple.0] | provenance | | -| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:47 | +| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:49 | | main.rs:59:31:59:32 | k1 | main.rs:59:13:59:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:59:31:59:32 | k1 | main.rs:60:34:60:35 | k1 | provenance | | +| main.rs:59:31:59:32 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:43 | | main.rs:59:31:59:32 | k1 | main.rs:64:48:64:49 | k1 | provenance | | +| main.rs:59:31:59:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:45 | | main.rs:60:9:60:20 | TuplePat [tuple.0] | main.rs:60:10:60:11 | k2 | provenance | | | main.rs:60:10:60:11 | k2 | main.rs:61:31:61:32 | k2 | provenance | | | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:35 | | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | main.rs:60:9:60:20 | TuplePat [tuple.0] | provenance | | | main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:42 | | main.rs:61:31:61:32 | k2 | main.rs:61:13:61:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | +| main.rs:62:9:62:20 | TuplePat [tuple.0] | main.rs:62:10:62:11 | k3 | provenance | | +| main.rs:62:10:62:11 | k3 | main.rs:63:31:63:32 | k3 | provenance | | +| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:35 | +| main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | main.rs:62:9:62:20 | TuplePat [tuple.0] | provenance | | +| main.rs:63:31:63:32 | k3 | main.rs:63:13:63:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:35 | | main.rs:64:31:64:59 | ... .unwrap() | main.rs:64:13:64:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | -| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:43 | +| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:44 | +| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:35 | +| main.rs:65:31:65:59 | ... .unwrap() | main.rs:65:13:65:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:67:9:67:10 | l4 | main.rs:68:31:68:32 | l4 | provenance | | | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:35 | | main.rs:67:14:67:56 | ... .unwrap() | main.rs:67:9:67:10 | l4 | provenance | | @@ -151,7 +162,7 @@ edges | main.rs:87:9:87:14 | layout | main.rs:88:31:88:36 | layout | provenance | | | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:35 | | main.rs:87:18:87:67 | ... .unwrap() | main.rs:87:9:87:14 | layout | provenance | | -| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:44 | +| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:46 | | main.rs:88:31:88:36 | layout | main.rs:88:13:88:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:91:38:91:45 | ...: usize | main.rs:92:47:92:47 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:101:51:101:51 | v | provenance | | @@ -203,7 +214,7 @@ edges | main.rs:161:13:161:15 | l13 | main.rs:162:35:162:37 | l13 | provenance | | | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:35 | | main.rs:161:19:161:68 | ... .unwrap() | main.rs:161:13:161:15 | l13 | provenance | | -| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:44 | +| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:46 | | main.rs:162:35:162:37 | l13 | main.rs:162:17:162:33 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:162:35:162:37 | l13 | main.rs:169:35:169:37 | l13 | provenance | | | main.rs:169:35:169:37 | l13 | main.rs:169:17:169:33 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | @@ -256,7 +267,7 @@ edges | main.rs:230:46:230:46 | v | main.rs:230:13:230:44 | ...::try_with_capacity_in | provenance | MaD:3 Sink:MaD:3 | | main.rs:230:46:230:46 | v | main.rs:231:42:231:42 | v | provenance | | | main.rs:231:42:231:42 | v | main.rs:231:13:231:40 | ...::with_capacity_in | provenance | MaD:4 Sink:MaD:4 | -| main.rs:279:24:279:41 | ...: String | main.rs:280:21:280:47 | user_input.parse() [Ok] | provenance | MaD:50 | +| main.rs:279:24:279:41 | ...: String | main.rs:280:21:280:47 | user_input.parse() [Ok] | provenance | MaD:52 | | main.rs:280:9:280:17 | num_bytes | main.rs:282:54:282:62 | num_bytes | provenance | | | main.rs:280:21:280:47 | user_input.parse() [Ok] | main.rs:280:21:280:48 | TryExpr | provenance | | | main.rs:280:21:280:48 | TryExpr | main.rs:280:9:280:17 | num_bytes | provenance | | @@ -265,10 +276,10 @@ edges | main.rs:282:9:282:14 | layout | main.rs:284:40:284:45 | layout | provenance | | | main.rs:282:18:282:66 | ...::from_size_align(...) [Ok] | main.rs:282:18:282:75 | ... .unwrap() | provenance | MaD:35 | | main.rs:282:18:282:75 | ... .unwrap() | main.rs:282:9:282:14 | layout | provenance | | -| main.rs:282:54:282:62 | num_bytes | main.rs:282:18:282:66 | ...::from_size_align(...) [Ok] | provenance | MaD:44 | +| main.rs:282:54:282:62 | num_bytes | main.rs:282:18:282:66 | ...::from_size_align(...) [Ok] | provenance | MaD:46 | | main.rs:284:40:284:45 | layout | main.rs:284:22:284:38 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:308:25:308:38 | ...::args | main.rs:308:25:308:40 | ...::args(...) [element] | provenance | Src:MaD:30 | -| main.rs:308:25:308:40 | ...::args(...) [element] | main.rs:308:25:308:47 | ... .nth(...) [Some] | provenance | MaD:51 | +| main.rs:308:25:308:40 | ...::args(...) [element] | main.rs:308:25:308:47 | ... .nth(...) [Some] | provenance | MaD:53 | | main.rs:308:25:308:47 | ... .nth(...) [Some] | main.rs:308:25:308:74 | ... .unwrap_or(...) | provenance | MaD:33 | | main.rs:308:25:308:74 | ... .unwrap_or(...) | main.rs:279:24:279:41 | ...: String | provenance | | | main.rs:317:9:317:9 | v | main.rs:320:34:320:34 | v | provenance | | @@ -278,9 +289,9 @@ edges | main.rs:317:9:317:9 | v | main.rs:324:25:324:25 | v | provenance | | | main.rs:317:9:317:9 | v | main.rs:325:22:325:22 | v | provenance | | | main.rs:317:13:317:26 | ...::args | main.rs:317:13:317:28 | ...::args(...) [element] | provenance | Src:MaD:30 | -| main.rs:317:13:317:28 | ...::args(...) [element] | main.rs:317:13:317:35 | ... .nth(...) [Some] | provenance | MaD:51 | +| main.rs:317:13:317:28 | ...::args(...) [element] | main.rs:317:13:317:35 | ... .nth(...) [Some] | provenance | MaD:53 | | main.rs:317:13:317:35 | ... .nth(...) [Some] | main.rs:317:13:317:65 | ... .unwrap_or(...) | provenance | MaD:33 | -| main.rs:317:13:317:65 | ... .unwrap_or(...) | main.rs:317:13:317:82 | ... .parse() [Ok] | provenance | MaD:50 | +| main.rs:317:13:317:65 | ... .unwrap_or(...) | main.rs:317:13:317:82 | ... .parse() [Ok] | provenance | MaD:52 | | main.rs:317:13:317:82 | ... .parse() [Ok] | main.rs:317:13:317:91 | ... .unwrap() | provenance | MaD:35 | | main.rs:317:13:317:91 | ... .unwrap() | main.rs:317:9:317:9 | v | provenance | | | main.rs:320:34:320:34 | v | main.rs:12:36:12:43 | ...: usize | provenance | | @@ -332,15 +343,17 @@ models | 40 | Summary: lang:core; ::align_to; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | | 41 | Summary: lang:core; ::array; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | | 42 | Summary: lang:core; ::extend; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 43 | Summary: lang:core; ::extend_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 44 | Summary: lang:core; ::from_size_align; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 45 | Summary: lang:core; ::from_size_align_unchecked; Argument[0]; ReturnValue; taint | -| 46 | Summary: lang:core; ::pad_to_align; Argument[self]; ReturnValue; taint | -| 47 | Summary: lang:core; ::repeat; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 48 | Summary: lang:core; ::repeat_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 49 | Summary: lang:core; ::size; Argument[self]; ReturnValue; taint | -| 50 | Summary: lang:core; ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 51 | Summary: lang:core; crate::iter::traits::iterator::Iterator::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 43 | Summary: lang:core; ::extend; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 44 | Summary: lang:core; ::extend_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 45 | Summary: lang:core; ::extend_packed; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 46 | Summary: lang:core; ::from_size_align; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 47 | Summary: lang:core; ::from_size_align_unchecked; Argument[0]; ReturnValue; taint | +| 48 | Summary: lang:core; ::pad_to_align; Argument[self]; ReturnValue; taint | +| 49 | Summary: lang:core; ::repeat; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 50 | Summary: lang:core; ::repeat_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 51 | Summary: lang:core; ::size; Argument[self]; ReturnValue; taint | +| 52 | Summary: lang:core; ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 53 | Summary: lang:core; crate::iter::traits::iterator::Iterator::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | nodes | main.rs:12:36:12:43 | ...: usize | semmle.label | ...: usize | | main.rs:18:13:18:31 | ...::realloc | semmle.label | ...::realloc | @@ -420,10 +433,19 @@ nodes | main.rs:60:34:60:35 | k1 | semmle.label | k1 | | main.rs:61:13:61:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:61:31:61:32 | k2 | semmle.label | k2 | +| main.rs:62:9:62:20 | TuplePat [tuple.0] | semmle.label | TuplePat [tuple.0] | +| main.rs:62:10:62:11 | k3 | semmle.label | k3 | +| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | semmle.label | k1.extend(...) [Ok, tuple.0] | +| main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | semmle.label | ... .unwrap() [tuple.0] | +| main.rs:63:13:63:29 | ...::alloc | semmle.label | ...::alloc | +| main.rs:63:31:63:32 | k3 | semmle.label | k3 | | main.rs:64:13:64:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | semmle.label | l3.extend_packed(...) [Ok] | | main.rs:64:31:64:59 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:64:48:64:49 | k1 | semmle.label | k1 | +| main.rs:65:13:65:29 | ...::alloc | semmle.label | ...::alloc | +| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | semmle.label | k1.extend_packed(...) [Ok] | +| main.rs:65:31:65:59 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:67:9:67:10 | l4 | semmle.label | l4 | | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | semmle.label | ...::array::<...>(...) [Ok] | | main.rs:67:14:67:56 | ... .unwrap() | semmle.label | ... .unwrap() | diff --git a/rust/ql/test/query-tests/security/CWE-770/main.rs b/rust/ql/test/query-tests/security/CWE-770/main.rs index 0b39862ef324..1f549cb26757 100644 --- a/rust/ql/test/query-tests/security/CWE-770/main.rs +++ b/rust/ql/test/query-tests/security/CWE-770/main.rs @@ -60,9 +60,9 @@ unsafe fn test_std_alloc_new_repeat_extend(v: usize) { let (k2, _offs2) = l3.extend(k1).unwrap(); let _ = std::alloc::alloc(k2); // $ Alert[rust/uncontrolled-allocation-size]=arg1 let (k3, _offs3) = k1.extend(l3).unwrap(); - let _ = std::alloc::alloc(k3); // $ MISSING: Alert[rust/uncontrolled-allocation-size]=arg1 (https://github.com/github/codeql/pull/19658) + let _ = std::alloc::alloc(k3); // $ Alert[rust/uncontrolled-allocation-size]=arg1 let _ = std::alloc::alloc(l3.extend_packed(k1).unwrap()); // $ Alert[rust/uncontrolled-allocation-size]=arg1 - let _ = std::alloc::alloc(k1.extend_packed(l3).unwrap()); // $ MISSING: Alert[rust/uncontrolled-allocation-size]=arg1 (https://github.com/github/codeql/pull/19658) + let _ = std::alloc::alloc(k1.extend_packed(l3).unwrap()); // $ Alert[rust/uncontrolled-allocation-size]=arg1 let l4 = std::alloc::Layout::array::(v).unwrap(); let _ = std::alloc::alloc(l4); // $ Alert[rust/uncontrolled-allocation-size]=arg1