From 70df1b9abefb4faead29e10d107539ffae92f497 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 10 Jan 2025 11:45:55 +0100 Subject: [PATCH 01/17] Rust: give more options for building in `README.md` --- rust/README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/rust/README.md b/rust/README.md index 2f9a7503abb7..d2e77e2a0016 100644 --- a/rust/README.md +++ b/rust/README.md @@ -11,10 +11,18 @@ If you don't have the `semmle-code` repo you may need to install Bazel manually, ### Building the Rust Extractor -This approach uses a released `codeql` version and is simpler to use for QL development. From your `semmle-code` directory run: +This approach uses a released `codeql` version and is simpler to use for QL development. From anywhere under your `semmle-code` or `codeql` directory you can run: ```bash bazel run @codeql//rust:install ``` + +You can use shorter versions of the above command: +```bash +bazel run //rust:install # if under the `codeql` checkout +bazel run rust:install # if at the root of the `codeql` checkout +bazel run :install # if at the `rust` directory of the `codeql` checkout +``` + You now need to create a [per-user CodeQL configuration file](https://docs.github.com/en/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/specifying-command-options-in-a-codeql-configuration-file#using-a-codeql-configuration-file) and specify the option: ``` --search-path PATH/TO/semmle-code/ql From 7c0409da354d0f41e6c5b24b3fb95434ec837430 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 10 Jan 2025 11:50:49 +0100 Subject: [PATCH 02/17] Rust: add instructions for `codegen` in `README.md` --- rust/README.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/rust/README.md b/rust/README.md index d2e77e2a0016..bab00ae867dd 100644 --- a/rust/README.md +++ b/rust/README.md @@ -48,4 +48,17 @@ TODO ### Code Generation -TODO +If you do changes to either +* `ast-generator`, or +* `schema/*.py` + +you'll need to regenerate code. You can do so running +```bash +bazel run @codeql//rust/codegen +``` + +Sometimes, especially if resolving conflicts on generated files, you might need to run +```bash +bazel run @codeql//rust/codegen -- --force +``` +for code generation to succeed. From db4370d1491c709fd0ea2ea9f149f758fb718874 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 16 Jan 2025 18:14:05 +0000 Subject: [PATCH 03/17] Rust: Remove QL models for std::env sources. --- .../lib/codeql/rust/frameworks/stdlib/Env.qll | 30 ------------------- .../dataflow/sources/InlineFlow.expected | 4 +++ .../dataflow/sources/TaintSources.expected | 30 ++++++++++--------- 3 files changed, 20 insertions(+), 44 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/Env.qll b/rust/ql/lib/codeql/rust/frameworks/stdlib/Env.qll index 8410da77a069..2d0ccfb6d99b 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/Env.qll +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/Env.qll @@ -4,33 +4,3 @@ private import rust private import codeql.rust.Concepts - -/** - * A call to `std::env::args` or `std::env::args_os`. - */ -private class StdEnvArgs extends CommandLineArgsSource::Range { - StdEnvArgs() { - this.asExpr().getExpr().(CallExpr).getFunction().(PathExpr).getResolvedPath() = - ["crate::env::args", "crate::env::args_os"] - } -} - -/** - * A call to `std::env::current_dir`, `std::env::current_exe` or `std::env::home_dir`. - */ -private class StdEnvDir extends CommandLineArgsSource::Range { - StdEnvDir() { - this.asExpr().getExpr().(CallExpr).getFunction().(PathExpr).getResolvedPath() = - ["crate::env::current_dir", "crate::env::current_exe", "crate::env::home_dir"] - } -} - -/** - * A call to `std::env::var`, `std::env::var_os`, `std::env::vars` or `std::env::vars_os`. - */ -private class StdEnvVar extends EnvironmentSource::Range { - StdEnvVar() { - this.asExpr().getExpr().(CallExpr).getFunction().(PathExpr).getResolvedPath() = - ["crate::env::var", "crate::env::var_os", "crate::env::vars", "crate::env::vars_os"] - } -} diff --git a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected index e69de29bb2d1..7bfe033a65bc 100644 --- a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected @@ -0,0 +1,4 @@ +| test.rs:8:34:8:84 | //... | Missing result: hasTaintFlow | +| test.rs:9:37:9:87 | //... | Missing result: hasTaintFlow | +| test.rs:41:20:41:36 | //... | Missing result: hasTaintFlow | +| test.rs:45:20:45:36 | //... | Missing result: hasTaintFlow | diff --git a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected index cebbc00f3a5e..f92ca7e36ec0 100644 --- a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected @@ -1,17 +1,19 @@ -| test.rs:8:10:8:30 | ...::var(...) | Flow source 'EnvironmentSource' of type environment. | -| test.rs:9:10:9:33 | ...::var_os(...) | Flow source 'EnvironmentSource' of type environment. | -| test.rs:11:16:11:36 | ...::var(...) | Flow source 'EnvironmentSource' of type environment. | -| test.rs:12:16:12:39 | ...::var_os(...) | Flow source 'EnvironmentSource' of type environment. | -| test.rs:17:25:17:40 | ...::vars(...) | Flow source 'EnvironmentSource' of type environment. | -| test.rs:22:25:22:43 | ...::vars_os(...) | Flow source 'EnvironmentSource' of type environment. | -| test.rs:29:29:29:44 | ...::args(...) | Flow source 'CommandLineArgs' of type commandargs. | -| test.rs:32:16:32:31 | ...::args(...) | Flow source 'CommandLineArgs' of type commandargs. | -| test.rs:33:16:33:34 | ...::args_os(...) | Flow source 'CommandLineArgs' of type commandargs. | -| test.rs:40:16:40:31 | ...::args(...) | Flow source 'CommandLineArgs' of type commandargs. | -| test.rs:44:16:44:34 | ...::args_os(...) | Flow source 'CommandLineArgs' of type commandargs. | -| test.rs:50:15:50:37 | ...::current_dir(...) | Flow source 'CommandLineArgs' of type commandargs. | -| test.rs:51:15:51:37 | ...::current_exe(...) | Flow source 'CommandLineArgs' of type commandargs. | -| test.rs:52:16:52:35 | ...::home_dir(...) | Flow source 'CommandLineArgs' of type commandargs. | +#select | test.rs:60:26:60:70 | ...::get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | | test.rs:63:26:63:70 | ...::get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | | test.rs:66:26:66:60 | ...::get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +testFailures +| test.rs:8:34:8:84 | //... | Missing result: Alert[rust/summary/taint-sources] | +| test.rs:9:37:9:87 | //... | Missing result: Alert[rust/summary/taint-sources] | +| test.rs:11:62:11:99 | //... | Missing result: Alert[rust/summary/taint-sources] | +| test.rs:12:51:12:88 | //... | Missing result: Alert[rust/summary/taint-sources] | +| test.rs:17:44:17:81 | //... | Missing result: Alert[rust/summary/taint-sources] | +| test.rs:22:47:22:84 | //... | Missing result: Alert[rust/summary/taint-sources] | +| test.rs:29:57:29:94 | //... | Missing result: Alert[rust/summary/taint-sources] | +| test.rs:32:50:32:87 | //... | Missing result: Alert[rust/summary/taint-sources] | +| test.rs:33:53:33:90 | //... | Missing result: Alert[rust/summary/taint-sources] | +| test.rs:40:35:40:72 | //... | Missing result: Alert[rust/summary/taint-sources] | +| test.rs:44:38:44:75 | //... | Missing result: Alert[rust/summary/taint-sources] | +| test.rs:50:57:50:94 | //... | Missing result: Alert[rust/summary/taint-sources] | +| test.rs:51:57:51:94 | //... | Missing result: Alert[rust/summary/taint-sources] | +| test.rs:52:55:52:92 | //... | Missing result: Alert[rust/summary/taint-sources] | From 5a73e0bd09236885cd2d46345501e533b166f0c7 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 16 Jan 2025 18:46:53 +0000 Subject: [PATCH 04/17] Rust: Re-model std::env sources using models-as-data. --- rust/ql/lib/codeql/rust/Concepts.qll | 28 +++++++++++++++++ .../rust/frameworks/stdlib/env.model.yml | 14 +++++++++ .../dataflow/sources/InlineFlow.expected | 4 --- .../dataflow/sources/TaintSources.expected | 30 +++++++++---------- .../library-tests/dataflow/sources/test.rs | 4 +-- .../dataflow/taint/TaintFlowStep.expected | 4 +-- 6 files changed, 60 insertions(+), 24 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/frameworks/stdlib/env.model.yml diff --git a/rust/ql/lib/codeql/rust/Concepts.qll b/rust/ql/lib/codeql/rust/Concepts.qll index 51d601070000..4a0334b98bfd 100644 --- a/rust/ql/lib/codeql/rust/Concepts.qll +++ b/rust/ql/lib/codeql/rust/Concepts.qll @@ -7,6 +7,7 @@ private import codeql.rust.dataflow.DataFlow private import codeql.threatmodels.ThreatModels private import codeql.rust.Frameworks +private import codeql.rust.dataflow.FlowSource /** * A data flow source for a specific threat-model. @@ -66,6 +67,15 @@ module CommandLineArgsSource { } } +/** + * An externally modeled source for command line arguments. + */ +class ModeledCommandLineArgsSource extends CommandLineArgsSource::Range { + ModeledCommandLineArgsSource() { + sourceNode(this, "command-line-source") + } +} + /** * A data flow source corresponding to the program's environment. */ @@ -85,6 +95,15 @@ module EnvironmentSource { } } +/** + * An externally modeled source for data from the program's environment. + */ +class ModeledEnvironmentSource extends EnvironmentSource::Range { + ModeledEnvironmentSource() { + sourceNode(this, "environment-source") + } +} + /** * A data flow source for remote (network) data. */ @@ -104,6 +123,15 @@ module RemoteSource { } } +/** + * An externally modeled source for remote (network) data. + */ +class ModeledRemoteSource extends RemoteSource::Range { + ModeledRemoteSource() { + sourceNode(this, "remote-source") + } +} + /** * A data flow node that constructs a SQL statement (for later execution). * diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/env.model.yml b/rust/ql/lib/codeql/rust/frameworks/stdlib/env.model.yml new file mode 100644 index 000000000000..ceb5a88f0c12 --- /dev/null +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/env.model.yml @@ -0,0 +1,14 @@ +extensions: + - addsTo: + pack: codeql/rust-all + extensible: sourceModel + data: + - ["lang:std", "crate::env::args", "ReturnValue", "command-line-source", "manual"] + - ["lang:std", "crate::env::args_os", "ReturnValue", "command-line-source", "manual"] + - ["lang:std", "crate::env::current_dir", "ReturnValue", "command-line-source", "manual"] + - ["lang:std", "crate::env::current_exe", "ReturnValue", "command-line-source", "manual"] + - ["lang:std", "crate::env::home_dir", "ReturnValue", "command-line-source", "manual"] + - ["lang:std", "crate::env::var", "ReturnValue", "environment-source", "manual"] + - ["lang:std", "crate::env::var_os", "ReturnValue", "environment-source", "manual"] + - ["lang:std", "crate::env::vars", "ReturnValue", "environment-source", "manual"] + - ["lang:std", "crate::env::vars_os", "ReturnValue", "environment-source", "manual"] diff --git a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected index 7bfe033a65bc..e69de29bb2d1 100644 --- a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected @@ -1,4 +0,0 @@ -| test.rs:8:34:8:84 | //... | Missing result: hasTaintFlow | -| test.rs:9:37:9:87 | //... | Missing result: hasTaintFlow | -| test.rs:41:20:41:36 | //... | Missing result: hasTaintFlow | -| test.rs:45:20:45:36 | //... | Missing result: hasTaintFlow | diff --git a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected index f92ca7e36ec0..7b1428ceb97f 100644 --- a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected @@ -1,19 +1,17 @@ -#select +| test.rs:8:10:8:22 | ...::var | Flow source 'EnvironmentSource' of type environment. | +| test.rs:9:10:9:25 | ...::var_os | Flow source 'EnvironmentSource' of type environment. | +| test.rs:11:16:11:28 | ...::var | Flow source 'EnvironmentSource' of type environment. | +| test.rs:12:16:12:31 | ...::var_os | Flow source 'EnvironmentSource' of type environment. | +| test.rs:17:25:17:38 | ...::vars | Flow source 'EnvironmentSource' of type environment. | +| test.rs:22:25:22:41 | ...::vars_os | Flow source 'EnvironmentSource' of type environment. | +| test.rs:29:29:29:42 | ...::args | Flow source 'CommandLineArgs' of type commandargs. | +| test.rs:32:16:32:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs. | +| test.rs:33:16:33:32 | ...::args_os | Flow source 'CommandLineArgs' of type commandargs. | +| test.rs:40:16:40:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs. | +| test.rs:44:16:44:32 | ...::args_os | Flow source 'CommandLineArgs' of type commandargs. | +| test.rs:50:15:50:35 | ...::current_dir | Flow source 'CommandLineArgs' of type commandargs. | +| test.rs:51:15:51:35 | ...::current_exe | Flow source 'CommandLineArgs' of type commandargs. | +| test.rs:52:16:52:33 | ...::home_dir | Flow source 'CommandLineArgs' of type commandargs. | | test.rs:60:26:60:70 | ...::get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | | test.rs:63:26:63:70 | ...::get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | | test.rs:66:26:66:60 | ...::get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | -testFailures -| test.rs:8:34:8:84 | //... | Missing result: Alert[rust/summary/taint-sources] | -| test.rs:9:37:9:87 | //... | Missing result: Alert[rust/summary/taint-sources] | -| test.rs:11:62:11:99 | //... | Missing result: Alert[rust/summary/taint-sources] | -| test.rs:12:51:12:88 | //... | Missing result: Alert[rust/summary/taint-sources] | -| test.rs:17:44:17:81 | //... | Missing result: Alert[rust/summary/taint-sources] | -| test.rs:22:47:22:84 | //... | Missing result: Alert[rust/summary/taint-sources] | -| test.rs:29:57:29:94 | //... | Missing result: Alert[rust/summary/taint-sources] | -| test.rs:32:50:32:87 | //... | Missing result: Alert[rust/summary/taint-sources] | -| test.rs:33:53:33:90 | //... | Missing result: Alert[rust/summary/taint-sources] | -| test.rs:40:35:40:72 | //... | Missing result: Alert[rust/summary/taint-sources] | -| test.rs:44:38:44:75 | //... | Missing result: Alert[rust/summary/taint-sources] | -| test.rs:50:57:50:94 | //... | Missing result: Alert[rust/summary/taint-sources] | -| test.rs:51:57:51:94 | //... | Missing result: Alert[rust/summary/taint-sources] | -| test.rs:52:55:52:92 | //... | Missing result: Alert[rust/summary/taint-sources] | diff --git a/rust/ql/test/library-tests/dataflow/sources/test.rs b/rust/ql/test/library-tests/dataflow/sources/test.rs index 7b33a00864e2..de482c251065 100644 --- a/rust/ql/test/library-tests/dataflow/sources/test.rs +++ b/rust/ql/test/library-tests/dataflow/sources/test.rs @@ -5,8 +5,8 @@ fn sink(_: T) { } // --- tests --- fn test_env_vars() { - sink(std::env::var("HOME")); // $ Alert[rust/summary/taint-sources] hasTaintFlow - sink(std::env::var_os("PATH")); // $ Alert[rust/summary/taint-sources] hasTaintFlow + sink(std::env::var("HOME")); // $ Alert[rust/summary/taint-sources] hasTaintFlow="HOME" + sink(std::env::var_os("PATH")); // $ Alert[rust/summary/taint-sources] hasTaintFlow="PATH" let var1 = std::env::var("HOME").expect("HOME not set"); // $ Alert[rust/summary/taint-sources] let var2 = std::env::var_os("PATH").unwrap(); // $ Alert[rust/summary/taint-sources] diff --git a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected index b2b6872a6d25..c8bc30eda6f8 100644 --- a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected @@ -1,5 +1,5 @@ -| file://:0:0:0:0 | [summary param] 0 in lang:alloc::_::crate::fmt::format | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::crate::fmt::format | MaD:14 | -| file://:0:0:0:0 | [summary param] self in lang:alloc::_::::as_str | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::::as_str | MaD:12 | +| file://:0:0:0:0 | [summary param] 0 in lang:alloc::_::crate::fmt::format | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::crate::fmt::format | MaD:23 | +| file://:0:0:0:0 | [summary param] self in lang:alloc::_::::as_str | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::::as_str | MaD:21 | | file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | MaD:0 | | main.rs:4:5:4:8 | 1000 | main.rs:4:5:4:12 | ... + ... | | | main.rs:4:12:4:12 | i | main.rs:4:5:4:12 | ... + ... | | From 1a000c39c923b30f38b65141e9e4e8be065779dd Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 17 Jan 2025 10:26:49 +0000 Subject: [PATCH 05/17] Rust: Remove QL models for reqwest sources. --- rust/ql/lib/codeql/rust/frameworks/Reqwest.qll | 13 ------------- .../dataflow/sources/TaintSources.expected | 8 +++++--- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/Reqwest.qll b/rust/ql/lib/codeql/rust/frameworks/Reqwest.qll index 2d3e04f94b3b..801c36d8028c 100644 --- a/rust/ql/lib/codeql/rust/frameworks/Reqwest.qll +++ b/rust/ql/lib/codeql/rust/frameworks/Reqwest.qll @@ -4,16 +4,3 @@ private import rust private import codeql.rust.Concepts - -/** - * A call to `reqwest::get` or `reqwest::blocking::get`. - */ -private class ReqwestGet extends RemoteSource::Range { - ReqwestGet() { - exists(CallExpr ce | - this.asExpr().getExpr() = ce and - ce.getFunction().(PathExpr).getResolvedCrateOrigin().matches("%reqwest") and - ce.getFunction().(PathExpr).getResolvedPath() = ["crate::get", "crate::blocking::get"] - ) - } -} diff --git a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected index 7b1428ceb97f..da51f4acfade 100644 --- a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected @@ -1,3 +1,4 @@ +#select | test.rs:8:10:8:22 | ...::var | Flow source 'EnvironmentSource' of type environment. | | test.rs:9:10:9:25 | ...::var_os | Flow source 'EnvironmentSource' of type environment. | | test.rs:11:16:11:28 | ...::var | Flow source 'EnvironmentSource' of type environment. | @@ -12,6 +13,7 @@ | test.rs:50:15:50:35 | ...::current_dir | Flow source 'CommandLineArgs' of type commandargs. | | test.rs:51:15:51:35 | ...::current_exe | Flow source 'CommandLineArgs' of type commandargs. | | test.rs:52:16:52:33 | ...::home_dir | Flow source 'CommandLineArgs' of type commandargs. | -| test.rs:60:26:60:70 | ...::get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:63:26:63:70 | ...::get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:66:26:66:60 | ...::get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +testFailures +| test.rs:60:82:60:119 | //... | Missing result: Alert[rust/summary/taint-sources] | +| test.rs:63:98:63:135 | //... | Missing result: Alert[rust/summary/taint-sources] | +| test.rs:66:84:66:121 | //... | Missing result: Alert[rust/summary/taint-sources] | From b8aa518931a9be4526a024577883fd908a2b0203 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 17 Jan 2025 10:40:58 +0000 Subject: [PATCH 06/17] Rust: Re-model reqwest sources using models-as-data. --- rust/ql/lib/codeql/rust/frameworks/reqwest.model.yml | 6 ++++++ .../library-tests/dataflow/sources/TaintSources.expected | 8 +++----- .../library-tests/dataflow/taint/TaintFlowStep.expected | 6 +++--- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/reqwest.model.yml b/rust/ql/lib/codeql/rust/frameworks/reqwest.model.yml index 8b2b9afc79b4..051687fa4e61 100644 --- a/rust/ql/lib/codeql/rust/frameworks/reqwest.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/reqwest.model.yml @@ -1,4 +1,10 @@ extensions: + - addsTo: + pack: codeql/rust-all + extensible: sourceModel + data: + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "crate::get", "ReturnValue", "remote-source", "manual"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "crate::blocking::get", "ReturnValue", "remote-source", "manual"] - addsTo: pack: codeql/rust-all extensible: summaryModel diff --git a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected index da51f4acfade..e127b06cce96 100644 --- a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected @@ -1,4 +1,3 @@ -#select | test.rs:8:10:8:22 | ...::var | Flow source 'EnvironmentSource' of type environment. | | test.rs:9:10:9:25 | ...::var_os | Flow source 'EnvironmentSource' of type environment. | | test.rs:11:16:11:28 | ...::var | Flow source 'EnvironmentSource' of type environment. | @@ -13,7 +12,6 @@ | test.rs:50:15:50:35 | ...::current_dir | Flow source 'CommandLineArgs' of type commandargs. | | test.rs:51:15:51:35 | ...::current_exe | Flow source 'CommandLineArgs' of type commandargs. | | test.rs:52:16:52:33 | ...::home_dir | Flow source 'CommandLineArgs' of type commandargs. | -testFailures -| test.rs:60:82:60:119 | //... | Missing result: Alert[rust/summary/taint-sources] | -| test.rs:63:98:63:135 | //... | Missing result: Alert[rust/summary/taint-sources] | -| test.rs:66:84:66:121 | //... | Missing result: Alert[rust/summary/taint-sources] | +| test.rs:60:26:60:47 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:63:26:63:47 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:66:26:66:37 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected index c8bc30eda6f8..2182c664f4f7 100644 --- a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected @@ -1,6 +1,6 @@ -| file://:0:0:0:0 | [summary param] 0 in lang:alloc::_::crate::fmt::format | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::crate::fmt::format | MaD:23 | -| file://:0:0:0:0 | [summary param] self in lang:alloc::_::::as_str | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::::as_str | MaD:21 | -| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | MaD:0 | +| file://:0:0:0:0 | [summary param] 0 in lang:alloc::_::crate::fmt::format | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::crate::fmt::format | MaD:25 | +| file://:0:0:0:0 | [summary param] self in lang:alloc::_::::as_str | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::::as_str | MaD:23 | +| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | MaD:2 | | main.rs:4:5:4:8 | 1000 | main.rs:4:5:4:12 | ... + ... | | | main.rs:4:12:4:12 | i | main.rs:4:5:4:12 | ... + ... | | | main.rs:8:20:8:20 | s | main.rs:8:14:8:20 | FormatArgsExpr | | From ce982143fba42d8ef39ba8064aa548836c83d06a Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 17 Jan 2025 13:25:29 +0000 Subject: [PATCH 07/17] Rust: Remove the now empty files. --- rust/ql/lib/codeql/rust/Frameworks.qll | 2 -- rust/ql/lib/codeql/rust/frameworks/Reqwest.qll | 6 ------ rust/ql/lib/codeql/rust/frameworks/stdlib/Env.qll | 6 ------ 3 files changed, 14 deletions(-) delete mode 100644 rust/ql/lib/codeql/rust/frameworks/Reqwest.qll delete mode 100644 rust/ql/lib/codeql/rust/frameworks/stdlib/Env.qll diff --git a/rust/ql/lib/codeql/rust/Frameworks.qll b/rust/ql/lib/codeql/rust/Frameworks.qll index 6a5e95c82e56..6d9dcaea5058 100644 --- a/rust/ql/lib/codeql/rust/Frameworks.qll +++ b/rust/ql/lib/codeql/rust/Frameworks.qll @@ -2,7 +2,5 @@ * This file imports all models of frameworks and libraries. */ -private import codeql.rust.frameworks.Reqwest private import codeql.rust.frameworks.rustcrypto.RustCrypto -private import codeql.rust.frameworks.stdlib.Env private import codeql.rust.frameworks.Sqlx diff --git a/rust/ql/lib/codeql/rust/frameworks/Reqwest.qll b/rust/ql/lib/codeql/rust/frameworks/Reqwest.qll deleted file mode 100644 index 801c36d8028c..000000000000 --- a/rust/ql/lib/codeql/rust/frameworks/Reqwest.qll +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Provides modeling for the `reqwest` library. - */ - -private import rust -private import codeql.rust.Concepts diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/Env.qll b/rust/ql/lib/codeql/rust/frameworks/stdlib/Env.qll deleted file mode 100644 index 2d0ccfb6d99b..000000000000 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/Env.qll +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Provides modeling for the `std::env` library. - */ - -private import rust -private import codeql.rust.Concepts From 0ce1a1bef0837506d01555eebdf1eb74946bf312 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 17 Jan 2025 10:20:57 +0000 Subject: [PATCH 08/17] Rust: Make the qldoc for hasher-input MAD sinks a bit clearer. --- .../rust/security/WeakSensitiveDataHashingExtensions.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/security/WeakSensitiveDataHashingExtensions.qll b/rust/ql/lib/codeql/rust/security/WeakSensitiveDataHashingExtensions.qll index 8407ee4467d1..61caa4dd4758 100644 --- a/rust/ql/lib/codeql/rust/security/WeakSensitiveDataHashingExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/WeakSensitiveDataHashingExtensions.qll @@ -174,7 +174,8 @@ module ComputationallyExpensiveHashFunction { } /** - * An externally modeled operation that hashes data, for example a call to `md5::Md5::digest(data)`. + * An externally modeled operation that hashes data, for example a call to `md5::Md5::digest(data)`. The + * model should identify the argument of a call that is the data to be hashed. */ class ModeledHashOperation extends Cryptography::CryptographicOperation::Range { DataFlow::Node input; From d6c5c00ca95d8982e4fc351ab83ec917e27315f9 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 17 Jan 2025 21:16:02 +0000 Subject: [PATCH 09/17] Rust: Autoformat. --- rust/ql/lib/codeql/rust/Concepts.qll | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/rust/ql/lib/codeql/rust/Concepts.qll b/rust/ql/lib/codeql/rust/Concepts.qll index 4a0334b98bfd..9f1924095d7b 100644 --- a/rust/ql/lib/codeql/rust/Concepts.qll +++ b/rust/ql/lib/codeql/rust/Concepts.qll @@ -71,9 +71,7 @@ module CommandLineArgsSource { * An externally modeled source for command line arguments. */ class ModeledCommandLineArgsSource extends CommandLineArgsSource::Range { - ModeledCommandLineArgsSource() { - sourceNode(this, "command-line-source") - } + ModeledCommandLineArgsSource() { sourceNode(this, "command-line-source") } } /** @@ -99,9 +97,7 @@ module EnvironmentSource { * An externally modeled source for data from the program's environment. */ class ModeledEnvironmentSource extends EnvironmentSource::Range { - ModeledEnvironmentSource() { - sourceNode(this, "environment-source") - } + ModeledEnvironmentSource() { sourceNode(this, "environment-source") } } /** @@ -127,9 +123,7 @@ module RemoteSource { * An externally modeled source for remote (network) data. */ class ModeledRemoteSource extends RemoteSource::Range { - ModeledRemoteSource() { - sourceNode(this, "remote-source") - } + ModeledRemoteSource() { sourceNode(this, "remote-source") } } /** From d970fe7768f139f534b75b573d3eac2e55266e0f Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 20 Jan 2025 09:20:44 +0000 Subject: [PATCH 10/17] Rust: remote-source -> remote. --- rust/ql/lib/codeql/rust/Concepts.qll | 2 +- rust/ql/lib/codeql/rust/frameworks/reqwest.model.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/ql/lib/codeql/rust/Concepts.qll b/rust/ql/lib/codeql/rust/Concepts.qll index 9f1924095d7b..136d5f94d73f 100644 --- a/rust/ql/lib/codeql/rust/Concepts.qll +++ b/rust/ql/lib/codeql/rust/Concepts.qll @@ -123,7 +123,7 @@ module RemoteSource { * An externally modeled source for remote (network) data. */ class ModeledRemoteSource extends RemoteSource::Range { - ModeledRemoteSource() { sourceNode(this, "remote-source") } + ModeledRemoteSource() { sourceNode(this, "remote") } } /** diff --git a/rust/ql/lib/codeql/rust/frameworks/reqwest.model.yml b/rust/ql/lib/codeql/rust/frameworks/reqwest.model.yml index 051687fa4e61..6e05730169ed 100644 --- a/rust/ql/lib/codeql/rust/frameworks/reqwest.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/reqwest.model.yml @@ -3,8 +3,8 @@ extensions: pack: codeql/rust-all extensible: sourceModel data: - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "crate::get", "ReturnValue", "remote-source", "manual"] - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "crate::blocking::get", "ReturnValue", "remote-source", "manual"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "crate::get", "ReturnValue", "remote", "manual"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "crate::blocking::get", "ReturnValue", "remote", "manual"] - addsTo: pack: codeql/rust-all extensible: summaryModel From 24b35ed5a4ab2db67206d32698ed6125481ccb0a Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 22 Jan 2025 09:14:31 +0000 Subject: [PATCH 11/17] Rust: Fixup .expected after merge. --- .../library-tests/dataflow/taint/TaintFlowStep.expected | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected index 726f0a09a8b9..21a028e8d41b 100644 --- a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected @@ -1,9 +1,6 @@ -| file://:0:0:0:0 | [summary param] 0 in lang:alloc::_::crate::fmt::format | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::crate::fmt::format | MaD:25 | -| file://:0:0:0:0 | [summary param] self in lang:alloc::_::::as_str | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::::as_str | MaD:23 | -| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | MaD:2 | -| file://:0:0:0:0 | [summary param] 0 in lang:alloc::_::crate::fmt::format | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::crate::fmt::format | MaD:24 | -| file://:0:0:0:0 | [summary param] self in lang:alloc::_::::as_str | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::::as_str | MaD:22 | -| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | MaD:10 | +| file://:0:0:0:0 | [summary param] 0 in lang:alloc::_::crate::fmt::format | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::crate::fmt::format | MaD:35 | +| file://:0:0:0:0 | [summary param] self in lang:alloc::_::::as_str | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::::as_str | MaD:33 | +| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | MaD:12 | | main.rs:4:5:4:8 | 1000 | main.rs:4:5:4:12 | ... + ... | | | main.rs:4:12:4:12 | i | main.rs:4:5:4:12 | ... + ... | | | main.rs:8:20:8:20 | s | main.rs:8:14:8:20 | FormatArgsExpr | | From 68ec4b66e727d5ad49091a03f95340dba0495ee6 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 22 Jan 2025 14:54:24 +0100 Subject: [PATCH 12/17] C++: Fix join-order problem found on `IncorrectCheckScanf.ql` Before on `silentearth/curl2`: ``` Evaluated recursive predicate IRGuards::Cached::unary_compares_eq/5#7aa979d8@e3b01fca in 26109ms on iteration 2 (delta size: 4020). Evaluated relational algebra for predicate IRGuards::Cached::unary_compares_eq/5#7aa979d8@e3b01fca on iteration 2 running pipeline standard with tuple counts: 0 ~0% {5} r1 = JOIN `IRGuards::Cached::unary_compares_eq/5#7aa979d8#prev_delta` WITH `IRGuards::Cached::BuiltinExpectCallValueNumber.getCondition/0#dispred#9b2b5da2_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4 1835651 ~2% {5} r2 = SCAN `IRGuards::Cached::unary_compares_eq/5#7aa979d8#prev_delta` OUTPUT In.4, In.0, In.1, In.2, In.3 1832833 ~0% {5} | JOIN WITH `IRGuards::AbstractValue.getDualValue/0#dispred#bfb2631d` ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 3996 ~0% {5} | JOIN WITH `IRGuards::Cached::LogicalNotValueNumber.getUnary/0#dispred#b2251f1f_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4 1835651 ~7% {5} r3 = SCAN `IRGuards::Cached::unary_compares_eq/5#7aa979d8#prev_delta` OUTPUT In.1, In.0, In.2, In.3, In.4 1835651 ~1% {5} | JOIN WITH `Operand::Operand.getAnyDef/0#dispred#8dbe2fb8` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4 0 ~0% {5} r4 = JOIN r3 WITH project#Instruction::PointerSubInstruction#0d109780 ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4 0 ~0% {6} | JOIN WITH `Instruction::BinaryInstruction.getLeftOperand/0#dispred#c8432d08` ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 0 ~0% {6} | JOIN WITH `Instruction::BinaryInstruction.getRight/0#dispred#1f78e436` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 0 ~0% {7} | JOIN WITH `IRGuards::Cached::int_value/1#f9d7a458` ON FIRST 1 OUTPUT Lhs.1, Lhs.5, _, Lhs.3, Lhs.4, Lhs.2, Rhs.1 0 ~0% {5} | REWRITE WITH Out.2 := (In.5 + In.6) KEEPING 5 23 ~76% {5} r5 = JOIN r3 WITH Instruction::SubInstruction#fc619901 ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4 22 ~56% {6} | JOIN WITH `Instruction::BinaryInstruction.getLeftOperand/0#dispred#c8432d08` ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 22 ~56% {6} | JOIN WITH `Instruction::BinaryInstruction.getRight/0#dispred#1f78e436` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 0 ~0% {7} | JOIN WITH `IRGuards::Cached::int_value/1#f9d7a458` ON FIRST 1 OUTPUT Lhs.1, Lhs.5, _, Lhs.3, Lhs.4, Lhs.2, Rhs.1 0 ~0% {5} | REWRITE WITH Out.2 := (In.5 + In.6) KEEPING 5 0 ~0% {5} r6 = JOIN r3 WITH project#Instruction::PointerAddInstruction#5233892c ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4 0 ~0% {6} r7 = JOIN r6 WITH `Instruction::BinaryInstruction.getLeftOperand/0#dispred#c8432d08` ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 0 ~0% {6} | JOIN WITH `Instruction::BinaryInstruction.getRight/0#dispred#1f78e436` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 0 ~0% {7} | JOIN WITH `IRGuards::Cached::int_value/1#f9d7a458` ON FIRST 1 OUTPUT Lhs.1, Lhs.5, _, Lhs.3, Lhs.4, Lhs.2, Rhs.1 0 ~0% {5} | REWRITE WITH Out.2 := (In.5 - In.6) KEEPING 5 0 ~0% {6} r8 = JOIN r6 WITH `Instruction::BinaryInstruction.getRightOperand/0#dispred#9ca710da` ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 0 ~0% {6} | JOIN WITH `Instruction::BinaryInstruction.getLeft/0#dispred#5cf78406` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 0 ~0% {7} | JOIN WITH `IRGuards::Cached::int_value/1#f9d7a458` ON FIRST 1 OUTPUT Lhs.1, Lhs.5, _, Lhs.3, Lhs.4, Lhs.2, Rhs.1 0 ~0% {5} | REWRITE WITH Out.2 := (In.5 - In.6) KEEPING 5 12 ~49% {5} r9 = JOIN r3 WITH Instruction::AddInstruction#7f8fb455 ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4 12 ~49% {6} r10 = JOIN r9 WITH `Instruction::BinaryInstruction.getLeftOperand/0#dispred#c8432d08` ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 12 ~71% {6} | JOIN WITH `Instruction::BinaryInstruction.getRight/0#dispred#1f78e436` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 0 ~0% {7} | JOIN WITH `IRGuards::Cached::int_value/1#f9d7a458` ON FIRST 1 OUTPUT Lhs.1, Lhs.5, _, Lhs.3, Lhs.4, Lhs.2, Rhs.1 0 ~0% {5} | REWRITE WITH Out.2 := (In.5 - In.6) KEEPING 5 12 ~49% {6} r11 = JOIN r9 WITH `Instruction::BinaryInstruction.getRightOperand/0#dispred#9ca710da` ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 12 ~49% {6} | JOIN WITH `Instruction::BinaryInstruction.getLeft/0#dispred#5cf78406` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 0 ~0% {7} | JOIN WITH `IRGuards::Cached::int_value/1#f9d7a458` ON FIRST 1 OUTPUT Lhs.1, Lhs.5, _, Lhs.3, Lhs.4, Lhs.2, Rhs.1 0 ~0% {5} | REWRITE WITH Out.2 := (In.5 - In.6) KEEPING 5 0 ~0% {5} r12 = JOIN r1 WITH `IRGuards::Cached::BuiltinExpectCallValueNumber.getAUse/0#dispred#23233591` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4 0 ~0% {6} | JOIN WITH `IRGuards::Cached::CompareValueNumber.hasOperands/2#dispred#7aa36763_102#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.2 0 ~0% {6} r13 = JOIN r12 WITH project#IRGuards::Cached::CompareNEValueNumber#1aeec1bd ON FIRST 1 OUTPUT Lhs.5, Lhs.1, Lhs.2, Lhs.3, Lhs.0, Lhs.4 0 ~0% {6} r14 = JOIN r12 WITH project#IRGuards::Cached::CompareEQValueNumber#994b6833 ON FIRST 1 OUTPUT Lhs.4, Lhs.1, Lhs.2, Lhs.3, Lhs.0, Lhs.5 0 ~0% {6} | JOIN WITH `IRGuards::AbstractValue.getDualValue/0#dispred#bfb2631d_10#join_rhs` ON FIRST 1 OUTPUT Lhs.5, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 0 ~0% {6} r15 = r13 UNION r14 0 ~0% {7} | JOIN WITH `Operand::Operand.getAnyDef/0#dispred#8dbe2fb8` ON FIRST 1 OUTPUT Rhs.1, _, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 0 ~0% {7} | REWRITE WITH Out.1 := 0 0 ~0% {5} | JOIN WITH `IRGuards::Cached::int_value/1#f9d7a458` ON FIRST 2 OUTPUT Lhs.5, Lhs.2, Lhs.3, Lhs.4, Lhs.6 1901910478 ~1% {5} r16 = JOIN `IRGuards::Cached::unary_compares_eq/5#7aa979d8#prev_delta` WITH `ValueNumberingInternal::tvalueNumber/1#f03b58f9_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4 1902015678 ~4% {5} | JOIN WITH `Operand::Operand.getDef/0#dispred#a70e8079_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4 1902015678 ~3% {6} | JOIN WITH `Operand::Operand.getDef/0#dispred#a70e8079` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.0 1901976207 ~4% {5} | JOIN WITH `IRGuards::Cached::isConvertedBool/1#9a130da2` ON FIRST 1 OUTPUT Lhs.5, Lhs.1, Lhs.2, Lhs.3, Lhs.4 74 ~10% {6} | JOIN WITH `IRGuards::Cached::CompareValueNumber.hasOperands/2#dispred#7aa36763_102#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.2 54 ~10% {6} r17 = JOIN r16 WITH project#IRGuards::Cached::CompareNEValueNumber#1aeec1bd ON FIRST 1 OUTPUT Lhs.5, Lhs.1, Lhs.2, Lhs.3, Lhs.0, Lhs.4 20 ~0% {6} r18 = JOIN r16 WITH project#IRGuards::Cached::CompareEQValueNumber#994b6833 ON FIRST 1 OUTPUT Lhs.4, Lhs.1, Lhs.2, Lhs.3, Lhs.0, Lhs.5 20 ~0% {6} | JOIN WITH `IRGuards::AbstractValue.getDualValue/0#dispred#bfb2631d` ON FIRST 1 OUTPUT Lhs.5, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 74 ~5% {6} r19 = r17 UNION r18 74 ~5% {7} | JOIN WITH `Operand::Operand.getDef/0#dispred#a70e8079` ON FIRST 1 OUTPUT Rhs.1, _, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 74 ~4% {7} | REWRITE WITH Out.1 := 0 66 ~0% {5} | JOIN WITH `IRGuards::Cached::int_value/1#f9d7a458` ON FIRST 2 OUTPUT Lhs.5, Lhs.2, Lhs.3, Lhs.4, Lhs.6 4062 ~0% {5} r20 = r1 UNION r2 UNION r4 UNION r5 UNION r7 UNION r8 UNION r10 UNION r11 UNION r15 UNION r19 4020 ~0% {5} | AND NOT `IRGuards::Cached::unary_compares_eq/5#7aa979d8#prev`(FIRST 5) return r20 ``` After: ``` [2025-01-22 14:50:44] Evaluated non-recursive predicate _IRGuards::Cached::CompareValueNumber.hasOperands/2#dispred#7aa36763_102#join_rhs_IRGuards::Cached::__#join_rhs@25668753 in 36ms (size: 47). Evaluated relational algebra for predicate _IRGuards::Cached::CompareValueNumber.hasOperands/2#dispred#7aa36763_102#join_rhs_IRGuards::Cached::__#join_rhs@25668753 with tuple counts: 285951 ~0% {4} r1 = JOIN `IRGuards::Cached::CompareValueNumber.hasOperands/2#dispred#7aa36763_102#join_rhs` WITH `Operand::Operand.getDef/0#dispred#a70e8079` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0, Lhs.2 47 ~2% {3} | JOIN WITH `IRGuards::Cached::isConvertedBool/1#9a130da2` ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Lhs.3 47 ~0% {3} | JOIN WITH `Operand::Operand.getDef/0#dispred#a70e8079` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2 47 ~0% {3} | JOIN WITH `ValueNumberingInternal::tvalueNumber/1#f03b58f9` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2 return r1 Evaluated recursive predicate IRGuards::Cached::unary_compares_eq/5#7aa979d8@a808bbfb in 63ms on iteration 2 (delta size: 4020). Evaluated relational algebra for predicate IRGuards::Cached::unary_compares_eq/5#7aa979d8@a808bbfb on iteration 2 running pipeline standard with tuple counts: 0 ~0% {5} r1 = JOIN `IRGuards::Cached::unary_compares_eq/5#7aa979d8#prev_delta` WITH `IRGuards::Cached::BuiltinExpectCallValueNumber.getCondition/0#dispred#9b2b5da2_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4 1881864 ~10% {5} r2 = SCAN `IRGuards::Cached::unary_compares_eq/5#7aa979d8#prev_delta` OUTPUT In.4, In.0, In.1, In.2, In.3 1879046 ~4% {5} | JOIN WITH `IRGuards::AbstractValue.getDualValue/0#dispred#bfb2631d` ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 3986 ~0% {5} | JOIN WITH `IRGuards::Cached::LogicalNotValueNumber.getUnary/0#dispred#b2251f1f_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4 1881864 ~11% {5} r3 = SCAN `IRGuards::Cached::unary_compares_eq/5#7aa979d8#prev_delta` OUTPUT In.1, In.0, In.2, In.3, In.4 1881864 ~2% {5} | JOIN WITH `Operand::Operand.getAnyDef/0#dispred#8dbe2fb8` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4 0 ~0% {5} r4 = JOIN r3 WITH project#Instruction::PointerSubInstruction#0d109780 ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4 0 ~0% {6} | JOIN WITH `Instruction::BinaryInstruction.getLeftOperand/0#dispred#c8432d08` ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 0 ~0% {6} | JOIN WITH `Instruction::BinaryInstruction.getRight/0#dispred#1f78e436` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 0 ~0% {7} | JOIN WITH `IRGuards::Cached::int_value/1#f9d7a458` ON FIRST 1 OUTPUT Lhs.1, Lhs.5, _, Lhs.3, Lhs.4, Lhs.2, Rhs.1 0 ~0% {5} | REWRITE WITH Out.2 := (In.5 + In.6) KEEPING 5 16 ~14% {5} r5 = JOIN r3 WITH Instruction::SubInstruction#fc619901 ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4 16 ~14% {6} | JOIN WITH `Instruction::BinaryInstruction.getLeftOperand/0#dispred#c8432d08` ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 16 ~14% {6} | JOIN WITH `Instruction::BinaryInstruction.getRight/0#dispred#1f78e436` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 0 ~0% {7} | JOIN WITH `IRGuards::Cached::int_value/1#f9d7a458` ON FIRST 1 OUTPUT Lhs.1, Lhs.5, _, Lhs.3, Lhs.4, Lhs.2, Rhs.1 0 ~0% {5} | REWRITE WITH Out.2 := (In.5 + In.6) KEEPING 5 0 ~0% {5} r6 = JOIN r3 WITH project#Instruction::PointerAddInstruction#5233892c ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4 0 ~0% {6} r7 = JOIN r6 WITH `Instruction::BinaryInstruction.getLeftOperand/0#dispred#c8432d08` ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 0 ~0% {6} | JOIN WITH `Instruction::BinaryInstruction.getRight/0#dispred#1f78e436` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 0 ~0% {7} | JOIN WITH `IRGuards::Cached::int_value/1#f9d7a458` ON FIRST 1 OUTPUT Lhs.1, Lhs.5, _, Lhs.3, Lhs.4, Lhs.2, Rhs.1 0 ~0% {5} | REWRITE WITH Out.2 := (In.5 - In.6) KEEPING 5 0 ~0% {6} r8 = JOIN r6 WITH `Instruction::BinaryInstruction.getRightOperand/0#dispred#9ca710da` ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 0 ~0% {6} | JOIN WITH `Instruction::BinaryInstruction.getLeft/0#dispred#5cf78406` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 0 ~0% {7} | JOIN WITH `IRGuards::Cached::int_value/1#f9d7a458` ON FIRST 1 OUTPUT Lhs.1, Lhs.5, _, Lhs.3, Lhs.4, Lhs.2, Rhs.1 0 ~0% {5} | REWRITE WITH Out.2 := (In.5 - In.6) KEEPING 5 8 ~0% {5} r9 = JOIN r3 WITH Instruction::AddInstruction#7f8fb455 ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4 8 ~0% {6} r10 = JOIN r9 WITH `Instruction::BinaryInstruction.getLeftOperand/0#dispred#c8432d08` ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 8 ~0% {6} | JOIN WITH `Instruction::BinaryInstruction.getRight/0#dispred#1f78e436` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 0 ~0% {7} | JOIN WITH `IRGuards::Cached::int_value/1#f9d7a458` ON FIRST 1 OUTPUT Lhs.1, Lhs.5, _, Lhs.3, Lhs.4, Lhs.2, Rhs.1 0 ~0% {5} | REWRITE WITH Out.2 := (In.5 - In.6) KEEPING 5 8 ~0% {6} r11 = JOIN r9 WITH `Instruction::BinaryInstruction.getRightOperand/0#dispred#9ca710da` ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 8 ~0% {6} | JOIN WITH `Instruction::BinaryInstruction.getLeft/0#dispred#5cf78406` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 0 ~0% {7} | JOIN WITH `IRGuards::Cached::int_value/1#f9d7a458` ON FIRST 1 OUTPUT Lhs.1, Lhs.5, _, Lhs.3, Lhs.4, Lhs.2, Rhs.1 0 ~0% {5} | REWRITE WITH Out.2 := (In.5 - In.6) KEEPING 5 70 ~6% {6} r12 = JOIN `IRGuards::Cached::unary_compares_eq/5#7aa979d8#prev_delta` WITH `_IRGuards::Cached::CompareValueNumber.hasOperands/2#dispred#7aa36763_102#join_rhs_IRGuards::Cached::__#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Rhs.2, Lhs.1, Lhs.2, Lhs.3, Lhs.4 50 ~2% {6} r13 = JOIN r12 WITH project#IRGuards::Cached::CompareNEValueNumber#1aeec1bd ON FIRST 1 OUTPUT Lhs.1, Lhs.0, Lhs.2, Lhs.3, Lhs.4, Lhs.5 20 ~0% {6} r14 = JOIN r12 WITH project#IRGuards::Cached::CompareEQValueNumber#994b6833 ON FIRST 1 OUTPUT Lhs.5, Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4 20 ~0% {6} | JOIN WITH `IRGuards::AbstractValue.getDualValue/0#dispred#bfb2631d` ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Lhs.3, Lhs.4, Lhs.5, Rhs.1 70 ~0% {6} r15 = r13 UNION r14 70 ~1% {7} | JOIN WITH `Operand::Operand.getDef/0#dispred#a70e8079` ON FIRST 1 OUTPUT Rhs.1, _, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 70 ~0% {7} | REWRITE WITH Out.1 := 0 66 ~2% {5} | JOIN WITH `IRGuards::Cached::int_value/1#f9d7a458` ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.6 0 ~0% {5} r16 = JOIN r1 WITH `IRGuards::Cached::BuiltinExpectCallValueNumber.getAUse/0#dispred#23233591` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4 0 ~0% {6} | JOIN WITH `IRGuards::Cached::CompareValueNumber.hasOperands/2#dispred#7aa36763_102#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.2 0 ~0% {6} r17 = JOIN r16 WITH project#IRGuards::Cached::CompareNEValueNumber#1aeec1bd ON FIRST 1 OUTPUT Lhs.5, Lhs.1, Lhs.2, Lhs.3, Lhs.0, Lhs.4 0 ~0% {6} r18 = JOIN r16 WITH project#IRGuards::Cached::CompareEQValueNumber#994b6833 ON FIRST 1 OUTPUT Lhs.4, Lhs.1, Lhs.2, Lhs.3, Lhs.0, Lhs.5 0 ~0% {6} | JOIN WITH `IRGuards::AbstractValue.getDualValue/0#dispred#bfb2631d_10#join_rhs` ON FIRST 1 OUTPUT Lhs.5, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1 0 ~0% {6} r19 = r17 UNION r18 0 ~0% {7} | JOIN WITH `Operand::Operand.getAnyDef/0#dispred#8dbe2fb8` ON FIRST 1 OUTPUT Rhs.1, _, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 0 ~0% {7} | REWRITE WITH Out.1 := 0 0 ~0% {5} | JOIN WITH `IRGuards::Cached::int_value/1#f9d7a458` ON FIRST 2 OUTPUT Lhs.5, Lhs.2, Lhs.3, Lhs.4, Lhs.6 4052 ~1% {5} r20 = r1 UNION r2 UNION r4 UNION r5 UNION r7 UNION r8 UNION r10 UNION r11 UNION r15 UNION r19 4020 ~1% {5} | AND NOT `IRGuards::Cached::unary_compares_eq/5#7aa979d8#prev`(FIRST 5) return r20 ``` --- cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index 76a1299cb536..5fdf616ed054 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -981,7 +981,8 @@ private module Cached { or exists(CompareValueNumber cmp, Operand left, Operand right, AbstractValue v | test = cmp and - cmp.hasOperands(left, right) and + pragma[only_bind_into](cmp) + .hasOperands(pragma[only_bind_into](left), pragma[only_bind_into](right)) and isConvertedBool(left.getDef()) and int_value(right.getDef()) = 0 and unary_compares_eq(valueNumberOfOperand(left), op, k, areEqual, v) From bd2e8195c2142777bcf303714454c0f25270e1b9 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 22 Jan 2025 14:56:56 +0100 Subject: [PATCH 13/17] Rust: Apply suggestions from code review Co-authored-by: Simon Friis Vindum --- rust/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rust/README.md b/rust/README.md index bab00ae867dd..8be853bd5f2c 100644 --- a/rust/README.md +++ b/rust/README.md @@ -48,17 +48,17 @@ TODO ### Code Generation -If you do changes to either -* `ast-generator`, or +If you make changes to either +* `ast-generator/`, or * `schema/*.py` you'll need to regenerate code. You can do so running -```bash +```sh bazel run @codeql//rust/codegen ``` Sometimes, especially if resolving conflicts on generated files, you might need to run -```bash +```sh bazel run @codeql//rust/codegen -- --force ``` for code generation to succeed. From 5c31edd6cb3085436e611b0563e9200afc5477ed Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 23 Jan 2025 08:31:21 +0100 Subject: [PATCH 14/17] Swift: drop indisciminate printing of the env --- swift/extractor/main.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/swift/extractor/main.cpp b/swift/extractor/main.cpp index 0883b0717fc3..24c295e50f29 100644 --- a/swift/extractor/main.cpp +++ b/swift/extractor/main.cpp @@ -208,8 +208,11 @@ static auto argDump(int argc, char** argv) { static auto envDump(char** envp) { std::string ret; for (auto env = envp; *env; ++env) { - ret += *env; - ret += '\n'; + if (std::string_view envVar{*env}; + envVar.starts_with("CODEQL_") || envVar.starts_with("SEMMLE_")) { + ret += *env; + ret += '\n'; + } } return ret; } @@ -229,7 +232,7 @@ int main(int argc, char** argv, char** envp) { const auto configuration = configure(argc, argv); LOG_INFO("calling extractor with arguments \"{}\"", argDump(argc, argv)); - LOG_DEBUG("environment:\n{}\n", envDump(envp)); + LOG_DEBUG("CodeQL environment:\n{}\n", envDump(envp)); auto openInterception = codeql::setupFileInterception(configuration); From 0430a9ee3ff8bd7b45e16edc173e969c94eae7b7 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 22 Jan 2025 15:33:54 +0100 Subject: [PATCH 15/17] C#: Add test for implicit index usage. --- csharp/ql/test/library-tests/index/Index.cs | 24 +++++++++++++++++++ .../test/library-tests/index/Index.expected | 2 ++ csharp/ql/test/library-tests/index/Index.ql | 4 ++++ 3 files changed, 30 insertions(+) create mode 100644 csharp/ql/test/library-tests/index/Index.cs create mode 100644 csharp/ql/test/library-tests/index/Index.expected create mode 100644 csharp/ql/test/library-tests/index/Index.ql diff --git a/csharp/ql/test/library-tests/index/Index.cs b/csharp/ql/test/library-tests/index/Index.cs new file mode 100644 index 000000000000..a47d1fe54107 --- /dev/null +++ b/csharp/ql/test/library-tests/index/Index.cs @@ -0,0 +1,24 @@ +using System; + +public class Container +{ + public object[] Buffer { get; } = new object[10]; +} + +public class TestIndex +{ + public void M() + { + var c = new Container() + { + Buffer = + { + [0] = new object(), + [1] = new object(), + [^1] = new object() + } + }; + c.Buffer[4] = new object(); + c.Buffer[^3] = new object(); + } +} diff --git a/csharp/ql/test/library-tests/index/Index.expected b/csharp/ql/test/library-tests/index/Index.expected new file mode 100644 index 000000000000..347afd825689 --- /dev/null +++ b/csharp/ql/test/library-tests/index/Index.expected @@ -0,0 +1,2 @@ +| Index.cs:18:18:18:19 | ^... | Index.cs:18:19:18:19 | 1 | +| Index.cs:22:18:22:19 | ^... | Index.cs:22:19:22:19 | 3 | diff --git a/csharp/ql/test/library-tests/index/Index.ql b/csharp/ql/test/library-tests/index/Index.ql new file mode 100644 index 000000000000..03d7887c3625 --- /dev/null +++ b/csharp/ql/test/library-tests/index/Index.ql @@ -0,0 +1,4 @@ +import csharp + +from IndexExpr e +select e, e.getExpr() From c38ad4acff740453bec5e9664709ef65a3f0f1fa Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 23 Jan 2025 11:18:24 +0100 Subject: [PATCH 16/17] C#: Add data flow tests for implicit index usage. --- .../dataflow/collections/CollectionFlow.cs | 23 + .../collections/CollectionFlow.expected | 1528 +++++++++-------- 2 files changed, 820 insertions(+), 731 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.cs b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.cs index 7de875f241c6..c0a7900461fe 100644 --- a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.cs +++ b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.cs @@ -13,6 +13,8 @@ public static void Sink(T t) { } public static void SinkElem(T[] ts) => Sink(ts[0]); + public static void SinkLastElem(T[] ts) => Sink(ts[^1]); + public static void SinkListElem(IList list) => Sink(list[0]); public static void SinkDictValue(IDictionary dict) => Sink(dict[0]); @@ -21,6 +23,8 @@ public static void Sink(T t) { } public static T First(T[] ts) => ts[0]; + public static T Last(T[] ts) => ts[^1]; + public static T ListFirst(IList list) => list[0]; public static T DictIndexZero(IDictionary dict) => dict[0]; @@ -73,6 +77,15 @@ public void ArrayInitializerCSharp6NoFlow(A other) Sink(First(c.As)); // no flow } + public void ArrayInitializerImplicitIndexFlow() + { + var a = new A(); + var c = new CollectionFlow() { As = { [^1] = a } }; + Sink(c.As[^1]); // flow + SinkLastElem(c.As); // flow + Sink(Last(c.As)); // flow + } + public void ArrayAssignmentFlow() { var a = new A(); @@ -93,6 +106,16 @@ public void ArrayAssignmentNoFlow(A other) Sink(First(@as)); // no flow } + public void ArrayAssignmentImplicitIndexFlow() + { + var a = new A(); + var @as = new A[1]; + @as[^1] = a; + Sink(@as[^1]); // flow + SinkLastElem(@as); // flow + Sink(Last(@as)); // flow + } + public void ListAssignmentFlow() { var a = new A(); diff --git a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected index fd8daca17d70..373e8938b91a 100644 --- a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected @@ -30,745 +30,811 @@ edges | CollectionFlow.cs:14:40:14:41 | ts : null [element] : A | CollectionFlow.cs:14:52:14:53 | access to parameter ts : null [element] : A | provenance | | | CollectionFlow.cs:14:52:14:53 | access to parameter ts : A[] [element] : A | CollectionFlow.cs:14:52:14:56 | access to array element | provenance | | | CollectionFlow.cs:14:52:14:53 | access to parameter ts : null [element] : A | CollectionFlow.cs:14:52:14:56 | access to array element | provenance | | -| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | provenance | | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | MaD:11 | -| CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:75:18:78 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:18:75:18:78 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:75:18:81 | access to indexer | provenance | MaD:6 | -| CollectionFlow.cs:20:59:20:62 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:73:20:76 | access to parameter dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:20:73:20:76 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:73:20:81 | access to property Keys : ICollection [element] : A | provenance | MaD:1 | -| CollectionFlow.cs:20:73:20:76 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:73:20:81 | access to property Keys : ICollection [element] : A | provenance | MaD:7 | -| CollectionFlow.cs:20:73:20:81 | access to property Keys : ICollection [element] : A | CollectionFlow.cs:20:73:20:89 | call to method First | provenance | MaD:17 | -| CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | CollectionFlow.cs:22:41:22:42 | access to parameter ts : A[] [element] : A | provenance | | -| CollectionFlow.cs:22:34:22:35 | ts : null [element] : A | CollectionFlow.cs:22:41:22:42 | access to parameter ts : null [element] : A | provenance | | -| CollectionFlow.cs:22:41:22:42 | access to parameter ts : A[] [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | provenance | | -| CollectionFlow.cs:22:41:22:42 | access to parameter ts : null [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | provenance | | -| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | provenance | | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | MaD:11 | -| CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:73 | access to indexer : A | provenance | MaD:6 | -| CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:68:28:71 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:28:68:28:71 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:68:28:79 | call to method First> : KeyValuePair [property Value] : A | provenance | MaD:17 | -| CollectionFlow.cs:28:68:28:79 | call to method First> : KeyValuePair [property Value] : A | CollectionFlow.cs:28:68:28:85 | access to property Value : A | provenance | | -| CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | provenance | MaD:2 | -| CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | provenance | MaD:8 | -| CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | CollectionFlow.cs:30:69:30:87 | call to method First : A | provenance | MaD:17 | -| CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | provenance | MaD:1 | -| CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | provenance | MaD:7 | -| CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | CollectionFlow.cs:32:67:32:83 | call to method First : A | provenance | MaD:17 | -| CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:77 | call to method First> : KeyValuePair [property Key] : A | provenance | MaD:17 | -| CollectionFlow.cs:34:66:34:77 | call to method First> : KeyValuePair [property Key] : A | CollectionFlow.cs:34:66:34:81 | access to property Key : A | provenance | | -| CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | CollectionFlow.cs:36:63:36:66 | access to parameter args : A[] [element] : A | provenance | | -| CollectionFlow.cs:36:49:36:52 | args : null [element] : A | CollectionFlow.cs:36:63:36:66 | access to parameter args : null [element] : A | provenance | | -| CollectionFlow.cs:36:63:36:66 | access to parameter args : A[] [element] : A | CollectionFlow.cs:36:63:36:69 | access to array element | provenance | | -| CollectionFlow.cs:36:63:36:66 | access to parameter args : null [element] : A | CollectionFlow.cs:36:63:36:69 | access to array element | provenance | | -| CollectionFlow.cs:38:70:38:73 | args : IEnumerable [element] : A | CollectionFlow.cs:38:84:38:87 | access to parameter args : IEnumerable [element] : A | provenance | | -| CollectionFlow.cs:38:84:38:87 | access to parameter args : IEnumerable [element] : A | CollectionFlow.cs:38:84:38:95 | call to method First | provenance | MaD:17 | -| CollectionFlow.cs:42:13:42:13 | access to local variable a : A | CollectionFlow.cs:43:27:43:27 | access to local variable a : A | provenance | | -| CollectionFlow.cs:42:17:42:23 | object creation of type A : A | CollectionFlow.cs:42:13:42:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:43:13:43:15 | access to local variable as : null [element] : A | CollectionFlow.cs:44:14:44:16 | access to local variable as : null [element] : A | provenance | | -| CollectionFlow.cs:43:13:43:15 | access to local variable as : null [element] : A | CollectionFlow.cs:45:18:45:20 | access to local variable as : null [element] : A | provenance | | -| CollectionFlow.cs:43:13:43:15 | access to local variable as : null [element] : A | CollectionFlow.cs:46:20:46:22 | access to local variable as : null [element] : A | provenance | | -| CollectionFlow.cs:43:25:43:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:43:13:43:15 | access to local variable as : null [element] : A | provenance | | -| CollectionFlow.cs:43:27:43:27 | access to local variable a : A | CollectionFlow.cs:43:25:43:29 | { ..., ... } : null [element] : A | provenance | | -| CollectionFlow.cs:44:14:44:16 | access to local variable as : null [element] : A | CollectionFlow.cs:44:14:44:19 | access to array element | provenance | | -| CollectionFlow.cs:45:18:45:20 | access to local variable as : null [element] : A | CollectionFlow.cs:14:40:14:41 | ts : null [element] : A | provenance | | -| CollectionFlow.cs:46:20:46:22 | access to local variable as : null [element] : A | CollectionFlow.cs:22:34:22:35 | ts : null [element] : A | provenance | | -| CollectionFlow.cs:46:20:46:22 | access to local variable as : null [element] : A | CollectionFlow.cs:46:14:46:23 | call to method First | provenance | | -| CollectionFlow.cs:60:13:60:13 | access to local variable a : A | CollectionFlow.cs:61:53:61:53 | access to local variable a : A | provenance | | -| CollectionFlow.cs:60:17:60:23 | object creation of type A : A | CollectionFlow.cs:60:13:60:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:61:13:61:13 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:62:14:62:14 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | -| CollectionFlow.cs:61:13:61:13 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:63:18:63:18 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | -| CollectionFlow.cs:61:13:61:13 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:64:20:64:20 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | -| CollectionFlow.cs:61:38:61:57 | { ..., ... } : CollectionFlow [field As, element] : A | CollectionFlow.cs:61:13:61:13 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | -| CollectionFlow.cs:61:45:61:55 | { ..., ... } : A[] [element] : A | CollectionFlow.cs:61:38:61:57 | { ..., ... } : CollectionFlow [field As, element] : A | provenance | | -| CollectionFlow.cs:61:53:61:53 | access to local variable a : A | CollectionFlow.cs:61:45:61:55 | { ..., ... } : A[] [element] : A | provenance | | -| CollectionFlow.cs:62:14:62:14 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:62:14:62:17 | access to field As : A[] [element] : A | provenance | | -| CollectionFlow.cs:62:14:62:17 | access to field As : A[] [element] : A | CollectionFlow.cs:62:14:62:20 | access to array element | provenance | | -| CollectionFlow.cs:63:18:63:18 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:63:18:63:21 | access to field As : A[] [element] : A | provenance | | -| CollectionFlow.cs:63:18:63:21 | access to field As : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | provenance | | -| CollectionFlow.cs:64:20:64:20 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:64:20:64:23 | access to field As : A[] [element] : A | provenance | | -| CollectionFlow.cs:64:20:64:23 | access to field As : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | provenance | | -| CollectionFlow.cs:64:20:64:23 | access to field As : A[] [element] : A | CollectionFlow.cs:64:14:64:24 | call to method First | provenance | | -| CollectionFlow.cs:78:13:78:13 | access to local variable a : A | CollectionFlow.cs:80:18:80:18 | access to local variable a : A | provenance | | -| CollectionFlow.cs:78:17:78:23 | object creation of type A : A | CollectionFlow.cs:78:13:78:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:80:9:80:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:81:14:81:16 | access to local variable as : A[] [element] : A | provenance | | -| CollectionFlow.cs:80:9:80:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:82:18:82:20 | access to local variable as : A[] [element] : A | provenance | | -| CollectionFlow.cs:80:9:80:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:83:20:83:22 | access to local variable as : A[] [element] : A | provenance | | -| CollectionFlow.cs:80:18:80:18 | access to local variable a : A | CollectionFlow.cs:80:9:80:11 | [post] access to local variable as : A[] [element] : A | provenance | | -| CollectionFlow.cs:81:14:81:16 | access to local variable as : A[] [element] : A | CollectionFlow.cs:81:14:81:19 | access to array element | provenance | | -| CollectionFlow.cs:82:18:82:20 | access to local variable as : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | provenance | | -| CollectionFlow.cs:83:20:83:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | provenance | | -| CollectionFlow.cs:83:20:83:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:83:14:83:23 | call to method First | provenance | | -| CollectionFlow.cs:98:13:98:13 | access to local variable a : A | CollectionFlow.cs:100:19:100:19 | access to local variable a : A | provenance | | -| CollectionFlow.cs:98:17:98:23 | object creation of type A : A | CollectionFlow.cs:98:13:98:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:100:9:100:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:101:14:101:17 | access to local variable list : List [element] : A | provenance | | -| CollectionFlow.cs:100:9:100:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:102:22:102:25 | access to local variable list : List [element] : A | provenance | | -| CollectionFlow.cs:100:9:100:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:103:24:103:27 | access to local variable list : List [element] : A | provenance | | -| CollectionFlow.cs:100:19:100:19 | access to local variable a : A | CollectionFlow.cs:100:9:100:12 | [post] access to local variable list : List [element] : A | provenance | MaD:12 | -| CollectionFlow.cs:101:14:101:17 | access to local variable list : List [element] : A | CollectionFlow.cs:101:14:101:20 | access to indexer | provenance | MaD:11 | -| CollectionFlow.cs:102:22:102:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | provenance | | -| CollectionFlow.cs:103:24:103:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | provenance | | -| CollectionFlow.cs:103:24:103:27 | access to local variable list : List [element] : A | CollectionFlow.cs:103:14:103:28 | call to method ListFirst | provenance | MaD:11 | -| CollectionFlow.cs:117:13:117:13 | access to local variable a : A | CollectionFlow.cs:118:36:118:36 | access to local variable a : A | provenance | | -| CollectionFlow.cs:117:17:117:23 | object creation of type A : A | CollectionFlow.cs:117:13:117:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:118:13:118:16 | access to local variable list : List [element] : A | CollectionFlow.cs:119:14:119:17 | access to local variable list : List [element] : A | provenance | | -| CollectionFlow.cs:118:13:118:16 | access to local variable list : List [element] : A | CollectionFlow.cs:120:22:120:25 | access to local variable list : List [element] : A | provenance | | -| CollectionFlow.cs:118:13:118:16 | access to local variable list : List [element] : A | CollectionFlow.cs:121:24:121:27 | access to local variable list : List [element] : A | provenance | | -| CollectionFlow.cs:118:20:118:38 | object creation of type List : List [element] : A | CollectionFlow.cs:118:13:118:16 | access to local variable list : List [element] : A | provenance | | -| CollectionFlow.cs:118:36:118:36 | access to local variable a : A | CollectionFlow.cs:118:20:118:38 | object creation of type List : List [element] : A | provenance | MaD:3 | -| CollectionFlow.cs:119:14:119:17 | access to local variable list : List [element] : A | CollectionFlow.cs:119:14:119:20 | access to indexer | provenance | MaD:11 | -| CollectionFlow.cs:120:22:120:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | provenance | | -| CollectionFlow.cs:121:24:121:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | provenance | | -| CollectionFlow.cs:121:24:121:27 | access to local variable list : List [element] : A | CollectionFlow.cs:121:14:121:28 | call to method ListFirst | provenance | MaD:11 | -| CollectionFlow.cs:134:13:134:13 | access to local variable a : A | CollectionFlow.cs:136:18:136:18 | access to local variable a : A | provenance | | -| CollectionFlow.cs:134:17:134:23 | object creation of type A : A | CollectionFlow.cs:134:13:134:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:136:9:136:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:137:14:137:17 | access to local variable list : List [element] : A | provenance | | -| CollectionFlow.cs:136:9:136:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:138:22:138:25 | access to local variable list : List [element] : A | provenance | | -| CollectionFlow.cs:136:9:136:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:139:24:139:27 | access to local variable list : List [element] : A | provenance | | -| CollectionFlow.cs:136:18:136:18 | access to local variable a : A | CollectionFlow.cs:136:9:136:12 | [post] access to local variable list : List [element] : A | provenance | MaD:3 | -| CollectionFlow.cs:137:14:137:17 | access to local variable list : List [element] : A | CollectionFlow.cs:137:14:137:20 | access to indexer | provenance | MaD:11 | -| CollectionFlow.cs:138:22:138:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | provenance | | -| CollectionFlow.cs:139:24:139:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | provenance | | -| CollectionFlow.cs:139:24:139:27 | access to local variable list : List [element] : A | CollectionFlow.cs:139:14:139:28 | call to method ListFirst | provenance | MaD:11 | -| CollectionFlow.cs:153:13:153:13 | access to local variable a : A | CollectionFlow.cs:155:19:155:19 | access to local variable a : A | provenance | | -| CollectionFlow.cs:153:17:153:23 | object creation of type A : A | CollectionFlow.cs:153:13:153:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:155:9:155:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:156:14:156:17 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:155:9:155:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:157:23:157:26 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:155:9:155:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:158:28:158:31 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:155:9:155:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:159:29:159:32 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:155:9:155:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:160:30:160:33 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:155:19:155:19 | access to local variable a : A | CollectionFlow.cs:155:9:155:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | provenance | MaD:10 | -| CollectionFlow.cs:156:14:156:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:156:14:156:20 | access to indexer | provenance | MaD:6 | -| CollectionFlow.cs:157:23:157:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:158:28:158:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:158:28:158:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:158:14:158:32 | call to method DictIndexZero | provenance | MaD:6 | -| CollectionFlow.cs:159:29:159:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:159:29:159:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:159:14:159:33 | call to method DictFirstValue | provenance | MaD:17 | -| CollectionFlow.cs:160:30:160:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:160:30:160:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:160:14:160:34 | call to method DictValuesFirst | provenance | MaD:2 | -| CollectionFlow.cs:160:30:160:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:160:14:160:34 | call to method DictValuesFirst | provenance | MaD:8 | -| CollectionFlow.cs:176:13:176:13 | access to local variable a : A | CollectionFlow.cs:177:52:177:52 | access to local variable a : A | provenance | | +| CollectionFlow.cs:16:44:16:45 | ts : A[] [element] : A | CollectionFlow.cs:16:56:16:57 | access to parameter ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:16:56:16:57 | access to parameter ts : A[] [element] : A | CollectionFlow.cs:16:56:16:61 | access to array element | provenance | | +| CollectionFlow.cs:18:49:18:52 | list : List [element] : A | CollectionFlow.cs:18:63:18:66 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:18:63:18:66 | access to parameter list : List [element] : A | CollectionFlow.cs:18:63:18:69 | access to indexer | provenance | MaD:11 | +| CollectionFlow.cs:20:61:20:64 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:20:75:20:78 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:20:75:20:78 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:20:75:20:81 | access to indexer | provenance | MaD:6 | +| CollectionFlow.cs:22:59:22:62 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:22:73:22:76 | access to parameter dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:22:73:22:76 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:22:73:22:81 | access to property Keys : ICollection [element] : A | provenance | MaD:1 | +| CollectionFlow.cs:22:73:22:76 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:22:73:22:81 | access to property Keys : ICollection [element] : A | provenance | MaD:7 | +| CollectionFlow.cs:22:73:22:81 | access to property Keys : ICollection [element] : A | CollectionFlow.cs:22:73:22:89 | call to method First | provenance | MaD:17 | +| CollectionFlow.cs:24:34:24:35 | ts : A[] [element] : A | CollectionFlow.cs:24:41:24:42 | access to parameter ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:24:34:24:35 | ts : null [element] : A | CollectionFlow.cs:24:41:24:42 | access to parameter ts : null [element] : A | provenance | | +| CollectionFlow.cs:24:41:24:42 | access to parameter ts : A[] [element] : A | CollectionFlow.cs:24:41:24:45 | access to array element : A | provenance | | +| CollectionFlow.cs:24:41:24:42 | access to parameter ts : null [element] : A | CollectionFlow.cs:24:41:24:45 | access to array element : A | provenance | | +| CollectionFlow.cs:26:33:26:34 | ts : A[] [element] : A | CollectionFlow.cs:26:40:26:41 | access to parameter ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:26:40:26:41 | access to parameter ts : A[] [element] : A | CollectionFlow.cs:26:40:26:45 | access to array element : A | provenance | | +| CollectionFlow.cs:28:43:28:46 | list : List [element] : A | CollectionFlow.cs:28:52:28:55 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:28:52:28:55 | access to parameter list : List [element] : A | CollectionFlow.cs:28:52:28:58 | access to indexer : A | provenance | MaD:11 | +| CollectionFlow.cs:30:58:30:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:67:30:70 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:30:67:30:70 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:67:30:73 | access to indexer : A | provenance | MaD:6 | +| CollectionFlow.cs:32:59:32:62 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:32:68:32:71 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:32:68:32:71 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:32:68:32:79 | call to method First> : KeyValuePair [property Value] : A | provenance | MaD:17 | +| CollectionFlow.cs:32:68:32:79 | call to method First> : KeyValuePair [property Value] : A | CollectionFlow.cs:32:68:32:85 | access to property Value : A | provenance | | +| CollectionFlow.cs:34:60:34:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:34:69:34:72 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:34:69:34:72 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:34:69:34:79 | access to property Values : ICollection [element] : A | provenance | MaD:2 | +| CollectionFlow.cs:34:69:34:72 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:34:69:34:79 | access to property Values : ICollection [element] : A | provenance | MaD:8 | +| CollectionFlow.cs:34:69:34:79 | access to property Values : ICollection [element] : A | CollectionFlow.cs:34:69:34:87 | call to method First : A | provenance | MaD:17 | +| CollectionFlow.cs:36:58:36:61 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:36:67:36:70 | access to parameter dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:36:67:36:70 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:36:67:36:75 | access to property Keys : ICollection [element] : A | provenance | MaD:1 | +| CollectionFlow.cs:36:67:36:70 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:36:67:36:75 | access to property Keys : ICollection [element] : A | provenance | MaD:7 | +| CollectionFlow.cs:36:67:36:75 | access to property Keys : ICollection [element] : A | CollectionFlow.cs:36:67:36:83 | call to method First : A | provenance | MaD:17 | +| CollectionFlow.cs:38:57:38:60 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:38:66:38:69 | access to parameter dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:38:66:38:69 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:38:66:38:77 | call to method First> : KeyValuePair [property Key] : A | provenance | MaD:17 | +| CollectionFlow.cs:38:66:38:77 | call to method First> : KeyValuePair [property Key] : A | CollectionFlow.cs:38:66:38:81 | access to property Key : A | provenance | | +| CollectionFlow.cs:40:49:40:52 | args : A[] [element] : A | CollectionFlow.cs:40:63:40:66 | access to parameter args : A[] [element] : A | provenance | | +| CollectionFlow.cs:40:49:40:52 | args : null [element] : A | CollectionFlow.cs:40:63:40:66 | access to parameter args : null [element] : A | provenance | | +| CollectionFlow.cs:40:63:40:66 | access to parameter args : A[] [element] : A | CollectionFlow.cs:40:63:40:69 | access to array element | provenance | | +| CollectionFlow.cs:40:63:40:66 | access to parameter args : null [element] : A | CollectionFlow.cs:40:63:40:69 | access to array element | provenance | | +| CollectionFlow.cs:42:70:42:73 | args : IEnumerable [element] : A | CollectionFlow.cs:42:84:42:87 | access to parameter args : IEnumerable [element] : A | provenance | | +| CollectionFlow.cs:42:84:42:87 | access to parameter args : IEnumerable [element] : A | CollectionFlow.cs:42:84:42:95 | call to method First | provenance | MaD:17 | +| CollectionFlow.cs:46:13:46:13 | access to local variable a : A | CollectionFlow.cs:47:27:47:27 | access to local variable a : A | provenance | | +| CollectionFlow.cs:46:17:46:23 | object creation of type A : A | CollectionFlow.cs:46:13:46:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:47:13:47:15 | access to local variable as : null [element] : A | CollectionFlow.cs:48:14:48:16 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:47:13:47:15 | access to local variable as : null [element] : A | CollectionFlow.cs:49:18:49:20 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:47:13:47:15 | access to local variable as : null [element] : A | CollectionFlow.cs:50:20:50:22 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:47:25:47:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:47:13:47:15 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:47:27:47:27 | access to local variable a : A | CollectionFlow.cs:47:25:47:29 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:48:14:48:16 | access to local variable as : null [element] : A | CollectionFlow.cs:48:14:48:19 | access to array element | provenance | | +| CollectionFlow.cs:49:18:49:20 | access to local variable as : null [element] : A | CollectionFlow.cs:14:40:14:41 | ts : null [element] : A | provenance | | +| CollectionFlow.cs:50:20:50:22 | access to local variable as : null [element] : A | CollectionFlow.cs:24:34:24:35 | ts : null [element] : A | provenance | | +| CollectionFlow.cs:50:20:50:22 | access to local variable as : null [element] : A | CollectionFlow.cs:50:14:50:23 | call to method First | provenance | | +| CollectionFlow.cs:64:13:64:13 | access to local variable a : A | CollectionFlow.cs:65:53:65:53 | access to local variable a : A | provenance | | +| CollectionFlow.cs:64:17:64:23 | object creation of type A : A | CollectionFlow.cs:64:13:64:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:65:13:65:13 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:66:14:66:14 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:65:13:65:13 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:67:18:67:18 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:65:13:65:13 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:68:20:68:20 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:65:38:65:57 | { ..., ... } : CollectionFlow [field As, element] : A | CollectionFlow.cs:65:13:65:13 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:65:45:65:55 | { ..., ... } : A[] [element] : A | CollectionFlow.cs:65:38:65:57 | { ..., ... } : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:65:53:65:53 | access to local variable a : A | CollectionFlow.cs:65:45:65:55 | { ..., ... } : A[] [element] : A | provenance | | +| CollectionFlow.cs:66:14:66:14 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:66:14:66:17 | access to field As : A[] [element] : A | provenance | | +| CollectionFlow.cs:66:14:66:17 | access to field As : A[] [element] : A | CollectionFlow.cs:66:14:66:20 | access to array element | provenance | | +| CollectionFlow.cs:67:18:67:18 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:67:18:67:21 | access to field As : A[] [element] : A | provenance | | +| CollectionFlow.cs:67:18:67:21 | access to field As : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:68:20:68:20 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:68:20:68:23 | access to field As : A[] [element] : A | provenance | | +| CollectionFlow.cs:68:20:68:23 | access to field As : A[] [element] : A | CollectionFlow.cs:24:34:24:35 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:68:20:68:23 | access to field As : A[] [element] : A | CollectionFlow.cs:68:14:68:24 | call to method First | provenance | | +| CollectionFlow.cs:82:13:82:13 | access to local variable a : A | CollectionFlow.cs:83:54:83:54 | access to local variable a : A | provenance | | +| CollectionFlow.cs:82:17:82:23 | object creation of type A : A | CollectionFlow.cs:82:13:82:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:83:13:83:13 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:84:14:84:14 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:83:13:83:13 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:85:22:85:22 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:83:13:83:13 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:86:19:86:19 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:83:38:83:58 | { ..., ... } : CollectionFlow [field As, element] : A | CollectionFlow.cs:83:13:83:13 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:83:45:83:56 | { ..., ... } : A[] [element] : A | CollectionFlow.cs:83:38:83:58 | { ..., ... } : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:83:54:83:54 | access to local variable a : A | CollectionFlow.cs:83:45:83:56 | { ..., ... } : A[] [element] : A | provenance | | +| CollectionFlow.cs:84:14:84:14 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:84:14:84:17 | access to field As : A[] [element] : A | provenance | | +| CollectionFlow.cs:84:14:84:17 | access to field As : A[] [element] : A | CollectionFlow.cs:84:14:84:21 | access to array element | provenance | | +| CollectionFlow.cs:85:22:85:22 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:85:22:85:25 | access to field As : A[] [element] : A | provenance | | +| CollectionFlow.cs:85:22:85:25 | access to field As : A[] [element] : A | CollectionFlow.cs:16:44:16:45 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:86:19:86:19 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:86:19:86:22 | access to field As : A[] [element] : A | provenance | | +| CollectionFlow.cs:86:19:86:22 | access to field As : A[] [element] : A | CollectionFlow.cs:26:33:26:34 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:86:19:86:22 | access to field As : A[] [element] : A | CollectionFlow.cs:86:14:86:23 | call to method Last | provenance | | +| CollectionFlow.cs:91:13:91:13 | access to local variable a : A | CollectionFlow.cs:93:18:93:18 | access to local variable a : A | provenance | | +| CollectionFlow.cs:91:17:91:23 | object creation of type A : A | CollectionFlow.cs:91:13:91:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:93:9:93:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:94:14:94:16 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:93:9:93:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:95:18:95:20 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:93:9:93:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:96:20:96:22 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:93:18:93:18 | access to local variable a : A | CollectionFlow.cs:93:9:93:11 | [post] access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:94:14:94:16 | access to local variable as : A[] [element] : A | CollectionFlow.cs:94:14:94:19 | access to array element | provenance | | +| CollectionFlow.cs:95:18:95:20 | access to local variable as : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:96:20:96:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:24:34:24:35 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:96:20:96:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:96:14:96:23 | call to method First | provenance | | +| CollectionFlow.cs:111:13:111:13 | access to local variable a : A | CollectionFlow.cs:113:19:113:19 | access to local variable a : A | provenance | | +| CollectionFlow.cs:111:17:111:23 | object creation of type A : A | CollectionFlow.cs:111:13:111:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:113:9:113:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:114:14:114:16 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:113:9:113:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:115:22:115:24 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:113:9:113:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:116:19:116:21 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:113:19:113:19 | access to local variable a : A | CollectionFlow.cs:113:9:113:11 | [post] access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:114:14:114:16 | access to local variable as : A[] [element] : A | CollectionFlow.cs:114:14:114:20 | access to array element | provenance | | +| CollectionFlow.cs:115:22:115:24 | access to local variable as : A[] [element] : A | CollectionFlow.cs:16:44:16:45 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:116:19:116:21 | access to local variable as : A[] [element] : A | CollectionFlow.cs:26:33:26:34 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:116:19:116:21 | access to local variable as : A[] [element] : A | CollectionFlow.cs:116:14:116:22 | call to method Last | provenance | | +| CollectionFlow.cs:121:13:121:13 | access to local variable a : A | CollectionFlow.cs:123:19:123:19 | access to local variable a : A | provenance | | +| CollectionFlow.cs:121:17:121:23 | object creation of type A : A | CollectionFlow.cs:121:13:121:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:123:9:123:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:124:14:124:17 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:123:9:123:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:125:22:125:25 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:123:9:123:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:126:24:126:27 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:123:19:123:19 | access to local variable a : A | CollectionFlow.cs:123:9:123:12 | [post] access to local variable list : List [element] : A | provenance | MaD:12 | +| CollectionFlow.cs:124:14:124:17 | access to local variable list : List [element] : A | CollectionFlow.cs:124:14:124:20 | access to indexer | provenance | MaD:11 | +| CollectionFlow.cs:125:22:125:25 | access to local variable list : List [element] : A | CollectionFlow.cs:18:49:18:52 | list : List [element] : A | provenance | | +| CollectionFlow.cs:126:24:126:27 | access to local variable list : List [element] : A | CollectionFlow.cs:28:43:28:46 | list : List [element] : A | provenance | | +| CollectionFlow.cs:126:24:126:27 | access to local variable list : List [element] : A | CollectionFlow.cs:126:14:126:28 | call to method ListFirst | provenance | MaD:11 | +| CollectionFlow.cs:140:13:140:13 | access to local variable a : A | CollectionFlow.cs:141:36:141:36 | access to local variable a : A | provenance | | +| CollectionFlow.cs:140:17:140:23 | object creation of type A : A | CollectionFlow.cs:140:13:140:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:141:13:141:16 | access to local variable list : List [element] : A | CollectionFlow.cs:142:14:142:17 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:141:13:141:16 | access to local variable list : List [element] : A | CollectionFlow.cs:143:22:143:25 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:141:13:141:16 | access to local variable list : List [element] : A | CollectionFlow.cs:144:24:144:27 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:141:20:141:38 | object creation of type List : List [element] : A | CollectionFlow.cs:141:13:141:16 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:141:36:141:36 | access to local variable a : A | CollectionFlow.cs:141:20:141:38 | object creation of type List : List [element] : A | provenance | MaD:3 | +| CollectionFlow.cs:142:14:142:17 | access to local variable list : List [element] : A | CollectionFlow.cs:142:14:142:20 | access to indexer | provenance | MaD:11 | +| CollectionFlow.cs:143:22:143:25 | access to local variable list : List [element] : A | CollectionFlow.cs:18:49:18:52 | list : List [element] : A | provenance | | +| CollectionFlow.cs:144:24:144:27 | access to local variable list : List [element] : A | CollectionFlow.cs:28:43:28:46 | list : List [element] : A | provenance | | +| CollectionFlow.cs:144:24:144:27 | access to local variable list : List [element] : A | CollectionFlow.cs:144:14:144:28 | call to method ListFirst | provenance | MaD:11 | +| CollectionFlow.cs:157:13:157:13 | access to local variable a : A | CollectionFlow.cs:159:18:159:18 | access to local variable a : A | provenance | | +| CollectionFlow.cs:157:17:157:23 | object creation of type A : A | CollectionFlow.cs:157:13:157:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:159:9:159:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:160:14:160:17 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:159:9:159:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:161:22:161:25 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:159:9:159:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:162:24:162:27 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:159:18:159:18 | access to local variable a : A | CollectionFlow.cs:159:9:159:12 | [post] access to local variable list : List [element] : A | provenance | MaD:3 | +| CollectionFlow.cs:160:14:160:17 | access to local variable list : List [element] : A | CollectionFlow.cs:160:14:160:20 | access to indexer | provenance | MaD:11 | +| CollectionFlow.cs:161:22:161:25 | access to local variable list : List [element] : A | CollectionFlow.cs:18:49:18:52 | list : List [element] : A | provenance | | +| CollectionFlow.cs:162:24:162:27 | access to local variable list : List [element] : A | CollectionFlow.cs:28:43:28:46 | list : List [element] : A | provenance | | +| CollectionFlow.cs:162:24:162:27 | access to local variable list : List [element] : A | CollectionFlow.cs:162:14:162:28 | call to method ListFirst | provenance | MaD:11 | +| CollectionFlow.cs:176:13:176:13 | access to local variable a : A | CollectionFlow.cs:178:19:178:19 | access to local variable a : A | provenance | | | CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:176:13:176:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:177:13:177:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:178:14:178:17 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:177:13:177:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:179:23:179:26 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:177:13:177:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:180:28:180:31 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:177:13:177:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:181:29:181:32 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:177:13:177:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:182:30:182:33 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:177:20:177:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:177:13:177:16 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:177:52:177:52 | access to local variable a : A | CollectionFlow.cs:177:20:177:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | provenance | MaD:5 | -| CollectionFlow.cs:178:14:178:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:178:14:178:20 | access to indexer | provenance | MaD:6 | -| CollectionFlow.cs:179:23:179:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:180:28:180:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:180:28:180:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:180:14:180:32 | call to method DictIndexZero | provenance | MaD:6 | -| CollectionFlow.cs:181:29:181:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:181:29:181:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:181:14:181:33 | call to method DictFirstValue | provenance | MaD:17 | -| CollectionFlow.cs:182:30:182:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:182:30:182:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:182:14:182:34 | call to method DictValuesFirst | provenance | MaD:2 | -| CollectionFlow.cs:182:30:182:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:182:14:182:34 | call to method DictValuesFirst | provenance | MaD:8 | -| CollectionFlow.cs:197:13:197:13 | access to local variable a : A | CollectionFlow.cs:198:53:198:53 | access to local variable a : A | provenance | | -| CollectionFlow.cs:197:17:197:23 | object creation of type A : A | CollectionFlow.cs:197:13:197:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:198:13:198:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:199:14:199:17 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:198:13:198:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:200:23:200:26 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:198:13:198:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:201:28:201:31 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:198:13:198:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:202:29:202:32 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:198:13:198:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:203:30:203:33 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:198:20:198:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:198:13:198:16 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:198:53:198:53 | access to local variable a : A | CollectionFlow.cs:198:20:198:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | provenance | MaD:10 | -| CollectionFlow.cs:199:14:199:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:199:14:199:20 | access to indexer | provenance | MaD:6 | -| CollectionFlow.cs:200:23:200:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:201:28:201:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:201:28:201:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:201:14:201:32 | call to method DictIndexZero | provenance | MaD:6 | -| CollectionFlow.cs:202:29:202:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:202:29:202:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:202:14:202:33 | call to method DictFirstValue | provenance | MaD:17 | -| CollectionFlow.cs:203:30:203:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | provenance | | -| CollectionFlow.cs:203:30:203:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:203:14:203:34 | call to method DictValuesFirst | provenance | MaD:2 | -| CollectionFlow.cs:203:30:203:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:203:14:203:34 | call to method DictValuesFirst | provenance | MaD:8 | -| CollectionFlow.cs:219:13:219:13 | access to local variable a : A | CollectionFlow.cs:220:49:220:49 | access to local variable a : A | provenance | | -| CollectionFlow.cs:219:17:219:23 | object creation of type A : A | CollectionFlow.cs:219:13:219:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:220:13:220:16 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:221:14:221:17 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:220:13:220:16 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:222:21:222:24 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:220:13:220:16 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:223:28:223:31 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:220:13:220:16 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:224:27:224:30 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:220:20:220:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:220:13:220:16 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:220:49:220:49 | access to local variable a : A | CollectionFlow.cs:220:20:220:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | provenance | MaD:4 | -| CollectionFlow.cs:221:14:221:17 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:221:14:221:22 | access to property Keys : Dictionary.KeyCollection [element] : A | provenance | MaD:1 | -| CollectionFlow.cs:221:14:221:22 | access to property Keys : Dictionary.KeyCollection [element] : A | CollectionFlow.cs:221:14:221:30 | call to method First | provenance | MaD:17 | -| CollectionFlow.cs:222:21:222:24 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:59:20:62 | dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:223:28:223:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:223:28:223:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:223:14:223:32 | call to method DictKeysFirst | provenance | MaD:1 | -| CollectionFlow.cs:223:28:223:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:223:14:223:32 | call to method DictKeysFirst | provenance | MaD:7 | -| CollectionFlow.cs:224:27:224:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:224:27:224:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:224:14:224:31 | call to method DictFirstKey | provenance | MaD:17 | -| CollectionFlow.cs:238:13:238:13 | access to local variable a : A | CollectionFlow.cs:239:48:239:48 | access to local variable a : A | provenance | | -| CollectionFlow.cs:238:17:238:23 | object creation of type A : A | CollectionFlow.cs:238:13:238:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:239:13:239:16 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:240:14:240:17 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:239:13:239:16 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:241:21:241:24 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:239:13:239:16 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:242:28:242:31 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:239:13:239:16 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:243:27:243:30 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:239:20:239:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:239:13:239:16 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:239:48:239:48 | access to local variable a : A | CollectionFlow.cs:239:20:239:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | provenance | MaD:9 | -| CollectionFlow.cs:240:14:240:17 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:240:14:240:22 | access to property Keys : Dictionary.KeyCollection [element] : A | provenance | MaD:1 | -| CollectionFlow.cs:240:14:240:22 | access to property Keys : Dictionary.KeyCollection [element] : A | CollectionFlow.cs:240:14:240:30 | call to method First | provenance | MaD:17 | -| CollectionFlow.cs:241:21:241:24 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:59:20:62 | dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:242:28:242:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:242:28:242:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:242:14:242:32 | call to method DictKeysFirst | provenance | MaD:1 | -| CollectionFlow.cs:242:28:242:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:242:14:242:32 | call to method DictKeysFirst | provenance | MaD:7 | -| CollectionFlow.cs:243:27:243:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | provenance | | -| CollectionFlow.cs:243:27:243:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:243:14:243:31 | call to method DictFirstKey | provenance | MaD:17 | -| CollectionFlow.cs:257:13:257:13 | access to local variable a : A | CollectionFlow.cs:258:27:258:27 | access to local variable a : A | provenance | | -| CollectionFlow.cs:257:17:257:23 | object creation of type A : A | CollectionFlow.cs:257:13:257:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:258:13:258:15 | access to local variable as : null [element] : A | CollectionFlow.cs:259:27:259:29 | access to local variable as : null [element] : A | provenance | | -| CollectionFlow.cs:258:25:258:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:258:13:258:15 | access to local variable as : null [element] : A | provenance | | -| CollectionFlow.cs:258:27:258:27 | access to local variable a : A | CollectionFlow.cs:258:25:258:29 | { ..., ... } : null [element] : A | provenance | | -| CollectionFlow.cs:259:27:259:29 | access to local variable as : null [element] : A | CollectionFlow.cs:260:18:260:18 | access to local variable x | provenance | | -| CollectionFlow.cs:272:13:272:13 | access to local variable a : A | CollectionFlow.cs:273:27:273:27 | access to local variable a : A | provenance | | -| CollectionFlow.cs:272:17:272:23 | object creation of type A : A | CollectionFlow.cs:272:13:272:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:273:13:273:15 | access to local variable as : null [element] : A | CollectionFlow.cs:274:26:274:28 | access to local variable as : null [element] : A | provenance | | -| CollectionFlow.cs:273:25:273:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:273:13:273:15 | access to local variable as : null [element] : A | provenance | | -| CollectionFlow.cs:273:27:273:27 | access to local variable a : A | CollectionFlow.cs:273:25:273:29 | { ..., ... } : null [element] : A | provenance | | -| CollectionFlow.cs:274:13:274:22 | access to local variable enumerator : IEnumerator [property Current] : A | CollectionFlow.cs:276:18:276:27 | access to local variable enumerator : IEnumerator [property Current] : A | provenance | | -| CollectionFlow.cs:274:26:274:28 | access to local variable as : null [element] : A | CollectionFlow.cs:274:26:274:44 | call to method GetEnumerator : IEnumerator [property Current] : A | provenance | MaD:16 | -| CollectionFlow.cs:274:26:274:44 | call to method GetEnumerator : IEnumerator [property Current] : A | CollectionFlow.cs:274:13:274:22 | access to local variable enumerator : IEnumerator [property Current] : A | provenance | | -| CollectionFlow.cs:276:18:276:27 | access to local variable enumerator : IEnumerator [property Current] : A | CollectionFlow.cs:276:18:276:35 | access to property Current | provenance | | -| CollectionFlow.cs:289:13:289:13 | access to local variable a : A | CollectionFlow.cs:291:18:291:18 | access to local variable a : A | provenance | | -| CollectionFlow.cs:289:17:289:23 | object creation of type A : A | CollectionFlow.cs:289:13:289:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:291:9:291:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:292:26:292:29 | access to local variable list : List [element] : A | provenance | | -| CollectionFlow.cs:291:18:291:18 | access to local variable a : A | CollectionFlow.cs:291:9:291:12 | [post] access to local variable list : List [element] : A | provenance | MaD:3 | -| CollectionFlow.cs:292:13:292:22 | access to local variable enumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:294:18:294:27 | access to local variable enumerator : List.Enumerator [property Current] : A | provenance | | -| CollectionFlow.cs:292:13:292:22 | access to local variable enumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:294:18:294:27 | access to local variable enumerator : List.Enumerator [property Current] : A | provenance | | -| CollectionFlow.cs:292:26:292:29 | access to local variable list : List [element] : A | CollectionFlow.cs:292:26:292:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | provenance | MaD:15 | -| CollectionFlow.cs:292:26:292:29 | access to local variable list : List [element] : A | CollectionFlow.cs:292:26:292:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | provenance | MaD:15 | -| CollectionFlow.cs:292:26:292:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:292:13:292:22 | access to local variable enumerator : List.Enumerator [property Current] : A | provenance | | -| CollectionFlow.cs:292:26:292:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:292:13:292:22 | access to local variable enumerator : List.Enumerator [property Current] : A | provenance | | -| CollectionFlow.cs:294:18:294:27 | access to local variable enumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:294:18:294:35 | access to property Current | provenance | | -| CollectionFlow.cs:294:18:294:27 | access to local variable enumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:294:18:294:35 | access to property Current | provenance | MaD:14 | -| CollectionFlow.cs:294:18:294:27 | access to local variable enumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:294:18:294:35 | access to property Current | provenance | MaD:14 | -| CollectionFlow.cs:308:13:308:13 | access to local variable a : A | CollectionFlow.cs:310:43:310:43 | access to local variable a : A | provenance | | -| CollectionFlow.cs:308:17:308:23 | object creation of type A : A | CollectionFlow.cs:308:13:308:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:310:9:310:12 | [post] access to local variable list : List [element, property Key] : A | CollectionFlow.cs:311:9:311:12 | access to local variable list : List [element, property Key] : A | provenance | | -| CollectionFlow.cs:310:18:310:47 | object creation of type KeyValuePair : KeyValuePair [property Key] : A | CollectionFlow.cs:310:9:310:12 | [post] access to local variable list : List [element, property Key] : A | provenance | MaD:3 | -| CollectionFlow.cs:310:43:310:43 | access to local variable a : A | CollectionFlow.cs:310:18:310:47 | object creation of type KeyValuePair : KeyValuePair [property Key] : A | provenance | MaD:13 | -| CollectionFlow.cs:311:9:311:12 | access to local variable list : List [element, property Key] : A | CollectionFlow.cs:311:21:311:23 | kvp : KeyValuePair [property Key] : A | provenance | MaD:18 | -| CollectionFlow.cs:311:21:311:23 | kvp : KeyValuePair [property Key] : A | CollectionFlow.cs:313:18:313:20 | access to parameter kvp : KeyValuePair [property Key] : A | provenance | | -| CollectionFlow.cs:313:18:313:20 | access to parameter kvp : KeyValuePair [property Key] : A | CollectionFlow.cs:313:18:313:24 | access to property Key | provenance | | -| CollectionFlow.cs:330:32:330:38 | element : A | CollectionFlow.cs:330:55:330:61 | access to parameter element : A | provenance | | -| CollectionFlow.cs:330:44:330:48 | [post] access to parameter array : A[] [element] : A | CollectionFlow.cs:330:23:330:27 | array [Return] : A[] [element] : A | provenance | | -| CollectionFlow.cs:330:55:330:61 | access to parameter element : A | CollectionFlow.cs:330:44:330:48 | [post] access to parameter array : A[] [element] : A | provenance | | -| CollectionFlow.cs:334:13:334:13 | access to local variable a : A | CollectionFlow.cs:336:23:336:23 | access to local variable a : A | provenance | | -| CollectionFlow.cs:334:17:334:23 | object creation of type A : A | CollectionFlow.cs:334:13:334:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:336:18:336:20 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:337:14:337:16 | access to local variable as : A[] [element] : A | provenance | | -| CollectionFlow.cs:336:18:336:20 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:338:18:338:20 | access to local variable as : A[] [element] : A | provenance | | -| CollectionFlow.cs:336:18:336:20 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:339:20:339:22 | access to local variable as : A[] [element] : A | provenance | | -| CollectionFlow.cs:336:23:336:23 | access to local variable a : A | CollectionFlow.cs:330:32:330:38 | element : A | provenance | | -| CollectionFlow.cs:336:23:336:23 | access to local variable a : A | CollectionFlow.cs:336:18:336:20 | [post] access to local variable as : A[] [element] : A | provenance | | -| CollectionFlow.cs:337:14:337:16 | access to local variable as : A[] [element] : A | CollectionFlow.cs:337:14:337:19 | access to array element | provenance | | -| CollectionFlow.cs:338:18:338:20 | access to local variable as : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | provenance | | -| CollectionFlow.cs:339:20:339:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | provenance | | -| CollectionFlow.cs:339:20:339:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:339:14:339:23 | call to method First | provenance | | -| CollectionFlow.cs:352:34:352:40 | element : A | CollectionFlow.cs:352:55:352:61 | access to parameter element : A | provenance | | -| CollectionFlow.cs:352:46:352:49 | [post] access to parameter list : List [element] : A | CollectionFlow.cs:352:26:352:29 | list [Return] : List [element] : A | provenance | | -| CollectionFlow.cs:352:55:352:61 | access to parameter element : A | CollectionFlow.cs:352:46:352:49 | [post] access to parameter list : List [element] : A | provenance | MaD:3 | -| CollectionFlow.cs:356:13:356:13 | access to local variable a : A | CollectionFlow.cs:358:23:358:23 | access to local variable a : A | provenance | | -| CollectionFlow.cs:356:17:356:23 | object creation of type A : A | CollectionFlow.cs:356:13:356:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:358:17:358:20 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:359:14:359:17 | access to local variable list : List [element] : A | provenance | | -| CollectionFlow.cs:358:17:358:20 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:360:22:360:25 | access to local variable list : List [element] : A | provenance | | -| CollectionFlow.cs:358:17:358:20 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:361:24:361:27 | access to local variable list : List [element] : A | provenance | | -| CollectionFlow.cs:358:23:358:23 | access to local variable a : A | CollectionFlow.cs:352:34:352:40 | element : A | provenance | | -| CollectionFlow.cs:358:23:358:23 | access to local variable a : A | CollectionFlow.cs:358:17:358:20 | [post] access to local variable list : List [element] : A | provenance | MaD:3 | -| CollectionFlow.cs:359:14:359:17 | access to local variable list : List [element] : A | CollectionFlow.cs:359:14:359:20 | access to indexer | provenance | MaD:11 | -| CollectionFlow.cs:360:22:360:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | provenance | | -| CollectionFlow.cs:361:24:361:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | provenance | | -| CollectionFlow.cs:361:24:361:27 | access to local variable list : List [element] : A | CollectionFlow.cs:361:14:361:28 | call to method ListFirst | provenance | MaD:11 | -| CollectionFlow.cs:375:20:375:26 | object creation of type A : A | CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | provenance | | -| CollectionFlow.cs:376:26:376:32 | object creation of type A : A | CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | provenance | | -| CollectionFlow.cs:377:26:377:32 | object creation of type A : A | CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | provenance | | -| CollectionFlow.cs:378:20:378:38 | array creation of type A[] : null [element] : A | CollectionFlow.cs:36:49:36:52 | args : null [element] : A | provenance | | -| CollectionFlow.cs:378:28:378:38 | { ..., ... } : null [element] : A | CollectionFlow.cs:378:20:378:38 | array creation of type A[] : null [element] : A | provenance | | -| CollectionFlow.cs:378:30:378:36 | object creation of type A : A | CollectionFlow.cs:378:28:378:38 | { ..., ... } : null [element] : A | provenance | | -| CollectionFlow.cs:391:30:391:36 | object creation of type A : A | CollectionFlow.cs:38:70:38:73 | args : IEnumerable [element] : A | provenance | | -| CollectionFlow.cs:392:36:392:42 | object creation of type A : A | CollectionFlow.cs:38:70:38:73 | args : IEnumerable [element] : A | provenance | | -| CollectionFlow.cs:393:36:393:42 | object creation of type A : A | CollectionFlow.cs:38:70:38:73 | args : IEnumerable [element] : A | provenance | | -| CollectionFlow.cs:394:30:394:38 | [...] : IEnumerable [element] : A | CollectionFlow.cs:38:70:38:73 | args : IEnumerable [element] : A | provenance | | -| CollectionFlow.cs:394:31:394:37 | object creation of type A : A | CollectionFlow.cs:394:30:394:38 | [...] : IEnumerable [element] : A | provenance | | -| CollectionFlow.cs:416:13:416:13 | access to local variable a : A | CollectionFlow.cs:418:20:418:20 | access to local variable a : A | provenance | | -| CollectionFlow.cs:416:17:416:23 | object creation of type A : A | CollectionFlow.cs:416:13:416:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:418:9:418:13 | [post] access to local variable array : MyInlineArray [element] : A | CollectionFlow.cs:419:14:419:18 | access to local variable array : MyInlineArray [element] : A | provenance | | -| CollectionFlow.cs:418:20:418:20 | access to local variable a : A | CollectionFlow.cs:418:9:418:13 | [post] access to local variable array : MyInlineArray [element] : A | provenance | | -| CollectionFlow.cs:419:14:419:18 | access to local variable array : MyInlineArray [element] : A | CollectionFlow.cs:419:14:419:21 | access to array element | provenance | | -| CollectionFlow.cs:437:13:437:13 | access to local variable a : A | CollectionFlow.cs:438:22:438:22 | access to local variable a : A | provenance | | -| CollectionFlow.cs:437:17:437:23 | object creation of type A : A | CollectionFlow.cs:437:13:437:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:438:13:438:17 | access to local variable array : A[] [element] : A | CollectionFlow.cs:439:14:439:18 | access to local variable array : A[] [element] : A | provenance | | -| CollectionFlow.cs:438:21:438:23 | [...] : A[] [element] : A | CollectionFlow.cs:438:13:438:17 | access to local variable array : A[] [element] : A | provenance | | -| CollectionFlow.cs:438:22:438:22 | access to local variable a : A | CollectionFlow.cs:438:21:438:23 | [...] : A[] [element] : A | provenance | | -| CollectionFlow.cs:439:14:439:18 | access to local variable array : A[] [element] : A | CollectionFlow.cs:439:14:439:21 | access to array element | provenance | | -| CollectionFlow.cs:444:13:444:13 | access to local variable a : A | CollectionFlow.cs:445:22:445:22 | access to local variable a : A | provenance | | -| CollectionFlow.cs:444:17:444:23 | object creation of type A : A | CollectionFlow.cs:444:13:444:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:445:17:445:17 | access to local variable l : List [element] : A | CollectionFlow.cs:446:14:446:14 | access to local variable l : List [element] : A | provenance | | -| CollectionFlow.cs:445:21:445:23 | [...] : List [element] : A | CollectionFlow.cs:445:17:445:17 | access to local variable l : List [element] : A | provenance | | -| CollectionFlow.cs:445:22:445:22 | access to local variable a : A | CollectionFlow.cs:445:21:445:23 | [...] : List [element] : A | provenance | | -| CollectionFlow.cs:446:14:446:14 | access to local variable l : List [element] : A | CollectionFlow.cs:446:14:446:17 | access to indexer | provenance | MaD:11 | -| CollectionFlow.cs:457:13:457:13 | access to local variable a : A | CollectionFlow.cs:458:21:458:21 | access to local variable a : A | provenance | | -| CollectionFlow.cs:457:17:457:23 | object creation of type A : A | CollectionFlow.cs:457:13:457:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:458:13:458:16 | access to local variable temp : A[] [element] : A | CollectionFlow.cs:459:22:459:28 | .. access to local variable temp : A[] [element] : A | provenance | | -| CollectionFlow.cs:458:20:458:22 | [...] : A[] [element] : A | CollectionFlow.cs:458:13:458:16 | access to local variable temp : A[] [element] : A | provenance | | -| CollectionFlow.cs:458:21:458:21 | access to local variable a : A | CollectionFlow.cs:458:20:458:22 | [...] : A[] [element] : A | provenance | | -| CollectionFlow.cs:459:13:459:17 | access to local variable array : A[] [element] : A | CollectionFlow.cs:460:14:460:18 | access to local variable array : A[] [element] : A | provenance | | -| CollectionFlow.cs:459:22:459:28 | .. access to local variable temp : A[] [element] : A | CollectionFlow.cs:459:13:459:17 | access to local variable array : A[] [element] : A | provenance | | -| CollectionFlow.cs:460:14:460:18 | access to local variable array : A[] [element] : A | CollectionFlow.cs:460:14:460:21 | access to array element | provenance | | -| CollectionFlow.cs:497:13:497:13 | access to local variable a : A | CollectionFlow.cs:498:40:498:40 | access to local variable a : A | provenance | | -| CollectionFlow.cs:497:17:497:23 | object creation of type A : A | CollectionFlow.cs:497:13:497:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:498:17:498:20 | access to local variable span : Span [element] : A | CollectionFlow.cs:499:14:499:17 | access to local variable span : Span [element] : A | provenance | | -| CollectionFlow.cs:498:24:498:41 | object creation of type Span : Span [element] : A | CollectionFlow.cs:498:17:498:20 | access to local variable span : Span [element] : A | provenance | | -| CollectionFlow.cs:498:40:498:40 | access to local variable a : A | CollectionFlow.cs:498:24:498:41 | object creation of type Span : Span [element] : A | provenance | MaD:23 | -| CollectionFlow.cs:499:14:499:17 | access to local variable span : Span [element] : A | CollectionFlow.cs:499:14:499:20 | access to indexer | provenance | MaD:26 | -| CollectionFlow.cs:504:13:504:13 | access to local variable a : A | CollectionFlow.cs:505:40:505:40 | access to local variable a : A | provenance | | -| CollectionFlow.cs:504:17:504:23 | object creation of type A : A | CollectionFlow.cs:504:13:504:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:505:17:505:20 | access to local variable span : Span [element] : A | CollectionFlow.cs:506:19:506:22 | access to local variable span : Span [element] : A | provenance | | -| CollectionFlow.cs:505:24:505:41 | object creation of type Span : Span [element] : A | CollectionFlow.cs:505:17:505:20 | access to local variable span : Span [element] : A | provenance | | -| CollectionFlow.cs:505:40:505:40 | access to local variable a : A | CollectionFlow.cs:505:24:505:41 | object creation of type Span : Span [element] : A | provenance | MaD:23 | -| CollectionFlow.cs:506:13:506:15 | access to local variable arr : T[] [element] : A | CollectionFlow.cs:507:14:507:16 | access to local variable arr : T[] [element] : A | provenance | | -| CollectionFlow.cs:506:19:506:22 | access to local variable span : Span [element] : A | CollectionFlow.cs:506:19:506:32 | call to method ToArray : T[] [element] : A | provenance | MaD:25 | -| CollectionFlow.cs:506:19:506:32 | call to method ToArray : T[] [element] : A | CollectionFlow.cs:506:13:506:15 | access to local variable arr : T[] [element] : A | provenance | | -| CollectionFlow.cs:507:14:507:16 | access to local variable arr : T[] [element] : A | CollectionFlow.cs:507:14:507:19 | access to array element | provenance | | -| CollectionFlow.cs:512:13:512:13 | access to local variable a : A | CollectionFlow.cs:513:21:513:21 | access to local variable a : A | provenance | | -| CollectionFlow.cs:512:17:512:23 | object creation of type A : A | CollectionFlow.cs:512:13:512:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:513:9:513:14 | [post] access to parameter target : Span [element] : A | CollectionFlow.cs:514:14:514:19 | access to parameter target : Span [element] : A | provenance | | -| CollectionFlow.cs:513:21:513:21 | access to local variable a : A | CollectionFlow.cs:513:9:513:14 | [post] access to parameter target : Span [element] : A | provenance | MaD:22 | -| CollectionFlow.cs:514:14:514:19 | access to parameter target : Span [element] : A | CollectionFlow.cs:514:14:514:22 | access to indexer | provenance | MaD:26 | -| CollectionFlow.cs:519:13:519:18 | access to local variable source : Span [element] : A | CollectionFlow.cs:520:9:520:14 | access to local variable source : Span [element] : A | provenance | | -| CollectionFlow.cs:519:22:519:51 | object creation of type Span : Span [element] : A | CollectionFlow.cs:519:13:519:18 | access to local variable source : Span [element] : A | provenance | | -| CollectionFlow.cs:519:34:519:50 | array creation of type A[] : null [element] : A | CollectionFlow.cs:519:22:519:51 | object creation of type Span : Span [element] : A | provenance | MaD:24 | -| CollectionFlow.cs:519:40:519:50 | { ..., ... } : null [element] : A | CollectionFlow.cs:519:34:519:50 | array creation of type A[] : null [element] : A | provenance | | -| CollectionFlow.cs:519:42:519:48 | object creation of type A : A | CollectionFlow.cs:519:40:519:50 | { ..., ... } : null [element] : A | provenance | | -| CollectionFlow.cs:520:9:520:14 | access to local variable source : Span [element] : A | CollectionFlow.cs:520:23:520:28 | [post] access to parameter target : Span [element] : A | provenance | MaD:21 | -| CollectionFlow.cs:520:23:520:28 | [post] access to parameter target : Span [element] : A | CollectionFlow.cs:521:14:521:19 | access to parameter target : Span [element] : A | provenance | | -| CollectionFlow.cs:521:14:521:19 | access to parameter target : Span [element] : A | CollectionFlow.cs:521:14:521:22 | access to indexer | provenance | MaD:26 | -| CollectionFlow.cs:526:13:526:13 | access to local variable a : A | CollectionFlow.cs:527:60:527:60 | access to local variable a : A | provenance | | -| CollectionFlow.cs:526:17:526:23 | object creation of type A : A | CollectionFlow.cs:526:13:526:13 | access to local variable a : A | provenance | | -| CollectionFlow.cs:527:25:527:28 | access to local variable span : ReadOnlySpan [element] : A | CollectionFlow.cs:528:14:528:17 | access to local variable span : ReadOnlySpan [element] : A | provenance | | -| CollectionFlow.cs:527:32:527:63 | object creation of type ReadOnlySpan : ReadOnlySpan [element] : A | CollectionFlow.cs:527:25:527:28 | access to local variable span : ReadOnlySpan [element] : A | provenance | | -| CollectionFlow.cs:527:52:527:62 | array creation of type A[] : null [element] : A | CollectionFlow.cs:527:32:527:63 | object creation of type ReadOnlySpan : ReadOnlySpan [element] : A | provenance | MaD:19 | -| CollectionFlow.cs:527:58:527:62 | { ..., ... } : null [element] : A | CollectionFlow.cs:527:52:527:62 | array creation of type A[] : null [element] : A | provenance | | -| CollectionFlow.cs:527:60:527:60 | access to local variable a : A | CollectionFlow.cs:527:58:527:62 | { ..., ... } : null [element] : A | provenance | | -| CollectionFlow.cs:528:14:528:17 | access to local variable span : ReadOnlySpan [element] : A | CollectionFlow.cs:528:14:528:20 | access to indexer | provenance | MaD:20 | +| CollectionFlow.cs:178:9:178:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:179:14:179:17 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:178:9:178:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:180:23:180:26 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:178:9:178:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:181:28:181:31 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:178:9:178:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:182:29:182:32 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:178:9:178:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:183:30:183:33 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:178:19:178:19 | access to local variable a : A | CollectionFlow.cs:178:9:178:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | provenance | MaD:10 | +| CollectionFlow.cs:179:14:179:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:179:14:179:20 | access to indexer | provenance | MaD:6 | +| CollectionFlow.cs:180:23:180:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:20:61:20:64 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:181:28:181:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:58:30:61 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:181:28:181:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:181:14:181:32 | call to method DictIndexZero | provenance | MaD:6 | +| CollectionFlow.cs:182:29:182:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:32:59:32:62 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:182:29:182:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:182:14:182:33 | call to method DictFirstValue | provenance | MaD:17 | +| CollectionFlow.cs:183:30:183:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:34:60:34:63 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:183:30:183:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:183:14:183:34 | call to method DictValuesFirst | provenance | MaD:2 | +| CollectionFlow.cs:183:30:183:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:183:14:183:34 | call to method DictValuesFirst | provenance | MaD:8 | +| CollectionFlow.cs:199:13:199:13 | access to local variable a : A | CollectionFlow.cs:200:52:200:52 | access to local variable a : A | provenance | | +| CollectionFlow.cs:199:17:199:23 | object creation of type A : A | CollectionFlow.cs:199:13:199:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:200:13:200:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:201:14:201:17 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:200:13:200:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:202:23:202:26 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:200:13:200:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:203:28:203:31 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:200:13:200:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:204:29:204:32 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:200:13:200:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:205:30:205:33 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:200:20:200:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:200:13:200:16 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:200:52:200:52 | access to local variable a : A | CollectionFlow.cs:200:20:200:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | provenance | MaD:5 | +| CollectionFlow.cs:201:14:201:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:201:14:201:20 | access to indexer | provenance | MaD:6 | +| CollectionFlow.cs:202:23:202:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:20:61:20:64 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:203:28:203:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:58:30:61 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:203:28:203:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:203:14:203:32 | call to method DictIndexZero | provenance | MaD:6 | +| CollectionFlow.cs:204:29:204:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:32:59:32:62 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:204:29:204:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:204:14:204:33 | call to method DictFirstValue | provenance | MaD:17 | +| CollectionFlow.cs:205:30:205:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:34:60:34:63 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:205:30:205:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:205:14:205:34 | call to method DictValuesFirst | provenance | MaD:2 | +| CollectionFlow.cs:205:30:205:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:205:14:205:34 | call to method DictValuesFirst | provenance | MaD:8 | +| CollectionFlow.cs:220:13:220:13 | access to local variable a : A | CollectionFlow.cs:221:53:221:53 | access to local variable a : A | provenance | | +| CollectionFlow.cs:220:17:220:23 | object creation of type A : A | CollectionFlow.cs:220:13:220:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:221:13:221:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:222:14:222:17 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:221:13:221:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:223:23:223:26 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:221:13:221:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:224:28:224:31 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:221:13:221:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:225:29:225:32 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:221:13:221:16 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:226:30:226:33 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:221:20:221:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:221:13:221:16 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:221:53:221:53 | access to local variable a : A | CollectionFlow.cs:221:20:221:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | provenance | MaD:10 | +| CollectionFlow.cs:222:14:222:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:222:14:222:20 | access to indexer | provenance | MaD:6 | +| CollectionFlow.cs:223:23:223:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:20:61:20:64 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:224:28:224:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:58:30:61 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:224:28:224:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:224:14:224:32 | call to method DictIndexZero | provenance | MaD:6 | +| CollectionFlow.cs:225:29:225:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:32:59:32:62 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:225:29:225:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:225:14:225:33 | call to method DictFirstValue | provenance | MaD:17 | +| CollectionFlow.cs:226:30:226:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:34:60:34:63 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:226:30:226:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:226:14:226:34 | call to method DictValuesFirst | provenance | MaD:2 | +| CollectionFlow.cs:226:30:226:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:226:14:226:34 | call to method DictValuesFirst | provenance | MaD:8 | +| CollectionFlow.cs:242:13:242:13 | access to local variable a : A | CollectionFlow.cs:243:49:243:49 | access to local variable a : A | provenance | | +| CollectionFlow.cs:242:17:242:23 | object creation of type A : A | CollectionFlow.cs:242:13:242:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:243:13:243:16 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:244:14:244:17 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:243:13:243:16 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:245:21:245:24 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:243:13:243:16 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:246:28:246:31 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:243:13:243:16 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:247:27:247:30 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:243:20:243:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:243:13:243:16 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:243:49:243:49 | access to local variable a : A | CollectionFlow.cs:243:20:243:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | provenance | MaD:4 | +| CollectionFlow.cs:244:14:244:17 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:244:14:244:22 | access to property Keys : Dictionary.KeyCollection [element] : A | provenance | MaD:1 | +| CollectionFlow.cs:244:14:244:22 | access to property Keys : Dictionary.KeyCollection [element] : A | CollectionFlow.cs:244:14:244:30 | call to method First | provenance | MaD:17 | +| CollectionFlow.cs:245:21:245:24 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:22:59:22:62 | dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:246:28:246:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:36:58:36:61 | dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:246:28:246:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:246:14:246:32 | call to method DictKeysFirst | provenance | MaD:1 | +| CollectionFlow.cs:246:28:246:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:246:14:246:32 | call to method DictKeysFirst | provenance | MaD:7 | +| CollectionFlow.cs:247:27:247:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:38:57:38:60 | dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:247:27:247:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:247:14:247:31 | call to method DictFirstKey | provenance | MaD:17 | +| CollectionFlow.cs:261:13:261:13 | access to local variable a : A | CollectionFlow.cs:262:48:262:48 | access to local variable a : A | provenance | | +| CollectionFlow.cs:261:17:261:23 | object creation of type A : A | CollectionFlow.cs:261:13:261:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:262:13:262:16 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:263:14:263:17 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:262:13:262:16 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:264:21:264:24 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:262:13:262:16 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:265:28:265:31 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:262:13:262:16 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:266:27:266:30 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:262:20:262:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:262:13:262:16 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:262:48:262:48 | access to local variable a : A | CollectionFlow.cs:262:20:262:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | provenance | MaD:9 | +| CollectionFlow.cs:263:14:263:17 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:263:14:263:22 | access to property Keys : Dictionary.KeyCollection [element] : A | provenance | MaD:1 | +| CollectionFlow.cs:263:14:263:22 | access to property Keys : Dictionary.KeyCollection [element] : A | CollectionFlow.cs:263:14:263:30 | call to method First | provenance | MaD:17 | +| CollectionFlow.cs:264:21:264:24 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:22:59:22:62 | dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:265:28:265:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:36:58:36:61 | dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:265:28:265:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:265:14:265:32 | call to method DictKeysFirst | provenance | MaD:1 | +| CollectionFlow.cs:265:28:265:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:265:14:265:32 | call to method DictKeysFirst | provenance | MaD:7 | +| CollectionFlow.cs:266:27:266:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:38:57:38:60 | dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:266:27:266:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:266:14:266:31 | call to method DictFirstKey | provenance | MaD:17 | +| CollectionFlow.cs:280:13:280:13 | access to local variable a : A | CollectionFlow.cs:281:27:281:27 | access to local variable a : A | provenance | | +| CollectionFlow.cs:280:17:280:23 | object creation of type A : A | CollectionFlow.cs:280:13:280:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:281:13:281:15 | access to local variable as : null [element] : A | CollectionFlow.cs:282:27:282:29 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:281:25:281:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:281:13:281:15 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:281:27:281:27 | access to local variable a : A | CollectionFlow.cs:281:25:281:29 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:282:27:282:29 | access to local variable as : null [element] : A | CollectionFlow.cs:283:18:283:18 | access to local variable x | provenance | | +| CollectionFlow.cs:295:13:295:13 | access to local variable a : A | CollectionFlow.cs:296:27:296:27 | access to local variable a : A | provenance | | +| CollectionFlow.cs:295:17:295:23 | object creation of type A : A | CollectionFlow.cs:295:13:295:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:296:13:296:15 | access to local variable as : null [element] : A | CollectionFlow.cs:297:26:297:28 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:296:25:296:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:296:13:296:15 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:296:27:296:27 | access to local variable a : A | CollectionFlow.cs:296:25:296:29 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:297:13:297:22 | access to local variable enumerator : IEnumerator [property Current] : A | CollectionFlow.cs:299:18:299:27 | access to local variable enumerator : IEnumerator [property Current] : A | provenance | | +| CollectionFlow.cs:297:26:297:28 | access to local variable as : null [element] : A | CollectionFlow.cs:297:26:297:44 | call to method GetEnumerator : IEnumerator [property Current] : A | provenance | MaD:16 | +| CollectionFlow.cs:297:26:297:44 | call to method GetEnumerator : IEnumerator [property Current] : A | CollectionFlow.cs:297:13:297:22 | access to local variable enumerator : IEnumerator [property Current] : A | provenance | | +| CollectionFlow.cs:299:18:299:27 | access to local variable enumerator : IEnumerator [property Current] : A | CollectionFlow.cs:299:18:299:35 | access to property Current | provenance | | +| CollectionFlow.cs:312:13:312:13 | access to local variable a : A | CollectionFlow.cs:314:18:314:18 | access to local variable a : A | provenance | | +| CollectionFlow.cs:312:17:312:23 | object creation of type A : A | CollectionFlow.cs:312:13:312:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:314:9:314:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:315:26:315:29 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:314:18:314:18 | access to local variable a : A | CollectionFlow.cs:314:9:314:12 | [post] access to local variable list : List [element] : A | provenance | MaD:3 | +| CollectionFlow.cs:315:13:315:22 | access to local variable enumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:317:18:317:27 | access to local variable enumerator : List.Enumerator [property Current] : A | provenance | | +| CollectionFlow.cs:315:13:315:22 | access to local variable enumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:317:18:317:27 | access to local variable enumerator : List.Enumerator [property Current] : A | provenance | | +| CollectionFlow.cs:315:26:315:29 | access to local variable list : List [element] : A | CollectionFlow.cs:315:26:315:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | provenance | MaD:15 | +| CollectionFlow.cs:315:26:315:29 | access to local variable list : List [element] : A | CollectionFlow.cs:315:26:315:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | provenance | MaD:15 | +| CollectionFlow.cs:315:26:315:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:315:13:315:22 | access to local variable enumerator : List.Enumerator [property Current] : A | provenance | | +| CollectionFlow.cs:315:26:315:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:315:13:315:22 | access to local variable enumerator : List.Enumerator [property Current] : A | provenance | | +| CollectionFlow.cs:317:18:317:27 | access to local variable enumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:317:18:317:35 | access to property Current | provenance | | +| CollectionFlow.cs:317:18:317:27 | access to local variable enumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:317:18:317:35 | access to property Current | provenance | MaD:14 | +| CollectionFlow.cs:317:18:317:27 | access to local variable enumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:317:18:317:35 | access to property Current | provenance | MaD:14 | +| CollectionFlow.cs:331:13:331:13 | access to local variable a : A | CollectionFlow.cs:333:43:333:43 | access to local variable a : A | provenance | | +| CollectionFlow.cs:331:17:331:23 | object creation of type A : A | CollectionFlow.cs:331:13:331:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:333:9:333:12 | [post] access to local variable list : List [element, property Key] : A | CollectionFlow.cs:334:9:334:12 | access to local variable list : List [element, property Key] : A | provenance | | +| CollectionFlow.cs:333:18:333:47 | object creation of type KeyValuePair : KeyValuePair [property Key] : A | CollectionFlow.cs:333:9:333:12 | [post] access to local variable list : List [element, property Key] : A | provenance | MaD:3 | +| CollectionFlow.cs:333:43:333:43 | access to local variable a : A | CollectionFlow.cs:333:18:333:47 | object creation of type KeyValuePair : KeyValuePair [property Key] : A | provenance | MaD:13 | +| CollectionFlow.cs:334:9:334:12 | access to local variable list : List [element, property Key] : A | CollectionFlow.cs:334:21:334:23 | kvp : KeyValuePair [property Key] : A | provenance | MaD:18 | +| CollectionFlow.cs:334:21:334:23 | kvp : KeyValuePair [property Key] : A | CollectionFlow.cs:336:18:336:20 | access to parameter kvp : KeyValuePair [property Key] : A | provenance | | +| CollectionFlow.cs:336:18:336:20 | access to parameter kvp : KeyValuePair [property Key] : A | CollectionFlow.cs:336:18:336:24 | access to property Key | provenance | | +| CollectionFlow.cs:353:32:353:38 | element : A | CollectionFlow.cs:353:55:353:61 | access to parameter element : A | provenance | | +| CollectionFlow.cs:353:44:353:48 | [post] access to parameter array : A[] [element] : A | CollectionFlow.cs:353:23:353:27 | array [Return] : A[] [element] : A | provenance | | +| CollectionFlow.cs:353:55:353:61 | access to parameter element : A | CollectionFlow.cs:353:44:353:48 | [post] access to parameter array : A[] [element] : A | provenance | | +| CollectionFlow.cs:357:13:357:13 | access to local variable a : A | CollectionFlow.cs:359:23:359:23 | access to local variable a : A | provenance | | +| CollectionFlow.cs:357:17:357:23 | object creation of type A : A | CollectionFlow.cs:357:13:357:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:359:18:359:20 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:360:14:360:16 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:359:18:359:20 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:361:18:361:20 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:359:18:359:20 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:362:20:362:22 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:359:23:359:23 | access to local variable a : A | CollectionFlow.cs:353:32:353:38 | element : A | provenance | | +| CollectionFlow.cs:359:23:359:23 | access to local variable a : A | CollectionFlow.cs:359:18:359:20 | [post] access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:360:14:360:16 | access to local variable as : A[] [element] : A | CollectionFlow.cs:360:14:360:19 | access to array element | provenance | | +| CollectionFlow.cs:361:18:361:20 | access to local variable as : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:362:20:362:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:24:34:24:35 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:362:20:362:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:362:14:362:23 | call to method First | provenance | | +| CollectionFlow.cs:375:34:375:40 | element : A | CollectionFlow.cs:375:55:375:61 | access to parameter element : A | provenance | | +| CollectionFlow.cs:375:46:375:49 | [post] access to parameter list : List [element] : A | CollectionFlow.cs:375:26:375:29 | list [Return] : List [element] : A | provenance | | +| CollectionFlow.cs:375:55:375:61 | access to parameter element : A | CollectionFlow.cs:375:46:375:49 | [post] access to parameter list : List [element] : A | provenance | MaD:3 | +| CollectionFlow.cs:379:13:379:13 | access to local variable a : A | CollectionFlow.cs:381:23:381:23 | access to local variable a : A | provenance | | +| CollectionFlow.cs:379:17:379:23 | object creation of type A : A | CollectionFlow.cs:379:13:379:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:381:17:381:20 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:382:14:382:17 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:381:17:381:20 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:383:22:383:25 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:381:17:381:20 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:384:24:384:27 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:381:23:381:23 | access to local variable a : A | CollectionFlow.cs:375:34:375:40 | element : A | provenance | | +| CollectionFlow.cs:381:23:381:23 | access to local variable a : A | CollectionFlow.cs:381:17:381:20 | [post] access to local variable list : List [element] : A | provenance | MaD:3 | +| CollectionFlow.cs:382:14:382:17 | access to local variable list : List [element] : A | CollectionFlow.cs:382:14:382:20 | access to indexer | provenance | MaD:11 | +| CollectionFlow.cs:383:22:383:25 | access to local variable list : List [element] : A | CollectionFlow.cs:18:49:18:52 | list : List [element] : A | provenance | | +| CollectionFlow.cs:384:24:384:27 | access to local variable list : List [element] : A | CollectionFlow.cs:28:43:28:46 | list : List [element] : A | provenance | | +| CollectionFlow.cs:384:24:384:27 | access to local variable list : List [element] : A | CollectionFlow.cs:384:14:384:28 | call to method ListFirst | provenance | MaD:11 | +| CollectionFlow.cs:398:20:398:26 | object creation of type A : A | CollectionFlow.cs:40:49:40:52 | args : A[] [element] : A | provenance | | +| CollectionFlow.cs:399:26:399:32 | object creation of type A : A | CollectionFlow.cs:40:49:40:52 | args : A[] [element] : A | provenance | | +| CollectionFlow.cs:400:26:400:32 | object creation of type A : A | CollectionFlow.cs:40:49:40:52 | args : A[] [element] : A | provenance | | +| CollectionFlow.cs:401:20:401:38 | array creation of type A[] : null [element] : A | CollectionFlow.cs:40:49:40:52 | args : null [element] : A | provenance | | +| CollectionFlow.cs:401:28:401:38 | { ..., ... } : null [element] : A | CollectionFlow.cs:401:20:401:38 | array creation of type A[] : null [element] : A | provenance | | +| CollectionFlow.cs:401:30:401:36 | object creation of type A : A | CollectionFlow.cs:401:28:401:38 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:414:30:414:36 | object creation of type A : A | CollectionFlow.cs:42:70:42:73 | args : IEnumerable [element] : A | provenance | | +| CollectionFlow.cs:415:36:415:42 | object creation of type A : A | CollectionFlow.cs:42:70:42:73 | args : IEnumerable [element] : A | provenance | | +| CollectionFlow.cs:416:36:416:42 | object creation of type A : A | CollectionFlow.cs:42:70:42:73 | args : IEnumerable [element] : A | provenance | | +| CollectionFlow.cs:417:30:417:38 | [...] : IEnumerable [element] : A | CollectionFlow.cs:42:70:42:73 | args : IEnumerable [element] : A | provenance | | +| CollectionFlow.cs:417:31:417:37 | object creation of type A : A | CollectionFlow.cs:417:30:417:38 | [...] : IEnumerable [element] : A | provenance | | +| CollectionFlow.cs:439:13:439:13 | access to local variable a : A | CollectionFlow.cs:441:20:441:20 | access to local variable a : A | provenance | | +| CollectionFlow.cs:439:17:439:23 | object creation of type A : A | CollectionFlow.cs:439:13:439:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:441:9:441:13 | [post] access to local variable array : MyInlineArray [element] : A | CollectionFlow.cs:442:14:442:18 | access to local variable array : MyInlineArray [element] : A | provenance | | +| CollectionFlow.cs:441:20:441:20 | access to local variable a : A | CollectionFlow.cs:441:9:441:13 | [post] access to local variable array : MyInlineArray [element] : A | provenance | | +| CollectionFlow.cs:442:14:442:18 | access to local variable array : MyInlineArray [element] : A | CollectionFlow.cs:442:14:442:21 | access to array element | provenance | | +| CollectionFlow.cs:460:13:460:13 | access to local variable a : A | CollectionFlow.cs:461:22:461:22 | access to local variable a : A | provenance | | +| CollectionFlow.cs:460:17:460:23 | object creation of type A : A | CollectionFlow.cs:460:13:460:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:461:13:461:17 | access to local variable array : A[] [element] : A | CollectionFlow.cs:462:14:462:18 | access to local variable array : A[] [element] : A | provenance | | +| CollectionFlow.cs:461:21:461:23 | [...] : A[] [element] : A | CollectionFlow.cs:461:13:461:17 | access to local variable array : A[] [element] : A | provenance | | +| CollectionFlow.cs:461:22:461:22 | access to local variable a : A | CollectionFlow.cs:461:21:461:23 | [...] : A[] [element] : A | provenance | | +| CollectionFlow.cs:462:14:462:18 | access to local variable array : A[] [element] : A | CollectionFlow.cs:462:14:462:21 | access to array element | provenance | | +| CollectionFlow.cs:467:13:467:13 | access to local variable a : A | CollectionFlow.cs:468:22:468:22 | access to local variable a : A | provenance | | +| CollectionFlow.cs:467:17:467:23 | object creation of type A : A | CollectionFlow.cs:467:13:467:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:468:17:468:17 | access to local variable l : List [element] : A | CollectionFlow.cs:469:14:469:14 | access to local variable l : List [element] : A | provenance | | +| CollectionFlow.cs:468:21:468:23 | [...] : List [element] : A | CollectionFlow.cs:468:17:468:17 | access to local variable l : List [element] : A | provenance | | +| CollectionFlow.cs:468:22:468:22 | access to local variable a : A | CollectionFlow.cs:468:21:468:23 | [...] : List [element] : A | provenance | | +| CollectionFlow.cs:469:14:469:14 | access to local variable l : List [element] : A | CollectionFlow.cs:469:14:469:17 | access to indexer | provenance | MaD:11 | +| CollectionFlow.cs:480:13:480:13 | access to local variable a : A | CollectionFlow.cs:481:21:481:21 | access to local variable a : A | provenance | | +| CollectionFlow.cs:480:17:480:23 | object creation of type A : A | CollectionFlow.cs:480:13:480:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:481:13:481:16 | access to local variable temp : A[] [element] : A | CollectionFlow.cs:482:22:482:28 | .. access to local variable temp : A[] [element] : A | provenance | | +| CollectionFlow.cs:481:20:481:22 | [...] : A[] [element] : A | CollectionFlow.cs:481:13:481:16 | access to local variable temp : A[] [element] : A | provenance | | +| CollectionFlow.cs:481:21:481:21 | access to local variable a : A | CollectionFlow.cs:481:20:481:22 | [...] : A[] [element] : A | provenance | | +| CollectionFlow.cs:482:13:482:17 | access to local variable array : A[] [element] : A | CollectionFlow.cs:483:14:483:18 | access to local variable array : A[] [element] : A | provenance | | +| CollectionFlow.cs:482:22:482:28 | .. access to local variable temp : A[] [element] : A | CollectionFlow.cs:482:13:482:17 | access to local variable array : A[] [element] : A | provenance | | +| CollectionFlow.cs:483:14:483:18 | access to local variable array : A[] [element] : A | CollectionFlow.cs:483:14:483:21 | access to array element | provenance | | +| CollectionFlow.cs:520:13:520:13 | access to local variable a : A | CollectionFlow.cs:521:40:521:40 | access to local variable a : A | provenance | | +| CollectionFlow.cs:520:17:520:23 | object creation of type A : A | CollectionFlow.cs:520:13:520:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:521:17:521:20 | access to local variable span : Span [element] : A | CollectionFlow.cs:522:14:522:17 | access to local variable span : Span [element] : A | provenance | | +| CollectionFlow.cs:521:24:521:41 | object creation of type Span : Span [element] : A | CollectionFlow.cs:521:17:521:20 | access to local variable span : Span [element] : A | provenance | | +| CollectionFlow.cs:521:40:521:40 | access to local variable a : A | CollectionFlow.cs:521:24:521:41 | object creation of type Span : Span [element] : A | provenance | MaD:23 | +| CollectionFlow.cs:522:14:522:17 | access to local variable span : Span [element] : A | CollectionFlow.cs:522:14:522:20 | access to indexer | provenance | MaD:26 | +| CollectionFlow.cs:527:13:527:13 | access to local variable a : A | CollectionFlow.cs:528:40:528:40 | access to local variable a : A | provenance | | +| CollectionFlow.cs:527:17:527:23 | object creation of type A : A | CollectionFlow.cs:527:13:527:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:528:17:528:20 | access to local variable span : Span [element] : A | CollectionFlow.cs:529:19:529:22 | access to local variable span : Span [element] : A | provenance | | +| CollectionFlow.cs:528:24:528:41 | object creation of type Span : Span [element] : A | CollectionFlow.cs:528:17:528:20 | access to local variable span : Span [element] : A | provenance | | +| CollectionFlow.cs:528:40:528:40 | access to local variable a : A | CollectionFlow.cs:528:24:528:41 | object creation of type Span : Span [element] : A | provenance | MaD:23 | +| CollectionFlow.cs:529:13:529:15 | access to local variable arr : T[] [element] : A | CollectionFlow.cs:530:14:530:16 | access to local variable arr : T[] [element] : A | provenance | | +| CollectionFlow.cs:529:19:529:22 | access to local variable span : Span [element] : A | CollectionFlow.cs:529:19:529:32 | call to method ToArray : T[] [element] : A | provenance | MaD:25 | +| CollectionFlow.cs:529:19:529:32 | call to method ToArray : T[] [element] : A | CollectionFlow.cs:529:13:529:15 | access to local variable arr : T[] [element] : A | provenance | | +| CollectionFlow.cs:530:14:530:16 | access to local variable arr : T[] [element] : A | CollectionFlow.cs:530:14:530:19 | access to array element | provenance | | +| CollectionFlow.cs:535:13:535:13 | access to local variable a : A | CollectionFlow.cs:536:21:536:21 | access to local variable a : A | provenance | | +| CollectionFlow.cs:535:17:535:23 | object creation of type A : A | CollectionFlow.cs:535:13:535:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:536:9:536:14 | [post] access to parameter target : Span [element] : A | CollectionFlow.cs:537:14:537:19 | access to parameter target : Span [element] : A | provenance | | +| CollectionFlow.cs:536:21:536:21 | access to local variable a : A | CollectionFlow.cs:536:9:536:14 | [post] access to parameter target : Span [element] : A | provenance | MaD:22 | +| CollectionFlow.cs:537:14:537:19 | access to parameter target : Span [element] : A | CollectionFlow.cs:537:14:537:22 | access to indexer | provenance | MaD:26 | +| CollectionFlow.cs:542:13:542:18 | access to local variable source : Span [element] : A | CollectionFlow.cs:543:9:543:14 | access to local variable source : Span [element] : A | provenance | | +| CollectionFlow.cs:542:22:542:51 | object creation of type Span : Span [element] : A | CollectionFlow.cs:542:13:542:18 | access to local variable source : Span [element] : A | provenance | | +| CollectionFlow.cs:542:34:542:50 | array creation of type A[] : null [element] : A | CollectionFlow.cs:542:22:542:51 | object creation of type Span : Span [element] : A | provenance | MaD:24 | +| CollectionFlow.cs:542:40:542:50 | { ..., ... } : null [element] : A | CollectionFlow.cs:542:34:542:50 | array creation of type A[] : null [element] : A | provenance | | +| CollectionFlow.cs:542:42:542:48 | object creation of type A : A | CollectionFlow.cs:542:40:542:50 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:543:9:543:14 | access to local variable source : Span [element] : A | CollectionFlow.cs:543:23:543:28 | [post] access to parameter target : Span [element] : A | provenance | MaD:21 | +| CollectionFlow.cs:543:23:543:28 | [post] access to parameter target : Span [element] : A | CollectionFlow.cs:544:14:544:19 | access to parameter target : Span [element] : A | provenance | | +| CollectionFlow.cs:544:14:544:19 | access to parameter target : Span [element] : A | CollectionFlow.cs:544:14:544:22 | access to indexer | provenance | MaD:26 | +| CollectionFlow.cs:549:13:549:13 | access to local variable a : A | CollectionFlow.cs:550:60:550:60 | access to local variable a : A | provenance | | +| CollectionFlow.cs:549:17:549:23 | object creation of type A : A | CollectionFlow.cs:549:13:549:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:550:25:550:28 | access to local variable span : ReadOnlySpan [element] : A | CollectionFlow.cs:551:14:551:17 | access to local variable span : ReadOnlySpan [element] : A | provenance | | +| CollectionFlow.cs:550:32:550:63 | object creation of type ReadOnlySpan : ReadOnlySpan [element] : A | CollectionFlow.cs:550:25:550:28 | access to local variable span : ReadOnlySpan [element] : A | provenance | | +| CollectionFlow.cs:550:52:550:62 | array creation of type A[] : null [element] : A | CollectionFlow.cs:550:32:550:63 | object creation of type ReadOnlySpan : ReadOnlySpan [element] : A | provenance | MaD:19 | +| CollectionFlow.cs:550:58:550:62 | { ..., ... } : null [element] : A | CollectionFlow.cs:550:52:550:62 | array creation of type A[] : null [element] : A | provenance | | +| CollectionFlow.cs:550:60:550:60 | access to local variable a : A | CollectionFlow.cs:550:58:550:62 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:551:14:551:17 | access to local variable span : ReadOnlySpan [element] : A | CollectionFlow.cs:551:14:551:20 | access to indexer | provenance | MaD:20 | nodes | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | semmle.label | ts : A[] [element] : A | | CollectionFlow.cs:14:40:14:41 | ts : null [element] : A | semmle.label | ts : null [element] : A | | CollectionFlow.cs:14:52:14:53 | access to parameter ts : A[] [element] : A | semmle.label | access to parameter ts : A[] [element] : A | | CollectionFlow.cs:14:52:14:53 | access to parameter ts : null [element] : A | semmle.label | access to parameter ts : null [element] : A | | CollectionFlow.cs:14:52:14:56 | access to array element | semmle.label | access to array element | -| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | semmle.label | list : List [element] : A | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | semmle.label | access to parameter list : List [element] : A | -| CollectionFlow.cs:16:63:16:69 | access to indexer | semmle.label | access to indexer | -| CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | semmle.label | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:18:75:18:78 | access to parameter dict : Dictionary [element, property Value] : A | semmle.label | access to parameter dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:18:75:18:81 | access to indexer | semmle.label | access to indexer | -| CollectionFlow.cs:20:59:20:62 | dict : Dictionary [element, property Key] : A | semmle.label | dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:20:73:20:76 | access to parameter dict : Dictionary [element, property Key] : A | semmle.label | access to parameter dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:20:73:20:81 | access to property Keys : ICollection [element] : A | semmle.label | access to property Keys : ICollection [element] : A | -| CollectionFlow.cs:20:73:20:89 | call to method First | semmle.label | call to method First | -| CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | semmle.label | ts : A[] [element] : A | -| CollectionFlow.cs:22:34:22:35 | ts : null [element] : A | semmle.label | ts : null [element] : A | -| CollectionFlow.cs:22:41:22:42 | access to parameter ts : A[] [element] : A | semmle.label | access to parameter ts : A[] [element] : A | -| CollectionFlow.cs:22:41:22:42 | access to parameter ts : null [element] : A | semmle.label | access to parameter ts : null [element] : A | -| CollectionFlow.cs:22:41:22:45 | access to array element : A | semmle.label | access to array element : A | -| CollectionFlow.cs:22:41:22:45 | access to array element : A | semmle.label | access to array element : A | -| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | semmle.label | list : List [element] : A | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | semmle.label | access to parameter list : List [element] : A | -| CollectionFlow.cs:24:52:24:58 | access to indexer : A | semmle.label | access to indexer : A | -| CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | semmle.label | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary [element, property Value] : A | semmle.label | access to parameter dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:26:67:26:73 | access to indexer : A | semmle.label | access to indexer : A | -| CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | semmle.label | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:28:68:28:71 | access to parameter dict : Dictionary [element, property Value] : A | semmle.label | access to parameter dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:28:68:28:79 | call to method First> : KeyValuePair [property Value] : A | semmle.label | call to method First> : KeyValuePair [property Value] : A | -| CollectionFlow.cs:28:68:28:85 | access to property Value : A | semmle.label | access to property Value : A | -| CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | semmle.label | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary [element, property Value] : A | semmle.label | access to parameter dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | semmle.label | access to property Values : ICollection [element] : A | -| CollectionFlow.cs:30:69:30:87 | call to method First : A | semmle.label | call to method First : A | -| CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | semmle.label | dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary [element, property Key] : A | semmle.label | access to parameter dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | semmle.label | access to property Keys : ICollection [element] : A | -| CollectionFlow.cs:32:67:32:83 | call to method First : A | semmle.label | call to method First : A | -| CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | semmle.label | dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary [element, property Key] : A | semmle.label | access to parameter dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:34:66:34:77 | call to method First> : KeyValuePair [property Key] : A | semmle.label | call to method First> : KeyValuePair [property Key] : A | -| CollectionFlow.cs:34:66:34:81 | access to property Key : A | semmle.label | access to property Key : A | -| CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | semmle.label | args : A[] [element] : A | -| CollectionFlow.cs:36:49:36:52 | args : null [element] : A | semmle.label | args : null [element] : A | -| CollectionFlow.cs:36:63:36:66 | access to parameter args : A[] [element] : A | semmle.label | access to parameter args : A[] [element] : A | -| CollectionFlow.cs:36:63:36:66 | access to parameter args : null [element] : A | semmle.label | access to parameter args : null [element] : A | -| CollectionFlow.cs:36:63:36:69 | access to array element | semmle.label | access to array element | -| CollectionFlow.cs:38:70:38:73 | args : IEnumerable [element] : A | semmle.label | args : IEnumerable [element] : A | -| CollectionFlow.cs:38:84:38:87 | access to parameter args : IEnumerable [element] : A | semmle.label | access to parameter args : IEnumerable [element] : A | -| CollectionFlow.cs:38:84:38:95 | call to method First | semmle.label | call to method First | -| CollectionFlow.cs:42:13:42:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:42:17:42:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:43:13:43:15 | access to local variable as : null [element] : A | semmle.label | access to local variable as : null [element] : A | -| CollectionFlow.cs:43:25:43:29 | { ..., ... } : null [element] : A | semmle.label | { ..., ... } : null [element] : A | -| CollectionFlow.cs:43:27:43:27 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:44:14:44:16 | access to local variable as : null [element] : A | semmle.label | access to local variable as : null [element] : A | -| CollectionFlow.cs:44:14:44:19 | access to array element | semmle.label | access to array element | -| CollectionFlow.cs:45:18:45:20 | access to local variable as : null [element] : A | semmle.label | access to local variable as : null [element] : A | -| CollectionFlow.cs:46:14:46:23 | call to method First | semmle.label | call to method First | -| CollectionFlow.cs:46:20:46:22 | access to local variable as : null [element] : A | semmle.label | access to local variable as : null [element] : A | -| CollectionFlow.cs:60:13:60:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:60:17:60:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:61:13:61:13 | access to local variable c : CollectionFlow [field As, element] : A | semmle.label | access to local variable c : CollectionFlow [field As, element] : A | -| CollectionFlow.cs:61:38:61:57 | { ..., ... } : CollectionFlow [field As, element] : A | semmle.label | { ..., ... } : CollectionFlow [field As, element] : A | -| CollectionFlow.cs:61:45:61:55 | { ..., ... } : A[] [element] : A | semmle.label | { ..., ... } : A[] [element] : A | -| CollectionFlow.cs:61:53:61:53 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:62:14:62:14 | access to local variable c : CollectionFlow [field As, element] : A | semmle.label | access to local variable c : CollectionFlow [field As, element] : A | -| CollectionFlow.cs:62:14:62:17 | access to field As : A[] [element] : A | semmle.label | access to field As : A[] [element] : A | -| CollectionFlow.cs:62:14:62:20 | access to array element | semmle.label | access to array element | -| CollectionFlow.cs:63:18:63:18 | access to local variable c : CollectionFlow [field As, element] : A | semmle.label | access to local variable c : CollectionFlow [field As, element] : A | -| CollectionFlow.cs:63:18:63:21 | access to field As : A[] [element] : A | semmle.label | access to field As : A[] [element] : A | -| CollectionFlow.cs:64:14:64:24 | call to method First | semmle.label | call to method First | -| CollectionFlow.cs:64:20:64:20 | access to local variable c : CollectionFlow [field As, element] : A | semmle.label | access to local variable c : CollectionFlow [field As, element] : A | -| CollectionFlow.cs:64:20:64:23 | access to field As : A[] [element] : A | semmle.label | access to field As : A[] [element] : A | -| CollectionFlow.cs:78:13:78:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:78:17:78:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:80:9:80:11 | [post] access to local variable as : A[] [element] : A | semmle.label | [post] access to local variable as : A[] [element] : A | -| CollectionFlow.cs:80:18:80:18 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:81:14:81:16 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:81:14:81:19 | access to array element | semmle.label | access to array element | -| CollectionFlow.cs:82:18:82:20 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:83:14:83:23 | call to method First | semmle.label | call to method First | -| CollectionFlow.cs:83:20:83:22 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:98:13:98:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:98:17:98:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:100:9:100:12 | [post] access to local variable list : List [element] : A | semmle.label | [post] access to local variable list : List [element] : A | -| CollectionFlow.cs:100:19:100:19 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:101:14:101:17 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | -| CollectionFlow.cs:101:14:101:20 | access to indexer | semmle.label | access to indexer | -| CollectionFlow.cs:102:22:102:25 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | -| CollectionFlow.cs:103:14:103:28 | call to method ListFirst | semmle.label | call to method ListFirst | -| CollectionFlow.cs:103:24:103:27 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | -| CollectionFlow.cs:117:13:117:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:117:17:117:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:118:13:118:16 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | -| CollectionFlow.cs:118:20:118:38 | object creation of type List : List [element] : A | semmle.label | object creation of type List : List [element] : A | -| CollectionFlow.cs:118:36:118:36 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:119:14:119:17 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | -| CollectionFlow.cs:119:14:119:20 | access to indexer | semmle.label | access to indexer | -| CollectionFlow.cs:120:22:120:25 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | -| CollectionFlow.cs:121:14:121:28 | call to method ListFirst | semmle.label | call to method ListFirst | -| CollectionFlow.cs:121:24:121:27 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | -| CollectionFlow.cs:134:13:134:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:134:17:134:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:136:9:136:12 | [post] access to local variable list : List [element] : A | semmle.label | [post] access to local variable list : List [element] : A | -| CollectionFlow.cs:136:18:136:18 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:137:14:137:17 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | -| CollectionFlow.cs:137:14:137:20 | access to indexer | semmle.label | access to indexer | -| CollectionFlow.cs:138:22:138:25 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | -| CollectionFlow.cs:139:14:139:28 | call to method ListFirst | semmle.label | call to method ListFirst | -| CollectionFlow.cs:139:24:139:27 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | -| CollectionFlow.cs:153:13:153:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:153:17:153:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:155:9:155:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | semmle.label | [post] access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:155:19:155:19 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:156:14:156:17 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:156:14:156:20 | access to indexer | semmle.label | access to indexer | -| CollectionFlow.cs:157:23:157:26 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:158:14:158:32 | call to method DictIndexZero | semmle.label | call to method DictIndexZero | -| CollectionFlow.cs:158:28:158:31 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:159:14:159:33 | call to method DictFirstValue | semmle.label | call to method DictFirstValue | -| CollectionFlow.cs:159:29:159:32 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:160:14:160:34 | call to method DictValuesFirst | semmle.label | call to method DictValuesFirst | -| CollectionFlow.cs:160:30:160:33 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:16:44:16:45 | ts : A[] [element] : A | semmle.label | ts : A[] [element] : A | +| CollectionFlow.cs:16:56:16:57 | access to parameter ts : A[] [element] : A | semmle.label | access to parameter ts : A[] [element] : A | +| CollectionFlow.cs:16:56:16:61 | access to array element | semmle.label | access to array element | +| CollectionFlow.cs:18:49:18:52 | list : List [element] : A | semmle.label | list : List [element] : A | +| CollectionFlow.cs:18:63:18:66 | access to parameter list : List [element] : A | semmle.label | access to parameter list : List [element] : A | +| CollectionFlow.cs:18:63:18:69 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:20:61:20:64 | dict : Dictionary [element, property Value] : A | semmle.label | dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:20:75:20:78 | access to parameter dict : Dictionary [element, property Value] : A | semmle.label | access to parameter dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:20:75:20:81 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:22:59:22:62 | dict : Dictionary [element, property Key] : A | semmle.label | dict : Dictionary [element, property Key] : A | +| CollectionFlow.cs:22:73:22:76 | access to parameter dict : Dictionary [element, property Key] : A | semmle.label | access to parameter dict : Dictionary [element, property Key] : A | +| CollectionFlow.cs:22:73:22:81 | access to property Keys : ICollection [element] : A | semmle.label | access to property Keys : ICollection [element] : A | +| CollectionFlow.cs:22:73:22:89 | call to method First | semmle.label | call to method First | +| CollectionFlow.cs:24:34:24:35 | ts : A[] [element] : A | semmle.label | ts : A[] [element] : A | +| CollectionFlow.cs:24:34:24:35 | ts : null [element] : A | semmle.label | ts : null [element] : A | +| CollectionFlow.cs:24:41:24:42 | access to parameter ts : A[] [element] : A | semmle.label | access to parameter ts : A[] [element] : A | +| CollectionFlow.cs:24:41:24:42 | access to parameter ts : null [element] : A | semmle.label | access to parameter ts : null [element] : A | +| CollectionFlow.cs:24:41:24:45 | access to array element : A | semmle.label | access to array element : A | +| CollectionFlow.cs:24:41:24:45 | access to array element : A | semmle.label | access to array element : A | +| CollectionFlow.cs:26:33:26:34 | ts : A[] [element] : A | semmle.label | ts : A[] [element] : A | +| CollectionFlow.cs:26:40:26:41 | access to parameter ts : A[] [element] : A | semmle.label | access to parameter ts : A[] [element] : A | +| CollectionFlow.cs:26:40:26:45 | access to array element : A | semmle.label | access to array element : A | +| CollectionFlow.cs:28:43:28:46 | list : List [element] : A | semmle.label | list : List [element] : A | +| CollectionFlow.cs:28:52:28:55 | access to parameter list : List [element] : A | semmle.label | access to parameter list : List [element] : A | +| CollectionFlow.cs:28:52:28:58 | access to indexer : A | semmle.label | access to indexer : A | +| CollectionFlow.cs:30:58:30:61 | dict : Dictionary [element, property Value] : A | semmle.label | dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:30:67:30:70 | access to parameter dict : Dictionary [element, property Value] : A | semmle.label | access to parameter dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:30:67:30:73 | access to indexer : A | semmle.label | access to indexer : A | +| CollectionFlow.cs:32:59:32:62 | dict : Dictionary [element, property Value] : A | semmle.label | dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:32:68:32:71 | access to parameter dict : Dictionary [element, property Value] : A | semmle.label | access to parameter dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:32:68:32:79 | call to method First> : KeyValuePair [property Value] : A | semmle.label | call to method First> : KeyValuePair [property Value] : A | +| CollectionFlow.cs:32:68:32:85 | access to property Value : A | semmle.label | access to property Value : A | +| CollectionFlow.cs:34:60:34:63 | dict : Dictionary [element, property Value] : A | semmle.label | dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:34:69:34:72 | access to parameter dict : Dictionary [element, property Value] : A | semmle.label | access to parameter dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:34:69:34:79 | access to property Values : ICollection [element] : A | semmle.label | access to property Values : ICollection [element] : A | +| CollectionFlow.cs:34:69:34:87 | call to method First : A | semmle.label | call to method First : A | +| CollectionFlow.cs:36:58:36:61 | dict : Dictionary [element, property Key] : A | semmle.label | dict : Dictionary [element, property Key] : A | +| CollectionFlow.cs:36:67:36:70 | access to parameter dict : Dictionary [element, property Key] : A | semmle.label | access to parameter dict : Dictionary [element, property Key] : A | +| CollectionFlow.cs:36:67:36:75 | access to property Keys : ICollection [element] : A | semmle.label | access to property Keys : ICollection [element] : A | +| CollectionFlow.cs:36:67:36:83 | call to method First : A | semmle.label | call to method First : A | +| CollectionFlow.cs:38:57:38:60 | dict : Dictionary [element, property Key] : A | semmle.label | dict : Dictionary [element, property Key] : A | +| CollectionFlow.cs:38:66:38:69 | access to parameter dict : Dictionary [element, property Key] : A | semmle.label | access to parameter dict : Dictionary [element, property Key] : A | +| CollectionFlow.cs:38:66:38:77 | call to method First> : KeyValuePair [property Key] : A | semmle.label | call to method First> : KeyValuePair [property Key] : A | +| CollectionFlow.cs:38:66:38:81 | access to property Key : A | semmle.label | access to property Key : A | +| CollectionFlow.cs:40:49:40:52 | args : A[] [element] : A | semmle.label | args : A[] [element] : A | +| CollectionFlow.cs:40:49:40:52 | args : null [element] : A | semmle.label | args : null [element] : A | +| CollectionFlow.cs:40:63:40:66 | access to parameter args : A[] [element] : A | semmle.label | access to parameter args : A[] [element] : A | +| CollectionFlow.cs:40:63:40:66 | access to parameter args : null [element] : A | semmle.label | access to parameter args : null [element] : A | +| CollectionFlow.cs:40:63:40:69 | access to array element | semmle.label | access to array element | +| CollectionFlow.cs:42:70:42:73 | args : IEnumerable [element] : A | semmle.label | args : IEnumerable [element] : A | +| CollectionFlow.cs:42:84:42:87 | access to parameter args : IEnumerable [element] : A | semmle.label | access to parameter args : IEnumerable [element] : A | +| CollectionFlow.cs:42:84:42:95 | call to method First | semmle.label | call to method First | +| CollectionFlow.cs:46:13:46:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:46:17:46:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:47:13:47:15 | access to local variable as : null [element] : A | semmle.label | access to local variable as : null [element] : A | +| CollectionFlow.cs:47:25:47:29 | { ..., ... } : null [element] : A | semmle.label | { ..., ... } : null [element] : A | +| CollectionFlow.cs:47:27:47:27 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:48:14:48:16 | access to local variable as : null [element] : A | semmle.label | access to local variable as : null [element] : A | +| CollectionFlow.cs:48:14:48:19 | access to array element | semmle.label | access to array element | +| CollectionFlow.cs:49:18:49:20 | access to local variable as : null [element] : A | semmle.label | access to local variable as : null [element] : A | +| CollectionFlow.cs:50:14:50:23 | call to method First | semmle.label | call to method First | +| CollectionFlow.cs:50:20:50:22 | access to local variable as : null [element] : A | semmle.label | access to local variable as : null [element] : A | +| CollectionFlow.cs:64:13:64:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:64:17:64:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:65:13:65:13 | access to local variable c : CollectionFlow [field As, element] : A | semmle.label | access to local variable c : CollectionFlow [field As, element] : A | +| CollectionFlow.cs:65:38:65:57 | { ..., ... } : CollectionFlow [field As, element] : A | semmle.label | { ..., ... } : CollectionFlow [field As, element] : A | +| CollectionFlow.cs:65:45:65:55 | { ..., ... } : A[] [element] : A | semmle.label | { ..., ... } : A[] [element] : A | +| CollectionFlow.cs:65:53:65:53 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:66:14:66:14 | access to local variable c : CollectionFlow [field As, element] : A | semmle.label | access to local variable c : CollectionFlow [field As, element] : A | +| CollectionFlow.cs:66:14:66:17 | access to field As : A[] [element] : A | semmle.label | access to field As : A[] [element] : A | +| CollectionFlow.cs:66:14:66:20 | access to array element | semmle.label | access to array element | +| CollectionFlow.cs:67:18:67:18 | access to local variable c : CollectionFlow [field As, element] : A | semmle.label | access to local variable c : CollectionFlow [field As, element] : A | +| CollectionFlow.cs:67:18:67:21 | access to field As : A[] [element] : A | semmle.label | access to field As : A[] [element] : A | +| CollectionFlow.cs:68:14:68:24 | call to method First | semmle.label | call to method First | +| CollectionFlow.cs:68:20:68:20 | access to local variable c : CollectionFlow [field As, element] : A | semmle.label | access to local variable c : CollectionFlow [field As, element] : A | +| CollectionFlow.cs:68:20:68:23 | access to field As : A[] [element] : A | semmle.label | access to field As : A[] [element] : A | +| CollectionFlow.cs:82:13:82:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:82:17:82:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:83:13:83:13 | access to local variable c : CollectionFlow [field As, element] : A | semmle.label | access to local variable c : CollectionFlow [field As, element] : A | +| CollectionFlow.cs:83:38:83:58 | { ..., ... } : CollectionFlow [field As, element] : A | semmle.label | { ..., ... } : CollectionFlow [field As, element] : A | +| CollectionFlow.cs:83:45:83:56 | { ..., ... } : A[] [element] : A | semmle.label | { ..., ... } : A[] [element] : A | +| CollectionFlow.cs:83:54:83:54 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:84:14:84:14 | access to local variable c : CollectionFlow [field As, element] : A | semmle.label | access to local variable c : CollectionFlow [field As, element] : A | +| CollectionFlow.cs:84:14:84:17 | access to field As : A[] [element] : A | semmle.label | access to field As : A[] [element] : A | +| CollectionFlow.cs:84:14:84:21 | access to array element | semmle.label | access to array element | +| CollectionFlow.cs:85:22:85:22 | access to local variable c : CollectionFlow [field As, element] : A | semmle.label | access to local variable c : CollectionFlow [field As, element] : A | +| CollectionFlow.cs:85:22:85:25 | access to field As : A[] [element] : A | semmle.label | access to field As : A[] [element] : A | +| CollectionFlow.cs:86:14:86:23 | call to method Last | semmle.label | call to method Last | +| CollectionFlow.cs:86:19:86:19 | access to local variable c : CollectionFlow [field As, element] : A | semmle.label | access to local variable c : CollectionFlow [field As, element] : A | +| CollectionFlow.cs:86:19:86:22 | access to field As : A[] [element] : A | semmle.label | access to field As : A[] [element] : A | +| CollectionFlow.cs:91:13:91:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:91:17:91:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:93:9:93:11 | [post] access to local variable as : A[] [element] : A | semmle.label | [post] access to local variable as : A[] [element] : A | +| CollectionFlow.cs:93:18:93:18 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:94:14:94:16 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | +| CollectionFlow.cs:94:14:94:19 | access to array element | semmle.label | access to array element | +| CollectionFlow.cs:95:18:95:20 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | +| CollectionFlow.cs:96:14:96:23 | call to method First | semmle.label | call to method First | +| CollectionFlow.cs:96:20:96:22 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | +| CollectionFlow.cs:111:13:111:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:111:17:111:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:113:9:113:11 | [post] access to local variable as : A[] [element] : A | semmle.label | [post] access to local variable as : A[] [element] : A | +| CollectionFlow.cs:113:19:113:19 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:114:14:114:16 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | +| CollectionFlow.cs:114:14:114:20 | access to array element | semmle.label | access to array element | +| CollectionFlow.cs:115:22:115:24 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | +| CollectionFlow.cs:116:14:116:22 | call to method Last | semmle.label | call to method Last | +| CollectionFlow.cs:116:19:116:21 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | +| CollectionFlow.cs:121:13:121:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:121:17:121:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:123:9:123:12 | [post] access to local variable list : List [element] : A | semmle.label | [post] access to local variable list : List [element] : A | +| CollectionFlow.cs:123:19:123:19 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:124:14:124:17 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | +| CollectionFlow.cs:124:14:124:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:125:22:125:25 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | +| CollectionFlow.cs:126:14:126:28 | call to method ListFirst | semmle.label | call to method ListFirst | +| CollectionFlow.cs:126:24:126:27 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | +| CollectionFlow.cs:140:13:140:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:140:17:140:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:141:13:141:16 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | +| CollectionFlow.cs:141:20:141:38 | object creation of type List : List [element] : A | semmle.label | object creation of type List : List [element] : A | +| CollectionFlow.cs:141:36:141:36 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:142:14:142:17 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | +| CollectionFlow.cs:142:14:142:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:143:22:143:25 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | +| CollectionFlow.cs:144:14:144:28 | call to method ListFirst | semmle.label | call to method ListFirst | +| CollectionFlow.cs:144:24:144:27 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | +| CollectionFlow.cs:157:13:157:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:157:17:157:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:159:9:159:12 | [post] access to local variable list : List [element] : A | semmle.label | [post] access to local variable list : List [element] : A | +| CollectionFlow.cs:159:18:159:18 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:160:14:160:17 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | +| CollectionFlow.cs:160:14:160:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:161:22:161:25 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | +| CollectionFlow.cs:162:14:162:28 | call to method ListFirst | semmle.label | call to method ListFirst | +| CollectionFlow.cs:162:24:162:27 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | | CollectionFlow.cs:176:13:176:13 | access to local variable a : A | semmle.label | access to local variable a : A | | CollectionFlow.cs:176:17:176:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:177:13:177:16 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:177:20:177:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | semmle.label | object creation of type Dictionary : Dictionary [element, property Value] : A | -| CollectionFlow.cs:177:52:177:52 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:178:14:178:17 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:178:14:178:20 | access to indexer | semmle.label | access to indexer | -| CollectionFlow.cs:179:23:179:26 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:180:14:180:32 | call to method DictIndexZero | semmle.label | call to method DictIndexZero | -| CollectionFlow.cs:180:28:180:31 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:181:14:181:33 | call to method DictFirstValue | semmle.label | call to method DictFirstValue | -| CollectionFlow.cs:181:29:181:32 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:182:14:182:34 | call to method DictValuesFirst | semmle.label | call to method DictValuesFirst | -| CollectionFlow.cs:182:30:182:33 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:197:13:197:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:197:17:197:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:198:13:198:16 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:198:20:198:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | semmle.label | object creation of type Dictionary : Dictionary [element, property Value] : A | -| CollectionFlow.cs:198:53:198:53 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:199:14:199:17 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:199:14:199:20 | access to indexer | semmle.label | access to indexer | -| CollectionFlow.cs:200:23:200:26 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:201:14:201:32 | call to method DictIndexZero | semmle.label | call to method DictIndexZero | -| CollectionFlow.cs:201:28:201:31 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:202:14:202:33 | call to method DictFirstValue | semmle.label | call to method DictFirstValue | -| CollectionFlow.cs:202:29:202:32 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:203:14:203:34 | call to method DictValuesFirst | semmle.label | call to method DictValuesFirst | -| CollectionFlow.cs:203:30:203:33 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:219:13:219:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:219:17:219:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:220:13:220:16 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:220:20:220:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | semmle.label | object creation of type Dictionary : Dictionary [element, property Key] : A | -| CollectionFlow.cs:220:49:220:49 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:221:14:221:17 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:221:14:221:22 | access to property Keys : Dictionary.KeyCollection [element] : A | semmle.label | access to property Keys : Dictionary.KeyCollection [element] : A | -| CollectionFlow.cs:221:14:221:30 | call to method First | semmle.label | call to method First | -| CollectionFlow.cs:222:21:222:24 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:223:14:223:32 | call to method DictKeysFirst | semmle.label | call to method DictKeysFirst | -| CollectionFlow.cs:223:28:223:31 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:224:14:224:31 | call to method DictFirstKey | semmle.label | call to method DictFirstKey | -| CollectionFlow.cs:224:27:224:30 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:238:13:238:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:238:17:238:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:239:13:239:16 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:239:20:239:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | semmle.label | object creation of type Dictionary : Dictionary [element, property Key] : A | -| CollectionFlow.cs:239:48:239:48 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:240:14:240:17 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:240:14:240:22 | access to property Keys : Dictionary.KeyCollection [element] : A | semmle.label | access to property Keys : Dictionary.KeyCollection [element] : A | -| CollectionFlow.cs:240:14:240:30 | call to method First | semmle.label | call to method First | -| CollectionFlow.cs:241:21:241:24 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:242:14:242:32 | call to method DictKeysFirst | semmle.label | call to method DictKeysFirst | -| CollectionFlow.cs:242:28:242:31 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:243:14:243:31 | call to method DictFirstKey | semmle.label | call to method DictFirstKey | -| CollectionFlow.cs:243:27:243:30 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:257:13:257:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:257:17:257:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:258:13:258:15 | access to local variable as : null [element] : A | semmle.label | access to local variable as : null [element] : A | -| CollectionFlow.cs:258:25:258:29 | { ..., ... } : null [element] : A | semmle.label | { ..., ... } : null [element] : A | -| CollectionFlow.cs:258:27:258:27 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:259:27:259:29 | access to local variable as : null [element] : A | semmle.label | access to local variable as : null [element] : A | -| CollectionFlow.cs:260:18:260:18 | access to local variable x | semmle.label | access to local variable x | -| CollectionFlow.cs:272:13:272:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:272:17:272:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:273:13:273:15 | access to local variable as : null [element] : A | semmle.label | access to local variable as : null [element] : A | -| CollectionFlow.cs:273:25:273:29 | { ..., ... } : null [element] : A | semmle.label | { ..., ... } : null [element] : A | -| CollectionFlow.cs:273:27:273:27 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:274:13:274:22 | access to local variable enumerator : IEnumerator [property Current] : A | semmle.label | access to local variable enumerator : IEnumerator [property Current] : A | -| CollectionFlow.cs:274:26:274:28 | access to local variable as : null [element] : A | semmle.label | access to local variable as : null [element] : A | -| CollectionFlow.cs:274:26:274:44 | call to method GetEnumerator : IEnumerator [property Current] : A | semmle.label | call to method GetEnumerator : IEnumerator [property Current] : A | -| CollectionFlow.cs:276:18:276:27 | access to local variable enumerator : IEnumerator [property Current] : A | semmle.label | access to local variable enumerator : IEnumerator [property Current] : A | -| CollectionFlow.cs:276:18:276:35 | access to property Current | semmle.label | access to property Current | -| CollectionFlow.cs:289:13:289:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:289:17:289:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:291:9:291:12 | [post] access to local variable list : List [element] : A | semmle.label | [post] access to local variable list : List [element] : A | -| CollectionFlow.cs:291:18:291:18 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:292:13:292:22 | access to local variable enumerator : List.Enumerator [property Current] : A | semmle.label | access to local variable enumerator : List.Enumerator [property Current] : A | -| CollectionFlow.cs:292:13:292:22 | access to local variable enumerator : List.Enumerator [property Current] : A | semmle.label | access to local variable enumerator : List.Enumerator [property Current] : A | -| CollectionFlow.cs:292:26:292:29 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | -| CollectionFlow.cs:292:26:292:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | semmle.label | call to method GetEnumerator : List.Enumerator [property Current] : A | -| CollectionFlow.cs:292:26:292:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | semmle.label | call to method GetEnumerator : List.Enumerator [property Current] : A | -| CollectionFlow.cs:294:18:294:27 | access to local variable enumerator : List.Enumerator [property Current] : A | semmle.label | access to local variable enumerator : List.Enumerator [property Current] : A | -| CollectionFlow.cs:294:18:294:27 | access to local variable enumerator : List.Enumerator [property Current] : A | semmle.label | access to local variable enumerator : List.Enumerator [property Current] : A | -| CollectionFlow.cs:294:18:294:35 | access to property Current | semmle.label | access to property Current | -| CollectionFlow.cs:308:13:308:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:308:17:308:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:310:9:310:12 | [post] access to local variable list : List [element, property Key] : A | semmle.label | [post] access to local variable list : List [element, property Key] : A | -| CollectionFlow.cs:310:18:310:47 | object creation of type KeyValuePair : KeyValuePair [property Key] : A | semmle.label | object creation of type KeyValuePair : KeyValuePair [property Key] : A | -| CollectionFlow.cs:310:43:310:43 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:311:9:311:12 | access to local variable list : List [element, property Key] : A | semmle.label | access to local variable list : List [element, property Key] : A | -| CollectionFlow.cs:311:21:311:23 | kvp : KeyValuePair [property Key] : A | semmle.label | kvp : KeyValuePair [property Key] : A | -| CollectionFlow.cs:313:18:313:20 | access to parameter kvp : KeyValuePair [property Key] : A | semmle.label | access to parameter kvp : KeyValuePair [property Key] : A | -| CollectionFlow.cs:313:18:313:24 | access to property Key | semmle.label | access to property Key | -| CollectionFlow.cs:330:23:330:27 | array [Return] : A[] [element] : A | semmle.label | array [Return] : A[] [element] : A | -| CollectionFlow.cs:330:32:330:38 | element : A | semmle.label | element : A | -| CollectionFlow.cs:330:44:330:48 | [post] access to parameter array : A[] [element] : A | semmle.label | [post] access to parameter array : A[] [element] : A | -| CollectionFlow.cs:330:55:330:61 | access to parameter element : A | semmle.label | access to parameter element : A | -| CollectionFlow.cs:334:13:334:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:334:17:334:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:336:18:336:20 | [post] access to local variable as : A[] [element] : A | semmle.label | [post] access to local variable as : A[] [element] : A | -| CollectionFlow.cs:336:23:336:23 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:337:14:337:16 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:337:14:337:19 | access to array element | semmle.label | access to array element | -| CollectionFlow.cs:338:18:338:20 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:339:14:339:23 | call to method First | semmle.label | call to method First | -| CollectionFlow.cs:339:20:339:22 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:352:26:352:29 | list [Return] : List [element] : A | semmle.label | list [Return] : List [element] : A | -| CollectionFlow.cs:352:34:352:40 | element : A | semmle.label | element : A | -| CollectionFlow.cs:352:46:352:49 | [post] access to parameter list : List [element] : A | semmle.label | [post] access to parameter list : List [element] : A | -| CollectionFlow.cs:352:55:352:61 | access to parameter element : A | semmle.label | access to parameter element : A | -| CollectionFlow.cs:356:13:356:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:356:17:356:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:358:17:358:20 | [post] access to local variable list : List [element] : A | semmle.label | [post] access to local variable list : List [element] : A | -| CollectionFlow.cs:358:23:358:23 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:359:14:359:17 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | -| CollectionFlow.cs:359:14:359:20 | access to indexer | semmle.label | access to indexer | -| CollectionFlow.cs:360:22:360:25 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | -| CollectionFlow.cs:361:14:361:28 | call to method ListFirst | semmle.label | call to method ListFirst | -| CollectionFlow.cs:361:24:361:27 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | -| CollectionFlow.cs:375:20:375:26 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:376:26:376:32 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:377:26:377:32 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:378:20:378:38 | array creation of type A[] : null [element] : A | semmle.label | array creation of type A[] : null [element] : A | -| CollectionFlow.cs:378:28:378:38 | { ..., ... } : null [element] : A | semmle.label | { ..., ... } : null [element] : A | -| CollectionFlow.cs:378:30:378:36 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:391:30:391:36 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:392:36:392:42 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:393:36:393:42 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:394:30:394:38 | [...] : IEnumerable [element] : A | semmle.label | [...] : IEnumerable [element] : A | -| CollectionFlow.cs:394:31:394:37 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:416:13:416:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:416:17:416:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:418:9:418:13 | [post] access to local variable array : MyInlineArray [element] : A | semmle.label | [post] access to local variable array : MyInlineArray [element] : A | -| CollectionFlow.cs:418:20:418:20 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:419:14:419:18 | access to local variable array : MyInlineArray [element] : A | semmle.label | access to local variable array : MyInlineArray [element] : A | -| CollectionFlow.cs:419:14:419:21 | access to array element | semmle.label | access to array element | -| CollectionFlow.cs:437:13:437:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:437:17:437:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:438:13:438:17 | access to local variable array : A[] [element] : A | semmle.label | access to local variable array : A[] [element] : A | -| CollectionFlow.cs:438:21:438:23 | [...] : A[] [element] : A | semmle.label | [...] : A[] [element] : A | -| CollectionFlow.cs:438:22:438:22 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:439:14:439:18 | access to local variable array : A[] [element] : A | semmle.label | access to local variable array : A[] [element] : A | -| CollectionFlow.cs:439:14:439:21 | access to array element | semmle.label | access to array element | -| CollectionFlow.cs:444:13:444:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:444:17:444:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:445:17:445:17 | access to local variable l : List [element] : A | semmle.label | access to local variable l : List [element] : A | -| CollectionFlow.cs:445:21:445:23 | [...] : List [element] : A | semmle.label | [...] : List [element] : A | -| CollectionFlow.cs:445:22:445:22 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:446:14:446:14 | access to local variable l : List [element] : A | semmle.label | access to local variable l : List [element] : A | -| CollectionFlow.cs:446:14:446:17 | access to indexer | semmle.label | access to indexer | -| CollectionFlow.cs:457:13:457:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:457:17:457:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:458:13:458:16 | access to local variable temp : A[] [element] : A | semmle.label | access to local variable temp : A[] [element] : A | -| CollectionFlow.cs:458:20:458:22 | [...] : A[] [element] : A | semmle.label | [...] : A[] [element] : A | -| CollectionFlow.cs:458:21:458:21 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:459:13:459:17 | access to local variable array : A[] [element] : A | semmle.label | access to local variable array : A[] [element] : A | -| CollectionFlow.cs:459:22:459:28 | .. access to local variable temp : A[] [element] : A | semmle.label | .. access to local variable temp : A[] [element] : A | -| CollectionFlow.cs:460:14:460:18 | access to local variable array : A[] [element] : A | semmle.label | access to local variable array : A[] [element] : A | -| CollectionFlow.cs:460:14:460:21 | access to array element | semmle.label | access to array element | -| CollectionFlow.cs:497:13:497:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:497:17:497:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:498:17:498:20 | access to local variable span : Span [element] : A | semmle.label | access to local variable span : Span [element] : A | -| CollectionFlow.cs:498:24:498:41 | object creation of type Span : Span [element] : A | semmle.label | object creation of type Span : Span [element] : A | -| CollectionFlow.cs:498:40:498:40 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:499:14:499:17 | access to local variable span : Span [element] : A | semmle.label | access to local variable span : Span [element] : A | -| CollectionFlow.cs:499:14:499:20 | access to indexer | semmle.label | access to indexer | -| CollectionFlow.cs:504:13:504:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:504:17:504:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:505:17:505:20 | access to local variable span : Span [element] : A | semmle.label | access to local variable span : Span [element] : A | -| CollectionFlow.cs:505:24:505:41 | object creation of type Span : Span [element] : A | semmle.label | object creation of type Span : Span [element] : A | -| CollectionFlow.cs:505:40:505:40 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:506:13:506:15 | access to local variable arr : T[] [element] : A | semmle.label | access to local variable arr : T[] [element] : A | -| CollectionFlow.cs:506:19:506:22 | access to local variable span : Span [element] : A | semmle.label | access to local variable span : Span [element] : A | -| CollectionFlow.cs:506:19:506:32 | call to method ToArray : T[] [element] : A | semmle.label | call to method ToArray : T[] [element] : A | -| CollectionFlow.cs:507:14:507:16 | access to local variable arr : T[] [element] : A | semmle.label | access to local variable arr : T[] [element] : A | -| CollectionFlow.cs:507:14:507:19 | access to array element | semmle.label | access to array element | -| CollectionFlow.cs:512:13:512:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:512:17:512:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:513:9:513:14 | [post] access to parameter target : Span [element] : A | semmle.label | [post] access to parameter target : Span [element] : A | -| CollectionFlow.cs:513:21:513:21 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:514:14:514:19 | access to parameter target : Span [element] : A | semmle.label | access to parameter target : Span [element] : A | -| CollectionFlow.cs:514:14:514:22 | access to indexer | semmle.label | access to indexer | -| CollectionFlow.cs:519:13:519:18 | access to local variable source : Span [element] : A | semmle.label | access to local variable source : Span [element] : A | -| CollectionFlow.cs:519:22:519:51 | object creation of type Span : Span [element] : A | semmle.label | object creation of type Span : Span [element] : A | -| CollectionFlow.cs:519:34:519:50 | array creation of type A[] : null [element] : A | semmle.label | array creation of type A[] : null [element] : A | -| CollectionFlow.cs:519:40:519:50 | { ..., ... } : null [element] : A | semmle.label | { ..., ... } : null [element] : A | -| CollectionFlow.cs:519:42:519:48 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:520:9:520:14 | access to local variable source : Span [element] : A | semmle.label | access to local variable source : Span [element] : A | -| CollectionFlow.cs:520:23:520:28 | [post] access to parameter target : Span [element] : A | semmle.label | [post] access to parameter target : Span [element] : A | -| CollectionFlow.cs:521:14:521:19 | access to parameter target : Span [element] : A | semmle.label | access to parameter target : Span [element] : A | -| CollectionFlow.cs:521:14:521:22 | access to indexer | semmle.label | access to indexer | -| CollectionFlow.cs:526:13:526:13 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:526:17:526:23 | object creation of type A : A | semmle.label | object creation of type A : A | -| CollectionFlow.cs:527:25:527:28 | access to local variable span : ReadOnlySpan [element] : A | semmle.label | access to local variable span : ReadOnlySpan [element] : A | -| CollectionFlow.cs:527:32:527:63 | object creation of type ReadOnlySpan : ReadOnlySpan [element] : A | semmle.label | object creation of type ReadOnlySpan : ReadOnlySpan [element] : A | -| CollectionFlow.cs:527:52:527:62 | array creation of type A[] : null [element] : A | semmle.label | array creation of type A[] : null [element] : A | -| CollectionFlow.cs:527:58:527:62 | { ..., ... } : null [element] : A | semmle.label | { ..., ... } : null [element] : A | -| CollectionFlow.cs:527:60:527:60 | access to local variable a : A | semmle.label | access to local variable a : A | -| CollectionFlow.cs:528:14:528:17 | access to local variable span : ReadOnlySpan [element] : A | semmle.label | access to local variable span : ReadOnlySpan [element] : A | -| CollectionFlow.cs:528:14:528:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:178:9:178:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | semmle.label | [post] access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:178:19:178:19 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:179:14:179:17 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:179:14:179:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:180:23:180:26 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:181:14:181:32 | call to method DictIndexZero | semmle.label | call to method DictIndexZero | +| CollectionFlow.cs:181:28:181:31 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:182:14:182:33 | call to method DictFirstValue | semmle.label | call to method DictFirstValue | +| CollectionFlow.cs:182:29:182:32 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:183:14:183:34 | call to method DictValuesFirst | semmle.label | call to method DictValuesFirst | +| CollectionFlow.cs:183:30:183:33 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:199:13:199:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:199:17:199:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:200:13:200:16 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:200:20:200:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | semmle.label | object creation of type Dictionary : Dictionary [element, property Value] : A | +| CollectionFlow.cs:200:52:200:52 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:201:14:201:17 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:201:14:201:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:202:23:202:26 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:203:14:203:32 | call to method DictIndexZero | semmle.label | call to method DictIndexZero | +| CollectionFlow.cs:203:28:203:31 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:204:14:204:33 | call to method DictFirstValue | semmle.label | call to method DictFirstValue | +| CollectionFlow.cs:204:29:204:32 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:205:14:205:34 | call to method DictValuesFirst | semmle.label | call to method DictValuesFirst | +| CollectionFlow.cs:205:30:205:33 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:220:13:220:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:220:17:220:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:221:13:221:16 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:221:20:221:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | semmle.label | object creation of type Dictionary : Dictionary [element, property Value] : A | +| CollectionFlow.cs:221:53:221:53 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:222:14:222:17 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:222:14:222:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:223:23:223:26 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:224:14:224:32 | call to method DictIndexZero | semmle.label | call to method DictIndexZero | +| CollectionFlow.cs:224:28:224:31 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:225:14:225:33 | call to method DictFirstValue | semmle.label | call to method DictFirstValue | +| CollectionFlow.cs:225:29:225:32 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:226:14:226:34 | call to method DictValuesFirst | semmle.label | call to method DictValuesFirst | +| CollectionFlow.cs:226:30:226:33 | access to local variable dict : Dictionary [element, property Value] : A | semmle.label | access to local variable dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:242:13:242:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:242:17:242:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:243:13:243:16 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | +| CollectionFlow.cs:243:20:243:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | semmle.label | object creation of type Dictionary : Dictionary [element, property Key] : A | +| CollectionFlow.cs:243:49:243:49 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:244:14:244:17 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | +| CollectionFlow.cs:244:14:244:22 | access to property Keys : Dictionary.KeyCollection [element] : A | semmle.label | access to property Keys : Dictionary.KeyCollection [element] : A | +| CollectionFlow.cs:244:14:244:30 | call to method First | semmle.label | call to method First | +| CollectionFlow.cs:245:21:245:24 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | +| CollectionFlow.cs:246:14:246:32 | call to method DictKeysFirst | semmle.label | call to method DictKeysFirst | +| CollectionFlow.cs:246:28:246:31 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | +| CollectionFlow.cs:247:14:247:31 | call to method DictFirstKey | semmle.label | call to method DictFirstKey | +| CollectionFlow.cs:247:27:247:30 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | +| CollectionFlow.cs:261:13:261:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:261:17:261:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:262:13:262:16 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | +| CollectionFlow.cs:262:20:262:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | semmle.label | object creation of type Dictionary : Dictionary [element, property Key] : A | +| CollectionFlow.cs:262:48:262:48 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:263:14:263:17 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | +| CollectionFlow.cs:263:14:263:22 | access to property Keys : Dictionary.KeyCollection [element] : A | semmle.label | access to property Keys : Dictionary.KeyCollection [element] : A | +| CollectionFlow.cs:263:14:263:30 | call to method First | semmle.label | call to method First | +| CollectionFlow.cs:264:21:264:24 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | +| CollectionFlow.cs:265:14:265:32 | call to method DictKeysFirst | semmle.label | call to method DictKeysFirst | +| CollectionFlow.cs:265:28:265:31 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | +| CollectionFlow.cs:266:14:266:31 | call to method DictFirstKey | semmle.label | call to method DictFirstKey | +| CollectionFlow.cs:266:27:266:30 | access to local variable dict : Dictionary [element, property Key] : A | semmle.label | access to local variable dict : Dictionary [element, property Key] : A | +| CollectionFlow.cs:280:13:280:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:280:17:280:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:281:13:281:15 | access to local variable as : null [element] : A | semmle.label | access to local variable as : null [element] : A | +| CollectionFlow.cs:281:25:281:29 | { ..., ... } : null [element] : A | semmle.label | { ..., ... } : null [element] : A | +| CollectionFlow.cs:281:27:281:27 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:282:27:282:29 | access to local variable as : null [element] : A | semmle.label | access to local variable as : null [element] : A | +| CollectionFlow.cs:283:18:283:18 | access to local variable x | semmle.label | access to local variable x | +| CollectionFlow.cs:295:13:295:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:295:17:295:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:296:13:296:15 | access to local variable as : null [element] : A | semmle.label | access to local variable as : null [element] : A | +| CollectionFlow.cs:296:25:296:29 | { ..., ... } : null [element] : A | semmle.label | { ..., ... } : null [element] : A | +| CollectionFlow.cs:296:27:296:27 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:297:13:297:22 | access to local variable enumerator : IEnumerator [property Current] : A | semmle.label | access to local variable enumerator : IEnumerator [property Current] : A | +| CollectionFlow.cs:297:26:297:28 | access to local variable as : null [element] : A | semmle.label | access to local variable as : null [element] : A | +| CollectionFlow.cs:297:26:297:44 | call to method GetEnumerator : IEnumerator [property Current] : A | semmle.label | call to method GetEnumerator : IEnumerator [property Current] : A | +| CollectionFlow.cs:299:18:299:27 | access to local variable enumerator : IEnumerator [property Current] : A | semmle.label | access to local variable enumerator : IEnumerator [property Current] : A | +| CollectionFlow.cs:299:18:299:35 | access to property Current | semmle.label | access to property Current | +| CollectionFlow.cs:312:13:312:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:312:17:312:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:314:9:314:12 | [post] access to local variable list : List [element] : A | semmle.label | [post] access to local variable list : List [element] : A | +| CollectionFlow.cs:314:18:314:18 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:315:13:315:22 | access to local variable enumerator : List.Enumerator [property Current] : A | semmle.label | access to local variable enumerator : List.Enumerator [property Current] : A | +| CollectionFlow.cs:315:13:315:22 | access to local variable enumerator : List.Enumerator [property Current] : A | semmle.label | access to local variable enumerator : List.Enumerator [property Current] : A | +| CollectionFlow.cs:315:26:315:29 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | +| CollectionFlow.cs:315:26:315:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | semmle.label | call to method GetEnumerator : List.Enumerator [property Current] : A | +| CollectionFlow.cs:315:26:315:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | semmle.label | call to method GetEnumerator : List.Enumerator [property Current] : A | +| CollectionFlow.cs:317:18:317:27 | access to local variable enumerator : List.Enumerator [property Current] : A | semmle.label | access to local variable enumerator : List.Enumerator [property Current] : A | +| CollectionFlow.cs:317:18:317:27 | access to local variable enumerator : List.Enumerator [property Current] : A | semmle.label | access to local variable enumerator : List.Enumerator [property Current] : A | +| CollectionFlow.cs:317:18:317:35 | access to property Current | semmle.label | access to property Current | +| CollectionFlow.cs:331:13:331:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:331:17:331:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:333:9:333:12 | [post] access to local variable list : List [element, property Key] : A | semmle.label | [post] access to local variable list : List [element, property Key] : A | +| CollectionFlow.cs:333:18:333:47 | object creation of type KeyValuePair : KeyValuePair [property Key] : A | semmle.label | object creation of type KeyValuePair : KeyValuePair [property Key] : A | +| CollectionFlow.cs:333:43:333:43 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:334:9:334:12 | access to local variable list : List [element, property Key] : A | semmle.label | access to local variable list : List [element, property Key] : A | +| CollectionFlow.cs:334:21:334:23 | kvp : KeyValuePair [property Key] : A | semmle.label | kvp : KeyValuePair [property Key] : A | +| CollectionFlow.cs:336:18:336:20 | access to parameter kvp : KeyValuePair [property Key] : A | semmle.label | access to parameter kvp : KeyValuePair [property Key] : A | +| CollectionFlow.cs:336:18:336:24 | access to property Key | semmle.label | access to property Key | +| CollectionFlow.cs:353:23:353:27 | array [Return] : A[] [element] : A | semmle.label | array [Return] : A[] [element] : A | +| CollectionFlow.cs:353:32:353:38 | element : A | semmle.label | element : A | +| CollectionFlow.cs:353:44:353:48 | [post] access to parameter array : A[] [element] : A | semmle.label | [post] access to parameter array : A[] [element] : A | +| CollectionFlow.cs:353:55:353:61 | access to parameter element : A | semmle.label | access to parameter element : A | +| CollectionFlow.cs:357:13:357:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:357:17:357:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:359:18:359:20 | [post] access to local variable as : A[] [element] : A | semmle.label | [post] access to local variable as : A[] [element] : A | +| CollectionFlow.cs:359:23:359:23 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:360:14:360:16 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | +| CollectionFlow.cs:360:14:360:19 | access to array element | semmle.label | access to array element | +| CollectionFlow.cs:361:18:361:20 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | +| CollectionFlow.cs:362:14:362:23 | call to method First | semmle.label | call to method First | +| CollectionFlow.cs:362:20:362:22 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | +| CollectionFlow.cs:375:26:375:29 | list [Return] : List [element] : A | semmle.label | list [Return] : List [element] : A | +| CollectionFlow.cs:375:34:375:40 | element : A | semmle.label | element : A | +| CollectionFlow.cs:375:46:375:49 | [post] access to parameter list : List [element] : A | semmle.label | [post] access to parameter list : List [element] : A | +| CollectionFlow.cs:375:55:375:61 | access to parameter element : A | semmle.label | access to parameter element : A | +| CollectionFlow.cs:379:13:379:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:379:17:379:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:381:17:381:20 | [post] access to local variable list : List [element] : A | semmle.label | [post] access to local variable list : List [element] : A | +| CollectionFlow.cs:381:23:381:23 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:382:14:382:17 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | +| CollectionFlow.cs:382:14:382:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:383:22:383:25 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | +| CollectionFlow.cs:384:14:384:28 | call to method ListFirst | semmle.label | call to method ListFirst | +| CollectionFlow.cs:384:24:384:27 | access to local variable list : List [element] : A | semmle.label | access to local variable list : List [element] : A | +| CollectionFlow.cs:398:20:398:26 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:399:26:399:32 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:400:26:400:32 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:401:20:401:38 | array creation of type A[] : null [element] : A | semmle.label | array creation of type A[] : null [element] : A | +| CollectionFlow.cs:401:28:401:38 | { ..., ... } : null [element] : A | semmle.label | { ..., ... } : null [element] : A | +| CollectionFlow.cs:401:30:401:36 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:414:30:414:36 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:415:36:415:42 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:416:36:416:42 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:417:30:417:38 | [...] : IEnumerable [element] : A | semmle.label | [...] : IEnumerable [element] : A | +| CollectionFlow.cs:417:31:417:37 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:439:13:439:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:439:17:439:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:441:9:441:13 | [post] access to local variable array : MyInlineArray [element] : A | semmle.label | [post] access to local variable array : MyInlineArray [element] : A | +| CollectionFlow.cs:441:20:441:20 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:442:14:442:18 | access to local variable array : MyInlineArray [element] : A | semmle.label | access to local variable array : MyInlineArray [element] : A | +| CollectionFlow.cs:442:14:442:21 | access to array element | semmle.label | access to array element | +| CollectionFlow.cs:460:13:460:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:460:17:460:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:461:13:461:17 | access to local variable array : A[] [element] : A | semmle.label | access to local variable array : A[] [element] : A | +| CollectionFlow.cs:461:21:461:23 | [...] : A[] [element] : A | semmle.label | [...] : A[] [element] : A | +| CollectionFlow.cs:461:22:461:22 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:462:14:462:18 | access to local variable array : A[] [element] : A | semmle.label | access to local variable array : A[] [element] : A | +| CollectionFlow.cs:462:14:462:21 | access to array element | semmle.label | access to array element | +| CollectionFlow.cs:467:13:467:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:467:17:467:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:468:17:468:17 | access to local variable l : List [element] : A | semmle.label | access to local variable l : List [element] : A | +| CollectionFlow.cs:468:21:468:23 | [...] : List [element] : A | semmle.label | [...] : List [element] : A | +| CollectionFlow.cs:468:22:468:22 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:469:14:469:14 | access to local variable l : List [element] : A | semmle.label | access to local variable l : List [element] : A | +| CollectionFlow.cs:469:14:469:17 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:480:13:480:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:480:17:480:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:481:13:481:16 | access to local variable temp : A[] [element] : A | semmle.label | access to local variable temp : A[] [element] : A | +| CollectionFlow.cs:481:20:481:22 | [...] : A[] [element] : A | semmle.label | [...] : A[] [element] : A | +| CollectionFlow.cs:481:21:481:21 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:482:13:482:17 | access to local variable array : A[] [element] : A | semmle.label | access to local variable array : A[] [element] : A | +| CollectionFlow.cs:482:22:482:28 | .. access to local variable temp : A[] [element] : A | semmle.label | .. access to local variable temp : A[] [element] : A | +| CollectionFlow.cs:483:14:483:18 | access to local variable array : A[] [element] : A | semmle.label | access to local variable array : A[] [element] : A | +| CollectionFlow.cs:483:14:483:21 | access to array element | semmle.label | access to array element | +| CollectionFlow.cs:520:13:520:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:520:17:520:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:521:17:521:20 | access to local variable span : Span [element] : A | semmle.label | access to local variable span : Span [element] : A | +| CollectionFlow.cs:521:24:521:41 | object creation of type Span : Span [element] : A | semmle.label | object creation of type Span : Span [element] : A | +| CollectionFlow.cs:521:40:521:40 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:522:14:522:17 | access to local variable span : Span [element] : A | semmle.label | access to local variable span : Span [element] : A | +| CollectionFlow.cs:522:14:522:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:527:13:527:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:527:17:527:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:528:17:528:20 | access to local variable span : Span [element] : A | semmle.label | access to local variable span : Span [element] : A | +| CollectionFlow.cs:528:24:528:41 | object creation of type Span : Span [element] : A | semmle.label | object creation of type Span : Span [element] : A | +| CollectionFlow.cs:528:40:528:40 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:529:13:529:15 | access to local variable arr : T[] [element] : A | semmle.label | access to local variable arr : T[] [element] : A | +| CollectionFlow.cs:529:19:529:22 | access to local variable span : Span [element] : A | semmle.label | access to local variable span : Span [element] : A | +| CollectionFlow.cs:529:19:529:32 | call to method ToArray : T[] [element] : A | semmle.label | call to method ToArray : T[] [element] : A | +| CollectionFlow.cs:530:14:530:16 | access to local variable arr : T[] [element] : A | semmle.label | access to local variable arr : T[] [element] : A | +| CollectionFlow.cs:530:14:530:19 | access to array element | semmle.label | access to array element | +| CollectionFlow.cs:535:13:535:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:535:17:535:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:536:9:536:14 | [post] access to parameter target : Span [element] : A | semmle.label | [post] access to parameter target : Span [element] : A | +| CollectionFlow.cs:536:21:536:21 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:537:14:537:19 | access to parameter target : Span [element] : A | semmle.label | access to parameter target : Span [element] : A | +| CollectionFlow.cs:537:14:537:22 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:542:13:542:18 | access to local variable source : Span [element] : A | semmle.label | access to local variable source : Span [element] : A | +| CollectionFlow.cs:542:22:542:51 | object creation of type Span : Span [element] : A | semmle.label | object creation of type Span : Span [element] : A | +| CollectionFlow.cs:542:34:542:50 | array creation of type A[] : null [element] : A | semmle.label | array creation of type A[] : null [element] : A | +| CollectionFlow.cs:542:40:542:50 | { ..., ... } : null [element] : A | semmle.label | { ..., ... } : null [element] : A | +| CollectionFlow.cs:542:42:542:48 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:543:9:543:14 | access to local variable source : Span [element] : A | semmle.label | access to local variable source : Span [element] : A | +| CollectionFlow.cs:543:23:543:28 | [post] access to parameter target : Span [element] : A | semmle.label | [post] access to parameter target : Span [element] : A | +| CollectionFlow.cs:544:14:544:19 | access to parameter target : Span [element] : A | semmle.label | access to parameter target : Span [element] : A | +| CollectionFlow.cs:544:14:544:22 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:549:13:549:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:549:17:549:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:550:25:550:28 | access to local variable span : ReadOnlySpan [element] : A | semmle.label | access to local variable span : ReadOnlySpan [element] : A | +| CollectionFlow.cs:550:32:550:63 | object creation of type ReadOnlySpan : ReadOnlySpan [element] : A | semmle.label | object creation of type ReadOnlySpan : ReadOnlySpan [element] : A | +| CollectionFlow.cs:550:52:550:62 | array creation of type A[] : null [element] : A | semmle.label | array creation of type A[] : null [element] : A | +| CollectionFlow.cs:550:58:550:62 | { ..., ... } : null [element] : A | semmle.label | { ..., ... } : null [element] : A | +| CollectionFlow.cs:550:60:550:60 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:551:14:551:17 | access to local variable span : ReadOnlySpan [element] : A | semmle.label | access to local variable span : ReadOnlySpan [element] : A | +| CollectionFlow.cs:551:14:551:20 | access to indexer | semmle.label | access to indexer | subpaths -| CollectionFlow.cs:46:20:46:22 | access to local variable as : null [element] : A | CollectionFlow.cs:22:34:22:35 | ts : null [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | CollectionFlow.cs:46:14:46:23 | call to method First | -| CollectionFlow.cs:64:20:64:23 | access to field As : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | CollectionFlow.cs:64:14:64:24 | call to method First | -| CollectionFlow.cs:83:20:83:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | CollectionFlow.cs:83:14:83:23 | call to method First | -| CollectionFlow.cs:103:24:103:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | CollectionFlow.cs:103:14:103:28 | call to method ListFirst | -| CollectionFlow.cs:121:24:121:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | CollectionFlow.cs:121:14:121:28 | call to method ListFirst | -| CollectionFlow.cs:139:24:139:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | CollectionFlow.cs:139:14:139:28 | call to method ListFirst | -| CollectionFlow.cs:158:28:158:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:73 | access to indexer : A | CollectionFlow.cs:158:14:158:32 | call to method DictIndexZero | -| CollectionFlow.cs:159:29:159:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:68:28:85 | access to property Value : A | CollectionFlow.cs:159:14:159:33 | call to method DictFirstValue | -| CollectionFlow.cs:160:30:160:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:87 | call to method First : A | CollectionFlow.cs:160:14:160:34 | call to method DictValuesFirst | -| CollectionFlow.cs:180:28:180:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:73 | access to indexer : A | CollectionFlow.cs:180:14:180:32 | call to method DictIndexZero | -| CollectionFlow.cs:181:29:181:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:68:28:85 | access to property Value : A | CollectionFlow.cs:181:14:181:33 | call to method DictFirstValue | -| CollectionFlow.cs:182:30:182:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:87 | call to method First : A | CollectionFlow.cs:182:14:182:34 | call to method DictValuesFirst | -| CollectionFlow.cs:201:28:201:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:73 | access to indexer : A | CollectionFlow.cs:201:14:201:32 | call to method DictIndexZero | -| CollectionFlow.cs:202:29:202:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:68:28:85 | access to property Value : A | CollectionFlow.cs:202:14:202:33 | call to method DictFirstValue | -| CollectionFlow.cs:203:30:203:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:87 | call to method First : A | CollectionFlow.cs:203:14:203:34 | call to method DictValuesFirst | -| CollectionFlow.cs:223:28:223:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:83 | call to method First : A | CollectionFlow.cs:223:14:223:32 | call to method DictKeysFirst | -| CollectionFlow.cs:224:27:224:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:81 | access to property Key : A | CollectionFlow.cs:224:14:224:31 | call to method DictFirstKey | -| CollectionFlow.cs:242:28:242:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:83 | call to method First : A | CollectionFlow.cs:242:14:242:32 | call to method DictKeysFirst | -| CollectionFlow.cs:243:27:243:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:81 | access to property Key : A | CollectionFlow.cs:243:14:243:31 | call to method DictFirstKey | -| CollectionFlow.cs:336:23:336:23 | access to local variable a : A | CollectionFlow.cs:330:32:330:38 | element : A | CollectionFlow.cs:330:23:330:27 | array [Return] : A[] [element] : A | CollectionFlow.cs:336:18:336:20 | [post] access to local variable as : A[] [element] : A | -| CollectionFlow.cs:339:20:339:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | CollectionFlow.cs:339:14:339:23 | call to method First | -| CollectionFlow.cs:358:23:358:23 | access to local variable a : A | CollectionFlow.cs:352:34:352:40 | element : A | CollectionFlow.cs:352:26:352:29 | list [Return] : List [element] : A | CollectionFlow.cs:358:17:358:20 | [post] access to local variable list : List [element] : A | -| CollectionFlow.cs:361:24:361:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | CollectionFlow.cs:361:14:361:28 | call to method ListFirst | +| CollectionFlow.cs:50:20:50:22 | access to local variable as : null [element] : A | CollectionFlow.cs:24:34:24:35 | ts : null [element] : A | CollectionFlow.cs:24:41:24:45 | access to array element : A | CollectionFlow.cs:50:14:50:23 | call to method First | +| CollectionFlow.cs:68:20:68:23 | access to field As : A[] [element] : A | CollectionFlow.cs:24:34:24:35 | ts : A[] [element] : A | CollectionFlow.cs:24:41:24:45 | access to array element : A | CollectionFlow.cs:68:14:68:24 | call to method First | +| CollectionFlow.cs:86:19:86:22 | access to field As : A[] [element] : A | CollectionFlow.cs:26:33:26:34 | ts : A[] [element] : A | CollectionFlow.cs:26:40:26:45 | access to array element : A | CollectionFlow.cs:86:14:86:23 | call to method Last | +| CollectionFlow.cs:96:20:96:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:24:34:24:35 | ts : A[] [element] : A | CollectionFlow.cs:24:41:24:45 | access to array element : A | CollectionFlow.cs:96:14:96:23 | call to method First | +| CollectionFlow.cs:116:19:116:21 | access to local variable as : A[] [element] : A | CollectionFlow.cs:26:33:26:34 | ts : A[] [element] : A | CollectionFlow.cs:26:40:26:45 | access to array element : A | CollectionFlow.cs:116:14:116:22 | call to method Last | +| CollectionFlow.cs:126:24:126:27 | access to local variable list : List [element] : A | CollectionFlow.cs:28:43:28:46 | list : List [element] : A | CollectionFlow.cs:28:52:28:58 | access to indexer : A | CollectionFlow.cs:126:14:126:28 | call to method ListFirst | +| CollectionFlow.cs:144:24:144:27 | access to local variable list : List [element] : A | CollectionFlow.cs:28:43:28:46 | list : List [element] : A | CollectionFlow.cs:28:52:28:58 | access to indexer : A | CollectionFlow.cs:144:14:144:28 | call to method ListFirst | +| CollectionFlow.cs:162:24:162:27 | access to local variable list : List [element] : A | CollectionFlow.cs:28:43:28:46 | list : List [element] : A | CollectionFlow.cs:28:52:28:58 | access to indexer : A | CollectionFlow.cs:162:14:162:28 | call to method ListFirst | +| CollectionFlow.cs:181:28:181:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:58:30:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:67:30:73 | access to indexer : A | CollectionFlow.cs:181:14:181:32 | call to method DictIndexZero | +| CollectionFlow.cs:182:29:182:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:32:59:32:62 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:32:68:32:85 | access to property Value : A | CollectionFlow.cs:182:14:182:33 | call to method DictFirstValue | +| CollectionFlow.cs:183:30:183:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:34:60:34:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:34:69:34:87 | call to method First : A | CollectionFlow.cs:183:14:183:34 | call to method DictValuesFirst | +| CollectionFlow.cs:203:28:203:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:58:30:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:67:30:73 | access to indexer : A | CollectionFlow.cs:203:14:203:32 | call to method DictIndexZero | +| CollectionFlow.cs:204:29:204:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:32:59:32:62 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:32:68:32:85 | access to property Value : A | CollectionFlow.cs:204:14:204:33 | call to method DictFirstValue | +| CollectionFlow.cs:205:30:205:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:34:60:34:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:34:69:34:87 | call to method First : A | CollectionFlow.cs:205:14:205:34 | call to method DictValuesFirst | +| CollectionFlow.cs:224:28:224:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:58:30:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:67:30:73 | access to indexer : A | CollectionFlow.cs:224:14:224:32 | call to method DictIndexZero | +| CollectionFlow.cs:225:29:225:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:32:59:32:62 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:32:68:32:85 | access to property Value : A | CollectionFlow.cs:225:14:225:33 | call to method DictFirstValue | +| CollectionFlow.cs:226:30:226:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:34:60:34:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:34:69:34:87 | call to method First : A | CollectionFlow.cs:226:14:226:34 | call to method DictValuesFirst | +| CollectionFlow.cs:246:28:246:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:36:58:36:61 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:36:67:36:83 | call to method First : A | CollectionFlow.cs:246:14:246:32 | call to method DictKeysFirst | +| CollectionFlow.cs:247:27:247:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:38:57:38:60 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:38:66:38:81 | access to property Key : A | CollectionFlow.cs:247:14:247:31 | call to method DictFirstKey | +| CollectionFlow.cs:265:28:265:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:36:58:36:61 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:36:67:36:83 | call to method First : A | CollectionFlow.cs:265:14:265:32 | call to method DictKeysFirst | +| CollectionFlow.cs:266:27:266:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:38:57:38:60 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:38:66:38:81 | access to property Key : A | CollectionFlow.cs:266:14:266:31 | call to method DictFirstKey | +| CollectionFlow.cs:359:23:359:23 | access to local variable a : A | CollectionFlow.cs:353:32:353:38 | element : A | CollectionFlow.cs:353:23:353:27 | array [Return] : A[] [element] : A | CollectionFlow.cs:359:18:359:20 | [post] access to local variable as : A[] [element] : A | +| CollectionFlow.cs:362:20:362:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:24:34:24:35 | ts : A[] [element] : A | CollectionFlow.cs:24:41:24:45 | access to array element : A | CollectionFlow.cs:362:14:362:23 | call to method First | +| CollectionFlow.cs:381:23:381:23 | access to local variable a : A | CollectionFlow.cs:375:34:375:40 | element : A | CollectionFlow.cs:375:26:375:29 | list [Return] : List [element] : A | CollectionFlow.cs:381:17:381:20 | [post] access to local variable list : List [element] : A | +| CollectionFlow.cs:384:24:384:27 | access to local variable list : List [element] : A | CollectionFlow.cs:28:43:28:46 | list : List [element] : A | CollectionFlow.cs:28:52:28:58 | access to indexer : A | CollectionFlow.cs:384:14:384:28 | call to method ListFirst | #select -| CollectionFlow.cs:42:17:42:23 | object creation of type A : A | CollectionFlow.cs:42:17:42:23 | object creation of type A : A | CollectionFlow.cs:14:52:14:56 | access to array element | $@ | CollectionFlow.cs:14:52:14:56 | access to array element | access to array element | -| CollectionFlow.cs:42:17:42:23 | object creation of type A : A | CollectionFlow.cs:42:17:42:23 | object creation of type A : A | CollectionFlow.cs:44:14:44:19 | access to array element | $@ | CollectionFlow.cs:44:14:44:19 | access to array element | access to array element | -| CollectionFlow.cs:42:17:42:23 | object creation of type A : A | CollectionFlow.cs:42:17:42:23 | object creation of type A : A | CollectionFlow.cs:46:14:46:23 | call to method First | $@ | CollectionFlow.cs:46:14:46:23 | call to method First | call to method First | -| CollectionFlow.cs:60:17:60:23 | object creation of type A : A | CollectionFlow.cs:60:17:60:23 | object creation of type A : A | CollectionFlow.cs:14:52:14:56 | access to array element | $@ | CollectionFlow.cs:14:52:14:56 | access to array element | access to array element | -| CollectionFlow.cs:60:17:60:23 | object creation of type A : A | CollectionFlow.cs:60:17:60:23 | object creation of type A : A | CollectionFlow.cs:62:14:62:20 | access to array element | $@ | CollectionFlow.cs:62:14:62:20 | access to array element | access to array element | -| CollectionFlow.cs:60:17:60:23 | object creation of type A : A | CollectionFlow.cs:60:17:60:23 | object creation of type A : A | CollectionFlow.cs:64:14:64:24 | call to method First | $@ | CollectionFlow.cs:64:14:64:24 | call to method First | call to method First | -| CollectionFlow.cs:78:17:78:23 | object creation of type A : A | CollectionFlow.cs:78:17:78:23 | object creation of type A : A | CollectionFlow.cs:14:52:14:56 | access to array element | $@ | CollectionFlow.cs:14:52:14:56 | access to array element | access to array element | -| CollectionFlow.cs:78:17:78:23 | object creation of type A : A | CollectionFlow.cs:78:17:78:23 | object creation of type A : A | CollectionFlow.cs:81:14:81:19 | access to array element | $@ | CollectionFlow.cs:81:14:81:19 | access to array element | access to array element | -| CollectionFlow.cs:78:17:78:23 | object creation of type A : A | CollectionFlow.cs:78:17:78:23 | object creation of type A : A | CollectionFlow.cs:83:14:83:23 | call to method First | $@ | CollectionFlow.cs:83:14:83:23 | call to method First | call to method First | -| CollectionFlow.cs:98:17:98:23 | object creation of type A : A | CollectionFlow.cs:98:17:98:23 | object creation of type A : A | CollectionFlow.cs:16:63:16:69 | access to indexer | $@ | CollectionFlow.cs:16:63:16:69 | access to indexer | access to indexer | -| CollectionFlow.cs:98:17:98:23 | object creation of type A : A | CollectionFlow.cs:98:17:98:23 | object creation of type A : A | CollectionFlow.cs:101:14:101:20 | access to indexer | $@ | CollectionFlow.cs:101:14:101:20 | access to indexer | access to indexer | -| CollectionFlow.cs:98:17:98:23 | object creation of type A : A | CollectionFlow.cs:98:17:98:23 | object creation of type A : A | CollectionFlow.cs:103:14:103:28 | call to method ListFirst | $@ | CollectionFlow.cs:103:14:103:28 | call to method ListFirst | call to method ListFirst | -| CollectionFlow.cs:117:17:117:23 | object creation of type A : A | CollectionFlow.cs:117:17:117:23 | object creation of type A : A | CollectionFlow.cs:16:63:16:69 | access to indexer | $@ | CollectionFlow.cs:16:63:16:69 | access to indexer | access to indexer | -| CollectionFlow.cs:117:17:117:23 | object creation of type A : A | CollectionFlow.cs:117:17:117:23 | object creation of type A : A | CollectionFlow.cs:119:14:119:20 | access to indexer | $@ | CollectionFlow.cs:119:14:119:20 | access to indexer | access to indexer | -| CollectionFlow.cs:117:17:117:23 | object creation of type A : A | CollectionFlow.cs:117:17:117:23 | object creation of type A : A | CollectionFlow.cs:121:14:121:28 | call to method ListFirst | $@ | CollectionFlow.cs:121:14:121:28 | call to method ListFirst | call to method ListFirst | -| CollectionFlow.cs:134:17:134:23 | object creation of type A : A | CollectionFlow.cs:134:17:134:23 | object creation of type A : A | CollectionFlow.cs:16:63:16:69 | access to indexer | $@ | CollectionFlow.cs:16:63:16:69 | access to indexer | access to indexer | -| CollectionFlow.cs:134:17:134:23 | object creation of type A : A | CollectionFlow.cs:134:17:134:23 | object creation of type A : A | CollectionFlow.cs:137:14:137:20 | access to indexer | $@ | CollectionFlow.cs:137:14:137:20 | access to indexer | access to indexer | -| CollectionFlow.cs:134:17:134:23 | object creation of type A : A | CollectionFlow.cs:134:17:134:23 | object creation of type A : A | CollectionFlow.cs:139:14:139:28 | call to method ListFirst | $@ | CollectionFlow.cs:139:14:139:28 | call to method ListFirst | call to method ListFirst | -| CollectionFlow.cs:153:17:153:23 | object creation of type A : A | CollectionFlow.cs:153:17:153:23 | object creation of type A : A | CollectionFlow.cs:18:75:18:81 | access to indexer | $@ | CollectionFlow.cs:18:75:18:81 | access to indexer | access to indexer | -| CollectionFlow.cs:153:17:153:23 | object creation of type A : A | CollectionFlow.cs:153:17:153:23 | object creation of type A : A | CollectionFlow.cs:156:14:156:20 | access to indexer | $@ | CollectionFlow.cs:156:14:156:20 | access to indexer | access to indexer | -| CollectionFlow.cs:153:17:153:23 | object creation of type A : A | CollectionFlow.cs:153:17:153:23 | object creation of type A : A | CollectionFlow.cs:158:14:158:32 | call to method DictIndexZero | $@ | CollectionFlow.cs:158:14:158:32 | call to method DictIndexZero | call to method DictIndexZero | -| CollectionFlow.cs:153:17:153:23 | object creation of type A : A | CollectionFlow.cs:153:17:153:23 | object creation of type A : A | CollectionFlow.cs:159:14:159:33 | call to method DictFirstValue | $@ | CollectionFlow.cs:159:14:159:33 | call to method DictFirstValue | call to method DictFirstValue | -| CollectionFlow.cs:153:17:153:23 | object creation of type A : A | CollectionFlow.cs:153:17:153:23 | object creation of type A : A | CollectionFlow.cs:160:14:160:34 | call to method DictValuesFirst | $@ | CollectionFlow.cs:160:14:160:34 | call to method DictValuesFirst | call to method DictValuesFirst | -| CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:18:75:18:81 | access to indexer | $@ | CollectionFlow.cs:18:75:18:81 | access to indexer | access to indexer | -| CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:178:14:178:20 | access to indexer | $@ | CollectionFlow.cs:178:14:178:20 | access to indexer | access to indexer | -| CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:180:14:180:32 | call to method DictIndexZero | $@ | CollectionFlow.cs:180:14:180:32 | call to method DictIndexZero | call to method DictIndexZero | -| CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:181:14:181:33 | call to method DictFirstValue | $@ | CollectionFlow.cs:181:14:181:33 | call to method DictFirstValue | call to method DictFirstValue | -| CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:182:14:182:34 | call to method DictValuesFirst | $@ | CollectionFlow.cs:182:14:182:34 | call to method DictValuesFirst | call to method DictValuesFirst | -| CollectionFlow.cs:197:17:197:23 | object creation of type A : A | CollectionFlow.cs:197:17:197:23 | object creation of type A : A | CollectionFlow.cs:18:75:18:81 | access to indexer | $@ | CollectionFlow.cs:18:75:18:81 | access to indexer | access to indexer | -| CollectionFlow.cs:197:17:197:23 | object creation of type A : A | CollectionFlow.cs:197:17:197:23 | object creation of type A : A | CollectionFlow.cs:199:14:199:20 | access to indexer | $@ | CollectionFlow.cs:199:14:199:20 | access to indexer | access to indexer | -| CollectionFlow.cs:197:17:197:23 | object creation of type A : A | CollectionFlow.cs:197:17:197:23 | object creation of type A : A | CollectionFlow.cs:201:14:201:32 | call to method DictIndexZero | $@ | CollectionFlow.cs:201:14:201:32 | call to method DictIndexZero | call to method DictIndexZero | -| CollectionFlow.cs:197:17:197:23 | object creation of type A : A | CollectionFlow.cs:197:17:197:23 | object creation of type A : A | CollectionFlow.cs:202:14:202:33 | call to method DictFirstValue | $@ | CollectionFlow.cs:202:14:202:33 | call to method DictFirstValue | call to method DictFirstValue | -| CollectionFlow.cs:197:17:197:23 | object creation of type A : A | CollectionFlow.cs:197:17:197:23 | object creation of type A : A | CollectionFlow.cs:203:14:203:34 | call to method DictValuesFirst | $@ | CollectionFlow.cs:203:14:203:34 | call to method DictValuesFirst | call to method DictValuesFirst | -| CollectionFlow.cs:219:17:219:23 | object creation of type A : A | CollectionFlow.cs:219:17:219:23 | object creation of type A : A | CollectionFlow.cs:20:73:20:89 | call to method First | $@ | CollectionFlow.cs:20:73:20:89 | call to method First | call to method First | -| CollectionFlow.cs:219:17:219:23 | object creation of type A : A | CollectionFlow.cs:219:17:219:23 | object creation of type A : A | CollectionFlow.cs:221:14:221:30 | call to method First | $@ | CollectionFlow.cs:221:14:221:30 | call to method First | call to method First | -| CollectionFlow.cs:219:17:219:23 | object creation of type A : A | CollectionFlow.cs:219:17:219:23 | object creation of type A : A | CollectionFlow.cs:223:14:223:32 | call to method DictKeysFirst | $@ | CollectionFlow.cs:223:14:223:32 | call to method DictKeysFirst | call to method DictKeysFirst | -| CollectionFlow.cs:219:17:219:23 | object creation of type A : A | CollectionFlow.cs:219:17:219:23 | object creation of type A : A | CollectionFlow.cs:224:14:224:31 | call to method DictFirstKey | $@ | CollectionFlow.cs:224:14:224:31 | call to method DictFirstKey | call to method DictFirstKey | -| CollectionFlow.cs:238:17:238:23 | object creation of type A : A | CollectionFlow.cs:238:17:238:23 | object creation of type A : A | CollectionFlow.cs:20:73:20:89 | call to method First | $@ | CollectionFlow.cs:20:73:20:89 | call to method First | call to method First | -| CollectionFlow.cs:238:17:238:23 | object creation of type A : A | CollectionFlow.cs:238:17:238:23 | object creation of type A : A | CollectionFlow.cs:240:14:240:30 | call to method First | $@ | CollectionFlow.cs:240:14:240:30 | call to method First | call to method First | -| CollectionFlow.cs:238:17:238:23 | object creation of type A : A | CollectionFlow.cs:238:17:238:23 | object creation of type A : A | CollectionFlow.cs:242:14:242:32 | call to method DictKeysFirst | $@ | CollectionFlow.cs:242:14:242:32 | call to method DictKeysFirst | call to method DictKeysFirst | -| CollectionFlow.cs:238:17:238:23 | object creation of type A : A | CollectionFlow.cs:238:17:238:23 | object creation of type A : A | CollectionFlow.cs:243:14:243:31 | call to method DictFirstKey | $@ | CollectionFlow.cs:243:14:243:31 | call to method DictFirstKey | call to method DictFirstKey | -| CollectionFlow.cs:257:17:257:23 | object creation of type A : A | CollectionFlow.cs:257:17:257:23 | object creation of type A : A | CollectionFlow.cs:260:18:260:18 | access to local variable x | $@ | CollectionFlow.cs:260:18:260:18 | access to local variable x | access to local variable x | -| CollectionFlow.cs:272:17:272:23 | object creation of type A : A | CollectionFlow.cs:272:17:272:23 | object creation of type A : A | CollectionFlow.cs:276:18:276:35 | access to property Current | $@ | CollectionFlow.cs:276:18:276:35 | access to property Current | access to property Current | -| CollectionFlow.cs:289:17:289:23 | object creation of type A : A | CollectionFlow.cs:289:17:289:23 | object creation of type A : A | CollectionFlow.cs:294:18:294:35 | access to property Current | $@ | CollectionFlow.cs:294:18:294:35 | access to property Current | access to property Current | -| CollectionFlow.cs:308:17:308:23 | object creation of type A : A | CollectionFlow.cs:308:17:308:23 | object creation of type A : A | CollectionFlow.cs:313:18:313:24 | access to property Key | $@ | CollectionFlow.cs:313:18:313:24 | access to property Key | access to property Key | -| CollectionFlow.cs:334:17:334:23 | object creation of type A : A | CollectionFlow.cs:334:17:334:23 | object creation of type A : A | CollectionFlow.cs:14:52:14:56 | access to array element | $@ | CollectionFlow.cs:14:52:14:56 | access to array element | access to array element | -| CollectionFlow.cs:334:17:334:23 | object creation of type A : A | CollectionFlow.cs:334:17:334:23 | object creation of type A : A | CollectionFlow.cs:337:14:337:19 | access to array element | $@ | CollectionFlow.cs:337:14:337:19 | access to array element | access to array element | -| CollectionFlow.cs:334:17:334:23 | object creation of type A : A | CollectionFlow.cs:334:17:334:23 | object creation of type A : A | CollectionFlow.cs:339:14:339:23 | call to method First | $@ | CollectionFlow.cs:339:14:339:23 | call to method First | call to method First | -| CollectionFlow.cs:356:17:356:23 | object creation of type A : A | CollectionFlow.cs:356:17:356:23 | object creation of type A : A | CollectionFlow.cs:16:63:16:69 | access to indexer | $@ | CollectionFlow.cs:16:63:16:69 | access to indexer | access to indexer | -| CollectionFlow.cs:356:17:356:23 | object creation of type A : A | CollectionFlow.cs:356:17:356:23 | object creation of type A : A | CollectionFlow.cs:359:14:359:20 | access to indexer | $@ | CollectionFlow.cs:359:14:359:20 | access to indexer | access to indexer | -| CollectionFlow.cs:356:17:356:23 | object creation of type A : A | CollectionFlow.cs:356:17:356:23 | object creation of type A : A | CollectionFlow.cs:361:14:361:28 | call to method ListFirst | $@ | CollectionFlow.cs:361:14:361:28 | call to method ListFirst | call to method ListFirst | -| CollectionFlow.cs:375:20:375:26 | object creation of type A : A | CollectionFlow.cs:375:20:375:26 | object creation of type A : A | CollectionFlow.cs:36:63:36:69 | access to array element | $@ | CollectionFlow.cs:36:63:36:69 | access to array element | access to array element | -| CollectionFlow.cs:376:26:376:32 | object creation of type A : A | CollectionFlow.cs:376:26:376:32 | object creation of type A : A | CollectionFlow.cs:36:63:36:69 | access to array element | $@ | CollectionFlow.cs:36:63:36:69 | access to array element | access to array element | -| CollectionFlow.cs:377:26:377:32 | object creation of type A : A | CollectionFlow.cs:377:26:377:32 | object creation of type A : A | CollectionFlow.cs:36:63:36:69 | access to array element | $@ | CollectionFlow.cs:36:63:36:69 | access to array element | access to array element | -| CollectionFlow.cs:378:30:378:36 | object creation of type A : A | CollectionFlow.cs:378:30:378:36 | object creation of type A : A | CollectionFlow.cs:36:63:36:69 | access to array element | $@ | CollectionFlow.cs:36:63:36:69 | access to array element | access to array element | -| CollectionFlow.cs:391:30:391:36 | object creation of type A : A | CollectionFlow.cs:391:30:391:36 | object creation of type A : A | CollectionFlow.cs:38:84:38:95 | call to method First | $@ | CollectionFlow.cs:38:84:38:95 | call to method First | call to method First | -| CollectionFlow.cs:392:36:392:42 | object creation of type A : A | CollectionFlow.cs:392:36:392:42 | object creation of type A : A | CollectionFlow.cs:38:84:38:95 | call to method First | $@ | CollectionFlow.cs:38:84:38:95 | call to method First | call to method First | -| CollectionFlow.cs:393:36:393:42 | object creation of type A : A | CollectionFlow.cs:393:36:393:42 | object creation of type A : A | CollectionFlow.cs:38:84:38:95 | call to method First | $@ | CollectionFlow.cs:38:84:38:95 | call to method First | call to method First | -| CollectionFlow.cs:394:31:394:37 | object creation of type A : A | CollectionFlow.cs:394:31:394:37 | object creation of type A : A | CollectionFlow.cs:38:84:38:95 | call to method First | $@ | CollectionFlow.cs:38:84:38:95 | call to method First | call to method First | -| CollectionFlow.cs:416:17:416:23 | object creation of type A : A | CollectionFlow.cs:416:17:416:23 | object creation of type A : A | CollectionFlow.cs:419:14:419:21 | access to array element | $@ | CollectionFlow.cs:419:14:419:21 | access to array element | access to array element | -| CollectionFlow.cs:437:17:437:23 | object creation of type A : A | CollectionFlow.cs:437:17:437:23 | object creation of type A : A | CollectionFlow.cs:439:14:439:21 | access to array element | $@ | CollectionFlow.cs:439:14:439:21 | access to array element | access to array element | -| CollectionFlow.cs:444:17:444:23 | object creation of type A : A | CollectionFlow.cs:444:17:444:23 | object creation of type A : A | CollectionFlow.cs:446:14:446:17 | access to indexer | $@ | CollectionFlow.cs:446:14:446:17 | access to indexer | access to indexer | -| CollectionFlow.cs:457:17:457:23 | object creation of type A : A | CollectionFlow.cs:457:17:457:23 | object creation of type A : A | CollectionFlow.cs:460:14:460:21 | access to array element | $@ | CollectionFlow.cs:460:14:460:21 | access to array element | access to array element | -| CollectionFlow.cs:497:17:497:23 | object creation of type A : A | CollectionFlow.cs:497:17:497:23 | object creation of type A : A | CollectionFlow.cs:499:14:499:20 | access to indexer | $@ | CollectionFlow.cs:499:14:499:20 | access to indexer | access to indexer | -| CollectionFlow.cs:504:17:504:23 | object creation of type A : A | CollectionFlow.cs:504:17:504:23 | object creation of type A : A | CollectionFlow.cs:507:14:507:19 | access to array element | $@ | CollectionFlow.cs:507:14:507:19 | access to array element | access to array element | -| CollectionFlow.cs:512:17:512:23 | object creation of type A : A | CollectionFlow.cs:512:17:512:23 | object creation of type A : A | CollectionFlow.cs:514:14:514:22 | access to indexer | $@ | CollectionFlow.cs:514:14:514:22 | access to indexer | access to indexer | -| CollectionFlow.cs:519:42:519:48 | object creation of type A : A | CollectionFlow.cs:519:42:519:48 | object creation of type A : A | CollectionFlow.cs:521:14:521:22 | access to indexer | $@ | CollectionFlow.cs:521:14:521:22 | access to indexer | access to indexer | -| CollectionFlow.cs:526:17:526:23 | object creation of type A : A | CollectionFlow.cs:526:17:526:23 | object creation of type A : A | CollectionFlow.cs:528:14:528:20 | access to indexer | $@ | CollectionFlow.cs:528:14:528:20 | access to indexer | access to indexer | +| CollectionFlow.cs:46:17:46:23 | object creation of type A : A | CollectionFlow.cs:46:17:46:23 | object creation of type A : A | CollectionFlow.cs:14:52:14:56 | access to array element | $@ | CollectionFlow.cs:14:52:14:56 | access to array element | access to array element | +| CollectionFlow.cs:46:17:46:23 | object creation of type A : A | CollectionFlow.cs:46:17:46:23 | object creation of type A : A | CollectionFlow.cs:48:14:48:19 | access to array element | $@ | CollectionFlow.cs:48:14:48:19 | access to array element | access to array element | +| CollectionFlow.cs:46:17:46:23 | object creation of type A : A | CollectionFlow.cs:46:17:46:23 | object creation of type A : A | CollectionFlow.cs:50:14:50:23 | call to method First | $@ | CollectionFlow.cs:50:14:50:23 | call to method First | call to method First | +| CollectionFlow.cs:64:17:64:23 | object creation of type A : A | CollectionFlow.cs:64:17:64:23 | object creation of type A : A | CollectionFlow.cs:14:52:14:56 | access to array element | $@ | CollectionFlow.cs:14:52:14:56 | access to array element | access to array element | +| CollectionFlow.cs:64:17:64:23 | object creation of type A : A | CollectionFlow.cs:64:17:64:23 | object creation of type A : A | CollectionFlow.cs:66:14:66:20 | access to array element | $@ | CollectionFlow.cs:66:14:66:20 | access to array element | access to array element | +| CollectionFlow.cs:64:17:64:23 | object creation of type A : A | CollectionFlow.cs:64:17:64:23 | object creation of type A : A | CollectionFlow.cs:68:14:68:24 | call to method First | $@ | CollectionFlow.cs:68:14:68:24 | call to method First | call to method First | +| CollectionFlow.cs:82:17:82:23 | object creation of type A : A | CollectionFlow.cs:82:17:82:23 | object creation of type A : A | CollectionFlow.cs:16:56:16:61 | access to array element | $@ | CollectionFlow.cs:16:56:16:61 | access to array element | access to array element | +| CollectionFlow.cs:82:17:82:23 | object creation of type A : A | CollectionFlow.cs:82:17:82:23 | object creation of type A : A | CollectionFlow.cs:84:14:84:21 | access to array element | $@ | CollectionFlow.cs:84:14:84:21 | access to array element | access to array element | +| CollectionFlow.cs:82:17:82:23 | object creation of type A : A | CollectionFlow.cs:82:17:82:23 | object creation of type A : A | CollectionFlow.cs:86:14:86:23 | call to method Last | $@ | CollectionFlow.cs:86:14:86:23 | call to method Last | call to method Last | +| CollectionFlow.cs:91:17:91:23 | object creation of type A : A | CollectionFlow.cs:91:17:91:23 | object creation of type A : A | CollectionFlow.cs:14:52:14:56 | access to array element | $@ | CollectionFlow.cs:14:52:14:56 | access to array element | access to array element | +| CollectionFlow.cs:91:17:91:23 | object creation of type A : A | CollectionFlow.cs:91:17:91:23 | object creation of type A : A | CollectionFlow.cs:94:14:94:19 | access to array element | $@ | CollectionFlow.cs:94:14:94:19 | access to array element | access to array element | +| CollectionFlow.cs:91:17:91:23 | object creation of type A : A | CollectionFlow.cs:91:17:91:23 | object creation of type A : A | CollectionFlow.cs:96:14:96:23 | call to method First | $@ | CollectionFlow.cs:96:14:96:23 | call to method First | call to method First | +| CollectionFlow.cs:111:17:111:23 | object creation of type A : A | CollectionFlow.cs:111:17:111:23 | object creation of type A : A | CollectionFlow.cs:16:56:16:61 | access to array element | $@ | CollectionFlow.cs:16:56:16:61 | access to array element | access to array element | +| CollectionFlow.cs:111:17:111:23 | object creation of type A : A | CollectionFlow.cs:111:17:111:23 | object creation of type A : A | CollectionFlow.cs:114:14:114:20 | access to array element | $@ | CollectionFlow.cs:114:14:114:20 | access to array element | access to array element | +| CollectionFlow.cs:111:17:111:23 | object creation of type A : A | CollectionFlow.cs:111:17:111:23 | object creation of type A : A | CollectionFlow.cs:116:14:116:22 | call to method Last | $@ | CollectionFlow.cs:116:14:116:22 | call to method Last | call to method Last | +| CollectionFlow.cs:121:17:121:23 | object creation of type A : A | CollectionFlow.cs:121:17:121:23 | object creation of type A : A | CollectionFlow.cs:18:63:18:69 | access to indexer | $@ | CollectionFlow.cs:18:63:18:69 | access to indexer | access to indexer | +| CollectionFlow.cs:121:17:121:23 | object creation of type A : A | CollectionFlow.cs:121:17:121:23 | object creation of type A : A | CollectionFlow.cs:124:14:124:20 | access to indexer | $@ | CollectionFlow.cs:124:14:124:20 | access to indexer | access to indexer | +| CollectionFlow.cs:121:17:121:23 | object creation of type A : A | CollectionFlow.cs:121:17:121:23 | object creation of type A : A | CollectionFlow.cs:126:14:126:28 | call to method ListFirst | $@ | CollectionFlow.cs:126:14:126:28 | call to method ListFirst | call to method ListFirst | +| CollectionFlow.cs:140:17:140:23 | object creation of type A : A | CollectionFlow.cs:140:17:140:23 | object creation of type A : A | CollectionFlow.cs:18:63:18:69 | access to indexer | $@ | CollectionFlow.cs:18:63:18:69 | access to indexer | access to indexer | +| CollectionFlow.cs:140:17:140:23 | object creation of type A : A | CollectionFlow.cs:140:17:140:23 | object creation of type A : A | CollectionFlow.cs:142:14:142:20 | access to indexer | $@ | CollectionFlow.cs:142:14:142:20 | access to indexer | access to indexer | +| CollectionFlow.cs:140:17:140:23 | object creation of type A : A | CollectionFlow.cs:140:17:140:23 | object creation of type A : A | CollectionFlow.cs:144:14:144:28 | call to method ListFirst | $@ | CollectionFlow.cs:144:14:144:28 | call to method ListFirst | call to method ListFirst | +| CollectionFlow.cs:157:17:157:23 | object creation of type A : A | CollectionFlow.cs:157:17:157:23 | object creation of type A : A | CollectionFlow.cs:18:63:18:69 | access to indexer | $@ | CollectionFlow.cs:18:63:18:69 | access to indexer | access to indexer | +| CollectionFlow.cs:157:17:157:23 | object creation of type A : A | CollectionFlow.cs:157:17:157:23 | object creation of type A : A | CollectionFlow.cs:160:14:160:20 | access to indexer | $@ | CollectionFlow.cs:160:14:160:20 | access to indexer | access to indexer | +| CollectionFlow.cs:157:17:157:23 | object creation of type A : A | CollectionFlow.cs:157:17:157:23 | object creation of type A : A | CollectionFlow.cs:162:14:162:28 | call to method ListFirst | $@ | CollectionFlow.cs:162:14:162:28 | call to method ListFirst | call to method ListFirst | +| CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:20:75:20:81 | access to indexer | $@ | CollectionFlow.cs:20:75:20:81 | access to indexer | access to indexer | +| CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:179:14:179:20 | access to indexer | $@ | CollectionFlow.cs:179:14:179:20 | access to indexer | access to indexer | +| CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:181:14:181:32 | call to method DictIndexZero | $@ | CollectionFlow.cs:181:14:181:32 | call to method DictIndexZero | call to method DictIndexZero | +| CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:182:14:182:33 | call to method DictFirstValue | $@ | CollectionFlow.cs:182:14:182:33 | call to method DictFirstValue | call to method DictFirstValue | +| CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:176:17:176:23 | object creation of type A : A | CollectionFlow.cs:183:14:183:34 | call to method DictValuesFirst | $@ | CollectionFlow.cs:183:14:183:34 | call to method DictValuesFirst | call to method DictValuesFirst | +| CollectionFlow.cs:199:17:199:23 | object creation of type A : A | CollectionFlow.cs:199:17:199:23 | object creation of type A : A | CollectionFlow.cs:20:75:20:81 | access to indexer | $@ | CollectionFlow.cs:20:75:20:81 | access to indexer | access to indexer | +| CollectionFlow.cs:199:17:199:23 | object creation of type A : A | CollectionFlow.cs:199:17:199:23 | object creation of type A : A | CollectionFlow.cs:201:14:201:20 | access to indexer | $@ | CollectionFlow.cs:201:14:201:20 | access to indexer | access to indexer | +| CollectionFlow.cs:199:17:199:23 | object creation of type A : A | CollectionFlow.cs:199:17:199:23 | object creation of type A : A | CollectionFlow.cs:203:14:203:32 | call to method DictIndexZero | $@ | CollectionFlow.cs:203:14:203:32 | call to method DictIndexZero | call to method DictIndexZero | +| CollectionFlow.cs:199:17:199:23 | object creation of type A : A | CollectionFlow.cs:199:17:199:23 | object creation of type A : A | CollectionFlow.cs:204:14:204:33 | call to method DictFirstValue | $@ | CollectionFlow.cs:204:14:204:33 | call to method DictFirstValue | call to method DictFirstValue | +| CollectionFlow.cs:199:17:199:23 | object creation of type A : A | CollectionFlow.cs:199:17:199:23 | object creation of type A : A | CollectionFlow.cs:205:14:205:34 | call to method DictValuesFirst | $@ | CollectionFlow.cs:205:14:205:34 | call to method DictValuesFirst | call to method DictValuesFirst | +| CollectionFlow.cs:220:17:220:23 | object creation of type A : A | CollectionFlow.cs:220:17:220:23 | object creation of type A : A | CollectionFlow.cs:20:75:20:81 | access to indexer | $@ | CollectionFlow.cs:20:75:20:81 | access to indexer | access to indexer | +| CollectionFlow.cs:220:17:220:23 | object creation of type A : A | CollectionFlow.cs:220:17:220:23 | object creation of type A : A | CollectionFlow.cs:222:14:222:20 | access to indexer | $@ | CollectionFlow.cs:222:14:222:20 | access to indexer | access to indexer | +| CollectionFlow.cs:220:17:220:23 | object creation of type A : A | CollectionFlow.cs:220:17:220:23 | object creation of type A : A | CollectionFlow.cs:224:14:224:32 | call to method DictIndexZero | $@ | CollectionFlow.cs:224:14:224:32 | call to method DictIndexZero | call to method DictIndexZero | +| CollectionFlow.cs:220:17:220:23 | object creation of type A : A | CollectionFlow.cs:220:17:220:23 | object creation of type A : A | CollectionFlow.cs:225:14:225:33 | call to method DictFirstValue | $@ | CollectionFlow.cs:225:14:225:33 | call to method DictFirstValue | call to method DictFirstValue | +| CollectionFlow.cs:220:17:220:23 | object creation of type A : A | CollectionFlow.cs:220:17:220:23 | object creation of type A : A | CollectionFlow.cs:226:14:226:34 | call to method DictValuesFirst | $@ | CollectionFlow.cs:226:14:226:34 | call to method DictValuesFirst | call to method DictValuesFirst | +| CollectionFlow.cs:242:17:242:23 | object creation of type A : A | CollectionFlow.cs:242:17:242:23 | object creation of type A : A | CollectionFlow.cs:22:73:22:89 | call to method First | $@ | CollectionFlow.cs:22:73:22:89 | call to method First | call to method First | +| CollectionFlow.cs:242:17:242:23 | object creation of type A : A | CollectionFlow.cs:242:17:242:23 | object creation of type A : A | CollectionFlow.cs:244:14:244:30 | call to method First | $@ | CollectionFlow.cs:244:14:244:30 | call to method First | call to method First | +| CollectionFlow.cs:242:17:242:23 | object creation of type A : A | CollectionFlow.cs:242:17:242:23 | object creation of type A : A | CollectionFlow.cs:246:14:246:32 | call to method DictKeysFirst | $@ | CollectionFlow.cs:246:14:246:32 | call to method DictKeysFirst | call to method DictKeysFirst | +| CollectionFlow.cs:242:17:242:23 | object creation of type A : A | CollectionFlow.cs:242:17:242:23 | object creation of type A : A | CollectionFlow.cs:247:14:247:31 | call to method DictFirstKey | $@ | CollectionFlow.cs:247:14:247:31 | call to method DictFirstKey | call to method DictFirstKey | +| CollectionFlow.cs:261:17:261:23 | object creation of type A : A | CollectionFlow.cs:261:17:261:23 | object creation of type A : A | CollectionFlow.cs:22:73:22:89 | call to method First | $@ | CollectionFlow.cs:22:73:22:89 | call to method First | call to method First | +| CollectionFlow.cs:261:17:261:23 | object creation of type A : A | CollectionFlow.cs:261:17:261:23 | object creation of type A : A | CollectionFlow.cs:263:14:263:30 | call to method First | $@ | CollectionFlow.cs:263:14:263:30 | call to method First | call to method First | +| CollectionFlow.cs:261:17:261:23 | object creation of type A : A | CollectionFlow.cs:261:17:261:23 | object creation of type A : A | CollectionFlow.cs:265:14:265:32 | call to method DictKeysFirst | $@ | CollectionFlow.cs:265:14:265:32 | call to method DictKeysFirst | call to method DictKeysFirst | +| CollectionFlow.cs:261:17:261:23 | object creation of type A : A | CollectionFlow.cs:261:17:261:23 | object creation of type A : A | CollectionFlow.cs:266:14:266:31 | call to method DictFirstKey | $@ | CollectionFlow.cs:266:14:266:31 | call to method DictFirstKey | call to method DictFirstKey | +| CollectionFlow.cs:280:17:280:23 | object creation of type A : A | CollectionFlow.cs:280:17:280:23 | object creation of type A : A | CollectionFlow.cs:283:18:283:18 | access to local variable x | $@ | CollectionFlow.cs:283:18:283:18 | access to local variable x | access to local variable x | +| CollectionFlow.cs:295:17:295:23 | object creation of type A : A | CollectionFlow.cs:295:17:295:23 | object creation of type A : A | CollectionFlow.cs:299:18:299:35 | access to property Current | $@ | CollectionFlow.cs:299:18:299:35 | access to property Current | access to property Current | +| CollectionFlow.cs:312:17:312:23 | object creation of type A : A | CollectionFlow.cs:312:17:312:23 | object creation of type A : A | CollectionFlow.cs:317:18:317:35 | access to property Current | $@ | CollectionFlow.cs:317:18:317:35 | access to property Current | access to property Current | +| CollectionFlow.cs:331:17:331:23 | object creation of type A : A | CollectionFlow.cs:331:17:331:23 | object creation of type A : A | CollectionFlow.cs:336:18:336:24 | access to property Key | $@ | CollectionFlow.cs:336:18:336:24 | access to property Key | access to property Key | +| CollectionFlow.cs:357:17:357:23 | object creation of type A : A | CollectionFlow.cs:357:17:357:23 | object creation of type A : A | CollectionFlow.cs:14:52:14:56 | access to array element | $@ | CollectionFlow.cs:14:52:14:56 | access to array element | access to array element | +| CollectionFlow.cs:357:17:357:23 | object creation of type A : A | CollectionFlow.cs:357:17:357:23 | object creation of type A : A | CollectionFlow.cs:360:14:360:19 | access to array element | $@ | CollectionFlow.cs:360:14:360:19 | access to array element | access to array element | +| CollectionFlow.cs:357:17:357:23 | object creation of type A : A | CollectionFlow.cs:357:17:357:23 | object creation of type A : A | CollectionFlow.cs:362:14:362:23 | call to method First | $@ | CollectionFlow.cs:362:14:362:23 | call to method First | call to method First | +| CollectionFlow.cs:379:17:379:23 | object creation of type A : A | CollectionFlow.cs:379:17:379:23 | object creation of type A : A | CollectionFlow.cs:18:63:18:69 | access to indexer | $@ | CollectionFlow.cs:18:63:18:69 | access to indexer | access to indexer | +| CollectionFlow.cs:379:17:379:23 | object creation of type A : A | CollectionFlow.cs:379:17:379:23 | object creation of type A : A | CollectionFlow.cs:382:14:382:20 | access to indexer | $@ | CollectionFlow.cs:382:14:382:20 | access to indexer | access to indexer | +| CollectionFlow.cs:379:17:379:23 | object creation of type A : A | CollectionFlow.cs:379:17:379:23 | object creation of type A : A | CollectionFlow.cs:384:14:384:28 | call to method ListFirst | $@ | CollectionFlow.cs:384:14:384:28 | call to method ListFirst | call to method ListFirst | +| CollectionFlow.cs:398:20:398:26 | object creation of type A : A | CollectionFlow.cs:398:20:398:26 | object creation of type A : A | CollectionFlow.cs:40:63:40:69 | access to array element | $@ | CollectionFlow.cs:40:63:40:69 | access to array element | access to array element | +| CollectionFlow.cs:399:26:399:32 | object creation of type A : A | CollectionFlow.cs:399:26:399:32 | object creation of type A : A | CollectionFlow.cs:40:63:40:69 | access to array element | $@ | CollectionFlow.cs:40:63:40:69 | access to array element | access to array element | +| CollectionFlow.cs:400:26:400:32 | object creation of type A : A | CollectionFlow.cs:400:26:400:32 | object creation of type A : A | CollectionFlow.cs:40:63:40:69 | access to array element | $@ | CollectionFlow.cs:40:63:40:69 | access to array element | access to array element | +| CollectionFlow.cs:401:30:401:36 | object creation of type A : A | CollectionFlow.cs:401:30:401:36 | object creation of type A : A | CollectionFlow.cs:40:63:40:69 | access to array element | $@ | CollectionFlow.cs:40:63:40:69 | access to array element | access to array element | +| CollectionFlow.cs:414:30:414:36 | object creation of type A : A | CollectionFlow.cs:414:30:414:36 | object creation of type A : A | CollectionFlow.cs:42:84:42:95 | call to method First | $@ | CollectionFlow.cs:42:84:42:95 | call to method First | call to method First | +| CollectionFlow.cs:415:36:415:42 | object creation of type A : A | CollectionFlow.cs:415:36:415:42 | object creation of type A : A | CollectionFlow.cs:42:84:42:95 | call to method First | $@ | CollectionFlow.cs:42:84:42:95 | call to method First | call to method First | +| CollectionFlow.cs:416:36:416:42 | object creation of type A : A | CollectionFlow.cs:416:36:416:42 | object creation of type A : A | CollectionFlow.cs:42:84:42:95 | call to method First | $@ | CollectionFlow.cs:42:84:42:95 | call to method First | call to method First | +| CollectionFlow.cs:417:31:417:37 | object creation of type A : A | CollectionFlow.cs:417:31:417:37 | object creation of type A : A | CollectionFlow.cs:42:84:42:95 | call to method First | $@ | CollectionFlow.cs:42:84:42:95 | call to method First | call to method First | +| CollectionFlow.cs:439:17:439:23 | object creation of type A : A | CollectionFlow.cs:439:17:439:23 | object creation of type A : A | CollectionFlow.cs:442:14:442:21 | access to array element | $@ | CollectionFlow.cs:442:14:442:21 | access to array element | access to array element | +| CollectionFlow.cs:460:17:460:23 | object creation of type A : A | CollectionFlow.cs:460:17:460:23 | object creation of type A : A | CollectionFlow.cs:462:14:462:21 | access to array element | $@ | CollectionFlow.cs:462:14:462:21 | access to array element | access to array element | +| CollectionFlow.cs:467:17:467:23 | object creation of type A : A | CollectionFlow.cs:467:17:467:23 | object creation of type A : A | CollectionFlow.cs:469:14:469:17 | access to indexer | $@ | CollectionFlow.cs:469:14:469:17 | access to indexer | access to indexer | +| CollectionFlow.cs:480:17:480:23 | object creation of type A : A | CollectionFlow.cs:480:17:480:23 | object creation of type A : A | CollectionFlow.cs:483:14:483:21 | access to array element | $@ | CollectionFlow.cs:483:14:483:21 | access to array element | access to array element | +| CollectionFlow.cs:520:17:520:23 | object creation of type A : A | CollectionFlow.cs:520:17:520:23 | object creation of type A : A | CollectionFlow.cs:522:14:522:20 | access to indexer | $@ | CollectionFlow.cs:522:14:522:20 | access to indexer | access to indexer | +| CollectionFlow.cs:527:17:527:23 | object creation of type A : A | CollectionFlow.cs:527:17:527:23 | object creation of type A : A | CollectionFlow.cs:530:14:530:19 | access to array element | $@ | CollectionFlow.cs:530:14:530:19 | access to array element | access to array element | +| CollectionFlow.cs:535:17:535:23 | object creation of type A : A | CollectionFlow.cs:535:17:535:23 | object creation of type A : A | CollectionFlow.cs:537:14:537:22 | access to indexer | $@ | CollectionFlow.cs:537:14:537:22 | access to indexer | access to indexer | +| CollectionFlow.cs:542:42:542:48 | object creation of type A : A | CollectionFlow.cs:542:42:542:48 | object creation of type A : A | CollectionFlow.cs:544:14:544:22 | access to indexer | $@ | CollectionFlow.cs:544:14:544:22 | access to indexer | access to indexer | +| CollectionFlow.cs:549:17:549:23 | object creation of type A : A | CollectionFlow.cs:549:17:549:23 | object creation of type A : A | CollectionFlow.cs:551:14:551:20 | access to indexer | $@ | CollectionFlow.cs:551:14:551:20 | access to indexer | access to indexer | From 33e07edcbf68685c7bdc606bd8a4f7ddad2cb955 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 23 Jan 2025 13:43:27 +0100 Subject: [PATCH 17/17] Rust: Translate more MaD IDs in tests --- rust/ql/lib/utils/test/TranslateModels.qll | 9 + .../dataflow/local/DataFlowStep.expected | 940 +++++++++--------- .../dataflow/local/DataFlowStep.ql | 14 +- .../dataflow/taint/TaintFlowStep.expected | 11 +- .../dataflow/taint/TaintFlowStep.ql | 16 +- .../dataflow/test/ProvenancePathGraph.qll | 4 +- 6 files changed, 524 insertions(+), 470 deletions(-) create mode 100644 rust/ql/lib/utils/test/TranslateModels.qll diff --git a/rust/ql/lib/utils/test/TranslateModels.qll b/rust/ql/lib/utils/test/TranslateModels.qll new file mode 100644 index 000000000000..9c60d63e82cc --- /dev/null +++ b/rust/ql/lib/utils/test/TranslateModels.qll @@ -0,0 +1,9 @@ +private import codeql.dataflow.test.ProvenancePathGraph as Graph +private import codeql.rust.dataflow.internal.ModelsAsData as MaD + +private signature predicate provenanceSig(string model); + +/** Translates models-as-data provenance information into a format that can be used in tests. */ +module TranslateModels { + import Graph::TranslateModels +} diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index 8691e4aedcf4..fdb81065a0eb 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -1,468 +1,480 @@ localStep -| main.rs:3:11:3:11 | [SSA] i | main.rs:4:12:4:12 | i | -| main.rs:3:11:3:11 | i | main.rs:3:11:3:11 | [SSA] i | -| main.rs:3:11:3:16 | ...: i64 | main.rs:3:11:3:11 | i | -| main.rs:4:5:4:12 | ... + ... | main.rs:3:26:5:1 | { ... } | -| main.rs:7:9:7:9 | [SSA] s | main.rs:8:20:8:20 | s | -| main.rs:7:9:7:9 | s | main.rs:7:9:7:9 | [SSA] s | -| main.rs:7:9:7:14 | ...: i64 | main.rs:7:9:7:9 | s | -| main.rs:8:14:8:20 | FormatArgsExpr | main.rs:8:14:8:20 | MacroExpr | -| main.rs:19:9:19:9 | [SSA] s | main.rs:20:10:20:10 | s | -| main.rs:19:9:19:9 | s | main.rs:19:9:19:9 | [SSA] s | -| main.rs:19:13:19:21 | source(...) | main.rs:19:9:19:9 | s | -| main.rs:23:18:23:21 | [SSA] cond | main.rs:26:16:26:19 | cond | -| main.rs:23:18:23:21 | cond | main.rs:23:18:23:21 | [SSA] cond | -| main.rs:23:18:23:27 | ...: bool | main.rs:23:18:23:21 | cond | -| main.rs:24:9:24:9 | [SSA] a | main.rs:26:23:26:23 | a | -| main.rs:24:9:24:9 | a | main.rs:24:9:24:9 | [SSA] a | -| main.rs:24:13:24:21 | source(...) | main.rs:24:9:24:9 | a | -| main.rs:25:9:25:9 | [SSA] b | main.rs:26:34:26:34 | b | -| main.rs:25:9:25:9 | b | main.rs:25:9:25:9 | [SSA] b | -| main.rs:25:13:25:13 | 2 | main.rs:25:9:25:9 | b | -| main.rs:26:9:26:9 | [SSA] c | main.rs:27:10:27:10 | c | -| main.rs:26:9:26:9 | c | main.rs:26:9:26:9 | [SSA] c | -| main.rs:26:13:26:36 | if cond {...} else {...} | main.rs:26:9:26:9 | c | -| main.rs:26:21:26:25 | { ... } | main.rs:26:13:26:36 | if cond {...} else {...} | -| main.rs:26:23:26:23 | a | main.rs:26:21:26:25 | { ... } | -| main.rs:26:32:26:36 | { ... } | main.rs:26:13:26:36 | if cond {...} else {...} | -| main.rs:26:34:26:34 | b | main.rs:26:32:26:36 | { ... } | -| main.rs:30:21:30:21 | [SSA] m | main.rs:32:19:32:19 | m | -| main.rs:30:21:30:21 | m | main.rs:30:21:30:21 | [SSA] m | -| main.rs:30:21:30:34 | ...: Option::<...> | main.rs:30:21:30:21 | m | -| main.rs:31:9:31:9 | [SSA] a | main.rs:33:20:33:20 | a | -| main.rs:31:9:31:9 | a | main.rs:31:9:31:9 | [SSA] a | -| main.rs:31:13:31:21 | source(...) | main.rs:31:9:31:9 | a | -| main.rs:32:9:32:9 | [SSA] b | main.rs:36:10:36:10 | b | -| main.rs:32:9:32:9 | b | main.rs:32:9:32:9 | [SSA] b | -| main.rs:32:13:35:5 | match m { ... } | main.rs:32:9:32:9 | b | -| main.rs:32:19:32:19 | m | main.rs:33:9:33:15 | Some(...) | -| main.rs:32:19:32:19 | m | main.rs:34:9:34:12 | None | -| main.rs:33:20:33:20 | a | main.rs:32:13:35:5 | match m { ... } | -| main.rs:34:17:34:17 | 0 | main.rs:32:13:35:5 | match m { ... } | -| main.rs:40:9:40:9 | [SSA] a | main.rs:43:10:43:10 | a | -| main.rs:40:9:40:9 | a | main.rs:40:9:40:9 | [SSA] a | -| main.rs:40:13:42:5 | loop { ... } | main.rs:40:9:40:9 | a | -| main.rs:41:9:41:15 | break 1 | main.rs:40:13:42:5 | loop { ... } | -| main.rs:41:15:41:15 | 1 | main.rs:41:9:41:15 | break 1 | -| main.rs:44:9:44:9 | [SSA] b | main.rs:47:10:47:10 | b | -| main.rs:44:9:44:9 | b | main.rs:44:9:44:9 | [SSA] b | -| main.rs:44:13:46:5 | loop { ... } | main.rs:44:9:44:9 | b | -| main.rs:45:9:45:23 | break ... | main.rs:44:13:46:5 | loop { ... } | -| main.rs:45:15:45:23 | source(...) | main.rs:45:9:45:23 | break ... | -| main.rs:51:9:51:13 | [SSA] i | main.rs:52:10:52:10 | i | -| main.rs:51:9:51:13 | i | main.rs:51:9:51:13 | [SSA] i | -| main.rs:51:17:51:17 | 1 | main.rs:51:9:51:13 | i | -| main.rs:53:5:53:5 | [SSA] i | main.rs:54:10:54:10 | i | -| main.rs:53:5:53:5 | i | main.rs:53:5:53:5 | [SSA] i | -| main.rs:53:9:53:17 | source(...) | main.rs:53:5:53:5 | i | -| main.rs:58:9:58:9 | [SSA] a | main.rs:59:5:59:5 | a | -| main.rs:58:9:58:9 | a | main.rs:58:9:58:9 | [SSA] a | -| main.rs:58:13:58:17 | { ... } | main.rs:58:9:58:9 | a | -| main.rs:58:15:58:15 | 0 | main.rs:58:13:58:17 | { ... } | -| main.rs:59:5:59:5 | a | main.rs:57:31:60:1 | { ... } | -| main.rs:62:22:62:22 | [SSA] b | main.rs:64:12:64:12 | b | -| main.rs:62:22:62:22 | b | main.rs:62:22:62:22 | [SSA] b | -| main.rs:62:22:62:28 | ...: bool | main.rs:62:22:62:22 | b | -| main.rs:63:9:63:9 | [SSA] a | main.rs:69:5:69:5 | a | -| main.rs:63:9:63:9 | a | main.rs:63:9:63:9 | [SSA] a | -| main.rs:63:13:68:5 | 'block: { ... } | main.rs:63:9:63:9 | a | -| main.rs:65:13:65:26 | break ''block 1 | main.rs:63:13:68:5 | 'block: { ... } | -| main.rs:65:26:65:26 | 1 | main.rs:65:13:65:26 | break ''block 1 | -| main.rs:67:9:67:9 | 2 | main.rs:63:13:68:5 | 'block: { ... } | -| main.rs:69:5:69:5 | a | main.rs:62:38:70:1 | { ... } | -| main.rs:72:22:72:22 | [SSA] b | main.rs:74:12:74:12 | b | -| main.rs:72:22:72:22 | b | main.rs:72:22:72:22 | [SSA] b | -| main.rs:72:22:72:28 | ...: bool | main.rs:72:22:72:22 | b | -| main.rs:73:9:73:9 | [SSA] a | main.rs:79:5:79:5 | a | -| main.rs:73:9:73:9 | a | main.rs:73:9:73:9 | [SSA] a | -| main.rs:73:13:78:5 | 'block: { ... } | main.rs:73:9:73:9 | a | -| main.rs:75:13:75:26 | break ''block 1 | main.rs:73:13:78:5 | 'block: { ... } | -| main.rs:75:26:75:26 | 1 | main.rs:75:13:75:26 | break ''block 1 | -| main.rs:77:9:77:22 | break ''block 2 | main.rs:73:13:78:5 | 'block: { ... } | -| main.rs:77:22:77:22 | 2 | main.rs:77:9:77:22 | break ''block 2 | -| main.rs:79:5:79:5 | a | main.rs:72:38:80:1 | { ... } | -| main.rs:86:9:86:9 | [SSA] i | main.rs:87:11:87:11 | i | -| main.rs:86:9:86:9 | i | main.rs:86:9:86:9 | [SSA] i | -| main.rs:86:13:86:31 | ...::new(...) | main.rs:86:9:86:9 | i | -| main.rs:94:9:94:9 | [SSA] a | main.rs:95:10:95:10 | a | -| main.rs:94:9:94:9 | a | main.rs:94:9:94:9 | [SSA] a | -| main.rs:94:13:94:26 | TupleExpr | main.rs:94:9:94:9 | a | -| main.rs:95:10:95:10 | [post] a | main.rs:96:10:96:10 | a | -| main.rs:95:10:95:10 | a | main.rs:96:10:96:10 | a | -| main.rs:100:9:100:9 | [SSA] a | main.rs:101:24:101:24 | a | -| main.rs:100:9:100:9 | a | main.rs:100:9:100:9 | [SSA] a | -| main.rs:100:13:100:30 | TupleExpr | main.rs:100:9:100:9 | a | -| main.rs:101:10:101:11 | [SSA] a0 | main.rs:102:10:102:11 | a0 | -| main.rs:101:10:101:11 | a0 | main.rs:101:10:101:11 | [SSA] a0 | -| main.rs:101:14:101:15 | [SSA] a1 | main.rs:103:10:103:11 | a1 | -| main.rs:101:14:101:15 | a1 | main.rs:101:14:101:15 | [SSA] a1 | -| main.rs:101:18:101:19 | [SSA] a2 | main.rs:104:10:104:11 | a2 | -| main.rs:101:18:101:19 | a2 | main.rs:101:18:101:19 | [SSA] a2 | -| main.rs:101:24:101:24 | a | main.rs:101:9:101:20 | TuplePat | -| main.rs:108:9:108:13 | [SSA] a | main.rs:109:10:109:10 | a | -| main.rs:108:9:108:13 | a | main.rs:108:9:108:13 | [SSA] a | -| main.rs:108:17:108:31 | TupleExpr | main.rs:108:9:108:13 | a | -| main.rs:109:10:109:10 | [post] a | main.rs:110:10:110:10 | a | -| main.rs:109:10:109:10 | a | main.rs:110:10:110:10 | a | -| main.rs:110:10:110:10 | [post] a | main.rs:111:5:111:5 | a | -| main.rs:110:10:110:10 | a | main.rs:111:5:111:5 | a | -| main.rs:111:5:111:5 | [post] a | main.rs:112:5:112:5 | a | -| main.rs:111:5:111:5 | a | main.rs:112:5:112:5 | a | -| main.rs:111:11:111:20 | source(...) | main.rs:111:5:111:7 | a.0 | -| main.rs:112:5:112:5 | [post] a | main.rs:113:10:113:10 | a | -| main.rs:112:5:112:5 | a | main.rs:113:10:113:10 | a | -| main.rs:112:11:112:11 | 2 | main.rs:112:5:112:7 | a.1 | -| main.rs:113:10:113:10 | [post] a | main.rs:114:10:114:10 | a | -| main.rs:113:10:113:10 | a | main.rs:114:10:114:10 | a | -| main.rs:118:9:118:9 | [SSA] a | main.rs:119:14:119:14 | a | -| main.rs:118:9:118:9 | a | main.rs:118:9:118:9 | [SSA] a | -| main.rs:118:13:118:27 | TupleExpr | main.rs:118:9:118:9 | a | -| main.rs:119:9:119:9 | [SSA] b | main.rs:120:10:120:10 | b | -| main.rs:119:9:119:9 | b | main.rs:119:9:119:9 | [SSA] b | -| main.rs:119:13:119:18 | TupleExpr | main.rs:119:9:119:9 | b | -| main.rs:120:10:120:10 | [post] b | main.rs:121:10:121:10 | b | -| main.rs:120:10:120:10 | b | main.rs:121:10:121:10 | b | -| main.rs:121:10:121:10 | [post] b | main.rs:122:10:122:10 | b | -| main.rs:121:10:121:10 | b | main.rs:122:10:122:10 | b | -| main.rs:134:9:134:9 | [SSA] p | main.rs:135:10:135:10 | p | -| main.rs:134:9:134:9 | p | main.rs:134:9:134:9 | [SSA] p | -| main.rs:134:13:134:40 | Point {...} | main.rs:134:9:134:9 | p | -| main.rs:135:10:135:10 | [post] p | main.rs:136:10:136:10 | p | -| main.rs:135:10:135:10 | p | main.rs:136:10:136:10 | p | -| main.rs:140:9:140:13 | [SSA] p | main.rs:141:10:141:10 | p | -| main.rs:140:9:140:13 | p | main.rs:140:9:140:13 | [SSA] p | -| main.rs:140:17:140:44 | Point {...} | main.rs:140:9:140:13 | p | -| main.rs:141:10:141:10 | [post] p | main.rs:142:5:142:5 | p | -| main.rs:141:10:141:10 | p | main.rs:142:5:142:5 | p | -| main.rs:142:5:142:5 | [post] p | main.rs:143:10:143:10 | p | -| main.rs:142:5:142:5 | p | main.rs:143:10:143:10 | p | -| main.rs:142:11:142:20 | source(...) | main.rs:142:5:142:7 | p.y | -| main.rs:147:9:147:9 | [SSA] p | main.rs:151:32:151:32 | p | -| main.rs:147:9:147:9 | p | main.rs:147:9:147:9 | [SSA] p | -| main.rs:147:13:150:5 | Point {...} | main.rs:147:9:147:9 | p | -| main.rs:151:20:151:20 | [SSA] a | main.rs:152:10:152:10 | a | -| main.rs:151:20:151:20 | a | main.rs:151:20:151:20 | [SSA] a | -| main.rs:151:26:151:26 | [SSA] b | main.rs:153:10:153:10 | b | -| main.rs:151:26:151:26 | b | main.rs:151:26:151:26 | [SSA] b | -| main.rs:151:32:151:32 | p | main.rs:151:9:151:28 | Point {...} | -| main.rs:162:9:162:9 | [SSA] p | main.rs:169:10:169:10 | p | -| main.rs:162:9:162:9 | p | main.rs:162:9:162:9 | [SSA] p | -| main.rs:162:13:168:5 | Point3D {...} | main.rs:162:9:162:9 | p | -| main.rs:169:10:169:10 | [post] p | main.rs:170:10:170:10 | p | -| main.rs:169:10:169:10 | p | main.rs:170:10:170:10 | p | -| main.rs:170:10:170:10 | [post] p | main.rs:171:10:171:10 | p | -| main.rs:170:10:170:10 | p | main.rs:171:10:171:10 | p | -| main.rs:175:9:175:9 | [SSA] p | main.rs:182:11:182:11 | p | -| main.rs:175:9:175:9 | p | main.rs:175:9:175:9 | [SSA] p | -| main.rs:175:13:181:5 | Point3D {...} | main.rs:175:9:175:9 | p | -| main.rs:182:5:191:5 | match p { ... } | main.rs:174:26:192:1 | { ... } | -| main.rs:182:11:182:11 | p | main.rs:183:9:186:9 | Point3D {...} | -| main.rs:184:28:184:28 | [SSA] x | main.rs:187:18:187:18 | x | -| main.rs:184:28:184:28 | x | main.rs:184:28:184:28 | [SSA] x | -| main.rs:184:31:184:31 | [SSA] y | main.rs:188:18:188:18 | y | -| main.rs:184:31:184:31 | y | main.rs:184:31:184:31 | [SSA] y | -| main.rs:185:13:185:13 | [SSA] z | main.rs:189:18:189:18 | z | -| main.rs:185:13:185:13 | z | main.rs:185:13:185:13 | [SSA] z | -| main.rs:186:14:190:9 | { ... } | main.rs:182:5:191:5 | match p { ... } | -| main.rs:198:9:198:10 | [SSA] s1 | main.rs:200:11:200:12 | s1 | -| main.rs:198:9:198:10 | s1 | main.rs:198:9:198:10 | [SSA] s1 | -| main.rs:198:14:198:37 | ...::Some(...) | main.rs:198:9:198:10 | s1 | -| main.rs:199:9:199:10 | [SSA] s2 | main.rs:204:11:204:12 | s2 | -| main.rs:199:9:199:10 | s2 | main.rs:199:9:199:10 | [SSA] s2 | -| main.rs:199:14:199:28 | ...::Some(...) | main.rs:199:9:199:10 | s2 | -| main.rs:200:11:200:12 | s1 | main.rs:201:9:201:23 | ...::Some(...) | -| main.rs:200:11:200:12 | s1 | main.rs:202:9:202:20 | ...::None | -| main.rs:201:22:201:22 | [SSA] n | main.rs:201:33:201:33 | n | -| main.rs:201:22:201:22 | n | main.rs:201:22:201:22 | [SSA] n | -| main.rs:201:28:201:34 | sink(...) | main.rs:200:5:203:5 | match s1 { ... } | -| main.rs:202:25:202:31 | sink(...) | main.rs:200:5:203:5 | match s1 { ... } | -| main.rs:204:5:207:5 | match s2 { ... } | main.rs:197:37:208:1 | { ... } | -| main.rs:204:11:204:12 | s2 | main.rs:205:9:205:23 | ...::Some(...) | -| main.rs:204:11:204:12 | s2 | main.rs:206:9:206:20 | ...::None | -| main.rs:205:22:205:22 | [SSA] n | main.rs:205:33:205:33 | n | -| main.rs:205:22:205:22 | n | main.rs:205:22:205:22 | [SSA] n | -| main.rs:205:28:205:34 | sink(...) | main.rs:204:5:207:5 | match s2 { ... } | -| main.rs:206:25:206:31 | sink(...) | main.rs:204:5:207:5 | match s2 { ... } | -| main.rs:211:9:211:10 | [SSA] s1 | main.rs:213:11:213:12 | s1 | -| main.rs:211:9:211:10 | s1 | main.rs:211:9:211:10 | [SSA] s1 | -| main.rs:211:14:211:29 | Some(...) | main.rs:211:9:211:10 | s1 | -| main.rs:212:9:212:10 | [SSA] s2 | main.rs:217:11:217:12 | s2 | -| main.rs:212:9:212:10 | s2 | main.rs:212:9:212:10 | [SSA] s2 | -| main.rs:212:14:212:20 | Some(...) | main.rs:212:9:212:10 | s2 | -| main.rs:213:11:213:12 | s1 | main.rs:214:9:214:15 | Some(...) | -| main.rs:213:11:213:12 | s1 | main.rs:215:9:215:12 | None | -| main.rs:214:14:214:14 | [SSA] n | main.rs:214:25:214:25 | n | -| main.rs:214:14:214:14 | n | main.rs:214:14:214:14 | [SSA] n | -| main.rs:214:20:214:26 | sink(...) | main.rs:213:5:216:5 | match s1 { ... } | -| main.rs:215:17:215:23 | sink(...) | main.rs:213:5:216:5 | match s1 { ... } | -| main.rs:217:5:220:5 | match s2 { ... } | main.rs:210:39:221:1 | { ... } | -| main.rs:217:11:217:12 | s2 | main.rs:218:9:218:15 | Some(...) | -| main.rs:217:11:217:12 | s2 | main.rs:219:9:219:12 | None | -| main.rs:218:14:218:14 | [SSA] n | main.rs:218:25:218:25 | n | -| main.rs:218:14:218:14 | n | main.rs:218:14:218:14 | [SSA] n | -| main.rs:218:20:218:26 | sink(...) | main.rs:217:5:220:5 | match s2 { ... } | -| main.rs:219:17:219:23 | sink(...) | main.rs:217:5:220:5 | match s2 { ... } | -| main.rs:224:9:224:10 | [SSA] s1 | main.rs:225:10:225:11 | s1 | -| main.rs:224:9:224:10 | s1 | main.rs:224:9:224:10 | [SSA] s1 | -| main.rs:224:14:224:29 | Some(...) | main.rs:224:9:224:10 | s1 | -| main.rs:229:9:229:10 | [SSA] s1 | main.rs:230:10:230:11 | s1 | -| main.rs:229:9:229:10 | s1 | main.rs:229:9:229:10 | [SSA] s1 | -| main.rs:229:14:229:29 | Some(...) | main.rs:229:9:229:10 | s1 | -| main.rs:230:23:230:23 | 0 | main.rs:230:10:230:24 | s1.unwrap_or(...) | -| main.rs:232:9:232:10 | [SSA] s2 | main.rs:233:10:233:11 | s2 | -| main.rs:232:9:232:10 | s2 | main.rs:232:9:232:10 | [SSA] s2 | -| main.rs:232:14:232:20 | Some(...) | main.rs:232:9:232:10 | s2 | -| main.rs:233:23:233:32 | source(...) | main.rs:233:10:233:33 | s2.unwrap_or(...) | -| main.rs:237:9:237:10 | [SSA] s1 | main.rs:239:14:239:15 | s1 | -| main.rs:237:9:237:10 | s1 | main.rs:237:9:237:10 | [SSA] s1 | -| main.rs:237:14:237:29 | Some(...) | main.rs:237:9:237:10 | s1 | -| main.rs:238:9:238:10 | [SSA] s2 | main.rs:241:10:241:11 | s2 | -| main.rs:238:9:238:10 | s2 | main.rs:238:9:238:10 | [SSA] s2 | -| main.rs:238:14:238:20 | Some(...) | main.rs:238:9:238:10 | s2 | -| main.rs:239:9:239:10 | [SSA] i1 | main.rs:240:10:240:11 | i1 | -| main.rs:239:9:239:10 | i1 | main.rs:239:9:239:10 | [SSA] i1 | -| main.rs:239:14:239:16 | TryExpr | main.rs:239:9:239:10 | i1 | -| main.rs:242:5:242:11 | Some(...) | main.rs:236:41:243:1 | { ... } | -| main.rs:246:9:246:10 | [SSA] s1 | main.rs:249:14:249:15 | s1 | -| main.rs:246:9:246:10 | s1 | main.rs:246:9:246:10 | [SSA] s1 | -| main.rs:246:32:246:45 | Ok(...) | main.rs:246:9:246:10 | s1 | -| main.rs:247:9:247:10 | [SSA] s2 | main.rs:250:14:250:15 | s2 | -| main.rs:247:9:247:10 | s2 | main.rs:247:9:247:10 | [SSA] s2 | -| main.rs:247:32:247:36 | Ok(...) | main.rs:247:9:247:10 | s2 | -| main.rs:248:9:248:10 | [SSA] s3 | main.rs:253:14:253:15 | s3 | -| main.rs:248:9:248:10 | s3 | main.rs:248:9:248:10 | [SSA] s3 | -| main.rs:248:32:248:46 | Err(...) | main.rs:248:9:248:10 | s3 | -| main.rs:249:9:249:10 | [SSA] i1 | main.rs:251:10:251:11 | i1 | -| main.rs:249:9:249:10 | i1 | main.rs:249:9:249:10 | [SSA] i1 | -| main.rs:249:14:249:16 | TryExpr | main.rs:249:9:249:10 | i1 | -| main.rs:250:9:250:10 | [SSA] i2 | main.rs:252:10:252:11 | i2 | -| main.rs:250:9:250:10 | i2 | main.rs:250:9:250:10 | [SSA] i2 | -| main.rs:250:14:250:16 | TryExpr | main.rs:250:9:250:10 | i2 | -| main.rs:253:9:253:10 | [SSA] i3 | main.rs:254:10:254:11 | i3 | -| main.rs:253:9:253:10 | i3 | main.rs:253:9:253:10 | [SSA] i3 | -| main.rs:253:14:253:16 | TryExpr | main.rs:253:9:253:10 | i3 | -| main.rs:255:5:255:9 | Ok(...) | main.rs:245:46:256:1 | { ... } | -| main.rs:264:9:264:10 | [SSA] s1 | main.rs:266:11:266:12 | s1 | -| main.rs:264:9:264:10 | s1 | main.rs:264:9:264:10 | [SSA] s1 | -| main.rs:264:14:264:39 | ...::A(...) | main.rs:264:9:264:10 | s1 | -| main.rs:265:9:265:10 | [SSA] s2 | main.rs:273:11:273:12 | s2 | -| main.rs:265:9:265:10 | s2 | main.rs:265:9:265:10 | [SSA] s2 | -| main.rs:265:14:265:30 | ...::B(...) | main.rs:265:9:265:10 | s2 | -| main.rs:266:11:266:12 | s1 | main.rs:267:9:267:25 | ...::A(...) | -| main.rs:266:11:266:12 | s1 | main.rs:268:9:268:25 | ...::B(...) | -| main.rs:266:11:266:12 | s1 | main.rs:270:11:270:12 | s1 | -| main.rs:267:24:267:24 | [SSA] n | main.rs:267:35:267:35 | n | -| main.rs:267:24:267:24 | n | main.rs:267:24:267:24 | [SSA] n | -| main.rs:267:30:267:36 | sink(...) | main.rs:266:5:269:5 | match s1 { ... } | -| main.rs:268:24:268:24 | [SSA] n | main.rs:268:35:268:35 | n | -| main.rs:268:24:268:24 | n | main.rs:268:24:268:24 | [SSA] n | -| main.rs:268:30:268:36 | sink(...) | main.rs:266:5:269:5 | match s1 { ... } | -| main.rs:270:11:270:12 | s1 | main.rs:271:9:271:45 | ... \| ... | -| main.rs:271:9:271:45 | ... \| ... | main.rs:271:9:271:25 | ...::A(...) | -| main.rs:271:9:271:45 | ... \| ... | main.rs:271:29:271:45 | ...::B(...) | -| main.rs:271:9:271:45 | [SSA] [match(true)] phi | main.rs:271:55:271:55 | n | -| main.rs:271:24:271:24 | [SSA] [input] [match(true)] phi | main.rs:271:9:271:45 | [SSA] [match(true)] phi | -| main.rs:271:24:271:24 | [SSA] n | main.rs:271:24:271:24 | [SSA] [input] [match(true)] phi | -| main.rs:271:24:271:24 | n | main.rs:271:24:271:24 | [SSA] n | -| main.rs:271:44:271:44 | [SSA] [input] [match(true)] phi | main.rs:271:9:271:45 | [SSA] [match(true)] phi | -| main.rs:271:44:271:44 | [SSA] n | main.rs:271:44:271:44 | [SSA] [input] [match(true)] phi | -| main.rs:271:44:271:44 | n | main.rs:271:44:271:44 | [SSA] n | -| main.rs:271:50:271:56 | sink(...) | main.rs:270:5:272:5 | match s1 { ... } | -| main.rs:273:5:276:5 | match s2 { ... } | main.rs:263:48:277:1 | { ... } | -| main.rs:273:11:273:12 | s2 | main.rs:274:9:274:25 | ...::A(...) | -| main.rs:273:11:273:12 | s2 | main.rs:275:9:275:25 | ...::B(...) | -| main.rs:274:24:274:24 | [SSA] n | main.rs:274:35:274:35 | n | -| main.rs:274:24:274:24 | n | main.rs:274:24:274:24 | [SSA] n | -| main.rs:274:30:274:36 | sink(...) | main.rs:273:5:276:5 | match s2 { ... } | -| main.rs:275:24:275:24 | [SSA] n | main.rs:275:35:275:35 | n | -| main.rs:275:24:275:24 | n | main.rs:275:24:275:24 | [SSA] n | -| main.rs:275:30:275:36 | sink(...) | main.rs:273:5:276:5 | match s2 { ... } | -| main.rs:282:9:282:10 | [SSA] s1 | main.rs:284:11:284:12 | s1 | -| main.rs:282:9:282:10 | s1 | main.rs:282:9:282:10 | [SSA] s1 | -| main.rs:282:14:282:26 | A(...) | main.rs:282:9:282:10 | s1 | -| main.rs:283:9:283:10 | [SSA] s2 | main.rs:291:11:291:12 | s2 | -| main.rs:283:9:283:10 | s2 | main.rs:283:9:283:10 | [SSA] s2 | -| main.rs:283:14:283:17 | B(...) | main.rs:283:9:283:10 | s2 | -| main.rs:284:11:284:12 | s1 | main.rs:285:9:285:12 | A(...) | -| main.rs:284:11:284:12 | s1 | main.rs:286:9:286:12 | B(...) | -| main.rs:284:11:284:12 | s1 | main.rs:288:11:288:12 | s1 | -| main.rs:285:11:285:11 | [SSA] n | main.rs:285:22:285:22 | n | -| main.rs:285:11:285:11 | n | main.rs:285:11:285:11 | [SSA] n | -| main.rs:285:17:285:23 | sink(...) | main.rs:284:5:287:5 | match s1 { ... } | -| main.rs:286:11:286:11 | [SSA] n | main.rs:286:22:286:22 | n | -| main.rs:286:11:286:11 | n | main.rs:286:11:286:11 | [SSA] n | -| main.rs:286:17:286:23 | sink(...) | main.rs:284:5:287:5 | match s1 { ... } | -| main.rs:288:11:288:12 | s1 | main.rs:289:9:289:19 | ... \| ... | -| main.rs:289:9:289:19 | ... \| ... | main.rs:289:9:289:12 | A(...) | -| main.rs:289:9:289:19 | ... \| ... | main.rs:289:16:289:19 | B(...) | -| main.rs:289:9:289:19 | [SSA] [match(true)] phi | main.rs:289:29:289:29 | n | -| main.rs:289:11:289:11 | [SSA] [input] [match(true)] phi | main.rs:289:9:289:19 | [SSA] [match(true)] phi | -| main.rs:289:11:289:11 | [SSA] n | main.rs:289:11:289:11 | [SSA] [input] [match(true)] phi | -| main.rs:289:11:289:11 | n | main.rs:289:11:289:11 | [SSA] n | -| main.rs:289:18:289:18 | [SSA] [input] [match(true)] phi | main.rs:289:9:289:19 | [SSA] [match(true)] phi | -| main.rs:289:18:289:18 | [SSA] n | main.rs:289:18:289:18 | [SSA] [input] [match(true)] phi | -| main.rs:289:18:289:18 | n | main.rs:289:18:289:18 | [SSA] n | -| main.rs:289:24:289:30 | sink(...) | main.rs:288:5:290:5 | match s1 { ... } | -| main.rs:291:5:294:5 | match s2 { ... } | main.rs:281:50:295:1 | { ... } | -| main.rs:291:11:291:12 | s2 | main.rs:292:9:292:12 | A(...) | -| main.rs:291:11:291:12 | s2 | main.rs:293:9:293:12 | B(...) | -| main.rs:292:11:292:11 | [SSA] n | main.rs:292:22:292:22 | n | -| main.rs:292:11:292:11 | n | main.rs:292:11:292:11 | [SSA] n | -| main.rs:292:17:292:23 | sink(...) | main.rs:291:5:294:5 | match s2 { ... } | -| main.rs:293:11:293:11 | [SSA] n | main.rs:293:22:293:22 | n | -| main.rs:293:11:293:11 | n | main.rs:293:11:293:11 | [SSA] n | -| main.rs:293:17:293:23 | sink(...) | main.rs:291:5:294:5 | match s2 { ... } | -| main.rs:303:9:303:10 | [SSA] s1 | main.rs:307:11:307:12 | s1 | -| main.rs:303:9:303:10 | s1 | main.rs:303:9:303:10 | [SSA] s1 | -| main.rs:303:14:305:5 | ...::C {...} | main.rs:303:9:303:10 | s1 | -| main.rs:306:9:306:10 | [SSA] s2 | main.rs:314:11:314:12 | s2 | -| main.rs:306:9:306:10 | s2 | main.rs:306:9:306:10 | [SSA] s2 | -| main.rs:306:14:306:43 | ...::D {...} | main.rs:306:9:306:10 | s2 | -| main.rs:307:11:307:12 | s1 | main.rs:308:9:308:38 | ...::C {...} | -| main.rs:307:11:307:12 | s1 | main.rs:309:9:309:38 | ...::D {...} | -| main.rs:307:11:307:12 | s1 | main.rs:311:11:311:12 | s1 | -| main.rs:308:36:308:36 | [SSA] n | main.rs:308:48:308:48 | n | -| main.rs:308:36:308:36 | n | main.rs:308:36:308:36 | [SSA] n | -| main.rs:308:43:308:49 | sink(...) | main.rs:307:5:310:5 | match s1 { ... } | -| main.rs:309:36:309:36 | [SSA] n | main.rs:309:48:309:48 | n | -| main.rs:309:36:309:36 | n | main.rs:309:36:309:36 | [SSA] n | -| main.rs:309:43:309:49 | sink(...) | main.rs:307:5:310:5 | match s1 { ... } | -| main.rs:311:11:311:12 | s1 | main.rs:312:9:312:71 | ... \| ... | -| main.rs:312:9:312:71 | ... \| ... | main.rs:312:9:312:38 | ...::C {...} | -| main.rs:312:9:312:71 | ... \| ... | main.rs:312:42:312:71 | ...::D {...} | -| main.rs:312:9:312:71 | [SSA] [match(true)] phi | main.rs:312:81:312:81 | n | -| main.rs:312:36:312:36 | [SSA] [input] [match(true)] phi | main.rs:312:9:312:71 | [SSA] [match(true)] phi | -| main.rs:312:36:312:36 | [SSA] n | main.rs:312:36:312:36 | [SSA] [input] [match(true)] phi | -| main.rs:312:36:312:36 | n | main.rs:312:36:312:36 | [SSA] n | -| main.rs:312:69:312:69 | [SSA] [input] [match(true)] phi | main.rs:312:9:312:71 | [SSA] [match(true)] phi | -| main.rs:312:69:312:69 | [SSA] n | main.rs:312:69:312:69 | [SSA] [input] [match(true)] phi | -| main.rs:312:69:312:69 | n | main.rs:312:69:312:69 | [SSA] n | -| main.rs:312:76:312:82 | sink(...) | main.rs:311:5:313:5 | match s1 { ... } | -| main.rs:314:5:317:5 | match s2 { ... } | main.rs:302:49:318:1 | { ... } | -| main.rs:314:11:314:12 | s2 | main.rs:315:9:315:38 | ...::C {...} | -| main.rs:314:11:314:12 | s2 | main.rs:316:9:316:38 | ...::D {...} | -| main.rs:315:36:315:36 | [SSA] n | main.rs:315:48:315:48 | n | -| main.rs:315:36:315:36 | n | main.rs:315:36:315:36 | [SSA] n | -| main.rs:315:43:315:49 | sink(...) | main.rs:314:5:317:5 | match s2 { ... } | -| main.rs:316:36:316:36 | [SSA] n | main.rs:316:48:316:48 | n | -| main.rs:316:36:316:36 | n | main.rs:316:36:316:36 | [SSA] n | -| main.rs:316:43:316:49 | sink(...) | main.rs:314:5:317:5 | match s2 { ... } | -| main.rs:323:9:323:10 | [SSA] s1 | main.rs:327:11:327:12 | s1 | -| main.rs:323:9:323:10 | s1 | main.rs:323:9:323:10 | [SSA] s1 | -| main.rs:323:14:325:5 | C {...} | main.rs:323:9:323:10 | s1 | -| main.rs:326:9:326:10 | [SSA] s2 | main.rs:334:11:334:12 | s2 | -| main.rs:326:9:326:10 | s2 | main.rs:326:9:326:10 | [SSA] s2 | -| main.rs:326:14:326:29 | D {...} | main.rs:326:9:326:10 | s2 | -| main.rs:327:11:327:12 | s1 | main.rs:328:9:328:24 | C {...} | -| main.rs:327:11:327:12 | s1 | main.rs:329:9:329:24 | D {...} | -| main.rs:327:11:327:12 | s1 | main.rs:331:11:331:12 | s1 | -| main.rs:328:22:328:22 | [SSA] n | main.rs:328:34:328:34 | n | -| main.rs:328:22:328:22 | n | main.rs:328:22:328:22 | [SSA] n | -| main.rs:328:29:328:35 | sink(...) | main.rs:327:5:330:5 | match s1 { ... } | -| main.rs:329:22:329:22 | [SSA] n | main.rs:329:34:329:34 | n | -| main.rs:329:22:329:22 | n | main.rs:329:22:329:22 | [SSA] n | -| main.rs:329:29:329:35 | sink(...) | main.rs:327:5:330:5 | match s1 { ... } | -| main.rs:331:11:331:12 | s1 | main.rs:332:9:332:43 | ... \| ... | -| main.rs:332:9:332:43 | ... \| ... | main.rs:332:9:332:24 | C {...} | -| main.rs:332:9:332:43 | ... \| ... | main.rs:332:28:332:43 | D {...} | -| main.rs:332:9:332:43 | [SSA] [match(true)] phi | main.rs:332:53:332:53 | n | -| main.rs:332:22:332:22 | [SSA] [input] [match(true)] phi | main.rs:332:9:332:43 | [SSA] [match(true)] phi | -| main.rs:332:22:332:22 | [SSA] n | main.rs:332:22:332:22 | [SSA] [input] [match(true)] phi | -| main.rs:332:22:332:22 | n | main.rs:332:22:332:22 | [SSA] n | -| main.rs:332:41:332:41 | [SSA] [input] [match(true)] phi | main.rs:332:9:332:43 | [SSA] [match(true)] phi | -| main.rs:332:41:332:41 | [SSA] n | main.rs:332:41:332:41 | [SSA] [input] [match(true)] phi | -| main.rs:332:41:332:41 | n | main.rs:332:41:332:41 | [SSA] n | -| main.rs:332:48:332:54 | sink(...) | main.rs:331:5:333:5 | match s1 { ... } | -| main.rs:334:5:337:5 | match s2 { ... } | main.rs:322:51:338:1 | { ... } | -| main.rs:334:11:334:12 | s2 | main.rs:335:9:335:24 | C {...} | -| main.rs:334:11:334:12 | s2 | main.rs:336:9:336:24 | D {...} | -| main.rs:335:22:335:22 | [SSA] n | main.rs:335:34:335:34 | n | -| main.rs:335:22:335:22 | n | main.rs:335:22:335:22 | [SSA] n | -| main.rs:335:29:335:35 | sink(...) | main.rs:334:5:337:5 | match s2 { ... } | -| main.rs:336:22:336:22 | [SSA] n | main.rs:336:34:336:34 | n | -| main.rs:336:22:336:22 | n | main.rs:336:22:336:22 | [SSA] n | -| main.rs:336:29:336:35 | sink(...) | main.rs:334:5:337:5 | match s2 { ... } | -| main.rs:344:9:344:12 | [SSA] arr1 | main.rs:345:14:345:17 | arr1 | -| main.rs:344:9:344:12 | arr1 | main.rs:344:9:344:12 | [SSA] arr1 | -| main.rs:344:16:344:33 | [...] | main.rs:344:9:344:12 | arr1 | -| main.rs:345:9:345:10 | [SSA] n1 | main.rs:346:10:346:11 | n1 | -| main.rs:345:9:345:10 | n1 | main.rs:345:9:345:10 | [SSA] n1 | -| main.rs:345:14:345:20 | arr1[2] | main.rs:345:9:345:10 | n1 | -| main.rs:348:9:348:12 | [SSA] arr2 | main.rs:349:14:349:17 | arr2 | -| main.rs:348:9:348:12 | arr2 | main.rs:348:9:348:12 | [SSA] arr2 | -| main.rs:348:16:348:31 | [...; 10] | main.rs:348:9:348:12 | arr2 | -| main.rs:349:9:349:10 | [SSA] n2 | main.rs:350:10:350:11 | n2 | -| main.rs:349:9:349:10 | n2 | main.rs:349:9:349:10 | [SSA] n2 | -| main.rs:349:14:349:20 | arr2[4] | main.rs:349:9:349:10 | n2 | -| main.rs:352:9:352:12 | [SSA] arr3 | main.rs:353:14:353:17 | arr3 | -| main.rs:352:9:352:12 | arr3 | main.rs:352:9:352:12 | [SSA] arr3 | -| main.rs:352:16:352:24 | [...] | main.rs:352:9:352:12 | arr3 | -| main.rs:353:9:353:10 | [SSA] n3 | main.rs:354:10:354:11 | n3 | -| main.rs:353:9:353:10 | n3 | main.rs:353:9:353:10 | [SSA] n3 | -| main.rs:353:14:353:20 | arr3[2] | main.rs:353:9:353:10 | n3 | -| main.rs:358:9:358:12 | [SSA] arr1 | main.rs:359:15:359:18 | arr1 | -| main.rs:358:9:358:12 | arr1 | main.rs:358:9:358:12 | [SSA] arr1 | -| main.rs:358:16:358:33 | [...] | main.rs:358:9:358:12 | arr1 | -| main.rs:359:9:359:10 | [SSA] n1 | main.rs:360:14:360:15 | n1 | -| main.rs:359:9:359:10 | n1 | main.rs:359:9:359:10 | [SSA] n1 | -| main.rs:363:9:363:12 | [SSA] arr2 | main.rs:364:15:364:18 | arr2 | -| main.rs:363:9:363:12 | arr2 | main.rs:363:9:363:12 | [SSA] arr2 | -| main.rs:363:16:363:24 | [...] | main.rs:363:9:363:12 | arr2 | -| main.rs:364:5:366:5 | for ... in ... { ... } | main.rs:357:21:367:1 | { ... } | -| main.rs:364:9:364:10 | [SSA] n2 | main.rs:365:14:365:15 | n2 | -| main.rs:364:9:364:10 | n2 | main.rs:364:9:364:10 | [SSA] n2 | -| main.rs:370:9:370:12 | [SSA] arr1 | main.rs:371:11:371:14 | arr1 | -| main.rs:370:9:370:12 | arr1 | main.rs:370:9:370:12 | [SSA] arr1 | -| main.rs:370:16:370:33 | [...] | main.rs:370:9:370:12 | arr1 | -| main.rs:371:5:377:5 | match arr1 { ... } | main.rs:369:26:378:1 | { ... } | -| main.rs:371:11:371:14 | arr1 | main.rs:372:9:372:17 | SlicePat | -| main.rs:372:10:372:10 | [SSA] a | main.rs:373:18:373:18 | a | -| main.rs:372:10:372:10 | a | main.rs:372:10:372:10 | [SSA] a | -| main.rs:372:13:372:13 | [SSA] b | main.rs:374:18:374:18 | b | -| main.rs:372:13:372:13 | b | main.rs:372:13:372:13 | [SSA] b | -| main.rs:372:16:372:16 | [SSA] c | main.rs:375:18:375:18 | c | -| main.rs:372:16:372:16 | c | main.rs:372:16:372:16 | [SSA] c | -| main.rs:372:22:376:9 | { ... } | main.rs:371:5:377:5 | match arr1 { ... } | -| main.rs:381:9:381:19 | [SSA] mut_arr | main.rs:382:10:382:16 | mut_arr | -| main.rs:381:9:381:19 | mut_arr | main.rs:381:9:381:19 | [SSA] mut_arr | -| main.rs:381:23:381:31 | [...] | main.rs:381:9:381:19 | mut_arr | -| main.rs:382:10:382:16 | [post] mut_arr | main.rs:384:5:384:11 | mut_arr | -| main.rs:382:10:382:16 | mut_arr | main.rs:384:5:384:11 | mut_arr | -| main.rs:384:5:384:11 | [post] mut_arr | main.rs:385:13:385:19 | mut_arr | -| main.rs:384:5:384:11 | mut_arr | main.rs:385:13:385:19 | mut_arr | -| main.rs:384:18:384:27 | source(...) | main.rs:384:5:384:14 | mut_arr[1] | -| main.rs:385:9:385:9 | [SSA] d | main.rs:386:10:386:10 | d | -| main.rs:385:9:385:9 | d | main.rs:385:9:385:9 | [SSA] d | -| main.rs:385:13:385:19 | [post] mut_arr | main.rs:387:10:387:16 | mut_arr | -| main.rs:385:13:385:19 | mut_arr | main.rs:387:10:387:16 | mut_arr | -| main.rs:385:13:385:22 | mut_arr[1] | main.rs:385:9:385:9 | d | -| main.rs:392:39:392:43 | [SSA] names | main.rs:394:23:394:27 | names | -| main.rs:392:39:392:43 | names | main.rs:392:39:392:43 | [SSA] names | -| main.rs:392:39:392:72 | ...: Vec::<...> | main.rs:392:39:392:43 | names | -| main.rs:393:7:393:18 | [SSA] default_name | main.rs:394:23:394:27 | [SSA] [input] SSA phi read(default_name) | -| main.rs:393:7:393:18 | default_name | main.rs:393:7:393:18 | [SSA] default_name | -| main.rs:393:22:393:43 | ... .to_string(...) | main.rs:393:7:393:18 | default_name | -| main.rs:394:3:400:3 | for ... in ... { ... } | main.rs:392:75:401:1 | { ... } | -| main.rs:394:7:394:18 | [SSA] SSA phi read(default_name) | main.rs:394:29:400:3 | [SSA] [input] SSA phi read(default_name) | -| main.rs:394:7:394:18 | [SSA] SSA phi read(default_name) | main.rs:398:7:398:14 | [SSA] [input] SSA phi read(default_name) | -| main.rs:394:8:394:11 | [SSA] cond | main.rs:395:8:395:11 | cond | -| main.rs:394:8:394:11 | cond | main.rs:394:8:394:11 | [SSA] cond | -| main.rs:394:14:394:17 | [SSA] name | main.rs:396:15:396:18 | name | -| main.rs:394:14:394:17 | name | main.rs:394:14:394:17 | [SSA] name | -| main.rs:394:23:394:27 | [SSA] [input] SSA phi read(default_name) | main.rs:394:7:394:18 | [SSA] SSA phi read(default_name) | -| main.rs:394:29:400:3 | [SSA] [input] SSA phi read(default_name) | main.rs:394:7:394:18 | [SSA] SSA phi read(default_name) | -| main.rs:395:5:399:5 | if cond {...} | main.rs:394:29:400:3 | { ... } | -| main.rs:396:11:396:11 | [SSA] n | main.rs:397:12:397:12 | n | -| main.rs:396:11:396:11 | n | main.rs:396:11:396:11 | [SSA] n | -| main.rs:396:15:396:62 | name.unwrap_or_else(...) | main.rs:396:11:396:11 | n | -| main.rs:396:35:396:61 | [SSA] default_name | main.rs:396:38:396:49 | default_name | -| main.rs:398:7:398:14 | [SSA] [input] SSA phi read(default_name) | main.rs:394:7:394:18 | [SSA] SSA phi read(default_name) | -| main.rs:410:9:410:9 | [SSA] s | main.rs:411:10:411:10 | s | -| main.rs:410:9:410:9 | s | main.rs:410:9:410:9 | [SSA] s | -| main.rs:410:13:410:27 | MacroExpr | main.rs:410:9:410:9 | s | -| main.rs:410:25:410:26 | source(...) | main.rs:410:13:410:27 | MacroExpr | -| main.rs:436:13:436:33 | result_questionmark(...) | main.rs:436:9:436:9 | _ | -| main.rs:448:36:448:41 | ...::new(...) | main.rs:448:36:448:41 | MacroExpr | +| file://:0:0:0:0 | [summary param] 0 in lang:core::_::::unwrap_or | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_or | MaD:2 | +| file://:0:0:0:0 | [summary param] 0 in lang:core::_::::unwrap_or | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_or | MaD:5 | +| file://:0:0:0:0 | [summary param] 0 in lang:core::_::crate::hint::must_use | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::crate::hint::must_use | MaD:7 | +| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)] in lang:core::_::::unwrap | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap | MaD:1 | +| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)] in lang:core::_::::unwrap_or | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_or | MaD:3 | +| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::unwrap | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap | MaD:4 | +| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::unwrap_or | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::::unwrap_or | MaD:6 | +| main.rs:3:11:3:11 | [SSA] i | main.rs:4:12:4:12 | i | | +| main.rs:3:11:3:11 | i | main.rs:3:11:3:11 | [SSA] i | | +| main.rs:3:11:3:16 | ...: i64 | main.rs:3:11:3:11 | i | | +| main.rs:4:5:4:12 | ... + ... | main.rs:3:26:5:1 | { ... } | | +| main.rs:7:9:7:9 | [SSA] s | main.rs:8:20:8:20 | s | | +| main.rs:7:9:7:9 | s | main.rs:7:9:7:9 | [SSA] s | | +| main.rs:7:9:7:14 | ...: i64 | main.rs:7:9:7:9 | s | | +| main.rs:8:14:8:20 | FormatArgsExpr | main.rs:8:14:8:20 | MacroExpr | | +| main.rs:19:9:19:9 | [SSA] s | main.rs:20:10:20:10 | s | | +| main.rs:19:9:19:9 | s | main.rs:19:9:19:9 | [SSA] s | | +| main.rs:19:13:19:21 | source(...) | main.rs:19:9:19:9 | s | | +| main.rs:23:18:23:21 | [SSA] cond | main.rs:26:16:26:19 | cond | | +| main.rs:23:18:23:21 | cond | main.rs:23:18:23:21 | [SSA] cond | | +| main.rs:23:18:23:27 | ...: bool | main.rs:23:18:23:21 | cond | | +| main.rs:24:9:24:9 | [SSA] a | main.rs:26:23:26:23 | a | | +| main.rs:24:9:24:9 | a | main.rs:24:9:24:9 | [SSA] a | | +| main.rs:24:13:24:21 | source(...) | main.rs:24:9:24:9 | a | | +| main.rs:25:9:25:9 | [SSA] b | main.rs:26:34:26:34 | b | | +| main.rs:25:9:25:9 | b | main.rs:25:9:25:9 | [SSA] b | | +| main.rs:25:13:25:13 | 2 | main.rs:25:9:25:9 | b | | +| main.rs:26:9:26:9 | [SSA] c | main.rs:27:10:27:10 | c | | +| main.rs:26:9:26:9 | c | main.rs:26:9:26:9 | [SSA] c | | +| main.rs:26:13:26:36 | if cond {...} else {...} | main.rs:26:9:26:9 | c | | +| main.rs:26:21:26:25 | { ... } | main.rs:26:13:26:36 | if cond {...} else {...} | | +| main.rs:26:23:26:23 | a | main.rs:26:21:26:25 | { ... } | | +| main.rs:26:32:26:36 | { ... } | main.rs:26:13:26:36 | if cond {...} else {...} | | +| main.rs:26:34:26:34 | b | main.rs:26:32:26:36 | { ... } | | +| main.rs:30:21:30:21 | [SSA] m | main.rs:32:19:32:19 | m | | +| main.rs:30:21:30:21 | m | main.rs:30:21:30:21 | [SSA] m | | +| main.rs:30:21:30:34 | ...: Option::<...> | main.rs:30:21:30:21 | m | | +| main.rs:31:9:31:9 | [SSA] a | main.rs:33:20:33:20 | a | | +| main.rs:31:9:31:9 | a | main.rs:31:9:31:9 | [SSA] a | | +| main.rs:31:13:31:21 | source(...) | main.rs:31:9:31:9 | a | | +| main.rs:32:9:32:9 | [SSA] b | main.rs:36:10:36:10 | b | | +| main.rs:32:9:32:9 | b | main.rs:32:9:32:9 | [SSA] b | | +| main.rs:32:13:35:5 | match m { ... } | main.rs:32:9:32:9 | b | | +| main.rs:32:19:32:19 | m | main.rs:33:9:33:15 | Some(...) | | +| main.rs:32:19:32:19 | m | main.rs:34:9:34:12 | None | | +| main.rs:33:20:33:20 | a | main.rs:32:13:35:5 | match m { ... } | | +| main.rs:34:17:34:17 | 0 | main.rs:32:13:35:5 | match m { ... } | | +| main.rs:40:9:40:9 | [SSA] a | main.rs:43:10:43:10 | a | | +| main.rs:40:9:40:9 | a | main.rs:40:9:40:9 | [SSA] a | | +| main.rs:40:13:42:5 | loop { ... } | main.rs:40:9:40:9 | a | | +| main.rs:41:9:41:15 | break 1 | main.rs:40:13:42:5 | loop { ... } | | +| main.rs:41:15:41:15 | 1 | main.rs:41:9:41:15 | break 1 | | +| main.rs:44:9:44:9 | [SSA] b | main.rs:47:10:47:10 | b | | +| main.rs:44:9:44:9 | b | main.rs:44:9:44:9 | [SSA] b | | +| main.rs:44:13:46:5 | loop { ... } | main.rs:44:9:44:9 | b | | +| main.rs:45:9:45:23 | break ... | main.rs:44:13:46:5 | loop { ... } | | +| main.rs:45:15:45:23 | source(...) | main.rs:45:9:45:23 | break ... | | +| main.rs:51:9:51:13 | [SSA] i | main.rs:52:10:52:10 | i | | +| main.rs:51:9:51:13 | i | main.rs:51:9:51:13 | [SSA] i | | +| main.rs:51:17:51:17 | 1 | main.rs:51:9:51:13 | i | | +| main.rs:53:5:53:5 | [SSA] i | main.rs:54:10:54:10 | i | | +| main.rs:53:5:53:5 | i | main.rs:53:5:53:5 | [SSA] i | | +| main.rs:53:9:53:17 | source(...) | main.rs:53:5:53:5 | i | | +| main.rs:58:9:58:9 | [SSA] a | main.rs:59:5:59:5 | a | | +| main.rs:58:9:58:9 | a | main.rs:58:9:58:9 | [SSA] a | | +| main.rs:58:13:58:17 | { ... } | main.rs:58:9:58:9 | a | | +| main.rs:58:15:58:15 | 0 | main.rs:58:13:58:17 | { ... } | | +| main.rs:59:5:59:5 | a | main.rs:57:31:60:1 | { ... } | | +| main.rs:62:22:62:22 | [SSA] b | main.rs:64:12:64:12 | b | | +| main.rs:62:22:62:22 | b | main.rs:62:22:62:22 | [SSA] b | | +| main.rs:62:22:62:28 | ...: bool | main.rs:62:22:62:22 | b | | +| main.rs:63:9:63:9 | [SSA] a | main.rs:69:5:69:5 | a | | +| main.rs:63:9:63:9 | a | main.rs:63:9:63:9 | [SSA] a | | +| main.rs:63:13:68:5 | 'block: { ... } | main.rs:63:9:63:9 | a | | +| main.rs:65:13:65:26 | break ''block 1 | main.rs:63:13:68:5 | 'block: { ... } | | +| main.rs:65:26:65:26 | 1 | main.rs:65:13:65:26 | break ''block 1 | | +| main.rs:67:9:67:9 | 2 | main.rs:63:13:68:5 | 'block: { ... } | | +| main.rs:69:5:69:5 | a | main.rs:62:38:70:1 | { ... } | | +| main.rs:72:22:72:22 | [SSA] b | main.rs:74:12:74:12 | b | | +| main.rs:72:22:72:22 | b | main.rs:72:22:72:22 | [SSA] b | | +| main.rs:72:22:72:28 | ...: bool | main.rs:72:22:72:22 | b | | +| main.rs:73:9:73:9 | [SSA] a | main.rs:79:5:79:5 | a | | +| main.rs:73:9:73:9 | a | main.rs:73:9:73:9 | [SSA] a | | +| main.rs:73:13:78:5 | 'block: { ... } | main.rs:73:9:73:9 | a | | +| main.rs:75:13:75:26 | break ''block 1 | main.rs:73:13:78:5 | 'block: { ... } | | +| main.rs:75:26:75:26 | 1 | main.rs:75:13:75:26 | break ''block 1 | | +| main.rs:77:9:77:22 | break ''block 2 | main.rs:73:13:78:5 | 'block: { ... } | | +| main.rs:77:22:77:22 | 2 | main.rs:77:9:77:22 | break ''block 2 | | +| main.rs:79:5:79:5 | a | main.rs:72:38:80:1 | { ... } | | +| main.rs:86:9:86:9 | [SSA] i | main.rs:87:11:87:11 | i | | +| main.rs:86:9:86:9 | i | main.rs:86:9:86:9 | [SSA] i | | +| main.rs:86:13:86:31 | ...::new(...) | main.rs:86:9:86:9 | i | | +| main.rs:94:9:94:9 | [SSA] a | main.rs:95:10:95:10 | a | | +| main.rs:94:9:94:9 | a | main.rs:94:9:94:9 | [SSA] a | | +| main.rs:94:13:94:26 | TupleExpr | main.rs:94:9:94:9 | a | | +| main.rs:95:10:95:10 | [post] a | main.rs:96:10:96:10 | a | | +| main.rs:95:10:95:10 | a | main.rs:96:10:96:10 | a | | +| main.rs:100:9:100:9 | [SSA] a | main.rs:101:24:101:24 | a | | +| main.rs:100:9:100:9 | a | main.rs:100:9:100:9 | [SSA] a | | +| main.rs:100:13:100:30 | TupleExpr | main.rs:100:9:100:9 | a | | +| main.rs:101:10:101:11 | [SSA] a0 | main.rs:102:10:102:11 | a0 | | +| main.rs:101:10:101:11 | a0 | main.rs:101:10:101:11 | [SSA] a0 | | +| main.rs:101:14:101:15 | [SSA] a1 | main.rs:103:10:103:11 | a1 | | +| main.rs:101:14:101:15 | a1 | main.rs:101:14:101:15 | [SSA] a1 | | +| main.rs:101:18:101:19 | [SSA] a2 | main.rs:104:10:104:11 | a2 | | +| main.rs:101:18:101:19 | a2 | main.rs:101:18:101:19 | [SSA] a2 | | +| main.rs:101:24:101:24 | a | main.rs:101:9:101:20 | TuplePat | | +| main.rs:108:9:108:13 | [SSA] a | main.rs:109:10:109:10 | a | | +| main.rs:108:9:108:13 | a | main.rs:108:9:108:13 | [SSA] a | | +| main.rs:108:17:108:31 | TupleExpr | main.rs:108:9:108:13 | a | | +| main.rs:109:10:109:10 | [post] a | main.rs:110:10:110:10 | a | | +| main.rs:109:10:109:10 | a | main.rs:110:10:110:10 | a | | +| main.rs:110:10:110:10 | [post] a | main.rs:111:5:111:5 | a | | +| main.rs:110:10:110:10 | a | main.rs:111:5:111:5 | a | | +| main.rs:111:5:111:5 | [post] a | main.rs:112:5:112:5 | a | | +| main.rs:111:5:111:5 | a | main.rs:112:5:112:5 | a | | +| main.rs:111:11:111:20 | source(...) | main.rs:111:5:111:7 | a.0 | | +| main.rs:112:5:112:5 | [post] a | main.rs:113:10:113:10 | a | | +| main.rs:112:5:112:5 | a | main.rs:113:10:113:10 | a | | +| main.rs:112:11:112:11 | 2 | main.rs:112:5:112:7 | a.1 | | +| main.rs:113:10:113:10 | [post] a | main.rs:114:10:114:10 | a | | +| main.rs:113:10:113:10 | a | main.rs:114:10:114:10 | a | | +| main.rs:118:9:118:9 | [SSA] a | main.rs:119:14:119:14 | a | | +| main.rs:118:9:118:9 | a | main.rs:118:9:118:9 | [SSA] a | | +| main.rs:118:13:118:27 | TupleExpr | main.rs:118:9:118:9 | a | | +| main.rs:119:9:119:9 | [SSA] b | main.rs:120:10:120:10 | b | | +| main.rs:119:9:119:9 | b | main.rs:119:9:119:9 | [SSA] b | | +| main.rs:119:13:119:18 | TupleExpr | main.rs:119:9:119:9 | b | | +| main.rs:120:10:120:10 | [post] b | main.rs:121:10:121:10 | b | | +| main.rs:120:10:120:10 | b | main.rs:121:10:121:10 | b | | +| main.rs:121:10:121:10 | [post] b | main.rs:122:10:122:10 | b | | +| main.rs:121:10:121:10 | b | main.rs:122:10:122:10 | b | | +| main.rs:134:9:134:9 | [SSA] p | main.rs:135:10:135:10 | p | | +| main.rs:134:9:134:9 | p | main.rs:134:9:134:9 | [SSA] p | | +| main.rs:134:13:134:40 | Point {...} | main.rs:134:9:134:9 | p | | +| main.rs:135:10:135:10 | [post] p | main.rs:136:10:136:10 | p | | +| main.rs:135:10:135:10 | p | main.rs:136:10:136:10 | p | | +| main.rs:140:9:140:13 | [SSA] p | main.rs:141:10:141:10 | p | | +| main.rs:140:9:140:13 | p | main.rs:140:9:140:13 | [SSA] p | | +| main.rs:140:17:140:44 | Point {...} | main.rs:140:9:140:13 | p | | +| main.rs:141:10:141:10 | [post] p | main.rs:142:5:142:5 | p | | +| main.rs:141:10:141:10 | p | main.rs:142:5:142:5 | p | | +| main.rs:142:5:142:5 | [post] p | main.rs:143:10:143:10 | p | | +| main.rs:142:5:142:5 | p | main.rs:143:10:143:10 | p | | +| main.rs:142:11:142:20 | source(...) | main.rs:142:5:142:7 | p.y | | +| main.rs:147:9:147:9 | [SSA] p | main.rs:151:32:151:32 | p | | +| main.rs:147:9:147:9 | p | main.rs:147:9:147:9 | [SSA] p | | +| main.rs:147:13:150:5 | Point {...} | main.rs:147:9:147:9 | p | | +| main.rs:151:20:151:20 | [SSA] a | main.rs:152:10:152:10 | a | | +| main.rs:151:20:151:20 | a | main.rs:151:20:151:20 | [SSA] a | | +| main.rs:151:26:151:26 | [SSA] b | main.rs:153:10:153:10 | b | | +| main.rs:151:26:151:26 | b | main.rs:151:26:151:26 | [SSA] b | | +| main.rs:151:32:151:32 | p | main.rs:151:9:151:28 | Point {...} | | +| main.rs:162:9:162:9 | [SSA] p | main.rs:169:10:169:10 | p | | +| main.rs:162:9:162:9 | p | main.rs:162:9:162:9 | [SSA] p | | +| main.rs:162:13:168:5 | Point3D {...} | main.rs:162:9:162:9 | p | | +| main.rs:169:10:169:10 | [post] p | main.rs:170:10:170:10 | p | | +| main.rs:169:10:169:10 | p | main.rs:170:10:170:10 | p | | +| main.rs:170:10:170:10 | [post] p | main.rs:171:10:171:10 | p | | +| main.rs:170:10:170:10 | p | main.rs:171:10:171:10 | p | | +| main.rs:175:9:175:9 | [SSA] p | main.rs:182:11:182:11 | p | | +| main.rs:175:9:175:9 | p | main.rs:175:9:175:9 | [SSA] p | | +| main.rs:175:13:181:5 | Point3D {...} | main.rs:175:9:175:9 | p | | +| main.rs:182:5:191:5 | match p { ... } | main.rs:174:26:192:1 | { ... } | | +| main.rs:182:11:182:11 | p | main.rs:183:9:186:9 | Point3D {...} | | +| main.rs:184:28:184:28 | [SSA] x | main.rs:187:18:187:18 | x | | +| main.rs:184:28:184:28 | x | main.rs:184:28:184:28 | [SSA] x | | +| main.rs:184:31:184:31 | [SSA] y | main.rs:188:18:188:18 | y | | +| main.rs:184:31:184:31 | y | main.rs:184:31:184:31 | [SSA] y | | +| main.rs:185:13:185:13 | [SSA] z | main.rs:189:18:189:18 | z | | +| main.rs:185:13:185:13 | z | main.rs:185:13:185:13 | [SSA] z | | +| main.rs:186:14:190:9 | { ... } | main.rs:182:5:191:5 | match p { ... } | | +| main.rs:198:9:198:10 | [SSA] s1 | main.rs:200:11:200:12 | s1 | | +| main.rs:198:9:198:10 | s1 | main.rs:198:9:198:10 | [SSA] s1 | | +| main.rs:198:14:198:37 | ...::Some(...) | main.rs:198:9:198:10 | s1 | | +| main.rs:199:9:199:10 | [SSA] s2 | main.rs:204:11:204:12 | s2 | | +| main.rs:199:9:199:10 | s2 | main.rs:199:9:199:10 | [SSA] s2 | | +| main.rs:199:14:199:28 | ...::Some(...) | main.rs:199:9:199:10 | s2 | | +| main.rs:200:11:200:12 | s1 | main.rs:201:9:201:23 | ...::Some(...) | | +| main.rs:200:11:200:12 | s1 | main.rs:202:9:202:20 | ...::None | | +| main.rs:201:22:201:22 | [SSA] n | main.rs:201:33:201:33 | n | | +| main.rs:201:22:201:22 | n | main.rs:201:22:201:22 | [SSA] n | | +| main.rs:201:28:201:34 | sink(...) | main.rs:200:5:203:5 | match s1 { ... } | | +| main.rs:202:25:202:31 | sink(...) | main.rs:200:5:203:5 | match s1 { ... } | | +| main.rs:204:5:207:5 | match s2 { ... } | main.rs:197:37:208:1 | { ... } | | +| main.rs:204:11:204:12 | s2 | main.rs:205:9:205:23 | ...::Some(...) | | +| main.rs:204:11:204:12 | s2 | main.rs:206:9:206:20 | ...::None | | +| main.rs:205:22:205:22 | [SSA] n | main.rs:205:33:205:33 | n | | +| main.rs:205:22:205:22 | n | main.rs:205:22:205:22 | [SSA] n | | +| main.rs:205:28:205:34 | sink(...) | main.rs:204:5:207:5 | match s2 { ... } | | +| main.rs:206:25:206:31 | sink(...) | main.rs:204:5:207:5 | match s2 { ... } | | +| main.rs:211:9:211:10 | [SSA] s1 | main.rs:213:11:213:12 | s1 | | +| main.rs:211:9:211:10 | s1 | main.rs:211:9:211:10 | [SSA] s1 | | +| main.rs:211:14:211:29 | Some(...) | main.rs:211:9:211:10 | s1 | | +| main.rs:212:9:212:10 | [SSA] s2 | main.rs:217:11:217:12 | s2 | | +| main.rs:212:9:212:10 | s2 | main.rs:212:9:212:10 | [SSA] s2 | | +| main.rs:212:14:212:20 | Some(...) | main.rs:212:9:212:10 | s2 | | +| main.rs:213:11:213:12 | s1 | main.rs:214:9:214:15 | Some(...) | | +| main.rs:213:11:213:12 | s1 | main.rs:215:9:215:12 | None | | +| main.rs:214:14:214:14 | [SSA] n | main.rs:214:25:214:25 | n | | +| main.rs:214:14:214:14 | n | main.rs:214:14:214:14 | [SSA] n | | +| main.rs:214:20:214:26 | sink(...) | main.rs:213:5:216:5 | match s1 { ... } | | +| main.rs:215:17:215:23 | sink(...) | main.rs:213:5:216:5 | match s1 { ... } | | +| main.rs:217:5:220:5 | match s2 { ... } | main.rs:210:39:221:1 | { ... } | | +| main.rs:217:11:217:12 | s2 | main.rs:218:9:218:15 | Some(...) | | +| main.rs:217:11:217:12 | s2 | main.rs:219:9:219:12 | None | | +| main.rs:218:14:218:14 | [SSA] n | main.rs:218:25:218:25 | n | | +| main.rs:218:14:218:14 | n | main.rs:218:14:218:14 | [SSA] n | | +| main.rs:218:20:218:26 | sink(...) | main.rs:217:5:220:5 | match s2 { ... } | | +| main.rs:219:17:219:23 | sink(...) | main.rs:217:5:220:5 | match s2 { ... } | | +| main.rs:224:9:224:10 | [SSA] s1 | main.rs:225:10:225:11 | s1 | | +| main.rs:224:9:224:10 | s1 | main.rs:224:9:224:10 | [SSA] s1 | | +| main.rs:224:14:224:29 | Some(...) | main.rs:224:9:224:10 | s1 | | +| main.rs:229:9:229:10 | [SSA] s1 | main.rs:230:10:230:11 | s1 | | +| main.rs:229:9:229:10 | s1 | main.rs:229:9:229:10 | [SSA] s1 | | +| main.rs:229:14:229:29 | Some(...) | main.rs:229:9:229:10 | s1 | | +| main.rs:232:9:232:10 | [SSA] s2 | main.rs:233:10:233:11 | s2 | | +| main.rs:232:9:232:10 | s2 | main.rs:232:9:232:10 | [SSA] s2 | | +| main.rs:232:14:232:20 | Some(...) | main.rs:232:9:232:10 | s2 | | +| main.rs:237:9:237:10 | [SSA] s1 | main.rs:239:14:239:15 | s1 | | +| main.rs:237:9:237:10 | s1 | main.rs:237:9:237:10 | [SSA] s1 | | +| main.rs:237:14:237:29 | Some(...) | main.rs:237:9:237:10 | s1 | | +| main.rs:238:9:238:10 | [SSA] s2 | main.rs:241:10:241:11 | s2 | | +| main.rs:238:9:238:10 | s2 | main.rs:238:9:238:10 | [SSA] s2 | | +| main.rs:238:14:238:20 | Some(...) | main.rs:238:9:238:10 | s2 | | +| main.rs:239:9:239:10 | [SSA] i1 | main.rs:240:10:240:11 | i1 | | +| main.rs:239:9:239:10 | i1 | main.rs:239:9:239:10 | [SSA] i1 | | +| main.rs:239:14:239:16 | TryExpr | main.rs:239:9:239:10 | i1 | | +| main.rs:242:5:242:11 | Some(...) | main.rs:236:41:243:1 | { ... } | | +| main.rs:246:9:246:10 | [SSA] s1 | main.rs:249:14:249:15 | s1 | | +| main.rs:246:9:246:10 | s1 | main.rs:246:9:246:10 | [SSA] s1 | | +| main.rs:246:32:246:45 | Ok(...) | main.rs:246:9:246:10 | s1 | | +| main.rs:247:9:247:10 | [SSA] s2 | main.rs:250:14:250:15 | s2 | | +| main.rs:247:9:247:10 | s2 | main.rs:247:9:247:10 | [SSA] s2 | | +| main.rs:247:32:247:36 | Ok(...) | main.rs:247:9:247:10 | s2 | | +| main.rs:248:9:248:10 | [SSA] s3 | main.rs:253:14:253:15 | s3 | | +| main.rs:248:9:248:10 | s3 | main.rs:248:9:248:10 | [SSA] s3 | | +| main.rs:248:32:248:46 | Err(...) | main.rs:248:9:248:10 | s3 | | +| main.rs:249:9:249:10 | [SSA] i1 | main.rs:251:10:251:11 | i1 | | +| main.rs:249:9:249:10 | i1 | main.rs:249:9:249:10 | [SSA] i1 | | +| main.rs:249:14:249:16 | TryExpr | main.rs:249:9:249:10 | i1 | | +| main.rs:250:9:250:10 | [SSA] i2 | main.rs:252:10:252:11 | i2 | | +| main.rs:250:9:250:10 | i2 | main.rs:250:9:250:10 | [SSA] i2 | | +| main.rs:250:14:250:16 | TryExpr | main.rs:250:9:250:10 | i2 | | +| main.rs:253:9:253:10 | [SSA] i3 | main.rs:254:10:254:11 | i3 | | +| main.rs:253:9:253:10 | i3 | main.rs:253:9:253:10 | [SSA] i3 | | +| main.rs:253:14:253:16 | TryExpr | main.rs:253:9:253:10 | i3 | | +| main.rs:255:5:255:9 | Ok(...) | main.rs:245:46:256:1 | { ... } | | +| main.rs:264:9:264:10 | [SSA] s1 | main.rs:266:11:266:12 | s1 | | +| main.rs:264:9:264:10 | s1 | main.rs:264:9:264:10 | [SSA] s1 | | +| main.rs:264:14:264:39 | ...::A(...) | main.rs:264:9:264:10 | s1 | | +| main.rs:265:9:265:10 | [SSA] s2 | main.rs:273:11:273:12 | s2 | | +| main.rs:265:9:265:10 | s2 | main.rs:265:9:265:10 | [SSA] s2 | | +| main.rs:265:14:265:30 | ...::B(...) | main.rs:265:9:265:10 | s2 | | +| main.rs:266:11:266:12 | s1 | main.rs:267:9:267:25 | ...::A(...) | | +| main.rs:266:11:266:12 | s1 | main.rs:268:9:268:25 | ...::B(...) | | +| main.rs:266:11:266:12 | s1 | main.rs:270:11:270:12 | s1 | | +| main.rs:267:24:267:24 | [SSA] n | main.rs:267:35:267:35 | n | | +| main.rs:267:24:267:24 | n | main.rs:267:24:267:24 | [SSA] n | | +| main.rs:267:30:267:36 | sink(...) | main.rs:266:5:269:5 | match s1 { ... } | | +| main.rs:268:24:268:24 | [SSA] n | main.rs:268:35:268:35 | n | | +| main.rs:268:24:268:24 | n | main.rs:268:24:268:24 | [SSA] n | | +| main.rs:268:30:268:36 | sink(...) | main.rs:266:5:269:5 | match s1 { ... } | | +| main.rs:270:11:270:12 | s1 | main.rs:271:9:271:45 | ... \| ... | | +| main.rs:271:9:271:45 | ... \| ... | main.rs:271:9:271:25 | ...::A(...) | | +| main.rs:271:9:271:45 | ... \| ... | main.rs:271:29:271:45 | ...::B(...) | | +| main.rs:271:9:271:45 | [SSA] [match(true)] phi | main.rs:271:55:271:55 | n | | +| main.rs:271:24:271:24 | [SSA] [input] [match(true)] phi | main.rs:271:9:271:45 | [SSA] [match(true)] phi | | +| main.rs:271:24:271:24 | [SSA] n | main.rs:271:24:271:24 | [SSA] [input] [match(true)] phi | | +| main.rs:271:24:271:24 | n | main.rs:271:24:271:24 | [SSA] n | | +| main.rs:271:44:271:44 | [SSA] [input] [match(true)] phi | main.rs:271:9:271:45 | [SSA] [match(true)] phi | | +| main.rs:271:44:271:44 | [SSA] n | main.rs:271:44:271:44 | [SSA] [input] [match(true)] phi | | +| main.rs:271:44:271:44 | n | main.rs:271:44:271:44 | [SSA] n | | +| main.rs:271:50:271:56 | sink(...) | main.rs:270:5:272:5 | match s1 { ... } | | +| main.rs:273:5:276:5 | match s2 { ... } | main.rs:263:48:277:1 | { ... } | | +| main.rs:273:11:273:12 | s2 | main.rs:274:9:274:25 | ...::A(...) | | +| main.rs:273:11:273:12 | s2 | main.rs:275:9:275:25 | ...::B(...) | | +| main.rs:274:24:274:24 | [SSA] n | main.rs:274:35:274:35 | n | | +| main.rs:274:24:274:24 | n | main.rs:274:24:274:24 | [SSA] n | | +| main.rs:274:30:274:36 | sink(...) | main.rs:273:5:276:5 | match s2 { ... } | | +| main.rs:275:24:275:24 | [SSA] n | main.rs:275:35:275:35 | n | | +| main.rs:275:24:275:24 | n | main.rs:275:24:275:24 | [SSA] n | | +| main.rs:275:30:275:36 | sink(...) | main.rs:273:5:276:5 | match s2 { ... } | | +| main.rs:282:9:282:10 | [SSA] s1 | main.rs:284:11:284:12 | s1 | | +| main.rs:282:9:282:10 | s1 | main.rs:282:9:282:10 | [SSA] s1 | | +| main.rs:282:14:282:26 | A(...) | main.rs:282:9:282:10 | s1 | | +| main.rs:283:9:283:10 | [SSA] s2 | main.rs:291:11:291:12 | s2 | | +| main.rs:283:9:283:10 | s2 | main.rs:283:9:283:10 | [SSA] s2 | | +| main.rs:283:14:283:17 | B(...) | main.rs:283:9:283:10 | s2 | | +| main.rs:284:11:284:12 | s1 | main.rs:285:9:285:12 | A(...) | | +| main.rs:284:11:284:12 | s1 | main.rs:286:9:286:12 | B(...) | | +| main.rs:284:11:284:12 | s1 | main.rs:288:11:288:12 | s1 | | +| main.rs:285:11:285:11 | [SSA] n | main.rs:285:22:285:22 | n | | +| main.rs:285:11:285:11 | n | main.rs:285:11:285:11 | [SSA] n | | +| main.rs:285:17:285:23 | sink(...) | main.rs:284:5:287:5 | match s1 { ... } | | +| main.rs:286:11:286:11 | [SSA] n | main.rs:286:22:286:22 | n | | +| main.rs:286:11:286:11 | n | main.rs:286:11:286:11 | [SSA] n | | +| main.rs:286:17:286:23 | sink(...) | main.rs:284:5:287:5 | match s1 { ... } | | +| main.rs:288:11:288:12 | s1 | main.rs:289:9:289:19 | ... \| ... | | +| main.rs:289:9:289:19 | ... \| ... | main.rs:289:9:289:12 | A(...) | | +| main.rs:289:9:289:19 | ... \| ... | main.rs:289:16:289:19 | B(...) | | +| main.rs:289:9:289:19 | [SSA] [match(true)] phi | main.rs:289:29:289:29 | n | | +| main.rs:289:11:289:11 | [SSA] [input] [match(true)] phi | main.rs:289:9:289:19 | [SSA] [match(true)] phi | | +| main.rs:289:11:289:11 | [SSA] n | main.rs:289:11:289:11 | [SSA] [input] [match(true)] phi | | +| main.rs:289:11:289:11 | n | main.rs:289:11:289:11 | [SSA] n | | +| main.rs:289:18:289:18 | [SSA] [input] [match(true)] phi | main.rs:289:9:289:19 | [SSA] [match(true)] phi | | +| main.rs:289:18:289:18 | [SSA] n | main.rs:289:18:289:18 | [SSA] [input] [match(true)] phi | | +| main.rs:289:18:289:18 | n | main.rs:289:18:289:18 | [SSA] n | | +| main.rs:289:24:289:30 | sink(...) | main.rs:288:5:290:5 | match s1 { ... } | | +| main.rs:291:5:294:5 | match s2 { ... } | main.rs:281:50:295:1 | { ... } | | +| main.rs:291:11:291:12 | s2 | main.rs:292:9:292:12 | A(...) | | +| main.rs:291:11:291:12 | s2 | main.rs:293:9:293:12 | B(...) | | +| main.rs:292:11:292:11 | [SSA] n | main.rs:292:22:292:22 | n | | +| main.rs:292:11:292:11 | n | main.rs:292:11:292:11 | [SSA] n | | +| main.rs:292:17:292:23 | sink(...) | main.rs:291:5:294:5 | match s2 { ... } | | +| main.rs:293:11:293:11 | [SSA] n | main.rs:293:22:293:22 | n | | +| main.rs:293:11:293:11 | n | main.rs:293:11:293:11 | [SSA] n | | +| main.rs:293:17:293:23 | sink(...) | main.rs:291:5:294:5 | match s2 { ... } | | +| main.rs:303:9:303:10 | [SSA] s1 | main.rs:307:11:307:12 | s1 | | +| main.rs:303:9:303:10 | s1 | main.rs:303:9:303:10 | [SSA] s1 | | +| main.rs:303:14:305:5 | ...::C {...} | main.rs:303:9:303:10 | s1 | | +| main.rs:306:9:306:10 | [SSA] s2 | main.rs:314:11:314:12 | s2 | | +| main.rs:306:9:306:10 | s2 | main.rs:306:9:306:10 | [SSA] s2 | | +| main.rs:306:14:306:43 | ...::D {...} | main.rs:306:9:306:10 | s2 | | +| main.rs:307:11:307:12 | s1 | main.rs:308:9:308:38 | ...::C {...} | | +| main.rs:307:11:307:12 | s1 | main.rs:309:9:309:38 | ...::D {...} | | +| main.rs:307:11:307:12 | s1 | main.rs:311:11:311:12 | s1 | | +| main.rs:308:36:308:36 | [SSA] n | main.rs:308:48:308:48 | n | | +| main.rs:308:36:308:36 | n | main.rs:308:36:308:36 | [SSA] n | | +| main.rs:308:43:308:49 | sink(...) | main.rs:307:5:310:5 | match s1 { ... } | | +| main.rs:309:36:309:36 | [SSA] n | main.rs:309:48:309:48 | n | | +| main.rs:309:36:309:36 | n | main.rs:309:36:309:36 | [SSA] n | | +| main.rs:309:43:309:49 | sink(...) | main.rs:307:5:310:5 | match s1 { ... } | | +| main.rs:311:11:311:12 | s1 | main.rs:312:9:312:71 | ... \| ... | | +| main.rs:312:9:312:71 | ... \| ... | main.rs:312:9:312:38 | ...::C {...} | | +| main.rs:312:9:312:71 | ... \| ... | main.rs:312:42:312:71 | ...::D {...} | | +| main.rs:312:9:312:71 | [SSA] [match(true)] phi | main.rs:312:81:312:81 | n | | +| main.rs:312:36:312:36 | [SSA] [input] [match(true)] phi | main.rs:312:9:312:71 | [SSA] [match(true)] phi | | +| main.rs:312:36:312:36 | [SSA] n | main.rs:312:36:312:36 | [SSA] [input] [match(true)] phi | | +| main.rs:312:36:312:36 | n | main.rs:312:36:312:36 | [SSA] n | | +| main.rs:312:69:312:69 | [SSA] [input] [match(true)] phi | main.rs:312:9:312:71 | [SSA] [match(true)] phi | | +| main.rs:312:69:312:69 | [SSA] n | main.rs:312:69:312:69 | [SSA] [input] [match(true)] phi | | +| main.rs:312:69:312:69 | n | main.rs:312:69:312:69 | [SSA] n | | +| main.rs:312:76:312:82 | sink(...) | main.rs:311:5:313:5 | match s1 { ... } | | +| main.rs:314:5:317:5 | match s2 { ... } | main.rs:302:49:318:1 | { ... } | | +| main.rs:314:11:314:12 | s2 | main.rs:315:9:315:38 | ...::C {...} | | +| main.rs:314:11:314:12 | s2 | main.rs:316:9:316:38 | ...::D {...} | | +| main.rs:315:36:315:36 | [SSA] n | main.rs:315:48:315:48 | n | | +| main.rs:315:36:315:36 | n | main.rs:315:36:315:36 | [SSA] n | | +| main.rs:315:43:315:49 | sink(...) | main.rs:314:5:317:5 | match s2 { ... } | | +| main.rs:316:36:316:36 | [SSA] n | main.rs:316:48:316:48 | n | | +| main.rs:316:36:316:36 | n | main.rs:316:36:316:36 | [SSA] n | | +| main.rs:316:43:316:49 | sink(...) | main.rs:314:5:317:5 | match s2 { ... } | | +| main.rs:323:9:323:10 | [SSA] s1 | main.rs:327:11:327:12 | s1 | | +| main.rs:323:9:323:10 | s1 | main.rs:323:9:323:10 | [SSA] s1 | | +| main.rs:323:14:325:5 | C {...} | main.rs:323:9:323:10 | s1 | | +| main.rs:326:9:326:10 | [SSA] s2 | main.rs:334:11:334:12 | s2 | | +| main.rs:326:9:326:10 | s2 | main.rs:326:9:326:10 | [SSA] s2 | | +| main.rs:326:14:326:29 | D {...} | main.rs:326:9:326:10 | s2 | | +| main.rs:327:11:327:12 | s1 | main.rs:328:9:328:24 | C {...} | | +| main.rs:327:11:327:12 | s1 | main.rs:329:9:329:24 | D {...} | | +| main.rs:327:11:327:12 | s1 | main.rs:331:11:331:12 | s1 | | +| main.rs:328:22:328:22 | [SSA] n | main.rs:328:34:328:34 | n | | +| main.rs:328:22:328:22 | n | main.rs:328:22:328:22 | [SSA] n | | +| main.rs:328:29:328:35 | sink(...) | main.rs:327:5:330:5 | match s1 { ... } | | +| main.rs:329:22:329:22 | [SSA] n | main.rs:329:34:329:34 | n | | +| main.rs:329:22:329:22 | n | main.rs:329:22:329:22 | [SSA] n | | +| main.rs:329:29:329:35 | sink(...) | main.rs:327:5:330:5 | match s1 { ... } | | +| main.rs:331:11:331:12 | s1 | main.rs:332:9:332:43 | ... \| ... | | +| main.rs:332:9:332:43 | ... \| ... | main.rs:332:9:332:24 | C {...} | | +| main.rs:332:9:332:43 | ... \| ... | main.rs:332:28:332:43 | D {...} | | +| main.rs:332:9:332:43 | [SSA] [match(true)] phi | main.rs:332:53:332:53 | n | | +| main.rs:332:22:332:22 | [SSA] [input] [match(true)] phi | main.rs:332:9:332:43 | [SSA] [match(true)] phi | | +| main.rs:332:22:332:22 | [SSA] n | main.rs:332:22:332:22 | [SSA] [input] [match(true)] phi | | +| main.rs:332:22:332:22 | n | main.rs:332:22:332:22 | [SSA] n | | +| main.rs:332:41:332:41 | [SSA] [input] [match(true)] phi | main.rs:332:9:332:43 | [SSA] [match(true)] phi | | +| main.rs:332:41:332:41 | [SSA] n | main.rs:332:41:332:41 | [SSA] [input] [match(true)] phi | | +| main.rs:332:41:332:41 | n | main.rs:332:41:332:41 | [SSA] n | | +| main.rs:332:48:332:54 | sink(...) | main.rs:331:5:333:5 | match s1 { ... } | | +| main.rs:334:5:337:5 | match s2 { ... } | main.rs:322:51:338:1 | { ... } | | +| main.rs:334:11:334:12 | s2 | main.rs:335:9:335:24 | C {...} | | +| main.rs:334:11:334:12 | s2 | main.rs:336:9:336:24 | D {...} | | +| main.rs:335:22:335:22 | [SSA] n | main.rs:335:34:335:34 | n | | +| main.rs:335:22:335:22 | n | main.rs:335:22:335:22 | [SSA] n | | +| main.rs:335:29:335:35 | sink(...) | main.rs:334:5:337:5 | match s2 { ... } | | +| main.rs:336:22:336:22 | [SSA] n | main.rs:336:34:336:34 | n | | +| main.rs:336:22:336:22 | n | main.rs:336:22:336:22 | [SSA] n | | +| main.rs:336:29:336:35 | sink(...) | main.rs:334:5:337:5 | match s2 { ... } | | +| main.rs:344:9:344:12 | [SSA] arr1 | main.rs:345:14:345:17 | arr1 | | +| main.rs:344:9:344:12 | arr1 | main.rs:344:9:344:12 | [SSA] arr1 | | +| main.rs:344:16:344:33 | [...] | main.rs:344:9:344:12 | arr1 | | +| main.rs:345:9:345:10 | [SSA] n1 | main.rs:346:10:346:11 | n1 | | +| main.rs:345:9:345:10 | n1 | main.rs:345:9:345:10 | [SSA] n1 | | +| main.rs:345:14:345:20 | arr1[2] | main.rs:345:9:345:10 | n1 | | +| main.rs:348:9:348:12 | [SSA] arr2 | main.rs:349:14:349:17 | arr2 | | +| main.rs:348:9:348:12 | arr2 | main.rs:348:9:348:12 | [SSA] arr2 | | +| main.rs:348:16:348:31 | [...; 10] | main.rs:348:9:348:12 | arr2 | | +| main.rs:349:9:349:10 | [SSA] n2 | main.rs:350:10:350:11 | n2 | | +| main.rs:349:9:349:10 | n2 | main.rs:349:9:349:10 | [SSA] n2 | | +| main.rs:349:14:349:20 | arr2[4] | main.rs:349:9:349:10 | n2 | | +| main.rs:352:9:352:12 | [SSA] arr3 | main.rs:353:14:353:17 | arr3 | | +| main.rs:352:9:352:12 | arr3 | main.rs:352:9:352:12 | [SSA] arr3 | | +| main.rs:352:16:352:24 | [...] | main.rs:352:9:352:12 | arr3 | | +| main.rs:353:9:353:10 | [SSA] n3 | main.rs:354:10:354:11 | n3 | | +| main.rs:353:9:353:10 | n3 | main.rs:353:9:353:10 | [SSA] n3 | | +| main.rs:353:14:353:20 | arr3[2] | main.rs:353:9:353:10 | n3 | | +| main.rs:358:9:358:12 | [SSA] arr1 | main.rs:359:15:359:18 | arr1 | | +| main.rs:358:9:358:12 | arr1 | main.rs:358:9:358:12 | [SSA] arr1 | | +| main.rs:358:16:358:33 | [...] | main.rs:358:9:358:12 | arr1 | | +| main.rs:359:9:359:10 | [SSA] n1 | main.rs:360:14:360:15 | n1 | | +| main.rs:359:9:359:10 | n1 | main.rs:359:9:359:10 | [SSA] n1 | | +| main.rs:363:9:363:12 | [SSA] arr2 | main.rs:364:15:364:18 | arr2 | | +| main.rs:363:9:363:12 | arr2 | main.rs:363:9:363:12 | [SSA] arr2 | | +| main.rs:363:16:363:24 | [...] | main.rs:363:9:363:12 | arr2 | | +| main.rs:364:5:366:5 | for ... in ... { ... } | main.rs:357:21:367:1 | { ... } | | +| main.rs:364:9:364:10 | [SSA] n2 | main.rs:365:14:365:15 | n2 | | +| main.rs:364:9:364:10 | n2 | main.rs:364:9:364:10 | [SSA] n2 | | +| main.rs:370:9:370:12 | [SSA] arr1 | main.rs:371:11:371:14 | arr1 | | +| main.rs:370:9:370:12 | arr1 | main.rs:370:9:370:12 | [SSA] arr1 | | +| main.rs:370:16:370:33 | [...] | main.rs:370:9:370:12 | arr1 | | +| main.rs:371:5:377:5 | match arr1 { ... } | main.rs:369:26:378:1 | { ... } | | +| main.rs:371:11:371:14 | arr1 | main.rs:372:9:372:17 | SlicePat | | +| main.rs:372:10:372:10 | [SSA] a | main.rs:373:18:373:18 | a | | +| main.rs:372:10:372:10 | a | main.rs:372:10:372:10 | [SSA] a | | +| main.rs:372:13:372:13 | [SSA] b | main.rs:374:18:374:18 | b | | +| main.rs:372:13:372:13 | b | main.rs:372:13:372:13 | [SSA] b | | +| main.rs:372:16:372:16 | [SSA] c | main.rs:375:18:375:18 | c | | +| main.rs:372:16:372:16 | c | main.rs:372:16:372:16 | [SSA] c | | +| main.rs:372:22:376:9 | { ... } | main.rs:371:5:377:5 | match arr1 { ... } | | +| main.rs:381:9:381:19 | [SSA] mut_arr | main.rs:382:10:382:16 | mut_arr | | +| main.rs:381:9:381:19 | mut_arr | main.rs:381:9:381:19 | [SSA] mut_arr | | +| main.rs:381:23:381:31 | [...] | main.rs:381:9:381:19 | mut_arr | | +| main.rs:382:10:382:16 | [post] mut_arr | main.rs:384:5:384:11 | mut_arr | | +| main.rs:382:10:382:16 | mut_arr | main.rs:384:5:384:11 | mut_arr | | +| main.rs:384:5:384:11 | [post] mut_arr | main.rs:385:13:385:19 | mut_arr | | +| main.rs:384:5:384:11 | mut_arr | main.rs:385:13:385:19 | mut_arr | | +| main.rs:384:18:384:27 | source(...) | main.rs:384:5:384:14 | mut_arr[1] | | +| main.rs:385:9:385:9 | [SSA] d | main.rs:386:10:386:10 | d | | +| main.rs:385:9:385:9 | d | main.rs:385:9:385:9 | [SSA] d | | +| main.rs:385:13:385:19 | [post] mut_arr | main.rs:387:10:387:16 | mut_arr | | +| main.rs:385:13:385:19 | mut_arr | main.rs:387:10:387:16 | mut_arr | | +| main.rs:385:13:385:22 | mut_arr[1] | main.rs:385:9:385:9 | d | | +| main.rs:392:39:392:43 | [SSA] names | main.rs:394:23:394:27 | names | | +| main.rs:392:39:392:43 | names | main.rs:392:39:392:43 | [SSA] names | | +| main.rs:392:39:392:72 | ...: Vec::<...> | main.rs:392:39:392:43 | names | | +| main.rs:393:7:393:18 | default_name | main.rs:393:7:393:18 | [SSA] default_name | | +| main.rs:393:22:393:43 | ... .to_string(...) | main.rs:393:7:393:18 | default_name | | +| main.rs:393:22:393:43 | ... .to_string(...) | main.rs:394:7:394:18 | phi(default_name) | | +| main.rs:394:3:400:3 | for ... in ... { ... } | main.rs:392:75:401:1 | { ... } | | +| main.rs:394:7:394:18 | phi(default_name) | main.rs:394:7:394:18 | phi(default_name) | | +| main.rs:394:7:394:18 | phi(default_name) | main.rs:396:35:396:61 | default_name | | +| main.rs:394:8:394:11 | [SSA] cond | main.rs:395:8:395:11 | cond | | +| main.rs:394:8:394:11 | cond | main.rs:394:8:394:11 | [SSA] cond | | +| main.rs:394:14:394:17 | [SSA] name | main.rs:396:15:396:18 | name | | +| main.rs:394:14:394:17 | name | main.rs:394:14:394:17 | [SSA] name | | +| main.rs:395:5:399:5 | if cond {...} | main.rs:394:29:400:3 | { ... } | | +| main.rs:396:11:396:11 | [SSA] n | main.rs:397:12:397:12 | n | | +| main.rs:396:11:396:11 | n | main.rs:396:11:396:11 | [SSA] n | | +| main.rs:396:15:396:62 | name.unwrap_or_else(...) | main.rs:396:11:396:11 | n | | +| main.rs:396:35:396:61 | [post] default_name | main.rs:394:7:394:18 | phi(default_name) | | +| main.rs:396:35:396:61 | closure self in \|...\| ... | main.rs:396:38:396:49 | this | | +| main.rs:396:35:396:61 | default_name | main.rs:394:7:394:18 | phi(default_name) | | +| main.rs:410:9:410:9 | [SSA] s | main.rs:411:10:411:10 | s | | +| main.rs:410:9:410:9 | s | main.rs:410:9:410:9 | [SSA] s | | +| main.rs:410:13:410:27 | MacroExpr | main.rs:410:9:410:9 | s | | +| main.rs:410:25:410:26 | source(...) | main.rs:410:13:410:27 | MacroExpr | | +| main.rs:436:13:436:33 | result_questionmark(...) | main.rs:436:9:436:9 | _ | | +| main.rs:448:36:448:41 | ...::new(...) | main.rs:448:36:448:41 | MacroExpr | | +models +| 1 | Summary: lang:core; ::unwrap; Argument[self].Variant[crate::option::Option::Some(0)]; ReturnValue; value | +| 2 | Summary: lang:core; ::unwrap_or; Argument[0]; ReturnValue; value | +| 3 | Summary: lang:core; ::unwrap_or; Argument[self].Variant[crate::option::Option::Some(0)]; ReturnValue; value | +| 4 | Summary: lang:core; ::unwrap; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value | +| 5 | Summary: lang:core; ::unwrap_or; Argument[0]; ReturnValue; value | +| 6 | Summary: lang:core; ::unwrap_or; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value | +| 7 | Summary: lang:core; crate::hint::must_use; Argument[0]; ReturnValue; value | storeStep | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | Ok | file://:0:0:0:0 | [summary] to write: ReturnValue in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | | main.rs:94:14:94:22 | source(...) | tuple.0 | main.rs:94:13:94:26 | TupleExpr | diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.ql b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.ql index 8bbde28564ac..993d78cc4c73 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.ql +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.ql @@ -1,7 +1,19 @@ import codeql.rust.dataflow.DataFlow import codeql.rust.dataflow.internal.DataFlowImpl +import utils.test.TranslateModels -query predicate localStep = DataFlow::localFlowStep/2; +private predicate provenance(string model) { RustDataFlow::simpleLocalFlowStep(_, _, model) } + +private module Tm = TranslateModels; + +query predicate models = Tm::models/2; + +query predicate localStep(Node nodeFrom, Node nodeTo, string model) { + exists(string madId | + RustDataFlow::simpleLocalFlowStep(nodeFrom, nodeTo, madId) and + Tm::translateModels(madId, model) + ) +} query predicate storeStep = RustDataFlow::storeStep/3; diff --git a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected index 21a028e8d41b..c42c4d0e9fc5 100644 --- a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected @@ -1,6 +1,7 @@ -| file://:0:0:0:0 | [summary param] 0 in lang:alloc::_::crate::fmt::format | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::crate::fmt::format | MaD:35 | -| file://:0:0:0:0 | [summary param] self in lang:alloc::_::::as_str | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::::as_str | MaD:33 | -| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | MaD:12 | +additionalTaintStep +| file://:0:0:0:0 | [summary param] 0 in lang:alloc::_::crate::fmt::format | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::crate::fmt::format | MaD:2 | +| file://:0:0:0:0 | [summary param] self in lang:alloc::_::::as_str | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::::as_str | MaD:1 | +| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | MaD:3 | | main.rs:4:5:4:8 | 1000 | main.rs:4:5:4:12 | ... + ... | | | main.rs:4:12:4:12 | i | main.rs:4:5:4:12 | ... + ... | | | main.rs:8:20:8:20 | s | main.rs:8:14:8:20 | FormatArgsExpr | | @@ -17,3 +18,7 @@ | main.rs:64:24:64:24 | s | main.rs:64:24:64:27 | s[1] | | | main.rs:64:24:64:27 | s[1] | main.rs:64:18:64:27 | FormatArgsExpr | | | main.rs:69:9:69:12 | arr2 | main.rs:69:9:69:15 | arr2[1] | | +models +| 1 | Summary: lang:alloc; ::as_str; Argument[self]; ReturnValue; taint | +| 2 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint | +| 3 | Summary: repo:https://github.com/seanmonstar/reqwest:reqwest; ::text; Argument[self]; ReturnValue.Variant[crate::result::Result::Ok(0)]; taint | diff --git a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.ql b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.ql index 5eebf4b347d1..0bb0db12d3b4 100644 --- a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.ql +++ b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.ql @@ -1,4 +1,18 @@ import codeql.rust.dataflow.DataFlow import codeql.rust.dataflow.internal.TaintTrackingImpl +import utils.test.TranslateModels -query predicate additionalTaintStep = RustTaintTracking::defaultAdditionalTaintStep/3; +private predicate provenance(string model) { + RustTaintTracking::defaultAdditionalTaintStep(_, _, model) +} + +private module Tm = TranslateModels; + +query predicate models = Tm::models/2; + +query predicate additionalTaintStep(DataFlow::Node pred, DataFlow::Node succ, string model) { + exists(string madId | + RustTaintTracking::defaultAdditionalTaintStep(pred, succ, madId) and + Tm::translateModels(madId, model) + ) +} diff --git a/shared/dataflow/codeql/dataflow/test/ProvenancePathGraph.qll b/shared/dataflow/codeql/dataflow/test/ProvenancePathGraph.qll index e82435e6a6b8..2171c9096434 100644 --- a/shared/dataflow/codeql/dataflow/test/ProvenancePathGraph.qll +++ b/shared/dataflow/codeql/dataflow/test/ProvenancePathGraph.qll @@ -16,7 +16,8 @@ signature class PathNodeSig { private signature predicate provenanceSig(string model); -private module TranslateModels< +/** Translates models-as-data provenance information into a format that can be used in tests. */ +module TranslateModels< interpretModelForTestSig/2 interpretModelForTest0, provenanceSig/1 provenance> { private predicate madIds(string madId) { @@ -79,6 +80,7 @@ private module TranslateModels< ) } + /** Holds if the model `model1` should be translated to `model2`. */ predicate translateModels(string model1, string model2) { exists(int i | translateModelsPart(model1, model2, i) and