From 8a051d7e578792814bd787de4eb9c37591c544f7 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 17 Feb 2026 12:10:33 +0100 Subject: [PATCH 1/4] Rust: Add type inference test --- .../test/library-tests/type-inference/main.rs | 1 + .../type-inference/regressions.rs | 34 + .../type-inference/type-inference.expected | 603 +++++++++++++++--- 3 files changed, 554 insertions(+), 84 deletions(-) create mode 100644 rust/ql/test/library-tests/type-inference/regressions.rs diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 204bd7e55cb5..06d54b5ba968 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -2740,6 +2740,7 @@ mod blanket_impl; mod closure; mod dereference; mod dyn_type; +mod regressions; fn main() { field_access::f(); // $ target=f diff --git a/rust/ql/test/library-tests/type-inference/regressions.rs b/rust/ql/test/library-tests/type-inference/regressions.rs new file mode 100644 index 000000000000..17475d50166b --- /dev/null +++ b/rust/ql/test/library-tests/type-inference/regressions.rs @@ -0,0 +1,34 @@ +mod regression1 { + + pub struct S(T); + + pub enum E { + V { vec: Vec }, + } + + impl From> for Option { + fn from(s: S) -> Self { + Some(s.0) // $ fieldof=S + } + } + + pub fn f() -> E { + let mut vec_e = Vec::new(); // $ target=new + let mut opt_e = None; + + let e = E::V { vec: Vec::new() }; // $ target=new + + if let Some(e) = opt_e { + vec_e.push(e); // $ target=push + } + opt_e = e.into(); // $ target=into + + #[rustfmt::skip] + let _ = if let Some(last) = vec_e.pop() // $ target=pop + { + opt_e = last.into(); // $ target=into + }; + + opt_e.unwrap() // $ target=unwrap + } +} 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 1b750fab4586..24005c2cdbdd 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -3711,48 +3711,48 @@ inferCertainType | main.rs:2730:21:2730:21 | y | | {EXTERNAL LOCATION} | & | | main.rs:2733:13:2733:13 | y | | {EXTERNAL LOCATION} | usize | | main.rs:2734:23:2734:23 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:2744:11:2779:1 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2745:5:2745:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2746:5:2746:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2747:5:2747:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2747:20:2747:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2747:41:2747:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2748:5:2748:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2749:5:2749:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2750:5:2750:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2751:5:2751:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2752:5:2752:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2753:5:2753:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2754:5:2754:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2755:5:2755:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2756:5:2756:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2757:5:2757:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2758:5:2758:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2759:5:2759:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2760:5:2760:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2761:5:2761:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2762:5:2762:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2763:5:2763:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2763:5:2763:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:2764:5:2764:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2765:5:2765:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2766:5:2766:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2767:5:2767:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2768:5:2768:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2769:5:2769:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2770:5:2770:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2771:5:2771:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2772:5:2772:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2773:5:2773:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2774:5:2774:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2775:5:2775:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2776:5:2776:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2777:5:2777:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2777:5:2777:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2777:5:2777:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | -| main.rs:2777:5:2777:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2777:16:2777:19 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2778:5:2778:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2745:11:2780:1 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2746:5:2746:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2747:5:2747:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2748:5:2748:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2748:20:2748:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2748:41:2748:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2749:5:2749:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2750:5:2750:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2751:5:2751:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2752:5:2752:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2753:5:2753:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2754:5:2754:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2755:5:2755:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2756:5:2756:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2757:5:2757:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2758:5:2758:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2759:5:2759:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2760:5:2760:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2761:5:2761:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2762:5:2762:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2763:5:2763:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2764:5:2764:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2764:5:2764:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:2765:5:2765:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2766:5:2766:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2767:5:2767:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2768:5:2768:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2769:5:2769:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2770:5:2770:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2771:5:2771:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2772:5:2772:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2773:5:2773:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2774:5:2774:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2775:5:2775:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2776:5:2776:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2777:5:2777:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2778:5:2778:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2778:5:2778:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2778:5:2778:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | +| main.rs:2778:5:2778:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2778:16:2778:19 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2779:5:2779:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:4:19:4:23 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:4:19:4:23 | SelfParam | TRef | overloading.rs:2:5:11:5 | Self [trait FirstTrait] | | overloading.rs:4:34:6:9 | { ... } | | {EXTERNAL LOCATION} | bool | @@ -4920,6 +4920,30 @@ inferCertainType | raw_pointer.rs:58:19:58:23 | false | | {EXTERNAL LOCATION} | bool | | raw_pointer.rs:59:5:59:30 | raw_type_from_deref(...) | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:59:25:59:29 | false | | {EXTERNAL LOCATION} | bool | +| regressions.rs:10:17:10:17 | s | | regressions.rs:3:5:3:23 | S | +| regressions.rs:10:17:10:17 | s | T | regressions.rs:9:10:9:10 | T | +| regressions.rs:10:34:12:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| regressions.rs:10:34:12:9 | { ... } | T | regressions.rs:9:10:9:10 | T | +| regressions.rs:11:18:11:18 | s | | regressions.rs:3:5:3:23 | S | +| regressions.rs:11:18:11:18 | s | T | regressions.rs:9:10:9:10 | T | +| regressions.rs:15:21:33:5 | { ... } | | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:16:17:16:21 | vec_e | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:16:25:16:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:16:25:16:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:19:13:19:13 | e | | regressions.rs:5:5:7:5 | E | +| regressions.rs:19:17:19:40 | ...::V {...} | | regressions.rs:5:5:7:5 | E | +| regressions.rs:19:29:19:38 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:19:29:19:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:21:9:23:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| regressions.rs:21:32:23:9 | { ... } | | {EXTERNAL LOCATION} | () | +| regressions.rs:22:13:22:17 | vec_e | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:22:13:22:17 | vec_e | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:24:17:24:17 | e | | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:17:30:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| regressions.rs:27:37:27:41 | vec_e | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:27:37:27:41 | vec_e | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:28:9:30:9 | { ... } | | {EXTERNAL LOCATION} | () | inferType | associated_types.rs:5:15:5:18 | SelfParam | | associated_types.rs:1:1:2:21 | Wrapper | | associated_types.rs:5:15:5:18 | SelfParam | A | associated_types.rs:4:6:4:6 | A | @@ -12134,48 +12158,48 @@ inferType | main.rs:2734:17:2734:17 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:2734:17:2734:24 | x.max(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:2734:23:2734:23 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:2744:11:2779:1 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2745:5:2745:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2746:5:2746:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2747:5:2747:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2747:20:2747:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2747:41:2747:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2748:5:2748:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2749:5:2749:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2750:5:2750:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2751:5:2751:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2752:5:2752:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2753:5:2753:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2754:5:2754:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2755:5:2755:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2756:5:2756:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2757:5:2757:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2758:5:2758:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2759:5:2759:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2760:5:2760:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2761:5:2761:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2762:5:2762:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2763:5:2763:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2763:5:2763:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:2764:5:2764:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2765:5:2765:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2766:5:2766:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2767:5:2767:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2768:5:2768:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2769:5:2769:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2770:5:2770:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2771:5:2771:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2772:5:2772:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2773:5:2773:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2774:5:2774:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2775:5:2775:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2776:5:2776:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2777:5:2777:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2777:5:2777:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2777:5:2777:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | -| main.rs:2777:5:2777:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2777:16:2777:19 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2778:5:2778:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2745:11:2780:1 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2746:5:2746:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2747:5:2747:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2748:5:2748:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2748:20:2748:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2748:41:2748:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2749:5:2749:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2750:5:2750:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2751:5:2751:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2752:5:2752:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2753:5:2753:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2754:5:2754:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2755:5:2755:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2756:5:2756:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2757:5:2757:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2758:5:2758:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2759:5:2759:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2760:5:2760:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2761:5:2761:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2762:5:2762:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2763:5:2763:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2764:5:2764:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2764:5:2764:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:2765:5:2765:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2766:5:2766:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2767:5:2767:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2768:5:2768:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2769:5:2769:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2770:5:2770:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2771:5:2771:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2772:5:2772:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2773:5:2773:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2774:5:2774:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2775:5:2775:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2776:5:2776:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2777:5:2777:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2778:5:2778:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2778:5:2778:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2778:5:2778:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | +| main.rs:2778:5:2778:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2778:16:2778:19 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2779:5:2779:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:4:19:4:23 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:4:19:4:23 | SelfParam | TRef | overloading.rs:2:5:11:5 | Self [trait FirstTrait] | | overloading.rs:4:34:6:9 | { ... } | | {EXTERNAL LOCATION} | bool | @@ -14681,4 +14705,415 @@ inferType | raw_pointer.rs:58:19:58:23 | false | | {EXTERNAL LOCATION} | bool | | raw_pointer.rs:59:5:59:30 | raw_type_from_deref(...) | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:59:25:59:29 | false | | {EXTERNAL LOCATION} | bool | +| regressions.rs:10:17:10:17 | s | | regressions.rs:3:5:3:23 | S | +| regressions.rs:10:17:10:17 | s | T | regressions.rs:9:10:9:10 | T | +| regressions.rs:10:34:12:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| regressions.rs:10:34:12:9 | { ... } | T | regressions.rs:9:10:9:10 | T | +| regressions.rs:11:13:11:21 | Some(...) | | {EXTERNAL LOCATION} | Option | +| regressions.rs:11:13:11:21 | Some(...) | T | regressions.rs:9:10:9:10 | T | +| regressions.rs:11:18:11:18 | s | | regressions.rs:3:5:3:23 | S | +| regressions.rs:11:18:11:18 | s | T | regressions.rs:9:10:9:10 | T | +| regressions.rs:11:18:11:20 | s.0 | | regressions.rs:9:10:9:10 | T | +| regressions.rs:15:21:33:5 | { ... } | | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:16:17:16:21 | vec_e | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:16:17:16:21 | vec_e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:16:25:16:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:16:25:16:34 | ...::new(...) | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | | {EXTERNAL LOCATION} | Option | +| regressions.rs:17:17:17:21 | opt_e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | | {EXTERNAL LOCATION} | Option | +| regressions.rs:17:25:17:28 | None | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:19:13:19:13 | e | | regressions.rs:5:5:7:5 | E | +| regressions.rs:19:17:19:40 | ...::V {...} | | regressions.rs:5:5:7:5 | E | +| regressions.rs:19:29:19:38 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:19:29:19:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:19:29:19:38 | ...::new(...) | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:9:23:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| regressions.rs:21:16:21:22 | Some(...) | | {EXTERNAL LOCATION} | Option | +| regressions.rs:21:16:21:22 | Some(...) | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:16:21:22 | Some(...) | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | | {EXTERNAL LOCATION} | Option | +| regressions.rs:21:26:21:30 | opt_e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:32:23:9 | { ... } | | {EXTERNAL LOCATION} | () | +| regressions.rs:22:13:22:17 | vec_e | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:22:13:22:17 | vec_e | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:22:13:22:17 | vec_e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:17 | vec_e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:17 | vec_e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:25 | vec_e.push(...) | | {EXTERNAL LOCATION} | () | +| regressions.rs:22:24:22:24 | e | | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:24:22:24 | e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:24:22:24 | e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:24:22:24 | e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:24:22:24 | e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:24:22:24 | e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | | {EXTERNAL LOCATION} | Option | +| regressions.rs:24:9:24:13 | opt_e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:24 | ... = ... | | {EXTERNAL LOCATION} | () | +| regressions.rs:24:17:24:17 | e | | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | | {EXTERNAL LOCATION} | Option | +| regressions.rs:24:17:24:24 | e.into() | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:13:27:13 | _ | | {EXTERNAL LOCATION} | () | +| regressions.rs:27:17:30:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| regressions.rs:27:24:27:33 | Some(...) | | {EXTERNAL LOCATION} | Option | +| regressions.rs:27:24:27:33 | Some(...) | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:27:37:27:41 | vec_e | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:27:37:27:41 | vec_e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | | {EXTERNAL LOCATION} | Option | +| regressions.rs:27:37:27:47 | vec_e.pop() | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:28:9:30:9 | { ... } | | {EXTERNAL LOCATION} | () | +| regressions.rs:29:13:29:17 | opt_e | | {EXTERNAL LOCATION} | Option | +| regressions.rs:29:13:29:17 | opt_e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:17 | opt_e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:17 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:31 | ... = ... | | {EXTERNAL LOCATION} | () | +| regressions.rs:29:21:29:24 | last | | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | | {EXTERNAL LOCATION} | Option | +| regressions.rs:29:21:29:31 | last.into() | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | | {EXTERNAL LOCATION} | Option | +| regressions.rs:32:9:32:13 | opt_e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | testFailures From e587541e55b0c5602948222566d39236c452d160 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 17 Feb 2026 08:59:44 +0100 Subject: [PATCH 2/4] Rust: Restrict type propagation into receivers --- .../internal/typeinference/TypeInference.qll | 123 +++--- .../type-inference/type-inference.expected | 349 ------------------ 2 files changed, 75 insertions(+), 397 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index a4812ad08786..08ef69ff5965 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -778,13 +778,6 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat prefix1 = TypePath::singleton(getArrayTypeParameter()) and prefix2.isEmpty() or - exists(Struct s | - n2 = [n1.(RangeExpr).getStart(), n1.(RangeExpr).getEnd()] and - prefix1 = TypePath::singleton(TTypeParamTypeParameter(s.getGenericParamList().getATypeParam())) and - prefix2.isEmpty() and - s = getRangeType(n1) - ) - or exists(ClosureExpr ce, int index | n1 = ce and n2 = ce.getParam(index).getPat() and @@ -829,6 +822,12 @@ private predicate lubCoercion(AstNode parent, AstNode child, TypePath prefix) { bodyReturns(parent, child) and strictcount(Expr e | bodyReturns(parent, e)) > 1 and prefix.isEmpty() + or + exists(Struct s | + child = [parent.(RangeExpr).getStart(), parent.(RangeExpr).getEnd()] and + prefix = TypePath::singleton(TTypeParamTypeParameter(s.getGenericParamList().getATypeParam())) and + s = getRangeType(parent) + ) } /** @@ -1031,10 +1030,10 @@ private module StructExprMatchingInput implements MatchingInputSig { private module StructExprMatching = Matching; pragma[nomagic] -private Type inferStructExprType0(AstNode n, boolean isReturn, TypePath path) { +private Type inferStructExprType0(AstNode n, FunctionPosition pos, TypePath path) { exists(StructExprMatchingInput::Access a, StructExprMatchingInput::AccessPosition apos | n = a.getNodeAt(apos) and - if apos.isStructPos() then isReturn = true else isReturn = false + if apos.isStructPos() then pos.isReturn() else pos.asPosition() = 0 // the acutal position doesn't matter, as long as it is positional | result = StructExprMatching::inferAccessType(a, apos, path) or @@ -1113,6 +1112,25 @@ private Trait getCallExprTraitQualifier(CallExpr ce) { * Provides functionality related to context-based typing of calls. */ private module ContextTyping { + /** + * Holds if `f` mentions type parameter `tp` at some non-return position, + * possibly via a constraint on another mentioned type parameter. + */ + pragma[nomagic] + private predicate assocFunctionMentionsTypeParameterAtNonRetPos( + ImplOrTraitItemNode i, Function f, TypeParameter tp + ) { + exists(FunctionPosition nonRetPos | + not nonRetPos.isReturn() and + tp = getAssocFunctionTypeAt(f, i, nonRetPos, _) + ) + or + exists(TypeParameter mid | + assocFunctionMentionsTypeParameterAtNonRetPos(i, f, mid) and + tp = getATypeParameterConstraint(mid, _) + ) + } + /** * Holds if the return type of the function `f` inside `i` at `path` is type * parameter `tp`, and `tp` does not appear in the type of any parameter of @@ -1129,12 +1147,7 @@ private module ContextTyping { ) { pos.isReturn() and tp = getAssocFunctionTypeAt(f, i, pos, path) and - not exists(FunctionPosition nonResPos | not nonResPos.isReturn() | - tp = getAssocFunctionTypeAt(f, i, nonResPos, _) - or - // `Self` types in traits implicitly mention all type parameters of the trait - getAssocFunctionTypeAt(f, i, nonResPos, _) = TSelfTypeParameter(i) - ) + not assocFunctionMentionsTypeParameterAtNonRetPos(i, f, tp) } /** @@ -1184,7 +1197,7 @@ private module ContextTyping { pragma[nomagic] private predicate hasUnknownType(AstNode n) { hasUnknownTypeAt(n, _) } - signature Type inferCallTypeSig(AstNode n, boolean isReturn, TypePath path); + signature Type inferCallTypeSig(AstNode n, FunctionPosition pos, TypePath path); /** * Given a predicate `inferCallType` for inferring the type of a call at a given @@ -1194,19 +1207,34 @@ private module ContextTyping { */ module CheckContextTyping { pragma[nomagic] - private Type inferCallTypeFromContextCand(AstNode n, TypePath prefix, TypePath path) { - result = inferCallType(n, false, path) and + private Type inferCallNonReturnType(AstNode n, FunctionPosition pos, TypePath path) { + result = inferCallType(n, pos, path) and + not pos.isReturn() + } + + pragma[nomagic] + private Type inferCallNonReturnType( + AstNode n, FunctionPosition pos, TypePath prefix, TypePath path + ) { + result = inferCallNonReturnType(n, pos, path) and hasUnknownType(n) and prefix = path.getAPrefix() } pragma[nomagic] Type check(AstNode n, TypePath path) { - result = inferCallType(n, true, path) + result = inferCallType(n, any(FunctionPosition pos | pos.isReturn()), path) or - exists(TypePath prefix | - result = inferCallTypeFromContextCand(n, prefix, path) and + exists(FunctionPosition pos, TypePath prefix | + result = inferCallNonReturnType(n, pos, prefix, path) and hasUnknownTypeAt(n, prefix) + | + pos.isPosition() + or + // Never propagate type information directly into the receiver, since its type + // must already have been known in order to resolve the call + pos.isSelf() and + not prefix.isEmpty() ) } } @@ -2607,12 +2635,9 @@ private Type inferMethodCallType0( } pragma[nomagic] -private Type inferMethodCallTypeNonSelf(AstNode n, boolean isReturn, TypePath path) { - exists(MethodCallMatchingInput::AccessPosition apos | - result = inferMethodCallType0(_, apos, n, _, path) and - not apos.isSelf() and - if apos.isReturn() then isReturn = true else isReturn = false - ) +private Type inferMethodCallTypeNonSelf(AstNode n, FunctionPosition pos, TypePath path) { + result = inferMethodCallType0(_, pos, n, _, path) and + not pos.isSelf() } /** @@ -2664,11 +2689,11 @@ private Type inferMethodCallTypeSelf(AstNode n, DerefChain derefChain, TypePath ) } -private Type inferMethodCallTypePreCheck(AstNode n, boolean isReturn, TypePath path) { - result = inferMethodCallTypeNonSelf(n, isReturn, path) +private Type inferMethodCallTypePreCheck(AstNode n, FunctionPosition pos, TypePath path) { + result = inferMethodCallTypeNonSelf(n, pos, path) or result = inferMethodCallTypeSelf(n, DerefChain::nil(), path) and - isReturn = false + pos.isSelf() } /** @@ -3301,14 +3326,11 @@ private module NonMethodCallMatchingInput implements MatchingInputSig { private module NonMethodCallMatching = Matching; pragma[nomagic] -private Type inferNonMethodCallType0(AstNode n, boolean isReturn, TypePath path) { - exists(NonMethodCallMatchingInput::Access a, NonMethodCallMatchingInput::AccessPosition apos | - n = a.getNodeAt(apos) and - if apos.isReturn() then isReturn = true else isReturn = false - | - result = NonMethodCallMatching::inferAccessType(a, apos, path) +private Type inferNonMethodCallType0(AstNode n, FunctionPosition pos, TypePath path) { + exists(NonMethodCallMatchingInput::Access a | n = a.getNodeAt(pos) | + result = NonMethodCallMatching::inferAccessType(a, pos, path) or - a.hasUnknownTypeAt(apos, path) and + a.hasUnknownTypeAt(pos, path) and result = TUnknownType() ) } @@ -3379,11 +3401,10 @@ private module OperationMatchingInput implements MatchingInputSig { private module OperationMatching = Matching; pragma[nomagic] -private Type inferOperationType0(AstNode n, boolean isReturn, TypePath path) { - exists(OperationMatchingInput::Access a, OperationMatchingInput::AccessPosition apos | - n = a.getNodeAt(apos) and - result = OperationMatching::inferAccessType(a, apos, path) and - if apos.isReturn() then isReturn = true else isReturn = false +private Type inferOperationType0(AstNode n, FunctionPosition pos, TypePath path) { + exists(OperationMatchingInput::Access a | + n = a.getNodeAt(pos) and + result = OperationMatching::inferAccessType(a, pos, path) ) } @@ -3716,11 +3737,13 @@ private module AwaitSatisfiesConstraintInput implements SatisfiesConstraintInput } } +private module AwaitSatisfiesConstraint = + SatisfiesConstraint; + pragma[nomagic] private Type inferAwaitExprType(AstNode n, TypePath path) { exists(TypePath exprPath | - SatisfiesConstraint::satisfiesConstraintType(n.(AwaitExpr) - .getExpr(), _, exprPath, result) and + AwaitSatisfiesConstraint::satisfiesConstraintType(n.(AwaitExpr).getExpr(), _, exprPath, result) and exprPath.isCons(getFutureOutputTypeParameter(), path) ) } @@ -3922,13 +3945,15 @@ private AssociatedTypeTypeParameter getIntoIteratorItemTypeParameter() { result = getAssociatedTypeTypeParameter(any(IntoIteratorTrait t).getItemType()) } +private module ForIterableSatisfiesConstraint = + SatisfiesConstraint; + pragma[nomagic] private Type inferForLoopExprType(AstNode n, TypePath path) { // type of iterable -> type of pattern (loop variable) exists(ForExpr fe, TypePath exprPath, AssociatedTypeTypeParameter tp | n = fe.getPat() and - SatisfiesConstraint::satisfiesConstraintType(fe.getIterable(), - _, exprPath, result) and + ForIterableSatisfiesConstraint::satisfiesConstraintType(fe.getIterable(), _, exprPath, result) and exprPath.isCons(tp, path) | tp = getIntoIteratorItemTypeParameter() @@ -3963,10 +3988,12 @@ private module InvokedClosureSatisfiesConstraintInput implements } } +private module InvokedClosureSatisfiesConstraint = + SatisfiesConstraint; + /** Gets the type of `ce` when viewed as an implementation of `FnOnce`. */ private Type invokedClosureFnTypeAt(InvokedClosureExpr ce, TypePath path) { - SatisfiesConstraint::satisfiesConstraintType(ce, - _, path, result) + InvokedClosureSatisfiesConstraint::satisfiesConstraintType(ce, _, path, result) } /** 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 24005c2cdbdd..0f94d3d43f42 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -9512,7 +9512,6 @@ inferType | main.rs:1412:17:1412:20 | self | TRef.TSlice | main.rs:1410:14:1410:23 | T | | main.rs:1412:17:1412:27 | self.get(...) | | {EXTERNAL LOCATION} | Option | | main.rs:1412:17:1412:27 | self.get(...) | T | {EXTERNAL LOCATION} | & | -| main.rs:1412:17:1412:27 | self.get(...) | T.TRef | main.rs:1410:14:1410:23 | T | | main.rs:1412:17:1412:36 | ... .unwrap() | | {EXTERNAL LOCATION} | & | | main.rs:1412:17:1412:36 | ... .unwrap() | TRef | main.rs:1410:14:1410:23 | T | | main.rs:1412:26:1412:26 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -14717,82 +14716,14 @@ inferType | regressions.rs:15:21:33:5 | { ... } | | regressions.rs:5:5:7:5 | E | | regressions.rs:16:17:16:21 | vec_e | | {EXTERNAL LOCATION} | Vec | | regressions.rs:16:17:16:21 | vec_e | A | {EXTERNAL LOCATION} | Global | -| regressions.rs:16:17:16:21 | vec_e | T | regressions.rs:3:5:3:23 | S | | regressions.rs:16:17:16:21 | vec_e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:17:16:21 | vec_e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:17:16:21 | vec_e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:16:25:16:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | | regressions.rs:16:25:16:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| regressions.rs:16:25:16:34 | ...::new(...) | T | regressions.rs:3:5:3:23 | S | | regressions.rs:16:25:16:34 | ...::new(...) | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:17:17:17:21 | opt_e | | {EXTERNAL LOCATION} | Option | -| regressions.rs:17:17:17:21 | opt_e | T | regressions.rs:3:5:3:23 | S | | regressions.rs:17:17:17:21 | opt_e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:17:17:21 | opt_e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:17:17:21 | opt_e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:17:17:21 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:17:17:21 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:17:25:17:28 | None | | {EXTERNAL LOCATION} | Option | -| regressions.rs:17:25:17:28 | None | T | regressions.rs:3:5:3:23 | S | | regressions.rs:17:25:17:28 | None | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:25:17:28 | None | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:25:17:28 | None | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:25:17:28 | None | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:25:17:28 | None | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:25:17:28 | None | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:25:17:28 | None | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:19:13:19:13 | e | | regressions.rs:5:5:7:5 | E | | regressions.rs:19:17:19:40 | ...::V {...} | | regressions.rs:5:5:7:5 | E | | regressions.rs:19:29:19:38 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | @@ -14800,320 +14731,40 @@ inferType | regressions.rs:19:29:19:38 | ...::new(...) | T | regressions.rs:5:5:7:5 | E | | regressions.rs:21:9:23:9 | if ... {...} | | {EXTERNAL LOCATION} | () | | regressions.rs:21:16:21:22 | Some(...) | | {EXTERNAL LOCATION} | Option | -| regressions.rs:21:16:21:22 | Some(...) | T | regressions.rs:3:5:3:23 | S | | regressions.rs:21:16:21:22 | Some(...) | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:16:21:22 | Some(...) | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:16:21:22 | Some(...) | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | | regressions.rs:3:5:3:23 | S | | regressions.rs:21:21:21:21 | e | | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:21:21:21 | e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:21:21:21 | e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:21:21:21 | e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:21:21:21 | e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:21:21:21 | e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:21:26:21:30 | opt_e | | {EXTERNAL LOCATION} | Option | -| regressions.rs:21:26:21:30 | opt_e | T | regressions.rs:3:5:3:23 | S | | regressions.rs:21:26:21:30 | opt_e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:26:21:30 | opt_e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:26:21:30 | opt_e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:26:21:30 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:26:21:30 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:21:32:23:9 | { ... } | | {EXTERNAL LOCATION} | () | | regressions.rs:22:13:22:17 | vec_e | | {EXTERNAL LOCATION} | Vec | | regressions.rs:22:13:22:17 | vec_e | A | {EXTERNAL LOCATION} | Global | -| regressions.rs:22:13:22:17 | vec_e | T | regressions.rs:3:5:3:23 | S | | regressions.rs:22:13:22:17 | vec_e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:13:22:17 | vec_e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:13:22:17 | vec_e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:13:22:17 | vec_e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:13:22:17 | vec_e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:22:13:22:25 | vec_e.push(...) | | {EXTERNAL LOCATION} | () | -| regressions.rs:22:24:22:24 | e | | regressions.rs:3:5:3:23 | S | | regressions.rs:22:24:22:24 | e | | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:24:22:24 | e | T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:24:22:24 | e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:24:22:24 | e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:24:22:24 | e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:24:22:24 | e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:24:22:24 | e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:24:22:24 | e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:24:22:24 | e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:24:22:24 | e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:24:22:24 | e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:24:9:24:13 | opt_e | | {EXTERNAL LOCATION} | Option | -| regressions.rs:24:9:24:13 | opt_e | T | regressions.rs:3:5:3:23 | S | | regressions.rs:24:9:24:13 | opt_e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:9:24:13 | opt_e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:9:24:13 | opt_e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:9:24:13 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:9:24:13 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:24:9:24:24 | ... = ... | | {EXTERNAL LOCATION} | () | | regressions.rs:24:17:24:17 | e | | regressions.rs:5:5:7:5 | E | | regressions.rs:24:17:24:24 | e.into() | | {EXTERNAL LOCATION} | Option | -| regressions.rs:24:17:24:24 | e.into() | T | regressions.rs:3:5:3:23 | S | | regressions.rs:24:17:24:24 | e.into() | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:17:24:24 | e.into() | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:17:24:24 | e.into() | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:17:24:24 | e.into() | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:17:24:24 | e.into() | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:27:13:27:13 | _ | | {EXTERNAL LOCATION} | () | | regressions.rs:27:17:30:9 | if ... {...} | | {EXTERNAL LOCATION} | () | | regressions.rs:27:24:27:33 | Some(...) | | {EXTERNAL LOCATION} | Option | -| regressions.rs:27:24:27:33 | Some(...) | T | regressions.rs:3:5:3:23 | S | | regressions.rs:27:24:27:33 | Some(...) | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | | regressions.rs:3:5:3:23 | S | | regressions.rs:27:29:27:32 | last | | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:27:37:27:41 | vec_e | | {EXTERNAL LOCATION} | Vec | | regressions.rs:27:37:27:41 | vec_e | A | {EXTERNAL LOCATION} | Global | -| regressions.rs:27:37:27:41 | vec_e | T | regressions.rs:3:5:3:23 | S | | regressions.rs:27:37:27:41 | vec_e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:41 | vec_e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:41 | vec_e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:41 | vec_e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:41 | vec_e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:27:37:27:47 | vec_e.pop() | | {EXTERNAL LOCATION} | Option | -| regressions.rs:27:37:27:47 | vec_e.pop() | T | regressions.rs:3:5:3:23 | S | | regressions.rs:27:37:27:47 | vec_e.pop() | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:28:9:30:9 | { ... } | | {EXTERNAL LOCATION} | () | | regressions.rs:29:13:29:17 | opt_e | | {EXTERNAL LOCATION} | Option | -| regressions.rs:29:13:29:17 | opt_e | T | regressions.rs:3:5:3:23 | S | | regressions.rs:29:13:29:17 | opt_e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:13:29:17 | opt_e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:13:29:17 | opt_e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:13:29:17 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:13:29:17 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:29:13:29:31 | ... = ... | | {EXTERNAL LOCATION} | () | -| regressions.rs:29:21:29:24 | last | | regressions.rs:3:5:3:23 | S | | regressions.rs:29:21:29:24 | last | | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:29:21:29:31 | last.into() | | {EXTERNAL LOCATION} | Option | -| regressions.rs:29:21:29:31 | last.into() | T | regressions.rs:3:5:3:23 | S | | regressions.rs:29:21:29:31 | last.into() | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:31 | last.into() | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:31 | last.into() | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:31 | last.into() | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:31 | last.into() | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:32:9:32:13 | opt_e | | {EXTERNAL LOCATION} | Option | -| regressions.rs:32:9:32:13 | opt_e | T | regressions.rs:3:5:3:23 | S | | regressions.rs:32:9:32:13 | opt_e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:13 | opt_e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:13 | opt_e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:13 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:13 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | | regressions.rs:3:5:3:23 | S | | regressions.rs:32:9:32:22 | opt_e.unwrap() | | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | testFailures From 61d809b41a2676da5b3c0ecc937a8825e7409d9e Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 24 Feb 2026 12:03:02 +0100 Subject: [PATCH 3/4] Rust: Add another type inference test --- .../PathResolutionConsistency.expected | 2 +- .../test/library-tests/type-inference/main.rs | 10 + .../type-inference/type-inference.expected | 700 +++++++++--------- 3 files changed, 364 insertions(+), 348 deletions(-) diff --git a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected index 734601169687..a753b733ba38 100644 --- a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected @@ -1,4 +1,4 @@ multipleResolvedTargets | main.rs:2223:9:2223:31 | ... .my_add(...) | | main.rs:2225:9:2225:29 | ... .my_add(...) | -| main.rs:2723:13:2723:17 | x.f() | +| main.rs:2733:13:2733:17 | x.f() | diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 06d54b5ba968..dedd45b40d1c 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -2636,6 +2636,13 @@ mod block_types { } mod context_typed { + #[derive(Default)] + struct S; + + impl S { + fn f(self) {} + } + pub fn f() { let x = None; // $ type=x:T.i32 let x: Option = x; @@ -2683,6 +2690,9 @@ mod context_typed { let y = Default::default(); // $ type=y:i32 target=default x.push(y); // $ target=push + + let s = Default::default(); // $ MISSING: target=default type=s:S + S::f(s); // $ target=f } } 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 0f94d3d43f42..57e4131a32e5 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -3630,129 +3630,132 @@ inferCertainType | main.rs:2633:18:2633:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:2633:18:2633:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2633:29:2633:29 | a | | {EXTERNAL LOCATION} | () | -| main.rs:2639:16:2686:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2641:13:2641:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2641:13:2641:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2645:26:2645:28 | opt | | {EXTERNAL LOCATION} | Option | -| main.rs:2645:26:2645:28 | opt | T | main.rs:2645:23:2645:23 | T | -| main.rs:2645:42:2645:42 | x | | main.rs:2645:23:2645:23 | T | -| main.rs:2645:48:2645:49 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2648:9:2648:24 | pin_option(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2655:13:2655:13 | x | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2655:17:2655:39 | ...::A {...} | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2656:13:2656:13 | x | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2656:13:2656:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2656:13:2656:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2656:40:2656:40 | x | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2657:13:2657:13 | x | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2657:13:2657:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2657:17:2657:52 | ...::A {...} | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2657:17:2657:52 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2659:13:2659:13 | x | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2659:13:2659:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2659:17:2661:9 | ...::B::<...> {...} | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2659:17:2661:9 | ...::B::<...> {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2660:20:2660:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2663:29:2663:29 | e | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2663:29:2663:29 | e | T1 | main.rs:2663:26:2663:26 | T | -| main.rs:2663:29:2663:29 | e | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2663:53:2663:53 | x | | main.rs:2663:26:2663:26 | T | -| main.rs:2663:59:2663:60 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2666:13:2666:13 | x | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2666:17:2668:9 | ...::B {...} | | main.rs:2650:9:2653:9 | MyEither | +| main.rs:2643:14:2643:17 | SelfParam | | main.rs:2639:5:2640:13 | S | +| main.rs:2643:20:2643:21 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2646:16:2696:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2648:13:2648:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2648:13:2648:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2652:26:2652:28 | opt | | {EXTERNAL LOCATION} | Option | +| main.rs:2652:26:2652:28 | opt | T | main.rs:2652:23:2652:23 | T | +| main.rs:2652:42:2652:42 | x | | main.rs:2652:23:2652:23 | T | +| main.rs:2652:48:2652:49 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2655:9:2655:24 | pin_option(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2662:13:2662:13 | x | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2662:17:2662:39 | ...::A {...} | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2663:13:2663:13 | x | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2663:13:2663:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2663:13:2663:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2663:40:2663:40 | x | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2664:13:2664:13 | x | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2664:13:2664:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2664:17:2664:52 | ...::A {...} | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2664:17:2664:52 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2666:13:2666:13 | x | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2666:13:2666:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2666:17:2668:9 | ...::B::<...> {...} | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2666:17:2668:9 | ...::B::<...> {...} | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:2667:20:2667:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2669:9:2669:27 | pin_my_either(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2669:23:2669:23 | x | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2672:13:2672:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2672:13:2672:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2672:13:2672:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2676:29:2676:31 | res | | {EXTERNAL LOCATION} | Result | -| main.rs:2676:29:2676:31 | res | E | main.rs:2676:26:2676:26 | E | -| main.rs:2676:29:2676:31 | res | T | main.rs:2676:23:2676:23 | T | -| main.rs:2676:48:2676:48 | x | | main.rs:2676:26:2676:26 | E | -| main.rs:2676:54:2676:55 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2679:9:2679:28 | pin_result(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2679:23:2679:27 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:2681:17:2681:17 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2681:17:2681:17 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2681:21:2681:30 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2681:21:2681:30 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2682:9:2682:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2682:9:2682:9 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2685:9:2685:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2685:9:2685:9 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2692:14:2692:17 | SelfParam | | main.rs:2690:5:2698:5 | Self [trait MyTrait] | -| main.rs:2695:14:2695:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2695:14:2695:18 | SelfParam | TRef | main.rs:2690:5:2698:5 | Self [trait MyTrait] | -| main.rs:2695:21:2695:25 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2695:21:2695:25 | other | TRef | main.rs:2690:5:2698:5 | Self [trait MyTrait] | -| main.rs:2695:44:2697:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2695:44:2697:9 | { ... } | TRef | main.rs:2690:5:2698:5 | Self [trait MyTrait] | -| main.rs:2696:13:2696:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2696:13:2696:16 | self | TRef | main.rs:2690:5:2698:5 | Self [trait MyTrait] | -| main.rs:2702:14:2702:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | -| main.rs:2702:28:2704:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2703:13:2703:16 | self | | {EXTERNAL LOCATION} | i32 | -| main.rs:2709:14:2709:17 | SelfParam | | {EXTERNAL LOCATION} | usize | -| main.rs:2709:28:2711:9 | { ... } | | {EXTERNAL LOCATION} | usize | -| main.rs:2710:13:2710:16 | self | | {EXTERNAL LOCATION} | usize | -| main.rs:2716:14:2716:17 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2716:14:2716:17 | SelfParam | TRef | main.rs:2714:10:2714:10 | T | -| main.rs:2716:28:2718:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2716:28:2718:9 | { ... } | TRef | main.rs:2714:10:2714:10 | T | -| main.rs:2717:13:2717:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2717:13:2717:16 | self | TRef | main.rs:2714:10:2714:10 | T | -| main.rs:2721:25:2725:5 | { ... } | | {EXTERNAL LOCATION} | usize | -| main.rs:2727:12:2735:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2728:13:2728:13 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:2729:13:2729:13 | y | | {EXTERNAL LOCATION} | & | -| main.rs:2729:17:2729:18 | &1 | | {EXTERNAL LOCATION} | & | -| main.rs:2730:17:2730:17 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:2730:21:2730:21 | y | | {EXTERNAL LOCATION} | & | -| main.rs:2733:13:2733:13 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:2734:23:2734:23 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:2745:11:2780:1 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2746:5:2746:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2747:5:2747:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2748:5:2748:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2748:20:2748:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2748:41:2748:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2749:5:2749:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2750:5:2750:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2751:5:2751:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2752:5:2752:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2753:5:2753:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2754:5:2754:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2755:5:2755:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2756:5:2756:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2757:5:2757:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2758:5:2758:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2759:5:2759:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2760:5:2760:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2761:5:2761:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2762:5:2762:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2763:5:2763:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2764:5:2764:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2764:5:2764:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:2765:5:2765:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2766:5:2766:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2767:5:2767:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2768:5:2768:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2769:5:2769:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2770:5:2770:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2771:5:2771:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2670:29:2670:29 | e | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2670:29:2670:29 | e | T1 | main.rs:2670:26:2670:26 | T | +| main.rs:2670:29:2670:29 | e | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2670:53:2670:53 | x | | main.rs:2670:26:2670:26 | T | +| main.rs:2670:59:2670:60 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2673:13:2673:13 | x | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2673:17:2675:9 | ...::B {...} | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2674:20:2674:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2676:9:2676:27 | pin_my_either(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2676:23:2676:23 | x | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2679:13:2679:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2679:13:2679:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:2679:13:2679:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2683:29:2683:31 | res | | {EXTERNAL LOCATION} | Result | +| main.rs:2683:29:2683:31 | res | E | main.rs:2683:26:2683:26 | E | +| main.rs:2683:29:2683:31 | res | T | main.rs:2683:23:2683:23 | T | +| main.rs:2683:48:2683:48 | x | | main.rs:2683:26:2683:26 | E | +| main.rs:2683:54:2683:55 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2686:9:2686:28 | pin_result(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2686:23:2686:27 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:2688:17:2688:17 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2688:17:2688:17 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2688:21:2688:30 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2688:21:2688:30 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2689:9:2689:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2689:9:2689:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2692:9:2692:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2692:9:2692:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2695:9:2695:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2702:14:2702:17 | SelfParam | | main.rs:2700:5:2708:5 | Self [trait MyTrait] | +| main.rs:2705:14:2705:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2705:14:2705:18 | SelfParam | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | +| main.rs:2705:21:2705:25 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2705:21:2705:25 | other | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | +| main.rs:2705:44:2707:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2705:44:2707:9 | { ... } | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | +| main.rs:2706:13:2706:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2706:13:2706:16 | self | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | +| main.rs:2712:14:2712:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | +| main.rs:2712:28:2714:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2713:13:2713:16 | self | | {EXTERNAL LOCATION} | i32 | +| main.rs:2719:14:2719:17 | SelfParam | | {EXTERNAL LOCATION} | usize | +| main.rs:2719:28:2721:9 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:2720:13:2720:16 | self | | {EXTERNAL LOCATION} | usize | +| main.rs:2726:14:2726:17 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2726:14:2726:17 | SelfParam | TRef | main.rs:2724:10:2724:10 | T | +| main.rs:2726:28:2728:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2726:28:2728:9 | { ... } | TRef | main.rs:2724:10:2724:10 | T | +| main.rs:2727:13:2727:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2727:13:2727:16 | self | TRef | main.rs:2724:10:2724:10 | T | +| main.rs:2731:25:2735:5 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:2737:12:2745:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2738:13:2738:13 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2739:13:2739:13 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2739:17:2739:18 | &1 | | {EXTERNAL LOCATION} | & | +| main.rs:2740:17:2740:17 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2740:21:2740:21 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2743:13:2743:13 | y | | {EXTERNAL LOCATION} | usize | +| main.rs:2744:23:2744:23 | y | | {EXTERNAL LOCATION} | usize | +| main.rs:2755:11:2790:1 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2756:5:2756:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2757:5:2757:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2758:5:2758:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2758:20:2758:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2758:41:2758:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2759:5:2759:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2760:5:2760:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2761:5:2761:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2762:5:2762:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2763:5:2763:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2764:5:2764:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2765:5:2765:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2766:5:2766:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2767:5:2767:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2768:5:2768:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2769:5:2769:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2770:5:2770:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2771:5:2771:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | | main.rs:2772:5:2772:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2773:5:2773:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2774:5:2774:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2775:5:2775:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2776:5:2776:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2777:5:2777:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2778:5:2778:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2778:5:2778:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2778:5:2778:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | -| main.rs:2778:5:2778:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2778:16:2778:19 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2779:5:2779:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2773:5:2773:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2774:5:2774:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2774:5:2774:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:2775:5:2775:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2776:5:2776:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2777:5:2777:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2778:5:2778:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2779:5:2779:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2780:5:2780:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2781:5:2781:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2782:5:2782:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2783:5:2783:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2784:5:2784:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2785:5:2785:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2786:5:2786:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2787:5:2787:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2788:5:2788:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2788:5:2788:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2788:5:2788:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | +| main.rs:2788:5:2788:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2788:16:2788:19 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2789:5:2789:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:4:19:4:23 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:4:19:4:23 | SelfParam | TRef | overloading.rs:2:5:11:5 | Self [trait FirstTrait] | | overloading.rs:4:34:6:9 | { ... } | | {EXTERNAL LOCATION} | bool | @@ -11960,245 +11963,248 @@ inferType | main.rs:2633:18:2633:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2633:29:2633:29 | a | | {EXTERNAL LOCATION} | () | | main.rs:2634:9:2634:9 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2639:16:2686:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2640:13:2640:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2640:13:2640:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2640:17:2640:20 | None | | {EXTERNAL LOCATION} | Option | -| main.rs:2640:17:2640:20 | None | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2641:13:2641:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2641:13:2641:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2641:30:2641:30 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2641:30:2641:30 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2642:13:2642:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2642:13:2642:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2642:17:2642:35 | ...::None | | {EXTERNAL LOCATION} | Option | -| main.rs:2642:17:2642:35 | ...::None | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2643:13:2643:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2643:13:2643:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2643:17:2643:35 | ...::None::<...> | | {EXTERNAL LOCATION} | Option | -| main.rs:2643:17:2643:35 | ...::None::<...> | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2645:26:2645:28 | opt | | {EXTERNAL LOCATION} | Option | -| main.rs:2645:26:2645:28 | opt | T | main.rs:2645:23:2645:23 | T | -| main.rs:2645:42:2645:42 | x | | main.rs:2645:23:2645:23 | T | -| main.rs:2645:48:2645:49 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2643:14:2643:17 | SelfParam | | main.rs:2639:5:2640:13 | S | +| main.rs:2643:20:2643:21 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2646:16:2696:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2647:13:2647:13 | x | | {EXTERNAL LOCATION} | Option | | main.rs:2647:13:2647:13 | x | T | {EXTERNAL LOCATION} | i32 | | main.rs:2647:17:2647:20 | None | | {EXTERNAL LOCATION} | Option | | main.rs:2647:17:2647:20 | None | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2648:9:2648:24 | pin_option(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2648:20:2648:20 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2648:20:2648:20 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2648:23:2648:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2655:13:2655:13 | x | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2655:13:2655:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2655:13:2655:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2655:17:2655:39 | ...::A {...} | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2655:17:2655:39 | ...::A {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2655:17:2655:39 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2655:37:2655:37 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2656:13:2656:13 | x | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2656:13:2656:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2656:13:2656:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2656:40:2656:40 | x | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2656:40:2656:40 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2656:40:2656:40 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2657:13:2657:13 | x | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2657:13:2657:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2657:13:2657:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2657:17:2657:52 | ...::A {...} | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2657:17:2657:52 | ...::A {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2657:17:2657:52 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2657:50:2657:50 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2659:13:2659:13 | x | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2659:13:2659:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2659:13:2659:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2659:17:2661:9 | ...::B::<...> {...} | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2659:17:2661:9 | ...::B::<...> {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2659:17:2661:9 | ...::B::<...> {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2660:20:2660:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2663:29:2663:29 | e | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2663:29:2663:29 | e | T1 | main.rs:2663:26:2663:26 | T | -| main.rs:2663:29:2663:29 | e | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2663:53:2663:53 | x | | main.rs:2663:26:2663:26 | T | -| main.rs:2663:59:2663:60 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2666:13:2666:13 | x | | main.rs:2650:9:2653:9 | MyEither | +| main.rs:2648:13:2648:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2648:13:2648:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2648:30:2648:30 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2648:30:2648:30 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2649:13:2649:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2649:13:2649:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2649:17:2649:35 | ...::None | | {EXTERNAL LOCATION} | Option | +| main.rs:2649:17:2649:35 | ...::None | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2650:13:2650:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2650:13:2650:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2650:17:2650:35 | ...::None::<...> | | {EXTERNAL LOCATION} | Option | +| main.rs:2650:17:2650:35 | ...::None::<...> | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2652:26:2652:28 | opt | | {EXTERNAL LOCATION} | Option | +| main.rs:2652:26:2652:28 | opt | T | main.rs:2652:23:2652:23 | T | +| main.rs:2652:42:2652:42 | x | | main.rs:2652:23:2652:23 | T | +| main.rs:2652:48:2652:49 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2654:13:2654:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2654:13:2654:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2654:17:2654:20 | None | | {EXTERNAL LOCATION} | Option | +| main.rs:2654:17:2654:20 | None | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2655:9:2655:24 | pin_option(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2655:20:2655:20 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2655:20:2655:20 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2655:23:2655:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2662:13:2662:13 | x | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2662:13:2662:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2662:13:2662:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2662:17:2662:39 | ...::A {...} | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2662:17:2662:39 | ...::A {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2662:17:2662:39 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2662:37:2662:37 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2663:13:2663:13 | x | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2663:13:2663:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2663:13:2663:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2663:40:2663:40 | x | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2663:40:2663:40 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2663:40:2663:40 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2664:13:2664:13 | x | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2664:13:2664:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2664:13:2664:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2664:17:2664:52 | ...::A {...} | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2664:17:2664:52 | ...::A {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2664:17:2664:52 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2664:50:2664:50 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2666:13:2666:13 | x | | main.rs:2657:9:2660:9 | MyEither | | main.rs:2666:13:2666:13 | x | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:2666:13:2666:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2666:17:2668:9 | ...::B {...} | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2666:17:2668:9 | ...::B {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2666:17:2668:9 | ...::B {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2666:17:2668:9 | ...::B::<...> {...} | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2666:17:2668:9 | ...::B::<...> {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2666:17:2668:9 | ...::B::<...> {...} | T2 | {EXTERNAL LOCATION} | String | | main.rs:2667:20:2667:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2669:9:2669:27 | pin_my_either(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2669:23:2669:23 | x | | main.rs:2650:9:2653:9 | MyEither | -| main.rs:2669:23:2669:23 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2669:23:2669:23 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2669:26:2669:26 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2671:13:2671:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2671:13:2671:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2671:13:2671:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2671:17:2671:29 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2671:17:2671:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | String | -| main.rs:2671:17:2671:29 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2671:28:2671:28 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2672:13:2672:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2672:13:2672:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2672:13:2672:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2672:38:2672:38 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2672:38:2672:38 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2672:38:2672:38 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2673:13:2673:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2673:13:2673:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2673:13:2673:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2673:17:2673:44 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2673:17:2673:44 | ...::Ok(...) | E | {EXTERNAL LOCATION} | String | -| main.rs:2673:17:2673:44 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2673:43:2673:43 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2674:13:2674:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2674:13:2674:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2674:13:2674:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2674:17:2674:44 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2674:17:2674:44 | ...::Ok::<...>(...) | E | {EXTERNAL LOCATION} | String | -| main.rs:2674:17:2674:44 | ...::Ok::<...>(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2674:43:2674:43 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2676:29:2676:31 | res | | {EXTERNAL LOCATION} | Result | -| main.rs:2676:29:2676:31 | res | E | main.rs:2676:26:2676:26 | E | -| main.rs:2676:29:2676:31 | res | T | main.rs:2676:23:2676:23 | T | -| main.rs:2676:48:2676:48 | x | | main.rs:2676:26:2676:26 | E | -| main.rs:2676:54:2676:55 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2670:29:2670:29 | e | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2670:29:2670:29 | e | T1 | main.rs:2670:26:2670:26 | T | +| main.rs:2670:29:2670:29 | e | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2670:53:2670:53 | x | | main.rs:2670:26:2670:26 | T | +| main.rs:2670:59:2670:60 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2673:13:2673:13 | x | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2673:13:2673:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2673:13:2673:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2673:17:2675:9 | ...::B {...} | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2673:17:2675:9 | ...::B {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2673:17:2675:9 | ...::B {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2674:20:2674:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2676:9:2676:27 | pin_my_either(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2676:23:2676:23 | x | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2676:23:2676:23 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2676:23:2676:23 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2676:26:2676:26 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2678:13:2678:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2678:13:2678:13 | x | E | {EXTERNAL LOCATION} | bool | +| main.rs:2678:13:2678:13 | x | E | {EXTERNAL LOCATION} | String | | main.rs:2678:13:2678:13 | x | T | {EXTERNAL LOCATION} | i32 | | main.rs:2678:17:2678:29 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2678:17:2678:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | bool | +| main.rs:2678:17:2678:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | String | | main.rs:2678:17:2678:29 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | | main.rs:2678:28:2678:28 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2679:9:2679:28 | pin_result(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2679:20:2679:20 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2679:20:2679:20 | x | E | {EXTERNAL LOCATION} | bool | -| main.rs:2679:20:2679:20 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2679:23:2679:27 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:2681:17:2681:17 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2681:17:2681:17 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2681:17:2681:17 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2681:21:2681:30 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2681:21:2681:30 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2681:21:2681:30 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2682:9:2682:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2682:9:2682:9 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2682:9:2682:9 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2682:9:2682:17 | x.push(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2682:16:2682:16 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2684:13:2684:13 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:2684:17:2684:34 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2685:9:2685:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2685:9:2685:9 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2685:9:2685:9 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2685:9:2685:17 | x.push(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2685:16:2685:16 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:2692:14:2692:17 | SelfParam | | main.rs:2690:5:2698:5 | Self [trait MyTrait] | -| main.rs:2695:14:2695:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2695:14:2695:18 | SelfParam | TRef | main.rs:2690:5:2698:5 | Self [trait MyTrait] | -| main.rs:2695:21:2695:25 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2695:21:2695:25 | other | TRef | main.rs:2690:5:2698:5 | Self [trait MyTrait] | -| main.rs:2695:44:2697:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2695:44:2697:9 | { ... } | TRef | main.rs:2690:5:2698:5 | Self [trait MyTrait] | -| main.rs:2696:13:2696:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2696:13:2696:16 | self | TRef | main.rs:2690:5:2698:5 | Self [trait MyTrait] | -| main.rs:2696:13:2696:20 | self.f() | | {EXTERNAL LOCATION} | & | -| main.rs:2696:13:2696:20 | self.f() | TRef | main.rs:2690:5:2698:5 | Self [trait MyTrait] | -| main.rs:2702:14:2702:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | -| main.rs:2702:28:2704:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2703:13:2703:16 | self | | {EXTERNAL LOCATION} | i32 | -| main.rs:2709:14:2709:17 | SelfParam | | {EXTERNAL LOCATION} | usize | -| main.rs:2709:28:2711:9 | { ... } | | {EXTERNAL LOCATION} | usize | -| main.rs:2710:13:2710:16 | self | | {EXTERNAL LOCATION} | usize | -| main.rs:2716:14:2716:17 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2716:14:2716:17 | SelfParam | TRef | main.rs:2714:10:2714:10 | T | -| main.rs:2716:28:2718:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2716:28:2718:9 | { ... } | TRef | main.rs:2714:10:2714:10 | T | -| main.rs:2717:13:2717:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2717:13:2717:16 | self | TRef | main.rs:2714:10:2714:10 | T | -| main.rs:2721:25:2725:5 | { ... } | | {EXTERNAL LOCATION} | usize | -| main.rs:2722:17:2722:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2722:17:2722:17 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:2722:21:2722:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2722:21:2722:21 | 0 | | {EXTERNAL LOCATION} | usize | -| main.rs:2723:9:2723:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2723:9:2723:9 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:2723:9:2723:17 | ... = ... | | {EXTERNAL LOCATION} | () | -| main.rs:2723:13:2723:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2723:13:2723:13 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:2723:13:2723:17 | x.f() | | {EXTERNAL LOCATION} | i32 | -| main.rs:2723:13:2723:17 | x.f() | | {EXTERNAL LOCATION} | usize | -| main.rs:2724:9:2724:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2724:9:2724:9 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:2727:12:2735:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2728:13:2728:13 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:2728:24:2728:24 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2728:24:2728:24 | 0 | | {EXTERNAL LOCATION} | usize | -| main.rs:2729:13:2729:13 | y | | {EXTERNAL LOCATION} | & | -| main.rs:2729:13:2729:13 | y | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:2729:17:2729:18 | &1 | | {EXTERNAL LOCATION} | & | -| main.rs:2729:17:2729:18 | &1 | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:2729:18:2729:18 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2730:13:2730:13 | z | | {EXTERNAL LOCATION} | & | -| main.rs:2730:13:2730:13 | z | TRef | {EXTERNAL LOCATION} | usize | -| main.rs:2730:17:2730:17 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:2730:17:2730:22 | x.g(...) | | {EXTERNAL LOCATION} | & | -| main.rs:2730:17:2730:22 | x.g(...) | TRef | {EXTERNAL LOCATION} | usize | -| main.rs:2730:21:2730:21 | y | | {EXTERNAL LOCATION} | & | -| main.rs:2730:21:2730:21 | y | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:2732:13:2732:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2732:17:2732:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2733:13:2733:13 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:2733:24:2733:24 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2733:24:2733:24 | 1 | | {EXTERNAL LOCATION} | usize | -| main.rs:2734:13:2734:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:2734:17:2734:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2734:17:2734:24 | x.max(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2734:23:2734:23 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:2745:11:2780:1 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2746:5:2746:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2747:5:2747:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2748:5:2748:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2748:20:2748:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2748:41:2748:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2749:5:2749:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2750:5:2750:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2751:5:2751:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2752:5:2752:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2753:5:2753:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2754:5:2754:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2755:5:2755:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2756:5:2756:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2757:5:2757:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2758:5:2758:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2759:5:2759:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2760:5:2760:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2761:5:2761:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2762:5:2762:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2763:5:2763:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2764:5:2764:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2764:5:2764:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:2765:5:2765:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2766:5:2766:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2767:5:2767:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2768:5:2768:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2769:5:2769:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2770:5:2770:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2771:5:2771:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2679:13:2679:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2679:13:2679:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:2679:13:2679:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2679:38:2679:38 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2679:38:2679:38 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:2679:38:2679:38 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2680:13:2680:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2680:13:2680:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:2680:13:2680:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2680:17:2680:44 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:2680:17:2680:44 | ...::Ok(...) | E | {EXTERNAL LOCATION} | String | +| main.rs:2680:17:2680:44 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2680:43:2680:43 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2681:13:2681:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2681:13:2681:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:2681:13:2681:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2681:17:2681:44 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:2681:17:2681:44 | ...::Ok::<...>(...) | E | {EXTERNAL LOCATION} | String | +| main.rs:2681:17:2681:44 | ...::Ok::<...>(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2681:43:2681:43 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2683:29:2683:31 | res | | {EXTERNAL LOCATION} | Result | +| main.rs:2683:29:2683:31 | res | E | main.rs:2683:26:2683:26 | E | +| main.rs:2683:29:2683:31 | res | T | main.rs:2683:23:2683:23 | T | +| main.rs:2683:48:2683:48 | x | | main.rs:2683:26:2683:26 | E | +| main.rs:2683:54:2683:55 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2685:13:2685:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2685:13:2685:13 | x | E | {EXTERNAL LOCATION} | bool | +| main.rs:2685:13:2685:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2685:17:2685:29 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:2685:17:2685:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | bool | +| main.rs:2685:17:2685:29 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2685:28:2685:28 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2686:9:2686:28 | pin_result(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2686:20:2686:20 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2686:20:2686:20 | x | E | {EXTERNAL LOCATION} | bool | +| main.rs:2686:20:2686:20 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2686:23:2686:27 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:2688:17:2688:17 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2688:17:2688:17 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2688:17:2688:17 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2688:21:2688:30 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2688:21:2688:30 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2688:21:2688:30 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2689:9:2689:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2689:9:2689:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2689:9:2689:9 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2689:9:2689:17 | x.push(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2689:16:2689:16 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2691:13:2691:13 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:2691:17:2691:34 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2692:9:2692:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2692:9:2692:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2692:9:2692:9 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2692:9:2692:17 | x.push(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2692:16:2692:16 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:2695:9:2695:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2702:14:2702:17 | SelfParam | | main.rs:2700:5:2708:5 | Self [trait MyTrait] | +| main.rs:2705:14:2705:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2705:14:2705:18 | SelfParam | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | +| main.rs:2705:21:2705:25 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2705:21:2705:25 | other | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | +| main.rs:2705:44:2707:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2705:44:2707:9 | { ... } | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | +| main.rs:2706:13:2706:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2706:13:2706:16 | self | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | +| main.rs:2706:13:2706:20 | self.f() | | {EXTERNAL LOCATION} | & | +| main.rs:2706:13:2706:20 | self.f() | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | +| main.rs:2712:14:2712:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | +| main.rs:2712:28:2714:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2713:13:2713:16 | self | | {EXTERNAL LOCATION} | i32 | +| main.rs:2719:14:2719:17 | SelfParam | | {EXTERNAL LOCATION} | usize | +| main.rs:2719:28:2721:9 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:2720:13:2720:16 | self | | {EXTERNAL LOCATION} | usize | +| main.rs:2726:14:2726:17 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2726:14:2726:17 | SelfParam | TRef | main.rs:2724:10:2724:10 | T | +| main.rs:2726:28:2728:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2726:28:2728:9 | { ... } | TRef | main.rs:2724:10:2724:10 | T | +| main.rs:2727:13:2727:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2727:13:2727:16 | self | TRef | main.rs:2724:10:2724:10 | T | +| main.rs:2731:25:2735:5 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:2732:17:2732:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2732:17:2732:17 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2732:21:2732:21 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2732:21:2732:21 | 0 | | {EXTERNAL LOCATION} | usize | +| main.rs:2733:9:2733:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2733:9:2733:9 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2733:9:2733:17 | ... = ... | | {EXTERNAL LOCATION} | () | +| main.rs:2733:13:2733:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2733:13:2733:13 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2733:13:2733:17 | x.f() | | {EXTERNAL LOCATION} | i32 | +| main.rs:2733:13:2733:17 | x.f() | | {EXTERNAL LOCATION} | usize | +| main.rs:2734:9:2734:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2734:9:2734:9 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2737:12:2745:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2738:13:2738:13 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2738:24:2738:24 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:24:2738:24 | 0 | | {EXTERNAL LOCATION} | usize | +| main.rs:2739:13:2739:13 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2739:13:2739:13 | y | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:2739:17:2739:18 | &1 | | {EXTERNAL LOCATION} | & | +| main.rs:2739:17:2739:18 | &1 | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:2739:18:2739:18 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:13:2740:13 | z | | {EXTERNAL LOCATION} | & | +| main.rs:2740:13:2740:13 | z | TRef | {EXTERNAL LOCATION} | usize | +| main.rs:2740:17:2740:17 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2740:17:2740:22 | x.g(...) | | {EXTERNAL LOCATION} | & | +| main.rs:2740:17:2740:22 | x.g(...) | TRef | {EXTERNAL LOCATION} | usize | +| main.rs:2740:21:2740:21 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2740:21:2740:21 | y | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:2742:13:2742:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2742:17:2742:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2743:13:2743:13 | y | | {EXTERNAL LOCATION} | usize | +| main.rs:2743:24:2743:24 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2743:24:2743:24 | 1 | | {EXTERNAL LOCATION} | usize | +| main.rs:2744:13:2744:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:2744:17:2744:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2744:17:2744:24 | x.max(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2744:23:2744:23 | y | | {EXTERNAL LOCATION} | usize | +| main.rs:2755:11:2790:1 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2756:5:2756:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2757:5:2757:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2758:5:2758:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2758:20:2758:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2758:41:2758:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2759:5:2759:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2760:5:2760:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2761:5:2761:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2762:5:2762:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2763:5:2763:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2764:5:2764:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2765:5:2765:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2766:5:2766:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2767:5:2767:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2768:5:2768:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2769:5:2769:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2770:5:2770:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2771:5:2771:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | | main.rs:2772:5:2772:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2773:5:2773:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2774:5:2774:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2775:5:2775:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2776:5:2776:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2777:5:2777:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2778:5:2778:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2778:5:2778:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2778:5:2778:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | -| main.rs:2778:5:2778:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2778:16:2778:19 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2779:5:2779:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2773:5:2773:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2774:5:2774:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2774:5:2774:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:2775:5:2775:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2776:5:2776:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2777:5:2777:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2778:5:2778:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2779:5:2779:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2780:5:2780:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2781:5:2781:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2782:5:2782:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2783:5:2783:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2784:5:2784:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2785:5:2785:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2786:5:2786:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2787:5:2787:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2788:5:2788:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2788:5:2788:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2788:5:2788:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | +| main.rs:2788:5:2788:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2788:16:2788:19 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2789:5:2789:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:4:19:4:23 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:4:19:4:23 | SelfParam | TRef | overloading.rs:2:5:11:5 | Self [trait FirstTrait] | | overloading.rs:4:34:6:9 | { ... } | | {EXTERNAL LOCATION} | bool | From f9869daa91d56aef23a2b78f518e797206ecd5af Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 24 Feb 2026 12:03:15 +0100 Subject: [PATCH 4/4] Address review comments --- .../internal/typeinference/TypeInference.qll | 19 +++++++++---------- .../test/library-tests/type-inference/main.rs | 2 +- .../type-inference/type-inference.expected | 3 +++ 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index 08ef69ff5965..50431c6775b6 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -1033,7 +1033,7 @@ pragma[nomagic] private Type inferStructExprType0(AstNode n, FunctionPosition pos, TypePath path) { exists(StructExprMatchingInput::Access a, StructExprMatchingInput::AccessPosition apos | n = a.getNodeAt(apos) and - if apos.isStructPos() then pos.isReturn() else pos.asPosition() = 0 // the acutal position doesn't matter, as long as it is positional + if apos.isStructPos() then pos.isReturn() else pos.asPosition() = 0 // the actual position doesn't matter, as long as it is positional | result = StructExprMatching::inferAccessType(a, apos, path) or @@ -1229,12 +1229,9 @@ private module ContextTyping { result = inferCallNonReturnType(n, pos, prefix, path) and hasUnknownTypeAt(n, prefix) | - pos.isPosition() - or // Never propagate type information directly into the receiver, since its type // must already have been known in order to resolve the call - pos.isSelf() and - not prefix.isEmpty() + if pos.isSelf() then not prefix.isEmpty() else any() ) } } @@ -2648,12 +2645,12 @@ private Type inferMethodCallTypeNonSelf(AstNode n, FunctionPosition pos, TypePat * empty, at which point the inferred type can be applied back to `n`. */ pragma[nomagic] -private Type inferMethodCallTypeSelf(AstNode n, DerefChain derefChain, TypePath path) { +private Type inferMethodCallTypeSelf(MethodCall mc, AstNode n, DerefChain derefChain, TypePath path) { exists( MethodCallMatchingInput::AccessPosition apos, string derefChainBorrow, BorrowKind borrow, TypePath path0 | - result = inferMethodCallType0(_, apos, n, derefChainBorrow, path0) and + result = inferMethodCallType0(mc, apos, n, derefChainBorrow, path0) and apos.isSelf() and MethodCallMatchingInput::decodeDerefChainBorrow(derefChainBorrow, derefChain, borrow) | @@ -2672,7 +2669,7 @@ private Type inferMethodCallTypeSelf(AstNode n, DerefChain derefChain, TypePath DerefChain derefChain0, Type t0, TypePath path0, DerefImplItemNode impl, Type selfParamType, TypePath selfPath | - t0 = inferMethodCallTypeSelf(n, derefChain0, path0) and + t0 = inferMethodCallTypeSelf(mc, n, derefChain0, path0) and derefChain0.isCons(impl, derefChain) and selfParamType = impl.resolveSelfTypeAt(selfPath) | @@ -2692,8 +2689,10 @@ private Type inferMethodCallTypeSelf(AstNode n, DerefChain derefChain, TypePath private Type inferMethodCallTypePreCheck(AstNode n, FunctionPosition pos, TypePath path) { result = inferMethodCallTypeNonSelf(n, pos, path) or - result = inferMethodCallTypeSelf(n, DerefChain::nil(), path) and - pos.isSelf() + exists(MethodCall mc | + result = inferMethodCallTypeSelf(mc, n, DerefChain::nil(), path) and + if mc instanceof CallExpr then pos.asPosition() = 0 else pos.isSelf() + ) } /** diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index dedd45b40d1c..f342d3897f4d 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -2691,7 +2691,7 @@ mod context_typed { let y = Default::default(); // $ type=y:i32 target=default x.push(y); // $ target=push - let s = Default::default(); // $ MISSING: target=default type=s:S + let s = Default::default(); // $ target=default type=s:S S::f(s); // $ target=f } } 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 57e4131a32e5..fa0f9eaa0c28 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -12100,7 +12100,10 @@ inferType | main.rs:2692:9:2692:9 | x | T | {EXTERNAL LOCATION} | i32 | | main.rs:2692:9:2692:17 | x.push(...) | | {EXTERNAL LOCATION} | () | | main.rs:2692:16:2692:16 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:2694:13:2694:13 | s | | main.rs:2639:5:2640:13 | S | +| main.rs:2694:17:2694:34 | ...::default(...) | | main.rs:2639:5:2640:13 | S | | main.rs:2695:9:2695:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2695:14:2695:14 | s | | main.rs:2639:5:2640:13 | S | | main.rs:2702:14:2702:17 | SelfParam | | main.rs:2700:5:2708:5 | Self [trait MyTrait] | | main.rs:2705:14:2705:18 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2705:14:2705:18 | SelfParam | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] |