From c3349bbb043e90aa37a3417e19c5cfcd0cc4e50b Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Sat, 2 Aug 2025 10:41:19 +0200 Subject: [PATCH 1/2] Rust: Add type inference example with cycle blowup --- .../type-inference/dereference.rs | 36 ++ .../type-inference/type-inference.expected | 394 ++++++++++++++++++ 2 files changed, 430 insertions(+) diff --git a/rust/ql/test/library-tests/type-inference/dereference.rs b/rust/ql/test/library-tests/type-inference/dereference.rs index ad4ce93abb36..f4d9d68a0995 100644 --- a/rust/ql/test/library-tests/type-inference/dereference.rs +++ b/rust/ql/test/library-tests/type-inference/dereference.rs @@ -93,10 +93,46 @@ fn implicit_dereference() { let _y = x.is_positive(); // $ MISSING: target=is_positive type=_y:bool } +mod implicit_deref_coercion_cycle { + use std::collections::HashMap; + + #[derive(Hash, PartialEq, Eq, PartialOrd, Ord, Debug, Clone, Copy)] + pub struct Key {} + + // This example can trigger a cycle in type inference due to an implicit + // dereference if we are not careful and accurate enough. + // + // To explain how a cycle might happen, we let `[V]` denote the type of the + // type parameter `V` of `key_to_key` (i.e., the type of the values in the + // map) and `[key]` denote the type of `key`. + // + // 1. From the first two lines we infer `[V] = &Key` and `[key] = &Key` + // 2. At the 3. line we infer the type of `ref_key` to be `&[V]`. + // 3. At the 4. line we impose the equality `[key] = &[V]`, not accounting + // for the implicit deref caused by a coercion. + // 4. At the last line we infer `[key] = [V]`. + // + // Putting the above together we have `[V] = [key] = &[V]` which is a cycle. + // This means that `[key]` is both `&Key`, `&&Key`, `&&&Key`, and so on ad + // infinitum. + + #[rustfmt::skip] + pub fn test() { + let mut key_to_key = HashMap::<&Key, &Key>::new(); // $ target=new + let mut key = &Key {}; // Initialize key2 to a reference + if let Some(ref_key) = key_to_key.get(key) { // $ target=get + // Below `ref_key` is implicitly dereferenced from `&&Key` to `&Key` + key = ref_key; + } + key_to_key.insert(key, key); // $ target=insert + } +} + pub fn test() { explicit_monomorphic_dereference(); // $ target=explicit_monomorphic_dereference explicit_polymorphic_dereference(); // $ target=explicit_polymorphic_dereference explicit_ref_dereference(); // $ target=explicit_ref_dereference explicit_box_dereference(); // $ target=explicit_box_dereference implicit_dereference(); // $ target=implicit_dereference + implicit_deref_coercion_cycle::test(); // $ target=test } 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 bedc10ba0e35..fd10ec5c111d 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -365,6 +365,400 @@ inferType | dereference.rs:92:37:92:41 | 34i64 | | {EXTERNAL LOCATION} | i64 | | dereference.rs:93:14:93:14 | x | | dereference.rs:17:1:19:1 | MySmartPointer | | dereference.rs:93:14:93:14 | x | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:121:17:121:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:121:17:121:26 | key_to_key | K | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | K | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | K.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | K.&T | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:121:17:121:26 | key_to_key | V | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | V | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | V.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | V.&T | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:121:30:121:57 | ...::new(...) | K | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | K | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:121:30:121:57 | ...::new(...) | V | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | V | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:17:122:19 | key | | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:17:122:19 | key | | file://:0:0:0:0 | & | +| dereference.rs:122:17:122:19 | key | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:17:122:19 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:122:17:122:19 | key | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:17:122:19 | key | &T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:17:122:19 | key | &T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:17:122:19 | key | &T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:23:122:29 | &... | | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:23:122:29 | &... | | file://:0:0:0:0 | & | +| dereference.rs:122:23:122:29 | &... | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:23:122:29 | &... | &T | file://:0:0:0:0 | & | +| dereference.rs:122:23:122:29 | &... | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:23:122:29 | &... | &T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:23:122:29 | &... | &T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:23:122:29 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:24:122:29 | Key {...} | | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:24:122:29 | Key {...} | | file://:0:0:0:0 | & | +| dereference.rs:122:24:122:29 | Key {...} | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:24:122:29 | Key {...} | &T | file://:0:0:0:0 | & | +| dereference.rs:122:24:122:29 | Key {...} | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:24:122:29 | Key {...} | &T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:16:123:28 | Some(...) | | {EXTERNAL LOCATION} | Option | +| dereference.rs:123:16:123:28 | Some(...) | T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:16:123:28 | Some(...) | T | file://:0:0:0:0 | & | +| dereference.rs:123:16:123:28 | Some(...) | T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:16:123:28 | Some(...) | T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:21:123:27 | ref_key | | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:21:123:27 | ref_key | | file://:0:0:0:0 | & | +| dereference.rs:123:21:123:27 | ref_key | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:21:123:27 | ref_key | &T | file://:0:0:0:0 | & | +| dereference.rs:123:21:123:27 | ref_key | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:21:123:27 | ref_key | &T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:123:32:123:41 | key_to_key | K | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | K | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | K.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | K.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:123:32:123:41 | key_to_key | V | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | V | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | V.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | V.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | | {EXTERNAL LOCATION} | Option | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:47:123:49 | key | | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:47:123:49 | key | | file://:0:0:0:0 | & | +| dereference.rs:123:47:123:49 | key | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:47:123:49 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:123:47:123:49 | key | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:47:123:49 | key | &T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:47:123:49 | key | &T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:47:123:49 | key | &T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:125:13:125:15 | key | | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:13:125:15 | key | | file://:0:0:0:0 | & | +| dereference.rs:125:13:125:15 | key | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:13:125:15 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:125:13:125:15 | key | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:13:125:15 | key | &T.&T | file://:0:0:0:0 | & | +| dereference.rs:125:13:125:15 | key | &T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:13:125:15 | key | &T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:125:13:125:25 | ... = ... | | file://:0:0:0:0 | () | +| dereference.rs:125:19:125:25 | ref_key | | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:19:125:25 | ref_key | | file://:0:0:0:0 | & | +| dereference.rs:125:19:125:25 | ref_key | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:19:125:25 | ref_key | &T | file://:0:0:0:0 | & | +| dereference.rs:125:19:125:25 | ref_key | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:19:125:25 | ref_key | &T.&T | file://:0:0:0:0 | & | +| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:127:9:127:18 | key_to_key | K | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | K | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | K.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | K.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:127:9:127:18 | key_to_key | V | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | V | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | V.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | V.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | | {EXTERNAL LOCATION} | Option | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:27:127:29 | key | | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:27:127:29 | key | | file://:0:0:0:0 | & | +| dereference.rs:127:27:127:29 | key | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:27:127:29 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:127:27:127:29 | key | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:27:127:29 | key | &T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:27:127:29 | key | &T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:27:127:29 | key | &T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:32:127:34 | key | | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:32:127:34 | key | | file://:0:0:0:0 | & | +| dereference.rs:127:32:127:34 | key | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:32:127:34 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:127:32:127:34 | key | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:32:127:34 | key | &T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:32:127:34 | key | &T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:32:127:34 | key | &T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | | dyn_type.rs:7:10:7:14 | SelfParam | | file://:0:0:0:0 | & | | dyn_type.rs:7:10:7:14 | SelfParam | &T | dyn_type.rs:5:1:8:1 | Self [trait MyTrait1] | | dyn_type.rs:12:12:12:16 | SelfParam | | file://:0:0:0:0 | & | From 3ba285c298d1017e033e142c47a2118019d78d82 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Sat, 2 Aug 2025 13:57:44 +0200 Subject: [PATCH 2/2] Rust: Implement certain type information for annotation and simple calls --- .../codeql/rust/internal/TypeInference.qll | 164 +++++++- .../internal/TypeInferenceConsistency.qll | 5 + .../TypeInferenceConsistency.expected | 4 + .../test/library-tests/type-inference/main.rs | 2 +- .../type-inference/type-inference.expected | 387 ------------------ .../TypeInferenceConsistency.expected | 3 + .../PathResolutionConsistency.expected | 3 - 7 files changed, 163 insertions(+), 405 deletions(-) create mode 100644 rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/TypeInferenceConsistency.expected create mode 100644 rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/TypeInferenceConsistency.expected delete mode 100644 rust/ql/test/query-tests/security/CWE-328/CONSISTENCY/PathResolutionConsistency.expected diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 89d39659d996..4871b6b79468 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -221,7 +221,13 @@ private module M2 = Make2; private import M2 -module Consistency = M2::Consistency; +module Consistency { + import M2::Consistency + + query predicate nonUniqueCertainType(AstNode n, TypePath path) { + strictcount(CertainTypeInference::inferCertainType(n, path)) > 1 + } +} /** Gets the type annotation that applies to `n`, if any. */ private TypeMention getTypeAnnotation(AstNode n) { @@ -249,6 +255,134 @@ private Type inferAnnotatedType(AstNode n, TypePath path) { result = getTypeAnnotation(n).resolveTypeAt(path) } +/** Module for inferring certain type information. */ +private module CertainTypeInference { + /** Holds if the type mention does not contain any inferred types `_`. */ + predicate typeMentionIsComplete(TypeMention tm) { + not exists(InferTypeRepr t | t.getParentNode*() = tm) + } + + /** + * Holds if `ce` is a call where we can infer the type with certainty and if + * `f` is the target of the call and `p` the path invoked by the call. + * + * Necessary conditions for this are: + * - We are certain of the call target (i.e., the call target can not depend on type information). + * - The declared type of the function does not contain any generics that we + * need to infer. + * - The call does not contain any arguments, as arguments in calls are coercion sites. + * + * The current requirements are made to allow for call to `new` functions such + * as `Vec::new()` but not much more. + */ + predicate certainCallExprTarget(CallExpr ce, Function f, Path p) { + p = CallExprImpl::getFunctionPath(ce) and + f = resolvePath(p) and + // The function is not in a trait + not any(TraitItemNode t).getAnAssocItem() = f and + // The function is not in a trait implementation + not any(ImplItemNode impl | impl.(Impl).hasTrait()).getAnAssocItem() = f and + // The function does not have parameters. + not f.getParamList().hasSelfParam() and + f.getParamList().getNumberOfParams() = 0 and + // The function is not async. + not f.isAsync() and + // For now, exclude functions in macro expansions. + not ce.isInMacroExpansion() and + // The function has no type parameters. + not f.hasGenericParamList() and + // The function does not have `impl` types among its parameters (these are type parameters). + not any(ImplTraitTypeRepr itt | not itt.isInReturnPos()).getFunction() = f and + ( + not exists(ImplItemNode impl | impl.getAnAssocItem() = f) + or + // If the function is in an impl then the impl block has no type + // parameters or all the type parameters are given explicitly. + exists(ImplItemNode impl | impl.getAnAssocItem() = f | + not impl.(Impl).hasGenericParamList() or + impl.(Impl).getGenericParamList().getNumberOfGenericParams() = + p.getQualifier().getSegment().getGenericArgList().getNumberOfGenericArgs() + ) + ) + } + + private ImplItemNode getFunctionImpl(FunctionItemNode f) { result.getAnAssocItem() = f } + + Type inferCertainCallExprType(CallExpr ce, TypePath path) { + exists(Function f, Type ty, TypePath prefix, Path p | + certainCallExprTarget(ce, f, p) and + ty = f.getRetType().getTypeRepr().(TypeMention).resolveTypeAt(prefix) + | + if ty.(TypeParamTypeParameter).getTypeParam() = getFunctionImpl(f).getTypeParam(_) + then + exists(TypePath pathToTp, TypePath suffix | + // For type parameters of the `impl` block we must resolve their + // instantiation from the path. For instance, for `impl for Foo` + // and the path `Foo::bar` we must resolve `A` to `i64`. + ty = getFunctionImpl(f).(Impl).getSelfTy().(TypeMention).resolveTypeAt(pathToTp) and + result = p.getQualifier().(TypeMention).resolveTypeAt(pathToTp.appendInverse(suffix)) and + path = prefix.append(suffix) + ) + else ( + result = ty and path = prefix + ) + ) + } + + predicate certainTypeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePath prefix2) { + prefix1.isEmpty() and + prefix2.isEmpty() and + ( + exists(Variable v | n1 = v.getAnAccess() | + n2 = v.getPat().getName() or n2 = v.getParameter().(SelfParam) + ) + or + // A `let` statement with a type annotation is a coercion site and hence + // is not a certain type equality. + exists(LetStmt let | not let.hasTypeRepr() | + let.getPat() = n1 and + let.getInitializer() = n2 + ) + ) + or + n1 = + any(IdentPat ip | + n2 = ip.getName() and + prefix1.isEmpty() and + if ip.isRef() then prefix2 = TypePath::singleton(TRefTypeParameter()) else prefix2.isEmpty() + ) + } + + pragma[nomagic] + private Type inferCertainTypeEquality(AstNode n, TypePath path) { + exists(TypePath prefix1, AstNode n2, TypePath prefix2, TypePath suffix | + result = inferCertainType(n2, prefix2.appendInverse(suffix)) and + path = prefix1.append(suffix) + | + certainTypeEquality(n, prefix1, n2, prefix2) + or + certainTypeEquality(n2, prefix2, n, prefix1) + ) + } + + /** + * Holds if `n` has complete and certain type information and if `n` has the + * resulting type at `path`. + */ + pragma[nomagic] + Type inferCertainType(AstNode n, TypePath path) { + exists(TypeMention tm | + tm = getTypeAnnotation(n) and + typeMentionIsComplete(tm) and + result = tm.resolveTypeAt(path) + ) + or + result = inferCertainCallExprType(n, path) + or + result = inferCertainTypeEquality(n, path) + } +} + private Type inferLogicalOperationType(AstNode n, TypePath path) { exists(Builtins::BuiltinType t, BinaryLogicalOperation be | n = [be, be.getLhs(), be.getRhs()] and @@ -288,15 +422,11 @@ private Struct getRangeType(RangeExpr re) { * through the type equality. */ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePath prefix2) { + CertainTypeInference::certainTypeEquality(n1, prefix1, n2, prefix2) + or prefix1.isEmpty() and prefix2.isEmpty() and ( - exists(Variable v | n1 = v.getAnAccess() | - n2 = v.getPat().getName() - or - n2 = v.getParameter().(SelfParam) - ) - or exists(LetStmt let | let.getPat() = n1 and let.getInitializer() = n2 @@ -339,13 +469,6 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat n1 = n2.(MacroPat).getMacroCall().getMacroCallExpansion() ) or - n1 = - any(IdentPat ip | - n2 = ip.getName() and - prefix1.isEmpty() and - if ip.isRef() then prefix2 = TypePath::singleton(TRefTypeParameter()) else prefix2.isEmpty() - ) - or ( n1 = n2.(RefExpr).getExpr() or n1 = n2.(RefPat).getPat() @@ -408,6 +531,9 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat pragma[nomagic] private Type inferTypeEquality(AstNode n, TypePath path) { + // Don't propagate type information into a node for which we already have + // certain type information. + not exists(CertainTypeInference::inferCertainType(n, _)) and exists(TypePath prefix1, AstNode n2, TypePath prefix2, TypePath suffix | result = inferType(n2, prefix2.appendInverse(suffix)) and path = prefix1.append(suffix) @@ -818,6 +944,8 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { } final class Access extends Call { + Access() { not CertainTypeInference::certainCallExprTarget(this, _, _) } + pragma[nomagic] Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { exists(TypeMention arg | result = arg.resolveTypeAt(path) | @@ -2150,6 +2278,8 @@ private module Cached { cached Type inferType(AstNode n, TypePath path) { Stages::TypeInferenceStage::ref() and + result = CertainTypeInference::inferCertainType(n, path) + or result = inferAnnotatedType(n, path) or result = inferLogicalOperationType(n, path) @@ -2305,4 +2435,10 @@ private module Debug { c = countTypePaths(n, path, t) and c = max(countTypePaths(_, _, _)) } + + Type debugInferCertainNonUniqueType(AstNode n, TypePath path) { + n = getRelevantLocatable() and + Consistency::nonUniqueCertainType(n, path) and + result = CertainTypeInference::inferCertainType(n, path) + } } diff --git a/rust/ql/lib/codeql/rust/internal/TypeInferenceConsistency.qll b/rust/ql/lib/codeql/rust/internal/TypeInferenceConsistency.qll index 5bcfde94d0b8..fd6257fc2602 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInferenceConsistency.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInferenceConsistency.qll @@ -2,8 +2,10 @@ * Provides classes for recognizing type inference inconsistencies. */ +private import rust private import Type private import TypeMention +private import TypeInference private import TypeInference::Consistency as Consistency import TypeInference::Consistency @@ -27,4 +29,7 @@ int getTypeInferenceInconsistencyCounts(string type) { or type = "Ill-formed type mention" and result = count(TypeMention tm | illFormedTypeMention(tm) | tm) + or + type = "Non-unique certain type information" and + result = count(AstNode n, TypePath path | nonUniqueCertainType(n, path) | n) } diff --git a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/TypeInferenceConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/TypeInferenceConsistency.expected new file mode 100644 index 000000000000..6b051f73c7aa --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/TypeInferenceConsistency.expected @@ -0,0 +1,4 @@ +nonUniqueCertainType +| web_frameworks.rs:139:30:139:39 | ...::get(...) | | +| web_frameworks.rs:140:34:140:43 | ...::get(...) | | +| web_frameworks.rs:141:30:141:39 | ...::get(...) | | diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 145e6c3cabd4..b7c0c58f8b6e 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -2352,7 +2352,7 @@ mod loops { #[rustfmt::skip] let _ = while a < 10 // $ target=lt type=a:i64 { - a += 1; // $ type=a:i64 target=add_assign + a += 1; // $ type=a:i64 MISSING: target=add_assign }; } } 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 fd10ec5c111d..c857d8e9ae3d 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -366,399 +366,85 @@ inferType | dereference.rs:93:14:93:14 | x | | dereference.rs:17:1:19:1 | MySmartPointer | | dereference.rs:93:14:93:14 | x | T | {EXTERNAL LOCATION} | i64 | | dereference.rs:121:17:121:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:121:17:121:26 | key_to_key | K | dereference.rs:99:5:100:21 | Key | | dereference.rs:121:17:121:26 | key_to_key | K | file://:0:0:0:0 | & | | dereference.rs:121:17:121:26 | key_to_key | K.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | K.&T | file://:0:0:0:0 | & | -| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | | dereference.rs:121:17:121:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:121:17:121:26 | key_to_key | V | dereference.rs:99:5:100:21 | Key | | dereference.rs:121:17:121:26 | key_to_key | V | file://:0:0:0:0 | & | | dereference.rs:121:17:121:26 | key_to_key | V.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | V.&T | file://:0:0:0:0 | & | -| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | | dereference.rs:121:30:121:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:121:30:121:57 | ...::new(...) | K | dereference.rs:99:5:100:21 | Key | | dereference.rs:121:30:121:57 | ...::new(...) | K | file://:0:0:0:0 | & | | dereference.rs:121:30:121:57 | ...::new(...) | K.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | K.&T | file://:0:0:0:0 | & | -| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | K.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | | dereference.rs:121:30:121:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:121:30:121:57 | ...::new(...) | V | dereference.rs:99:5:100:21 | Key | | dereference.rs:121:30:121:57 | ...::new(...) | V | file://:0:0:0:0 | & | | dereference.rs:121:30:121:57 | ...::new(...) | V.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | V.&T | file://:0:0:0:0 | & | -| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | V.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:17:122:19 | key | | dereference.rs:99:5:100:21 | Key | | dereference.rs:122:17:122:19 | key | | file://:0:0:0:0 | & | | dereference.rs:122:17:122:19 | key | &T | dereference.rs:99:5:100:21 | Key | | dereference.rs:122:17:122:19 | key | &T | file://:0:0:0:0 | & | | dereference.rs:122:17:122:19 | key | &T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:17:122:19 | key | &T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:17:122:19 | key | &T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:17:122:19 | key | &T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:17:122:19 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:23:122:29 | &... | | dereference.rs:99:5:100:21 | Key | | dereference.rs:122:23:122:29 | &... | | file://:0:0:0:0 | & | | dereference.rs:122:23:122:29 | &... | &T | dereference.rs:99:5:100:21 | Key | | dereference.rs:122:23:122:29 | &... | &T | file://:0:0:0:0 | & | | dereference.rs:122:23:122:29 | &... | &T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:23:122:29 | &... | &T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:23:122:29 | &... | &T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:23:122:29 | &... | &T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:23:122:29 | &... | &T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | | dereference.rs:122:24:122:29 | Key {...} | | dereference.rs:99:5:100:21 | Key | | dereference.rs:122:24:122:29 | Key {...} | | file://:0:0:0:0 | & | | dereference.rs:122:24:122:29 | Key {...} | &T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:24:122:29 | Key {...} | &T | file://:0:0:0:0 | & | -| dereference.rs:122:24:122:29 | Key {...} | &T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:24:122:29 | Key {...} | &T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:24:122:29 | Key {...} | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | | dereference.rs:123:16:123:28 | Some(...) | | {EXTERNAL LOCATION} | Option | -| dereference.rs:123:16:123:28 | Some(...) | T | dereference.rs:99:5:100:21 | Key | | dereference.rs:123:16:123:28 | Some(...) | T | file://:0:0:0:0 | & | | dereference.rs:123:16:123:28 | Some(...) | T.&T | dereference.rs:99:5:100:21 | Key | | dereference.rs:123:16:123:28 | Some(...) | T.&T | file://:0:0:0:0 | & | | dereference.rs:123:16:123:28 | Some(...) | T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:21:123:27 | ref_key | | dereference.rs:99:5:100:21 | Key | | dereference.rs:123:21:123:27 | ref_key | | file://:0:0:0:0 | & | | dereference.rs:123:21:123:27 | ref_key | &T | dereference.rs:99:5:100:21 | Key | | dereference.rs:123:21:123:27 | ref_key | &T | file://:0:0:0:0 | & | | dereference.rs:123:21:123:27 | ref_key | &T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:21:123:27 | ref_key | &T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:21:123:27 | ref_key | &T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | | dereference.rs:123:32:123:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:123:32:123:41 | key_to_key | K | dereference.rs:99:5:100:21 | Key | | dereference.rs:123:32:123:41 | key_to_key | K | file://:0:0:0:0 | & | | dereference.rs:123:32:123:41 | key_to_key | K.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | K.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | | dereference.rs:123:32:123:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | | dereference.rs:123:32:123:41 | key_to_key | V | dereference.rs:99:5:100:21 | Key | | dereference.rs:123:32:123:41 | key_to_key | V | file://:0:0:0:0 | & | | dereference.rs:123:32:123:41 | key_to_key | V.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | V.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | | dereference.rs:123:32:123:50 | key_to_key.get(...) | | {EXTERNAL LOCATION} | Option | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T | dereference.rs:99:5:100:21 | Key | | dereference.rs:123:32:123:50 | key_to_key.get(...) | T | file://:0:0:0:0 | & | | dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T | dereference.rs:99:5:100:21 | Key | | dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T | file://:0:0:0:0 | & | | dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:47:123:49 | key | | dereference.rs:99:5:100:21 | Key | | dereference.rs:123:47:123:49 | key | | file://:0:0:0:0 | & | | dereference.rs:123:47:123:49 | key | &T | dereference.rs:99:5:100:21 | Key | | dereference.rs:123:47:123:49 | key | &T | file://:0:0:0:0 | & | | dereference.rs:123:47:123:49 | key | &T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:47:123:49 | key | &T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:47:123:49 | key | &T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:47:123:49 | key | &T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:47:123:49 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:125:13:125:15 | key | | dereference.rs:99:5:100:21 | Key | | dereference.rs:125:13:125:15 | key | | file://:0:0:0:0 | & | | dereference.rs:125:13:125:15 | key | &T | dereference.rs:99:5:100:21 | Key | | dereference.rs:125:13:125:15 | key | &T | file://:0:0:0:0 | & | | dereference.rs:125:13:125:15 | key | &T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:13:125:15 | key | &T.&T | file://:0:0:0:0 | & | -| dereference.rs:125:13:125:15 | key | &T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:13:125:15 | key | &T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:13:125:15 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | | dereference.rs:125:13:125:25 | ... = ... | | file://:0:0:0:0 | () | -| dereference.rs:125:19:125:25 | ref_key | | dereference.rs:99:5:100:21 | Key | | dereference.rs:125:19:125:25 | ref_key | | file://:0:0:0:0 | & | | dereference.rs:125:19:125:25 | ref_key | &T | dereference.rs:99:5:100:21 | Key | | dereference.rs:125:19:125:25 | ref_key | &T | file://:0:0:0:0 | & | | dereference.rs:125:19:125:25 | ref_key | &T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:19:125:25 | ref_key | &T.&T | file://:0:0:0:0 | & | -| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:19:125:25 | ref_key | &T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | | dereference.rs:127:9:127:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:127:9:127:18 | key_to_key | K | dereference.rs:99:5:100:21 | Key | | dereference.rs:127:9:127:18 | key_to_key | K | file://:0:0:0:0 | & | | dereference.rs:127:9:127:18 | key_to_key | K.&T | dereference.rs:99:5:100:21 | Key | | dereference.rs:127:9:127:18 | key_to_key | K.&T | file://:0:0:0:0 | & | | dereference.rs:127:9:127:18 | key_to_key | K.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:18 | key_to_key | K.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | | dereference.rs:127:9:127:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:127:9:127:18 | key_to_key | V | dereference.rs:99:5:100:21 | Key | | dereference.rs:127:9:127:18 | key_to_key | V | file://:0:0:0:0 | & | | dereference.rs:127:9:127:18 | key_to_key | V.&T | dereference.rs:99:5:100:21 | Key | | dereference.rs:127:9:127:18 | key_to_key | V.&T | file://:0:0:0:0 | & | | dereference.rs:127:9:127:18 | key_to_key | V.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:18 | key_to_key | V.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | | dereference.rs:127:9:127:35 | key_to_key.insert(...) | | {EXTERNAL LOCATION} | Option | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T | dereference.rs:99:5:100:21 | Key | | dereference.rs:127:9:127:35 | key_to_key.insert(...) | T | file://:0:0:0:0 | & | | dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T | dereference.rs:99:5:100:21 | Key | | dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T | file://:0:0:0:0 | & | | dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:27:127:29 | key | | dereference.rs:99:5:100:21 | Key | | dereference.rs:127:27:127:29 | key | | file://:0:0:0:0 | & | | dereference.rs:127:27:127:29 | key | &T | dereference.rs:99:5:100:21 | Key | | dereference.rs:127:27:127:29 | key | &T | file://:0:0:0:0 | & | | dereference.rs:127:27:127:29 | key | &T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:27:127:29 | key | &T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:27:127:29 | key | &T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:27:127:29 | key | &T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:27:127:29 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:32:127:34 | key | | dereference.rs:99:5:100:21 | Key | | dereference.rs:127:32:127:34 | key | | file://:0:0:0:0 | & | | dereference.rs:127:32:127:34 | key | &T | dereference.rs:99:5:100:21 | Key | | dereference.rs:127:32:127:34 | key | &T | file://:0:0:0:0 | & | | dereference.rs:127:32:127:34 | key | &T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:32:127:34 | key | &T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:32:127:34 | key | &T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:32:127:34 | key | &T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:32:127:34 | key | &T.&T.&T.&T.&T.&T.&T.&T.&T | file://:0:0:0:0 | & | | dyn_type.rs:7:10:7:14 | SelfParam | | file://:0:0:0:0 | & | | dyn_type.rs:7:10:7:14 | SelfParam | &T | dyn_type.rs:5:1:8:1 | Self [trait MyTrait1] | | dyn_type.rs:12:12:12:16 | SelfParam | | file://:0:0:0:0 | & | @@ -814,8 +500,6 @@ inferType | dyn_type.rs:60:78:62:1 | { ... } | | {EXTERNAL LOCATION} | Box | | dyn_type.rs:60:78:62:1 | { ... } | A | {EXTERNAL LOCATION} | Global | | dyn_type.rs:60:78:62:1 | { ... } | T | dyn_type.rs:10:1:13:1 | dyn GenericGet | -| dyn_type.rs:60:78:62:1 | { ... } | T | dyn_type.rs:33:1:36:1 | GenStruct | -| dyn_type.rs:60:78:62:1 | { ... } | T.A | dyn_type.rs:60:18:60:43 | A | | dyn_type.rs:60:78:62:1 | { ... } | T.dyn(A) | dyn_type.rs:60:18:60:43 | A | | dyn_type.rs:61:5:61:36 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | dyn_type.rs:61:5:61:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | @@ -2990,11 +2674,7 @@ inferType | main.rs:1371:15:1371:19 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1371:15:1371:19 | SelfParam | &T | main.rs:1368:5:1368:13 | S | | main.rs:1371:31:1373:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1371:31:1373:9 | { ... } | &T | file://:0:0:0:0 | & | | main.rs:1371:31:1373:9 | { ... } | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1371:31:1373:9 | { ... } | &T.&T | file://:0:0:0:0 | & | -| main.rs:1371:31:1373:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1371:31:1373:9 | { ... } | &T.&T.&T.&T | main.rs:1368:5:1368:13 | S | | main.rs:1372:13:1372:19 | &... | | file://:0:0:0:0 | & | | main.rs:1372:13:1372:19 | &... | &T | file://:0:0:0:0 | & | | main.rs:1372:13:1372:19 | &... | &T | main.rs:1368:5:1368:13 | S | @@ -3014,11 +2694,7 @@ inferType | main.rs:1375:15:1375:25 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1375:15:1375:25 | SelfParam | &T | main.rs:1368:5:1368:13 | S | | main.rs:1375:37:1377:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1375:37:1377:9 | { ... } | &T | file://:0:0:0:0 | & | | main.rs:1375:37:1377:9 | { ... } | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1375:37:1377:9 | { ... } | &T.&T | file://:0:0:0:0 | & | -| main.rs:1375:37:1377:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1375:37:1377:9 | { ... } | &T.&T.&T.&T | main.rs:1368:5:1368:13 | S | | main.rs:1376:13:1376:19 | &... | | file://:0:0:0:0 | & | | main.rs:1376:13:1376:19 | &... | &T | file://:0:0:0:0 | & | | main.rs:1376:13:1376:19 | &... | &T | main.rs:1368:5:1368:13 | S | @@ -3044,11 +2720,7 @@ inferType | main.rs:1383:15:1383:15 | x | | file://:0:0:0:0 | & | | main.rs:1383:15:1383:15 | x | &T | main.rs:1368:5:1368:13 | S | | main.rs:1383:34:1385:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1383:34:1385:9 | { ... } | &T | file://:0:0:0:0 | & | | main.rs:1383:34:1385:9 | { ... } | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1383:34:1385:9 | { ... } | &T.&T | file://:0:0:0:0 | & | -| main.rs:1383:34:1385:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1383:34:1385:9 | { ... } | &T.&T.&T.&T | main.rs:1368:5:1368:13 | S | | main.rs:1384:13:1384:16 | &... | | file://:0:0:0:0 | & | | main.rs:1384:13:1384:16 | &... | &T | file://:0:0:0:0 | & | | main.rs:1384:13:1384:16 | &... | &T | main.rs:1368:5:1368:13 | S | @@ -4017,9 +3689,7 @@ inferType | main.rs:1877:18:1877:21 | SelfParam | | main.rs:1874:5:1874:14 | S1 | | main.rs:1880:25:1882:5 | { ... } | | main.rs:1874:5:1874:14 | S1 | | main.rs:1881:9:1881:10 | S1 | | main.rs:1874:5:1874:14 | S1 | -| main.rs:1884:41:1886:5 | { ... } | | {EXTERNAL LOCATION} | trait Future | | main.rs:1884:41:1886:5 | { ... } | | main.rs:1884:16:1884:39 | ImplTraitTypeRepr | -| main.rs:1884:41:1886:5 | { ... } | Output | main.rs:1874:5:1874:14 | S1 | | main.rs:1885:9:1885:20 | { ... } | | {EXTERNAL LOCATION} | trait Future | | main.rs:1885:9:1885:20 | { ... } | | main.rs:1884:16:1884:39 | ImplTraitTypeRepr | | main.rs:1885:9:1885:20 | { ... } | Output | main.rs:1874:5:1874:14 | S1 | @@ -4034,7 +3704,6 @@ inferType | main.rs:1897:13:1897:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | | main.rs:1897:13:1897:38 | ...::Ready(...) | T | main.rs:1874:5:1874:14 | S1 | | main.rs:1897:36:1897:37 | S1 | | main.rs:1874:5:1874:14 | S1 | -| main.rs:1901:41:1903:5 | { ... } | | main.rs:1888:5:1888:14 | S2 | | main.rs:1901:41:1903:5 | { ... } | | main.rs:1901:16:1901:39 | ImplTraitTypeRepr | | main.rs:1902:9:1902:10 | S2 | | main.rs:1888:5:1888:14 | S2 | | main.rs:1902:9:1902:10 | S2 | | main.rs:1901:16:1901:39 | ImplTraitTypeRepr | @@ -4063,7 +3732,6 @@ inferType | main.rs:1930:15:1930:19 | SelfParam | &T | main.rs:1916:5:1917:14 | S1 | | main.rs:1934:15:1934:19 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1934:15:1934:19 | SelfParam | &T | main.rs:1916:5:1917:14 | S1 | -| main.rs:1937:37:1939:5 | { ... } | | main.rs:1916:5:1917:14 | S1 | | main.rs:1937:37:1939:5 | { ... } | | main.rs:1937:16:1937:35 | ImplTraitTypeRepr | | main.rs:1938:9:1938:10 | S1 | | main.rs:1916:5:1917:14 | S1 | | main.rs:1938:9:1938:10 | S1 | | main.rs:1937:16:1937:35 | ImplTraitTypeRepr | @@ -4087,7 +3755,6 @@ inferType | main.rs:1953:25:1953:28 | self | &T | main.rs:1919:5:1919:22 | S3 | | main.rs:1953:25:1953:28 | self | &T.T3 | main.rs:1951:10:1951:17 | T | | main.rs:1954:13:1954:21 | t.clone() | | main.rs:1951:10:1951:17 | T | -| main.rs:1958:45:1960:5 | { ... } | | main.rs:1916:5:1917:14 | S1 | | main.rs:1958:45:1960:5 | { ... } | | main.rs:1958:28:1958:43 | ImplTraitTypeRepr | | main.rs:1959:9:1959:10 | S1 | | main.rs:1916:5:1917:14 | S1 | | main.rs:1959:9:1959:10 | S1 | | main.rs:1958:28:1958:43 | ImplTraitTypeRepr | @@ -4096,9 +3763,7 @@ inferType | main.rs:1963:9:1963:9 | t | | main.rs:1962:26:1962:38 | B | | main.rs:1963:9:1963:17 | t.get_a() | | main.rs:1962:23:1962:23 | A | | main.rs:1966:34:1966:34 | x | | main.rs:1966:24:1966:31 | T | -| main.rs:1966:59:1968:5 | { ... } | | main.rs:1919:5:1919:22 | S3 | | main.rs:1966:59:1968:5 | { ... } | | main.rs:1966:43:1966:57 | ImplTraitTypeRepr | -| main.rs:1966:59:1968:5 | { ... } | T3 | main.rs:1966:24:1966:31 | T | | main.rs:1966:59:1968:5 | { ... } | impl(T) | main.rs:1966:24:1966:31 | T | | main.rs:1967:9:1967:13 | S3(...) | | main.rs:1919:5:1919:22 | S3 | | main.rs:1967:9:1967:13 | S3(...) | | main.rs:1966:43:1966:57 | ImplTraitTypeRepr | @@ -4107,9 +3772,7 @@ inferType | main.rs:1967:12:1967:12 | x | | main.rs:1966:24:1966:31 | T | | main.rs:1970:34:1970:34 | x | | main.rs:1970:24:1970:31 | T | | main.rs:1970:67:1972:5 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:1970:67:1972:5 | { ... } | T | main.rs:1919:5:1919:22 | S3 | | main.rs:1970:67:1972:5 | { ... } | T | main.rs:1970:50:1970:64 | ImplTraitTypeRepr | -| main.rs:1970:67:1972:5 | { ... } | T.T3 | main.rs:1970:24:1970:31 | T | | main.rs:1970:67:1972:5 | { ... } | T.impl(T) | main.rs:1970:24:1970:31 | T | | main.rs:1971:9:1971:19 | Some(...) | | {EXTERNAL LOCATION} | Option | | main.rs:1971:9:1971:19 | Some(...) | T | main.rs:1919:5:1919:22 | S3 | @@ -4123,13 +3786,9 @@ inferType | main.rs:1971:17:1971:17 | x | | main.rs:1970:24:1970:31 | T | | main.rs:1974:34:1974:34 | x | | main.rs:1974:24:1974:31 | T | | main.rs:1974:78:1976:5 | { ... } | | file://:0:0:0:0 | (T_2) | -| main.rs:1974:78:1976:5 | { ... } | 0(2) | main.rs:1919:5:1919:22 | S3 | | main.rs:1974:78:1976:5 | { ... } | 0(2) | main.rs:1974:44:1974:58 | ImplTraitTypeRepr | -| main.rs:1974:78:1976:5 | { ... } | 0(2).T3 | main.rs:1974:24:1974:31 | T | | main.rs:1974:78:1976:5 | { ... } | 0(2).impl(T) | main.rs:1974:24:1974:31 | T | -| main.rs:1974:78:1976:5 | { ... } | 1(2) | main.rs:1919:5:1919:22 | S3 | | main.rs:1974:78:1976:5 | { ... } | 1(2) | main.rs:1974:61:1974:75 | ImplTraitTypeRepr | -| main.rs:1974:78:1976:5 | { ... } | 1(2).T3 | main.rs:1974:24:1974:31 | T | | main.rs:1974:78:1976:5 | { ... } | 1(2).impl(T) | main.rs:1974:24:1974:31 | T | | main.rs:1975:9:1975:30 | TupleExpr | | file://:0:0:0:0 | (T_2) | | main.rs:1975:9:1975:30 | TupleExpr | 0(2) | main.rs:1919:5:1919:22 | S3 | @@ -4234,7 +3893,6 @@ inferType | main.rs:2030:14:2030:29 | ...[index] | | main.rs:2025:10:2025:10 | T | | main.rs:2030:24:2030:28 | index | | {EXTERNAL LOCATION} | usize | | main.rs:2034:22:2034:26 | slice | | file://:0:0:0:0 | & | -| main.rs:2034:22:2034:26 | slice | | file://:0:0:0:0 | [] | | main.rs:2034:22:2034:26 | slice | &T | file://:0:0:0:0 | [] | | main.rs:2034:22:2034:26 | slice | &T.[T] | main.rs:2001:5:2002:13 | S | | main.rs:2041:13:2041:13 | x | | main.rs:2001:5:2002:13 | S | @@ -4259,20 +3917,14 @@ inferType | main.rs:2047:13:2047:13 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2047:13:2047:13 | 0 | | {EXTERNAL LOCATION} | usize | | main.rs:2049:13:2049:14 | xs | | file://:0:0:0:0 | [] | -| main.rs:2049:13:2049:14 | xs | | file://:0:0:0:0 | [] | | main.rs:2049:13:2049:14 | xs | [T;...] | main.rs:2001:5:2002:13 | S | -| main.rs:2049:13:2049:14 | xs | [T] | main.rs:2001:5:2002:13 | S | | main.rs:2049:21:2049:21 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2049:26:2049:28 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2049:26:2049:28 | [...] | | file://:0:0:0:0 | [] | | main.rs:2049:26:2049:28 | [...] | [T;...] | main.rs:2001:5:2002:13 | S | -| main.rs:2049:26:2049:28 | [...] | [T] | main.rs:2001:5:2002:13 | S | | main.rs:2049:27:2049:27 | S | | main.rs:2001:5:2002:13 | S | | main.rs:2050:13:2050:13 | x | | main.rs:2001:5:2002:13 | S | | main.rs:2050:17:2050:18 | xs | | file://:0:0:0:0 | [] | -| main.rs:2050:17:2050:18 | xs | | file://:0:0:0:0 | [] | | main.rs:2050:17:2050:18 | xs | [T;...] | main.rs:2001:5:2002:13 | S | -| main.rs:2050:17:2050:18 | xs | [T] | main.rs:2001:5:2002:13 | S | | main.rs:2050:17:2050:21 | xs[0] | | main.rs:2001:5:2002:13 | S | | main.rs:2050:17:2050:27 | ... .foo() | | main.rs:2001:5:2002:13 | S | | main.rs:2050:20:2050:20 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -4282,9 +3934,7 @@ inferType | main.rs:2052:23:2052:25 | &xs | &T.[T;...] | main.rs:2001:5:2002:13 | S | | main.rs:2052:23:2052:25 | &xs | &T.[T] | main.rs:2001:5:2002:13 | S | | main.rs:2052:24:2052:25 | xs | | file://:0:0:0:0 | [] | -| main.rs:2052:24:2052:25 | xs | | file://:0:0:0:0 | [] | | main.rs:2052:24:2052:25 | xs | [T;...] | main.rs:2001:5:2002:13 | S | -| main.rs:2052:24:2052:25 | xs | [T] | main.rs:2001:5:2002:13 | S | | main.rs:2058:13:2058:13 | x | | {EXTERNAL LOCATION} | String | | main.rs:2058:17:2058:46 | MacroExpr | | {EXTERNAL LOCATION} | String | | main.rs:2058:25:2058:35 | "Hello, {}" | | file://:0:0:0:0 | & | @@ -4311,7 +3961,6 @@ inferType | main.rs:2084:14:2084:18 | value | &T | {EXTERNAL LOCATION} | i64 | | main.rs:2092:19:2092:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | | main.rs:2092:25:2092:29 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2092:46:2098:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2092:46:2098:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2093:13:2097:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | | main.rs:2093:13:2097:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | @@ -4327,7 +3976,6 @@ inferType | main.rs:2107:19:2107:22 | SelfParam | | main.rs:2101:5:2101:19 | S | | main.rs:2107:19:2107:22 | SelfParam | T | main.rs:2103:10:2103:17 | T | | main.rs:2107:25:2107:29 | other | | main.rs:2101:5:2101:19 | S | -| main.rs:2107:25:2107:29 | other | T | main.rs:2063:5:2068:5 | Self [trait MyAdd] | | main.rs:2107:25:2107:29 | other | T | main.rs:2103:10:2103:17 | T | | main.rs:2107:54:2109:9 | { ... } | | main.rs:2101:5:2101:19 | S | | main.rs:2107:54:2109:9 | { ... } | T | main.rs:2064:9:2064:20 | Output | @@ -4345,7 +3993,6 @@ inferType | main.rs:2108:31:2108:37 | other.0 | | main.rs:2103:10:2103:17 | T | | main.rs:2116:19:2116:22 | SelfParam | | main.rs:2101:5:2101:19 | S | | main.rs:2116:19:2116:22 | SelfParam | T | main.rs:2112:10:2112:17 | T | -| main.rs:2116:25:2116:29 | other | | main.rs:2063:5:2068:5 | Self [trait MyAdd] | | main.rs:2116:25:2116:29 | other | | main.rs:2112:10:2112:17 | T | | main.rs:2116:51:2118:9 | { ... } | | main.rs:2101:5:2101:19 | S | | main.rs:2116:51:2118:9 | { ... } | T | main.rs:2064:9:2064:20 | Output | @@ -4375,7 +4022,6 @@ inferType | main.rs:2140:40:2142:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2141:13:2141:17 | value | | {EXTERNAL LOCATION} | i64 | | main.rs:2147:20:2147:24 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2147:41:2153:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2147:41:2153:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2148:13:2152:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | | main.rs:2148:13:2152:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | @@ -4416,28 +4062,23 @@ inferType | main.rs:2195:13:2195:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | | main.rs:2195:17:2195:17 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2201:15:2201:15 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2201:31:2203:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2201:31:2203:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2202:13:2202:13 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2202:13:2202:13 | 0 | | {EXTERNAL LOCATION} | i64 | | main.rs:2206:15:2206:15 | x | | {EXTERNAL LOCATION} | bool | | main.rs:2206:32:2208:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:2207:13:2207:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2212:13:2212:13 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:2212:13:2212:13 | x | | {EXTERNAL LOCATION} | i64 | | main.rs:2212:22:2212:23 | 73 | | {EXTERNAL LOCATION} | i32 | | main.rs:2212:22:2212:23 | 73 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2213:9:2213:9 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:2213:9:2213:9 | x | | {EXTERNAL LOCATION} | i64 | | main.rs:2213:9:2213:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | | main.rs:2213:18:2213:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2214:9:2214:9 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:2214:9:2214:9 | x | | {EXTERNAL LOCATION} | i64 | | main.rs:2214:9:2214:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | | main.rs:2214:18:2214:22 | &5i64 | | file://:0:0:0:0 | & | | main.rs:2214:18:2214:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | | main.rs:2214:19:2214:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2215:9:2215:9 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:2215:9:2215:9 | x | | {EXTERNAL LOCATION} | i64 | | main.rs:2215:9:2215:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | | main.rs:2215:18:2215:21 | true | | {EXTERNAL LOCATION} | bool | @@ -4497,7 +4138,6 @@ inferType | main.rs:2244:13:2244:25 | MyCallable {...} | | main.rs:2240:5:2240:24 | MyCallable | | main.rs:2247:17:2247:21 | SelfParam | | file://:0:0:0:0 | & | | main.rs:2247:17:2247:21 | SelfParam | &T | main.rs:2240:5:2240:24 | MyCallable | -| main.rs:2247:31:2249:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2247:31:2249:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2248:13:2248:13 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2248:13:2248:13 | 1 | | {EXTERNAL LOCATION} | i64 | @@ -4552,7 +4192,6 @@ inferType | main.rs:2263:18:2263:22 | vals2 | | file://:0:0:0:0 | [] | | main.rs:2263:18:2263:22 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | | main.rs:2265:13:2265:17 | vals3 | | file://:0:0:0:0 | [] | -| main.rs:2265:13:2265:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2265:13:2265:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | | main.rs:2265:26:2265:26 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2265:31:2265:39 | [...] | | file://:0:0:0:0 | [] | @@ -4564,13 +4203,10 @@ inferType | main.rs:2265:35:2265:35 | 2 | | {EXTERNAL LOCATION} | u32 | | main.rs:2265:38:2265:38 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2265:38:2265:38 | 3 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2266:13:2266:13 | u | | {EXTERNAL LOCATION} | i32 | | main.rs:2266:13:2266:13 | u | | {EXTERNAL LOCATION} | u32 | | main.rs:2266:18:2266:22 | vals3 | | file://:0:0:0:0 | [] | -| main.rs:2266:18:2266:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2266:18:2266:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | | main.rs:2268:13:2268:17 | vals4 | | file://:0:0:0:0 | [] | -| main.rs:2268:13:2268:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2268:13:2268:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | | main.rs:2268:26:2268:26 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2268:31:2268:36 | [1; 3] | | file://:0:0:0:0 | [] | @@ -4579,10 +4215,8 @@ inferType | main.rs:2268:32:2268:32 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2268:32:2268:32 | 1 | | {EXTERNAL LOCATION} | u64 | | main.rs:2268:35:2268:35 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2269:13:2269:13 | u | | {EXTERNAL LOCATION} | i32 | | main.rs:2269:13:2269:13 | u | | {EXTERNAL LOCATION} | u64 | | main.rs:2269:18:2269:22 | vals4 | | file://:0:0:0:0 | [] | -| main.rs:2269:18:2269:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2269:18:2269:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | | main.rs:2271:17:2271:24 | strings1 | | file://:0:0:0:0 | [] | | main.rs:2271:17:2271:24 | strings1 | [T;...] | file://:0:0:0:0 | & | @@ -4960,16 +4594,13 @@ inferType | main.rs:2347:30:2347:33 | map1 | V.A | {EXTERNAL LOCATION} | Global | | main.rs:2347:30:2347:33 | map1 | V.T | file://:0:0:0:0 | & | | main.rs:2347:30:2347:33 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2351:17:2351:17 | a | | {EXTERNAL LOCATION} | i32 | | main.rs:2351:17:2351:17 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:2351:26:2351:26 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2351:26:2351:26 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2353:23:2353:23 | a | | {EXTERNAL LOCATION} | i32 | | main.rs:2353:23:2353:23 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:2353:23:2353:28 | ... < ... | | {EXTERNAL LOCATION} | bool | | main.rs:2353:27:2353:28 | 10 | | {EXTERNAL LOCATION} | i32 | | main.rs:2353:27:2353:28 | 10 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2355:13:2355:13 | a | | {EXTERNAL LOCATION} | i32 | | main.rs:2355:13:2355:13 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:2355:13:2355:18 | ... += ... | | file://:0:0:0:0 | () | | main.rs:2355:18:2355:18 | 1 | | {EXTERNAL LOCATION} | i32 | @@ -6180,8 +5811,6 @@ inferType | pattern_matching.rs:504:65:504:71 | paren_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:510:9:510:13 | slice | | file://:0:0:0:0 | & | | pattern_matching.rs:510:9:510:13 | slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:510:9:510:13 | slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:510:9:510:13 | slice | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:510:9:510:13 | slice | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:510:25:510:40 | &... | | file://:0:0:0:0 | & | | pattern_matching.rs:510:25:510:40 | &... | &T | file://:0:0:0:0 | [] | @@ -6199,23 +5828,15 @@ inferType | pattern_matching.rs:510:39:510:39 | 5 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:513:11:513:15 | slice | | file://:0:0:0:0 | & | | pattern_matching.rs:513:11:513:15 | slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:513:11:513:15 | slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:513:11:513:15 | slice | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:513:11:513:15 | slice | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:514:9:514:10 | SlicePat | | file://:0:0:0:0 | & | | pattern_matching.rs:514:9:514:10 | SlicePat | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:514:9:514:10 | SlicePat | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:514:9:514:10 | SlicePat | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:514:9:514:10 | SlicePat | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:515:17:515:27 | empty_slice | | file://:0:0:0:0 | & | | pattern_matching.rs:515:17:515:27 | empty_slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:515:17:515:27 | empty_slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:515:17:515:27 | empty_slice | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:515:17:515:27 | empty_slice | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:515:31:515:35 | slice | | file://:0:0:0:0 | & | | pattern_matching.rs:515:31:515:35 | slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:515:31:515:35 | slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:515:31:515:35 | slice | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:515:31:515:35 | slice | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:516:22:516:40 | "Empty slice: {:?}\\n" | | file://:0:0:0:0 | & | | pattern_matching.rs:516:22:516:40 | "Empty slice: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | @@ -6223,13 +5844,9 @@ inferType | pattern_matching.rs:516:22:516:53 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | pattern_matching.rs:516:43:516:53 | empty_slice | | file://:0:0:0:0 | & | | pattern_matching.rs:516:43:516:53 | empty_slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:516:43:516:53 | empty_slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:516:43:516:53 | empty_slice | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:516:43:516:53 | empty_slice | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:518:9:518:11 | SlicePat | | file://:0:0:0:0 | & | | pattern_matching.rs:518:9:518:11 | SlicePat | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:518:9:518:11 | SlicePat | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:518:9:518:11 | SlicePat | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:518:9:518:11 | SlicePat | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:520:22:520:41 | "Single element: {}\\n" | | file://:0:0:0:0 | & | | pattern_matching.rs:520:22:520:41 | "Single element: {}\\n" | &T | {EXTERNAL LOCATION} | str | @@ -6237,8 +5854,6 @@ inferType | pattern_matching.rs:520:22:520:54 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | pattern_matching.rs:522:9:522:23 | SlicePat | | file://:0:0:0:0 | & | | pattern_matching.rs:522:9:522:23 | SlicePat | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:522:9:522:23 | SlicePat | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:522:9:522:23 | SlicePat | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:522:9:522:23 | SlicePat | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:525:22:525:43 | "Two elements: {}, {}\\n" | | file://:0:0:0:0 | & | | pattern_matching.rs:525:22:525:43 | "Two elements: {}, {}\\n" | &T | {EXTERNAL LOCATION} | str | @@ -6246,8 +5861,6 @@ inferType | pattern_matching.rs:525:22:525:70 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | pattern_matching.rs:527:9:527:34 | SlicePat | | file://:0:0:0:0 | & | | pattern_matching.rs:527:9:527:34 | SlicePat | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:527:9:527:34 | SlicePat | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:527:9:527:34 | SlicePat | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:527:9:527:34 | SlicePat | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:532:17:532:53 | "First: {}, last: {}, middle l... | | file://:0:0:0:0 | & | | pattern_matching.rs:532:17:532:53 | "First: {}, last: {}, middle l... | &T | {EXTERNAL LOCATION} | str | diff --git a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/TypeInferenceConsistency.expected b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/TypeInferenceConsistency.expected new file mode 100644 index 000000000000..6a60922b6f0f --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/TypeInferenceConsistency.expected @@ -0,0 +1,3 @@ +nonUniqueCertainType +| sqlx.rs:158:13:158:81 | { ... } | E | +| sqlx.rs:160:17:160:86 | { ... } | E | diff --git a/rust/ql/test/query-tests/security/CWE-328/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-328/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index cb8b7cc4d6c5..000000000000 --- a/rust/ql/test/query-tests/security/CWE-328/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,3 +0,0 @@ -multipleCallTargets -| test.rs:82:26:82:44 | harmless.as_bytes() | -| test.rs:83:26:83:44 | password.as_bytes() |