diff --git a/.bazelversion b/.bazelversion index 0e79152459e0..e7fdef7e2e63 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -8.1.1 +8.4.2 diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 9ce291fa33c6..60b21a86163e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -40,3 +40,8 @@ updates: - dependency-name: "*" reviewers: - "github/codeql-go" + + - package-ecosystem: bazel + directory: "/" + schedule: + interval: weekly diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 72bf2052627b..64b46b00a228 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -34,7 +34,7 @@ jobs: - name: Setup dotnet uses: actions/setup-dotnet@v4 with: - dotnet-version: 9.0.300 + dotnet-version: 10.0.100 - name: Checkout repository uses: actions/checkout@v5 diff --git a/.github/workflows/csharp-qltest.yml b/.github/workflows/csharp-qltest.yml index 3c73eaec3b61..fc8bc218fe76 100644 --- a/.github/workflows/csharp-qltest.yml +++ b/.github/workflows/csharp-qltest.yml @@ -43,14 +43,14 @@ jobs: - name: Setup dotnet uses: actions/setup-dotnet@v4 with: - dotnet-version: 9.0.300 + dotnet-version: 10.0.100 - name: Extractor unit tests run: | dotnet tool restore - dotnet test -p:RuntimeFrameworkVersion=9.0.5 extractor/Semmle.Util.Tests - dotnet test -p:RuntimeFrameworkVersion=9.0.5 extractor/Semmle.Extraction.Tests - dotnet test -p:RuntimeFrameworkVersion=9.0.5 autobuilder/Semmle.Autobuild.CSharp.Tests - dotnet test -p:RuntimeFrameworkVersion=9.0.5 autobuilder/Semmle.Autobuild.Cpp.Tests + dotnet test -p:RuntimeFrameworkVersion=10.0.0 extractor/Semmle.Util.Tests + dotnet test -p:RuntimeFrameworkVersion=10.0.0 extractor/Semmle.Extraction.Tests + dotnet test -p:RuntimeFrameworkVersion=10.0.0 autobuilder/Semmle.Autobuild.CSharp.Tests + dotnet test -p:RuntimeFrameworkVersion=10.0.0 autobuilder/Semmle.Autobuild.Cpp.Tests shell: bash stubgentest: runs-on: ubuntu-latest diff --git a/MODULE.bazel b/MODULE.bazel index fc9d609f65ce..8ba6c2fcd8c8 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -26,7 +26,7 @@ bazel_dep(name = "nlohmann_json", version = "3.11.3", repo_name = "json") bazel_dep(name = "fmt", version = "12.1.0-codeql.1") bazel_dep(name = "rules_kotlin", version = "2.1.3-codeql.1") bazel_dep(name = "gazelle", version = "0.40.0") -bazel_dep(name = "rules_dotnet", version = "0.19.2-codeql.1") +bazel_dep(name = "rules_dotnet", version = "0.21.5-codeql.1") bazel_dep(name = "googletest", version = "1.14.0.bcr.1") bazel_dep(name = "rules_rust", version = "0.66.0") bazel_dep(name = "zstd", version = "1.5.5.bcr.1") @@ -172,7 +172,7 @@ http_archive( ) dotnet = use_extension("@rules_dotnet//dotnet:extensions.bzl", "dotnet") -dotnet.toolchain(dotnet_version = "9.0.300") +dotnet.toolchain(dotnet_version = "10.0.100") use_repo(dotnet, "dotnet_toolchains") register_toolchains("@dotnet_toolchains//:all") @@ -274,11 +274,11 @@ ripunzip_archive = use_repo_rule("//misc/ripunzip:ripunzip.bzl", "ripunzip_archi # go to https://github.com/GoogleChrome/ripunzip/releases to find latest version and corresponding sha256s ripunzip_archive( name = "ripunzip", - sha256_linux = "ee0e8a957687a5dc3a66b2a4b25883bf762df4c9c07f0651af527a32a405054b", - sha256_macos_arm = "8a88eea54eac232d162a72a42065e0429b82dbf4f05e9642915dff9d7a81f846", - sha256_macos_intel = "4457a18bfcc5feabe09f5ea3d1157128e07b4873392cb404a870e611924abf64", - sha256_windows = "66d0c1375301bf5ab815348048f43b110631d3fa7200acd50d50a8ed8655ca62", - version = "2.0.3", + sha256_linux = "71482d7a7e4ea9176d5596161c49250c34b136b157c45f632b1111323fbfc0de", + sha256_macos_arm = "604194ab13f0aba3972995d995f11002b8fc285c8170401fcd46655065df20c9", + sha256_macos_intel = "65367b94fd579d93d46f2d2595cc4c9a60cfcf497e3c824f9d1a7b80fa8bd38a", + sha256_windows = "ac3874075def2b9e5074a3b5945005ab082cc6e689e1de658da8965bc23e643e", + version = "2.0.4", ) register_toolchains( diff --git a/actions/ql/lib/CHANGELOG.md b/actions/ql/lib/CHANGELOG.md index 507c5e807164..4713be3d4f5b 100644 --- a/actions/ql/lib/CHANGELOG.md +++ b/actions/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.24 + +No user-facing changes. + ## 0.4.23 No user-facing changes. diff --git a/actions/ql/lib/change-notes/2025-11-28-fix-code-injection-alert-filtering.md b/actions/ql/lib/change-notes/2025-11-28-fix-code-injection-alert-filtering.md new file mode 100644 index 000000000000..b80ef77c2bcc --- /dev/null +++ b/actions/ql/lib/change-notes/2025-11-28-fix-code-injection-alert-filtering.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* The query `actions/code-injection/medium` has been updated to include results which were incorrectly excluded while filtering out results that are reported by `actions/code-injection/critical`. diff --git a/actions/ql/lib/change-notes/released/0.4.24.md b/actions/ql/lib/change-notes/released/0.4.24.md new file mode 100644 index 000000000000..c481220bc14a --- /dev/null +++ b/actions/ql/lib/change-notes/released/0.4.24.md @@ -0,0 +1,3 @@ +## 0.4.24 + +No user-facing changes. diff --git a/actions/ql/lib/codeql-pack.release.yml b/actions/ql/lib/codeql-pack.release.yml index 482605d096cc..b26f62aec370 100644 --- a/actions/ql/lib/codeql-pack.release.yml +++ b/actions/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.4.23 +lastReleaseVersion: 0.4.24 diff --git a/actions/ql/lib/codeql/actions/security/CodeInjectionQuery.qll b/actions/ql/lib/codeql/actions/security/CodeInjectionQuery.qll index 0f77acc2444b..3d5b8852b850 100644 --- a/actions/ql/lib/codeql/actions/security/CodeInjectionQuery.qll +++ b/actions/ql/lib/codeql/actions/security/CodeInjectionQuery.qll @@ -19,12 +19,7 @@ class CodeInjectionSink extends DataFlow::Node { Event getRelevantCriticalEventForSink(DataFlow::Node sink) { inPrivilegedContext(sink.asExpr(), result) and not exists(ControlCheck check | check.protects(sink.asExpr(), result, "code-injection")) and - // exclude cases where the sink is a JS script and the expression uses toJson - not exists(UsesStep script | - script.getCallee() = "actions/github-script" and - script.getArgumentExpr("script") = sink.asExpr() and - exists(getAToJsonReferenceExpression(sink.asExpr().(Expression).getExpression(), _)) - ) + not isGithubScriptUsingToJson(sink.asExpr()) } /** @@ -91,3 +86,38 @@ private module CodeInjectionConfig implements DataFlow::ConfigSig { /** Tracks flow of unsafe user input that is used to construct and evaluate a code script. */ module CodeInjectionFlow = TaintTracking::Global; + +/** + * Holds if there is a code injection flow from `source` to `sink` with + * critical severity, linked by `event`. + */ +predicate criticalSeverityCodeInjection( + CodeInjectionFlow::PathNode source, CodeInjectionFlow::PathNode sink, Event event +) { + CodeInjectionFlow::flowPath(source, sink) and + event = getRelevantCriticalEventForSink(sink.getNode()) and + source.getNode().(RemoteFlowSource).getEventName() = event.getName() +} + +/** + * Holds if there is a code injection flow from `source` to `sink` with medium severity. + */ +predicate mediumSeverityCodeInjection( + CodeInjectionFlow::PathNode source, CodeInjectionFlow::PathNode sink +) { + CodeInjectionFlow::flowPath(source, sink) and + not criticalSeverityCodeInjection(source, sink, _) and + not isGithubScriptUsingToJson(sink.getNode().asExpr()) +} + +/** + * Holds if `expr` is the `script` input to `actions/github-script` and it uses + * `toJson`. + */ +predicate isGithubScriptUsingToJson(Expression expr) { + exists(UsesStep script | + script.getCallee() = "actions/github-script" and + script.getArgumentExpr("script") = expr and + exists(getAToJsonReferenceExpression(expr.getExpression(), _)) + ) +} diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index c58f394c9ece..2ef4b7765bf7 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.23 +version: 0.4.25-dev library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/CHANGELOG.md b/actions/ql/src/CHANGELOG.md index abe6a3a85be0..9a9f89647553 100644 --- a/actions/ql/src/CHANGELOG.md +++ b/actions/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.16 + +No user-facing changes. + ## 0.6.15 No user-facing changes. diff --git a/actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql b/actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql index ed30e4da71c8..001aadd66cb4 100644 --- a/actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql +++ b/actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql @@ -20,10 +20,7 @@ import CodeInjectionFlow::PathGraph import codeql.actions.security.ControlChecks from CodeInjectionFlow::PathNode source, CodeInjectionFlow::PathNode sink, Event event -where - CodeInjectionFlow::flowPath(source, sink) and - event = getRelevantCriticalEventForSink(sink.getNode()) and - source.getNode().(RemoteFlowSource).getEventName() = event.getName() +where criticalSeverityCodeInjection(source, sink, event) select sink.getNode(), source, sink, "Potential code injection in $@, which may be controlled by an external user ($@).", sink, sink.getNode().asExpr().(Expression).getRawExpression(), event, event.getName() diff --git a/actions/ql/src/Security/CWE-094/CodeInjectionMedium.ql b/actions/ql/src/Security/CWE-094/CodeInjectionMedium.ql index 0f8b6e13a290..8bc3fe8f51ad 100644 --- a/actions/ql/src/Security/CWE-094/CodeInjectionMedium.ql +++ b/actions/ql/src/Security/CWE-094/CodeInjectionMedium.ql @@ -19,15 +19,7 @@ import codeql.actions.security.CodeInjectionQuery import CodeInjectionFlow::PathGraph from CodeInjectionFlow::PathNode source, CodeInjectionFlow::PathNode sink -where - CodeInjectionFlow::flowPath(source, sink) and - inNonPrivilegedContext(sink.getNode().asExpr()) and - // exclude cases where the sink is a JS script and the expression uses toJson - not exists(UsesStep script | - script.getCallee() = "actions/github-script" and - script.getArgumentExpr("script") = sink.getNode().asExpr() and - exists(getAToJsonReferenceExpression(sink.getNode().asExpr().(Expression).getExpression(), _)) - ) +where mediumSeverityCodeInjection(source, sink) select sink.getNode(), source, sink, "Potential code injection in $@, which may be controlled by an external user.", sink, sink.getNode().asExpr().(Expression).getRawExpression() diff --git a/actions/ql/src/Security/CWE-275/MissingActionsPermissions.md b/actions/ql/src/Security/CWE-275/MissingActionsPermissions.md index e932fcf50fdc..bbe918bba7e7 100644 --- a/actions/ql/src/Security/CWE-275/MissingActionsPermissions.md +++ b/actions/ql/src/Security/CWE-275/MissingActionsPermissions.md @@ -2,6 +2,8 @@ If a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`. +Note that this query cannot check whether the organization or repository token settings are set to read-only. However, even if they are, it is recommended to define explicit permissions (`contents: read` and `packages: read` are equivalent to the read-only default) so that (a) the actual needs of the workflow are documented, and (b) the permissions will remain restricted if the default is subsequently changed, or the workflow is copied to a different repository or organization. + ## Recommendation Add the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task. diff --git a/actions/ql/src/change-notes/released/0.6.16.md b/actions/ql/src/change-notes/released/0.6.16.md new file mode 100644 index 000000000000..ec5c49b7d646 --- /dev/null +++ b/actions/ql/src/change-notes/released/0.6.16.md @@ -0,0 +1,3 @@ +## 0.6.16 + +No user-facing changes. diff --git a/actions/ql/src/codeql-pack.release.yml b/actions/ql/src/codeql-pack.release.yml index d2638922927b..169788bff084 100644 --- a/actions/ql/src/codeql-pack.release.yml +++ b/actions/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.6.15 +lastReleaseVersion: 0.6.16 diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index 5b7c6f9b87df..51286147674e 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.6.15 +version: 0.6.17-dev library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/actions/ql/test/query-tests/Security/CWE-094/.github/workflows/push_and_workflow_dispatch.yml b/actions/ql/test/query-tests/Security/CWE-094/.github/workflows/push_and_workflow_dispatch.yml new file mode 100644 index 000000000000..8b7a6df009c2 --- /dev/null +++ b/actions/ql/test/query-tests/Security/CWE-094/.github/workflows/push_and_workflow_dispatch.yml @@ -0,0 +1,18 @@ +on: + push: + workflow_dispatch: + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - run: echo '${{ github.event.commits[11].message }}' + - run: echo '${{ github.event.commits[11].author.email }}' + - run: echo '${{ github.event.commits[11].author.name }}' + - run: echo '${{ github.event.head_commit.message }}' + - run: echo '${{ github.event.head_commit.author.email }}' + - run: echo '${{ github.event.head_commit.author.name }}' + - run: echo '${{ github.event.head_commit.committer.email }}' + - run: echo '${{ github.event.head_commit.committer.name }}' + - run: echo '${{ github.event.commits[11].committer.email }}' + - run: echo '${{ github.event.commits[11].committer.name }}' \ No newline at end of file diff --git a/actions/ql/test/query-tests/Security/CWE-094/CodeInjectionCritical.expected b/actions/ql/test/query-tests/Security/CWE-094/CodeInjectionCritical.expected index af788f6280b2..9bf7e9aa56db 100644 --- a/actions/ql/test/query-tests/Security/CWE-094/CodeInjectionCritical.expected +++ b/actions/ql/test/query-tests/Security/CWE-094/CodeInjectionCritical.expected @@ -435,6 +435,16 @@ nodes | .github/workflows/push.yml:14:19:14:64 | github.event.head_commit.committer.name | semmle.label | github.event.head_commit.committer.name | | .github/workflows/push.yml:15:19:15:65 | github.event.commits[11].committer.email | semmle.label | github.event.commits[11].committer.email | | .github/workflows/push.yml:16:19:16:64 | github.event.commits[11].committer.name | semmle.label | github.event.commits[11].committer.name | +| .github/workflows/push_and_workflow_dispatch.yml:9:19:9:57 | github.event.commits[11].message | semmle.label | github.event.commits[11].message | +| .github/workflows/push_and_workflow_dispatch.yml:10:19:10:62 | github.event.commits[11].author.email | semmle.label | github.event.commits[11].author.email | +| .github/workflows/push_and_workflow_dispatch.yml:11:19:11:61 | github.event.commits[11].author.name | semmle.label | github.event.commits[11].author.name | +| .github/workflows/push_and_workflow_dispatch.yml:12:19:12:57 | github.event.head_commit.message | semmle.label | github.event.head_commit.message | +| .github/workflows/push_and_workflow_dispatch.yml:13:19:13:62 | github.event.head_commit.author.email | semmle.label | github.event.head_commit.author.email | +| .github/workflows/push_and_workflow_dispatch.yml:14:19:14:61 | github.event.head_commit.author.name | semmle.label | github.event.head_commit.author.name | +| .github/workflows/push_and_workflow_dispatch.yml:15:19:15:65 | github.event.head_commit.committer.email | semmle.label | github.event.head_commit.committer.email | +| .github/workflows/push_and_workflow_dispatch.yml:16:19:16:64 | github.event.head_commit.committer.name | semmle.label | github.event.head_commit.committer.name | +| .github/workflows/push_and_workflow_dispatch.yml:17:19:17:65 | github.event.commits[11].committer.email | semmle.label | github.event.commits[11].committer.email | +| .github/workflows/push_and_workflow_dispatch.yml:18:19:18:64 | github.event.commits[11].committer.name | semmle.label | github.event.commits[11].committer.name | | .github/workflows/reusable-workflow-1.yml:6:7:6:11 | input taint | semmle.label | input taint | | .github/workflows/reusable-workflow-1.yml:36:21:36:39 | inputs.taint | semmle.label | inputs.taint | | .github/workflows/reusable-workflow-1.yml:44:19:44:56 | github.event.pull_request.title | semmle.label | github.event.pull_request.title | diff --git a/actions/ql/test/query-tests/Security/CWE-094/CodeInjectionMedium.expected b/actions/ql/test/query-tests/Security/CWE-094/CodeInjectionMedium.expected index 6c948d9559ea..4bbe7da0aaf3 100644 --- a/actions/ql/test/query-tests/Security/CWE-094/CodeInjectionMedium.expected +++ b/actions/ql/test/query-tests/Security/CWE-094/CodeInjectionMedium.expected @@ -435,6 +435,16 @@ nodes | .github/workflows/push.yml:14:19:14:64 | github.event.head_commit.committer.name | semmle.label | github.event.head_commit.committer.name | | .github/workflows/push.yml:15:19:15:65 | github.event.commits[11].committer.email | semmle.label | github.event.commits[11].committer.email | | .github/workflows/push.yml:16:19:16:64 | github.event.commits[11].committer.name | semmle.label | github.event.commits[11].committer.name | +| .github/workflows/push_and_workflow_dispatch.yml:9:19:9:57 | github.event.commits[11].message | semmle.label | github.event.commits[11].message | +| .github/workflows/push_and_workflow_dispatch.yml:10:19:10:62 | github.event.commits[11].author.email | semmle.label | github.event.commits[11].author.email | +| .github/workflows/push_and_workflow_dispatch.yml:11:19:11:61 | github.event.commits[11].author.name | semmle.label | github.event.commits[11].author.name | +| .github/workflows/push_and_workflow_dispatch.yml:12:19:12:57 | github.event.head_commit.message | semmle.label | github.event.head_commit.message | +| .github/workflows/push_and_workflow_dispatch.yml:13:19:13:62 | github.event.head_commit.author.email | semmle.label | github.event.head_commit.author.email | +| .github/workflows/push_and_workflow_dispatch.yml:14:19:14:61 | github.event.head_commit.author.name | semmle.label | github.event.head_commit.author.name | +| .github/workflows/push_and_workflow_dispatch.yml:15:19:15:65 | github.event.head_commit.committer.email | semmle.label | github.event.head_commit.committer.email | +| .github/workflows/push_and_workflow_dispatch.yml:16:19:16:64 | github.event.head_commit.committer.name | semmle.label | github.event.head_commit.committer.name | +| .github/workflows/push_and_workflow_dispatch.yml:17:19:17:65 | github.event.commits[11].committer.email | semmle.label | github.event.commits[11].committer.email | +| .github/workflows/push_and_workflow_dispatch.yml:18:19:18:64 | github.event.commits[11].committer.name | semmle.label | github.event.commits[11].committer.name | | .github/workflows/reusable-workflow-1.yml:6:7:6:11 | input taint | semmle.label | input taint | | .github/workflows/reusable-workflow-1.yml:36:21:36:39 | inputs.taint | semmle.label | inputs.taint | | .github/workflows/reusable-workflow-1.yml:44:19:44:56 | github.event.pull_request.title | semmle.label | github.event.pull_request.title | @@ -719,6 +729,16 @@ subpaths | .github/workflows/push.yml:14:19:14:64 | github.event.head_commit.committer.name | .github/workflows/push.yml:14:19:14:64 | github.event.head_commit.committer.name | .github/workflows/push.yml:14:19:14:64 | github.event.head_commit.committer.name | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/push.yml:14:19:14:64 | github.event.head_commit.committer.name | ${{ github.event.head_commit.committer.name }} | | .github/workflows/push.yml:15:19:15:65 | github.event.commits[11].committer.email | .github/workflows/push.yml:15:19:15:65 | github.event.commits[11].committer.email | .github/workflows/push.yml:15:19:15:65 | github.event.commits[11].committer.email | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/push.yml:15:19:15:65 | github.event.commits[11].committer.email | ${{ github.event.commits[11].committer.email }} | | .github/workflows/push.yml:16:19:16:64 | github.event.commits[11].committer.name | .github/workflows/push.yml:16:19:16:64 | github.event.commits[11].committer.name | .github/workflows/push.yml:16:19:16:64 | github.event.commits[11].committer.name | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/push.yml:16:19:16:64 | github.event.commits[11].committer.name | ${{ github.event.commits[11].committer.name }} | +| .github/workflows/push_and_workflow_dispatch.yml:9:19:9:57 | github.event.commits[11].message | .github/workflows/push_and_workflow_dispatch.yml:9:19:9:57 | github.event.commits[11].message | .github/workflows/push_and_workflow_dispatch.yml:9:19:9:57 | github.event.commits[11].message | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/push_and_workflow_dispatch.yml:9:19:9:57 | github.event.commits[11].message | ${{ github.event.commits[11].message }} | +| .github/workflows/push_and_workflow_dispatch.yml:10:19:10:62 | github.event.commits[11].author.email | .github/workflows/push_and_workflow_dispatch.yml:10:19:10:62 | github.event.commits[11].author.email | .github/workflows/push_and_workflow_dispatch.yml:10:19:10:62 | github.event.commits[11].author.email | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/push_and_workflow_dispatch.yml:10:19:10:62 | github.event.commits[11].author.email | ${{ github.event.commits[11].author.email }} | +| .github/workflows/push_and_workflow_dispatch.yml:11:19:11:61 | github.event.commits[11].author.name | .github/workflows/push_and_workflow_dispatch.yml:11:19:11:61 | github.event.commits[11].author.name | .github/workflows/push_and_workflow_dispatch.yml:11:19:11:61 | github.event.commits[11].author.name | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/push_and_workflow_dispatch.yml:11:19:11:61 | github.event.commits[11].author.name | ${{ github.event.commits[11].author.name }} | +| .github/workflows/push_and_workflow_dispatch.yml:12:19:12:57 | github.event.head_commit.message | .github/workflows/push_and_workflow_dispatch.yml:12:19:12:57 | github.event.head_commit.message | .github/workflows/push_and_workflow_dispatch.yml:12:19:12:57 | github.event.head_commit.message | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/push_and_workflow_dispatch.yml:12:19:12:57 | github.event.head_commit.message | ${{ github.event.head_commit.message }} | +| .github/workflows/push_and_workflow_dispatch.yml:13:19:13:62 | github.event.head_commit.author.email | .github/workflows/push_and_workflow_dispatch.yml:13:19:13:62 | github.event.head_commit.author.email | .github/workflows/push_and_workflow_dispatch.yml:13:19:13:62 | github.event.head_commit.author.email | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/push_and_workflow_dispatch.yml:13:19:13:62 | github.event.head_commit.author.email | ${{ github.event.head_commit.author.email }} | +| .github/workflows/push_and_workflow_dispatch.yml:14:19:14:61 | github.event.head_commit.author.name | .github/workflows/push_and_workflow_dispatch.yml:14:19:14:61 | github.event.head_commit.author.name | .github/workflows/push_and_workflow_dispatch.yml:14:19:14:61 | github.event.head_commit.author.name | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/push_and_workflow_dispatch.yml:14:19:14:61 | github.event.head_commit.author.name | ${{ github.event.head_commit.author.name }} | +| .github/workflows/push_and_workflow_dispatch.yml:15:19:15:65 | github.event.head_commit.committer.email | .github/workflows/push_and_workflow_dispatch.yml:15:19:15:65 | github.event.head_commit.committer.email | .github/workflows/push_and_workflow_dispatch.yml:15:19:15:65 | github.event.head_commit.committer.email | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/push_and_workflow_dispatch.yml:15:19:15:65 | github.event.head_commit.committer.email | ${{ github.event.head_commit.committer.email }} | +| .github/workflows/push_and_workflow_dispatch.yml:16:19:16:64 | github.event.head_commit.committer.name | .github/workflows/push_and_workflow_dispatch.yml:16:19:16:64 | github.event.head_commit.committer.name | .github/workflows/push_and_workflow_dispatch.yml:16:19:16:64 | github.event.head_commit.committer.name | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/push_and_workflow_dispatch.yml:16:19:16:64 | github.event.head_commit.committer.name | ${{ github.event.head_commit.committer.name }} | +| .github/workflows/push_and_workflow_dispatch.yml:17:19:17:65 | github.event.commits[11].committer.email | .github/workflows/push_and_workflow_dispatch.yml:17:19:17:65 | github.event.commits[11].committer.email | .github/workflows/push_and_workflow_dispatch.yml:17:19:17:65 | github.event.commits[11].committer.email | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/push_and_workflow_dispatch.yml:17:19:17:65 | github.event.commits[11].committer.email | ${{ github.event.commits[11].committer.email }} | +| .github/workflows/push_and_workflow_dispatch.yml:18:19:18:64 | github.event.commits[11].committer.name | .github/workflows/push_and_workflow_dispatch.yml:18:19:18:64 | github.event.commits[11].committer.name | .github/workflows/push_and_workflow_dispatch.yml:18:19:18:64 | github.event.commits[11].committer.name | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/push_and_workflow_dispatch.yml:18:19:18:64 | github.event.commits[11].committer.name | ${{ github.event.commits[11].committer.name }} | | .github/workflows/reusable-workflow-1.yml:36:21:36:39 | inputs.taint | .github/workflows/reusable-workflow-caller-1.yml:11:15:11:52 | github.event.pull_request.title | .github/workflows/reusable-workflow-1.yml:36:21:36:39 | inputs.taint | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/reusable-workflow-1.yml:36:21:36:39 | inputs.taint | ${{ inputs.taint }} | | .github/workflows/reusable-workflow-1.yml:53:26:53:39 | env.log | .github/workflows/reusable-workflow-1.yml:44:19:44:56 | github.event.pull_request.title | .github/workflows/reusable-workflow-1.yml:53:26:53:39 | env.log | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/reusable-workflow-1.yml:53:26:53:39 | env.log | ${{ env.log }} | | .github/workflows/reusable-workflow-1.yml:66:34:66:52 | env.prev_log | .github/workflows/reusable-workflow-1.yml:45:24:45:61 | github.event.changes.title.from | .github/workflows/reusable-workflow-1.yml:66:34:66:52 | env.prev_log | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/reusable-workflow-1.yml:66:34:66:52 | env.prev_log | ${{ env.prev_log }} | @@ -729,6 +749,10 @@ subpaths | .github/workflows/test10.yml:333:34:333:77 | github.event.workflow_run.head_branch | .github/workflows/test10.yml:333:34:333:77 | github.event.workflow_run.head_branch | .github/workflows/test10.yml:333:34:333:77 | github.event.workflow_run.head_branch | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/test10.yml:333:34:333:77 | github.event.workflow_run.head_branch | ${{ github.event.workflow_run.head_branch }} | | .github/workflows/test10.yml:423:34:423:77 | github.event.workflow_run.head_branch | .github/workflows/test10.yml:423:34:423:77 | github.event.workflow_run.head_branch | .github/workflows/test10.yml:423:34:423:77 | github.event.workflow_run.head_branch | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/test10.yml:423:34:423:77 | github.event.workflow_run.head_branch | ${{ github.event.workflow_run.head_branch }} | | .github/workflows/test10.yml:518:34:518:77 | github.event.workflow_run.head_branch | .github/workflows/test10.yml:518:34:518:77 | github.event.workflow_run.head_branch | .github/workflows/test10.yml:518:34:518:77 | github.event.workflow_run.head_branch | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/test10.yml:518:34:518:77 | github.event.workflow_run.head_branch | ${{ github.event.workflow_run.head_branch }} | +| .github/workflows/test20.yml:15:54:15:94 | github.event.pull_request.head.ref | .github/workflows/test20.yml:15:54:15:94 | github.event.pull_request.head.ref | .github/workflows/test20.yml:15:54:15:94 | github.event.pull_request.head.ref | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/test20.yml:15:54:15:94 | github.event.pull_request.head.ref | ${{ github.event.pull_request.head.ref }} | +| .github/workflows/test21.yml:22:35:22:73 | github.event.head_commit.message | .github/workflows/test21.yml:22:35:22:73 | github.event.head_commit.message | .github/workflows/test21.yml:22:35:22:73 | github.event.head_commit.message | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/test21.yml:22:35:22:73 | github.event.head_commit.message | ${{ github.event.head_commit.message }} | +| .github/workflows/test21.yml:23:36:23:74 | github.event.head_commit.message | .github/workflows/test21.yml:23:36:23:74 | github.event.head_commit.message | .github/workflows/test21.yml:23:36:23:74 | github.event.head_commit.message | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/test21.yml:23:36:23:74 | github.event.head_commit.message | ${{ github.event.head_commit.message }} | +| .github/workflows/test21.yml:24:50:24:88 | github.event.head_commit.message | .github/workflows/test21.yml:24:50:24:88 | github.event.head_commit.message | .github/workflows/test21.yml:24:50:24:88 | github.event.head_commit.message | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/test21.yml:24:50:24:88 | github.event.head_commit.message | ${{ github.event.head_commit.message }} | | .github/workflows/workflow_run_branches1.yml:13:20:13:63 | github.event.workflow_run.head_branch | .github/workflows/workflow_run_branches1.yml:13:20:13:63 | github.event.workflow_run.head_branch | .github/workflows/workflow_run_branches1.yml:13:20:13:63 | github.event.workflow_run.head_branch | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/workflow_run_branches1.yml:13:20:13:63 | github.event.workflow_run.head_branch | ${{ github.event.workflow_run.head_branch }} | | .github/workflows/workflow_run_branches2.yml:13:20:13:63 | github.event.workflow_run.head_branch | .github/workflows/workflow_run_branches2.yml:13:20:13:63 | github.event.workflow_run.head_branch | .github/workflows/workflow_run_branches2.yml:13:20:13:63 | github.event.workflow_run.head_branch | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/workflow_run_branches2.yml:13:20:13:63 | github.event.workflow_run.head_branch | ${{ github.event.workflow_run.head_branch }} | | .github/workflows/workflow_run_branches4.yml:13:20:13:63 | github.event.workflow_run.head_branch | .github/workflows/workflow_run_branches4.yml:13:20:13:63 | github.event.workflow_run.head_branch | .github/workflows/workflow_run_branches4.yml:13:20:13:63 | github.event.workflow_run.head_branch | Potential code injection in $@, which may be controlled by an external user. | .github/workflows/workflow_run_branches4.yml:13:20:13:63 | github.event.workflow_run.head_branch | ${{ github.event.workflow_run.head_branch }} | diff --git a/config/identical-files.json b/config/identical-files.json index a33dbb1997bf..bdaf567ae17e 100644 --- a/config/identical-files.json +++ b/config/identical-files.json @@ -282,6 +282,7 @@ "java/ql/lib/semmle/code/java/internal/OverlayXml.qll", "go/ql/lib/semmle/go/internal/OverlayXml.qll", "python/ql/lib/semmle/python/internal/OverlayXml.qll", - "csharp/ql/lib/semmle/code/csharp/internal/OverlayXml.qll" + "csharp/ql/lib/semmle/code/csharp/internal/OverlayXml.qll", + "cpp/ql/lib/semmle/code/cpp/internal/OverlayXml.qll" ] } diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index a493369e8dd9..e0c8b287adc5 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 6.1.3 + +No user-facing changes. + ## 6.1.2 No user-facing changes. diff --git a/cpp/ql/lib/change-notes/released/6.1.3.md b/cpp/ql/lib/change-notes/released/6.1.3.md new file mode 100644 index 000000000000..34916dd37c80 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/6.1.3.md @@ -0,0 +1,3 @@ +## 6.1.3 + +No user-facing changes. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 8a2b5999deeb..e641a8749739 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 6.1.2 +lastReleaseVersion: 6.1.3 diff --git a/cpp/ql/lib/ext/empty.model.yml b/cpp/ql/lib/ext/empty.model.yml index 6f160b62d7a6..e5202b5ad73c 100644 --- a/cpp/ql/lib/ext/empty.model.yml +++ b/cpp/ql/lib/ext/empty.model.yml @@ -9,6 +9,14 @@ extensions: pack: codeql/cpp-all extensible: sinkModel data: [] + - addsTo: + pack: codeql/cpp-all + extensible: barrierModel + data: [] + - addsTo: + pack: codeql/cpp-all + extensible: barrierGuardModel + data: [] - addsTo: pack: codeql/cpp-all extensible: summaryModel diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index e4945c2c5db6..76f68c8b83ef 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 6.1.2 +version: 6.1.4-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll index 69e32d23ec1c..7232326f1b3d 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll @@ -101,9 +101,10 @@ private import internal.FlowSummaryImpl private import internal.FlowSummaryImpl::Public private import internal.FlowSummaryImpl::Private private import internal.FlowSummaryImpl::Private::External -private import internal.ExternalFlowExtensions as Extensions +private import internal.ExternalFlowExtensions::Extensions as Extensions private import codeql.mad.ModelValidation as SharedModelVal private import codeql.util.Unit +private import codeql.mad.static.ModelsAsData as SharedMaD /** * A unit class for adding additional source model rows. @@ -144,135 +145,82 @@ predicate sinkModel(string row) { any(SinkModelCsv s).row(row) } /** Holds if `row` is a summary model. */ predicate summaryModel(string row) { any(SummaryModelCsv s).row(row) } -/** Holds if a source model exists for the given parameters. */ -predicate sourceModel( - string namespace, string type, boolean subtypes, string name, string signature, string ext, - string output, string kind, string provenance, string model -) { - exists(string row | - sourceModel(row) and - row.splitAt(";", 0) = namespace and - row.splitAt(";", 1) = type and - row.splitAt(";", 2) = subtypes.toString() and - subtypes = [true, false] and - row.splitAt(";", 3) = name and - row.splitAt(";", 4) = signature and - row.splitAt(";", 5) = ext and - row.splitAt(";", 6) = output and - row.splitAt(";", 7) = kind - ) and - provenance = "manual" and - model = "" - or - exists(QlBuiltins::ExtensionId madId | - Extensions::sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, - provenance, madId) and - model = "MaD:" + madId.toString() - ) -} - -/** Holds if a sink model exists for the given parameters. */ -predicate sinkModel( - string namespace, string type, boolean subtypes, string name, string signature, string ext, - string input, string kind, string provenance, string model -) { - exists(string row | - sinkModel(row) and - row.splitAt(";", 0) = namespace and - row.splitAt(";", 1) = type and - row.splitAt(";", 2) = subtypes.toString() and - subtypes = [true, false] and - row.splitAt(";", 3) = name and - row.splitAt(";", 4) = signature and - row.splitAt(";", 5) = ext and - row.splitAt(";", 6) = input and - row.splitAt(";", 7) = kind - ) and - provenance = "manual" and - model = "" - or - exists(QlBuiltins::ExtensionId madId | - Extensions::sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, provenance, - madId) and - model = "MaD:" + madId.toString() - ) -} - -/** - * Holds if a summary model exists for the given parameters. - * - * This predicate does not expand `@` to `*`s. - */ -private predicate summaryModel0( - string namespace, string type, boolean subtypes, string name, string signature, string ext, - string input, string output, string kind, string provenance, string model -) { - exists(string row | - summaryModel(row) and - row.splitAt(";", 0) = namespace and - row.splitAt(";", 1) = type and - row.splitAt(";", 2) = subtypes.toString() and - subtypes = [true, false] and - row.splitAt(";", 3) = name and - row.splitAt(";", 4) = signature and - row.splitAt(";", 5) = ext and - row.splitAt(";", 6) = input and - row.splitAt(";", 7) = output and - row.splitAt(";", 8) = kind - ) and - provenance = "manual" and - model = "" - or - exists(QlBuiltins::ExtensionId madId | - Extensions::summaryModel(namespace, type, subtypes, name, signature, ext, input, output, kind, - provenance, madId) and - model = "MaD:" + madId.toString() - ) -} - -/** - * Holds if the given extension tuple `madId` should pretty-print as `model`. - * - * This predicate should only be used in tests. - */ -predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) { - exists( +private module MadInput implements SharedMaD::InputSig { + /** Holds if a source model exists for the given parameters. */ + predicate additionalSourceModel( string namespace, string type, boolean subtypes, string name, string signature, string ext, - string output, string kind, string provenance - | - Extensions::sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, - provenance, madId) - | - model = - "Source: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; " - + ext + "; " + output + "; " + kind + "; " + provenance - ) - or - exists( + string output, string kind, string provenance, string model + ) { + exists(string row | + sourceModel(row) and + row.splitAt(";", 0) = namespace and + row.splitAt(";", 1) = type and + row.splitAt(";", 2) = subtypes.toString() and + subtypes = [true, false] and + row.splitAt(";", 3) = name and + row.splitAt(";", 4) = signature and + row.splitAt(";", 5) = ext and + row.splitAt(";", 6) = output and + row.splitAt(";", 7) = kind + ) and + provenance = "manual" and + model = "" + } + + /** Holds if a sink model exists for the given parameters. */ + predicate additionalSinkModel( string namespace, string type, boolean subtypes, string name, string signature, string ext, - string input, string kind, string provenance - | - Extensions::sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, provenance, - madId) - | - model = - "Sink: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; " + - ext + "; " + input + "; " + kind + "; " + provenance - ) - or - exists( + string input, string kind, string provenance, string model + ) { + exists(string row | + sinkModel(row) and + row.splitAt(";", 0) = namespace and + row.splitAt(";", 1) = type and + row.splitAt(";", 2) = subtypes.toString() and + subtypes = [true, false] and + row.splitAt(";", 3) = name and + row.splitAt(";", 4) = signature and + row.splitAt(";", 5) = ext and + row.splitAt(";", 6) = input and + row.splitAt(";", 7) = kind + ) and + provenance = "manual" and + model = "" + } + + /** + * Holds if a summary model exists for the given parameters. + * + * This predicate does not expand `@` to `*`s. + */ + predicate additionalSummaryModel( string namespace, string type, boolean subtypes, string name, string signature, string ext, - string input, string output, string kind, string provenance - | - Extensions::summaryModel(namespace, type, subtypes, name, signature, ext, input, output, kind, - provenance, madId) - | - model = - "Summary: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + - "; " + ext + "; " + input + "; " + output + "; " + kind + "; " + provenance - ) + string input, string output, string kind, string provenance, string model + ) { + exists(string row | + summaryModel(row) and + row.splitAt(";", 0) = namespace and + row.splitAt(";", 1) = type and + row.splitAt(";", 2) = subtypes.toString() and + subtypes = [true, false] and + row.splitAt(";", 3) = name and + row.splitAt(";", 4) = signature and + row.splitAt(";", 5) = ext and + row.splitAt(";", 6) = input and + row.splitAt(";", 7) = output and + row.splitAt(";", 8) = kind + ) and + provenance = "manual" and + model = "" + } + + string namespaceSegmentSeparator() { result = "::" } } +private module MaD = SharedMaD::ModelsAsData; + +import MaD + /** * Holds if `input` is `input0`, but with all occurrences of `@` replaced * by `n` repetitions of `*` (and similarly for `output` and `output0`). @@ -294,69 +242,13 @@ predicate summaryModel( string input, string output, string kind, string provenance, string model ) { exists(string input0, string output0 | - summaryModel0(namespace, type, subtypes, name, signature, ext, input0, output0, kind, + MaD::summaryModel(namespace, type, subtypes, name, signature, ext, input0, output0, kind, provenance, model) and expandInputAndOutput(input0, input, output0, output, [0 .. Private::getMaxElementContentIndirectionIndex() - 1]) ) } -private predicate relevantNamespace(string namespace) { - sourceModel(namespace, _, _, _, _, _, _, _, _, _) or - sinkModel(namespace, _, _, _, _, _, _, _, _, _) or - summaryModel(namespace, _, _, _, _, _, _, _, _, _, _) -} - -private predicate namespaceLink(string shortns, string longns) { - relevantNamespace(shortns) and - relevantNamespace(longns) and - longns.prefix(longns.indexOf("::")) = shortns -} - -private predicate canonicalNamespace(string namespace) { - relevantNamespace(namespace) and not namespaceLink(_, namespace) -} - -private predicate canonicalNamespaceLink(string namespace, string subns) { - canonicalNamespace(namespace) and - (subns = namespace or namespaceLink(namespace, subns)) -} - -/** - * Holds if MaD framework coverage of `namespace` is `n` api endpoints of the - * kind `(kind, part)`, and `namespaces` is the number of subnamespaces of - * `namespace` which have MaD framework coverage (including `namespace` - * itself). - */ -predicate modelCoverage(string namespace, int namespaces, string kind, string part, int n) { - namespaces = strictcount(string subns | canonicalNamespaceLink(namespace, subns)) and - ( - part = "source" and - n = - strictcount(string subns, string type, boolean subtypes, string name, string signature, - string ext, string output, string provenance, string model | - canonicalNamespaceLink(namespace, subns) and - sourceModel(subns, type, subtypes, name, signature, ext, output, kind, provenance, model) - ) - or - part = "sink" and - n = - strictcount(string subns, string type, boolean subtypes, string name, string signature, - string ext, string input, string provenance, string model | - canonicalNamespaceLink(namespace, subns) and - sinkModel(subns, type, subtypes, name, signature, ext, input, kind, provenance, model) - ) - or - part = "summary" and - n = - strictcount(string subns, string type, boolean subtypes, string name, string signature, - string ext, string input, string output, string provenance | - canonicalNamespaceLink(namespace, subns) and - summaryModel(subns, type, subtypes, name, signature, ext, input, output, kind, provenance, _) - ) - ) -} - /** Provides a query predicate to check the CSV data for validation errors. */ module CsvValidation { private string getInvalidModelInput() { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/ExternalFlowExtensions.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/ExternalFlowExtensions.qll index cd1af34c8d8a..1a572c221d9f 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/ExternalFlowExtensions.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/ExternalFlowExtensions.qll @@ -2,6 +2,8 @@ * This module provides extensible predicates for defining MaD models. */ +private import codeql.mad.static.ModelsAsData as SharedMaD + /** * Holds if an external source model exists for the given parameters. */ @@ -18,6 +20,22 @@ extensible predicate sinkModel( string input, string kind, string provenance, QlBuiltins::ExtensionId madId ); +/** + * Holds if a barrier model exists for the given parameters. + */ +extensible predicate barrierModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string output, string kind, string provenance, QlBuiltins::ExtensionId madId +); + +/** + * Holds if a barrier guard model exists for the given parameters. + */ +extensible predicate barrierGuardModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string input, string acceptingvalue, string kind, string provenance, QlBuiltins::ExtensionId madId +); + /** * Holds if an external summary model exists for the given parameters. */ @@ -25,3 +43,16 @@ extensible predicate summaryModel( string namespace, string type, boolean subtypes, string name, string signature, string ext, string input, string output, string kind, string provenance, QlBuiltins::ExtensionId madId ); + +/** + * Holds if a neutral model exists for the given parameters. + */ +extensible predicate neutralModel( + string namespace, string type, string name, string signature, string kind, string provenance +); + +module Extensions implements SharedMaD::ExtensionsSig { + import ExternalFlowExtensions + + predicate namespaceGrouping(string group, string namespace) { none() } +} diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll index d89ab06ed829..a1d9dd86c400 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll @@ -148,6 +148,19 @@ module SourceSinkInterpretationInput implements ) } + predicate barrierElement( + Element n, string output, string kind, Public::Provenance provenance, string model + ) { + none() + } + + predicate barrierGuardElement( + Element n, string input, Public::AcceptingValue acceptingvalue, string kind, + Public::Provenance provenance, string model + ) { + none() + } + private newtype TInterpretNode = TElement_(Element n) or TNode_(Node n) diff --git a/cpp/ql/lib/semmle/code/cpp/internal/Overlay.qll b/cpp/ql/lib/semmle/code/cpp/internal/Overlay.qll index 571f034d85b1..b870bbfb9f68 100644 --- a/cpp/ql/lib/semmle/code/cpp/internal/Overlay.qll +++ b/cpp/ql/lib/semmle/code/cpp/internal/Overlay.qll @@ -2,6 +2,8 @@ * Defines entity discard predicates for C++ overlay analysis. */ +private import OverlayXml + /** * Holds always for the overlay variant and never for the base variant. * This local predicate is used to define local predicates that behave @@ -20,9 +22,21 @@ private string getLocationFilePath(@location_default loc) { */ overlay[local] private string getSingleLocationFilePath(@element e) { - // @var_decl has a direct location in the var_decls relation - exists(@location_default loc | var_decls(e, _, _, _, loc) | result = getLocationFilePath(loc)) - //TODO: add other kinds of elements with single locations + exists(@location_default loc | + var_decls(e, _, _, _, loc) + or + fun_decls(e, _, _, _, loc) + or + type_decls(e, _, loc) + or + namespace_decls(e, _, loc, _) + or + macroinvocations(e, _, loc, _) + or + preprocdirects(e, _, loc) + | + result = getLocationFilePath(loc) + ) } /** @@ -30,11 +44,17 @@ private string getSingleLocationFilePath(@element e) { */ overlay[local] private string getMultiLocationFilePath(@element e) { - // @variable gets its location(s) from its @var_decl(s) - exists(@var_decl vd, @location_default loc | var_decls(vd, e, _, _, loc) | + exists(@location_default loc | + exists(@var_decl vd | var_decls(vd, e, _, _, loc)) + or + exists(@fun_decl fd | fun_decls(fd, e, _, _, loc)) + or + exists(@type_decl td | type_decls(td, e, loc)) + or + exists(@namespace_decl nd | namespace_decls(nd, e, loc, _)) + | result = getLocationFilePath(loc) ) - //TODO: add other kinds of elements with multiple locations } /** diff --git a/cpp/ql/lib/semmle/code/cpp/internal/OverlayXml.qll b/cpp/ql/lib/semmle/code/cpp/internal/OverlayXml.qll new file mode 100644 index 000000000000..95d49f2d6110 --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/internal/OverlayXml.qll @@ -0,0 +1,46 @@ +overlay[local] +module; + +/** + * A local predicate that always holds for the overlay variant and never holds for the base variant. + * This is used to define local predicates that behave differently for the base and overlay variant. + */ +private predicate isOverlay() { databaseMetadata("isOverlay", "true") } + +private string getXmlFile(@xmllocatable locatable) { + exists(@location_default location, @file file | xmllocations(locatable, location) | + locations_default(location, file, _, _, _, _) and + files(file, result) + ) +} + +private string getXmlFileInBase(@xmllocatable locatable) { + not isOverlay() and + result = getXmlFile(locatable) +} + +/** + * Holds if the given `file` was extracted as part of the overlay and was extracted by the HTML/XML + * extractor. + */ +private predicate overlayXmlExtracted(string file) { + isOverlay() and + exists(@xmllocatable locatable | + not files(locatable, _) and not xmlNs(locatable, _, _, _) and file = getXmlFile(locatable) + ) +} + +/** + * Holds if the given XML `locatable` should be discarded, because it is part of the overlay base + * and is in a file that was also extracted as part of the overlay database. + */ +overlay[discard_entity] +private predicate discardXmlLocatable(@xmllocatable locatable) { + exists(string file | file = getXmlFileInBase(locatable) | + overlayChangedFiles(file) + or + // The HTML/XML extractor is currently not incremental and may extract more files than those + // included in overlayChangedFiles. + overlayXmlExtracted(file) + ) +} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll index 285e0dc8419e..8dc3513b444b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll @@ -1051,12 +1051,12 @@ module BarrierGuardWithIntParam { } private predicate guardChecksInstr( - IRGuards::Guards_v1::Guard g, IRGuards::GuardsInput::Expr instr, boolean branch, + IRGuards::Guards_v1::Guard g, IRGuards::GuardsInput::Expr instr, IRGuards::GuardValue gv, int indirectionIndex ) { exists(Node node | nodeHasInstruction(node, instr, indirectionIndex) and - guardChecksNode(g, node, branch, indirectionIndex) + guardChecksNode(g, node, gv.asBooleanValue(), indirectionIndex) ) } @@ -1064,8 +1064,8 @@ module BarrierGuardWithIntParam { DataFlowIntegrationInput::Guard g, SsaImpl::Definition def, IRGuards::GuardValue val, int indirectionIndex ) { - IRGuards::Guards_v1::ValidationWrapperWithState::guardChecksDef(g, def, - val, indirectionIndex) + IRGuards::Guards_v1::ParameterizedValidationWrapper::guardChecksDef(g, + def, val, indirectionIndex) } Node getABarrierNode(int indirectionIndex) { diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 813bbda6a8ac..a6caf3c6a6bd 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.5.7 + +No user-facing changes. + ## 1.5.6 No user-facing changes. diff --git a/cpp/ql/src/Security/CWE/CWE-020/ExternalAPIs.qll b/cpp/ql/src/Security/CWE/CWE-020/ExternalAPIs.qll index 51dad0fc18c1..74fe756093ce 100644 --- a/cpp/ql/src/Security/CWE/CWE-020/ExternalAPIs.qll +++ b/cpp/ql/src/Security/CWE/CWE-020/ExternalAPIs.qll @@ -10,7 +10,7 @@ import ExternalAPIsSpecific /** A node representing untrusted data being passed to an external API. */ class UntrustedExternalApiDataNode extends ExternalApiDataNode { - UntrustedExternalApiDataNode() { UntrustedDataToExternalApiFlow::flow(_, this) } + UntrustedExternalApiDataNode() { UntrustedDataToExternalApiFlow::flowTo(this) } /** Gets a source of untrusted data which is passed to this external API data node. */ DataFlow::Node getAnUntrustedSource() { UntrustedDataToExternalApiFlow::flow(result, this) } diff --git a/cpp/ql/src/Security/CWE/CWE-020/ir/ExternalAPIs.qll b/cpp/ql/src/Security/CWE/CWE-020/ir/ExternalAPIs.qll index 51dad0fc18c1..74fe756093ce 100644 --- a/cpp/ql/src/Security/CWE/CWE-020/ir/ExternalAPIs.qll +++ b/cpp/ql/src/Security/CWE/CWE-020/ir/ExternalAPIs.qll @@ -10,7 +10,7 @@ import ExternalAPIsSpecific /** A node representing untrusted data being passed to an external API. */ class UntrustedExternalApiDataNode extends ExternalApiDataNode { - UntrustedExternalApiDataNode() { UntrustedDataToExternalApiFlow::flow(_, this) } + UntrustedExternalApiDataNode() { UntrustedDataToExternalApiFlow::flowTo(this) } /** Gets a source of untrusted data which is passed to this external API data node. */ DataFlow::Node getAnUntrustedSource() { UntrustedDataToExternalApiFlow::flow(result, this) } diff --git a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql index 01d078cf545c..392650022e20 100644 --- a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql +++ b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql @@ -263,7 +263,7 @@ module FromSensitiveFlow = TaintTracking::Global; * A taint flow configuration for flow from a sensitive expression to an encryption operation. */ module ToEncryptionConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { FromSensitiveFlow::flow(source, _) } + predicate isSource(DataFlow::Node source) { FromSensitiveFlow::flowFrom(source) } predicate isSink(DataFlow::Node sink) { isSinkEncrypt(sink, _) } @@ -311,7 +311,7 @@ where FromSensitiveFlow::flowPath(source, sink) and isSinkSendRecv(sink.getNode(), networkSendRecv) and // no flow from sensitive -> evidence of encryption - not ToEncryptionFlow::flow(source.getNode(), _) and + not ToEncryptionFlow::flowFrom(source.getNode()) and not FromEncryptionFlow::flowTo(sink.getNode()) and // construct result if networkSendRecv instanceof NetworkSend diff --git a/cpp/ql/src/change-notes/released/1.5.7.md b/cpp/ql/src/change-notes/released/1.5.7.md new file mode 100644 index 000000000000..c60c55034a6b --- /dev/null +++ b/cpp/ql/src/change-notes/released/1.5.7.md @@ -0,0 +1,3 @@ +## 1.5.7 + +No user-facing changes. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 9a0b3c9461b0..227ac5febefb 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.6 +lastReleaseVersion: 1.5.7 diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql b/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql index 58f5dc2ade4b..003c4f27f498 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql @@ -129,7 +129,7 @@ module PointerArithmeticToDerefFlow = DataFlow::Global + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/csharp/Directory.Build.props b/csharp/Directory.Build.props index 0c8a2bc15266..8046ab10440a 100644 --- a/csharp/Directory.Build.props +++ b/csharp/Directory.Build.props @@ -1,7 +1,7 @@ - net9.0 + net10.0 win-x64;linux-x64;osx-x64 enable true diff --git a/csharp/actions/create-extractor-pack/action.yml b/csharp/actions/create-extractor-pack/action.yml index b6737b45ad66..36f531f1b744 100644 --- a/csharp/actions/create-extractor-pack/action.yml +++ b/csharp/actions/create-extractor-pack/action.yml @@ -7,7 +7,7 @@ runs: - name: Setup dotnet uses: actions/setup-dotnet@v4 with: - dotnet-version: 9.0.300 + dotnet-version: 10.0.100 - name: Build Extractor shell: bash run: scripts/create-extractor-pack.sh diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BUILD.bazel b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BUILD.bazel index 67f3470712dd..9590f7f86caf 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BUILD.bazel +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BUILD.bazel @@ -13,6 +13,5 @@ codeql_xunit_test( "//csharp/autobuilder/Semmle.Autobuild.CSharp:bin/Semmle.Autobuild.CSharp", "//csharp/autobuilder/Semmle.Autobuild.Shared", "@paket.main//microsoft.net.test.sdk", - "@paket.main//system.io.filesystem", ], ) diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/paket.references b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/paket.references index 83bb87685b19..0582094502ab 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/paket.references +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/paket.references @@ -1,4 +1,3 @@ -System.IO.FileSystem xunit xunit.runner.visualstudio Microsoft.NET.Test.Sdk diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs index a396ab751eaf..e07f75928872 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs @@ -48,7 +48,7 @@ public BuildScript Analyse(IAutobuilder builder, bool au { // When a custom .NET CLI has been installed, `dotnet --info` has already been executed // to verify the installation. - var ret = dotNetPath is null ? GetInfoCommand(builder.Actions, dotNetPath, environment) : BuildScript.Success; + var ret = dotNetPath is null ? DotNet.InfoScript(builder.Actions, DotNetCommand(builder.Actions, dotNetPath), environment, builder.Logger) : BuildScript.Success; foreach (var projectOrSolution in builder.ProjectsOrSolutionsToBuild) { var cleanCommand = GetCleanCommand(builder.Actions, dotNetPath, environment); @@ -111,14 +111,6 @@ public static BuildScript WithDotNet(IAutobuilder builde private static string DotNetCommand(IBuildActions actions, string? dotNetPath) => dotNetPath is not null ? actions.PathCombine(dotNetPath, "dotnet") : "dotnet"; - private static BuildScript GetInfoCommand(IBuildActions actions, string? dotNetPath, IDictionary? environment) - { - var info = new CommandBuilder(actions, null, environment). - RunCommand(DotNetCommand(actions, dotNetPath)). - Argument("--info"); - return info.Script; - } - private static CommandBuilder GetCleanCommand(IBuildActions actions, string? dotNetPath, IDictionary? environment) { var clean = new CommandBuilder(actions, null, environment). diff --git a/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/BUILD.bazel b/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/BUILD.bazel index ad8f6e3d1f1a..0a718903a959 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/BUILD.bazel +++ b/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/BUILD.bazel @@ -13,6 +13,5 @@ codeql_xunit_test( "//csharp/autobuilder/Semmle.Autobuild.Cpp:bin/Semmle.Autobuild.Cpp", "//csharp/autobuilder/Semmle.Autobuild.Shared", "@paket.main//microsoft.net.test.sdk", - "@paket.main//system.io.filesystem", ], ) diff --git a/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/paket.references b/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/paket.references index 83bb87685b19..0582094502ab 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/paket.references +++ b/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/paket.references @@ -1,4 +1,3 @@ -System.IO.FileSystem xunit xunit.runner.visualstudio Microsoft.NET.Test.Sdk diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv index 4713679cd233..d71bc79b3c08 100644 --- a/csharp/documentation/library-coverage/coverage.csv +++ b/csharp/documentation/library-coverage/coverage.csv @@ -40,6 +40,7 @@ Microsoft.VisualBasic,,,6,,,,,,,,,,,,,,,,,,,1,5 Microsoft.Win32,,4,2,,,,,,,,,,,,,,,,,,4,,2 Mono.Linker,,,278,,,,,,,,,,,,,,,,,,,127,151 MySql.Data.MySqlClient,48,,,,,,,,,,,,48,,,,,,,,,, +NHibernate,3,,,,,,,,,,,,3,,,,,,,,,, Newtonsoft.Json,,,91,,,,,,,,,,,,,,,,,,,73,18 ServiceStack,194,,7,27,,,,,75,,,,92,,,,,,,,,7, SourceGenerators,,,5,,,,,,,,,,,,,,,,,,,,5 diff --git a/csharp/documentation/library-coverage/coverage.rst b/csharp/documentation/library-coverage/coverage.rst index 061662f97149..8128c27dccd0 100644 --- a/csharp/documentation/library-coverage/coverage.rst +++ b/csharp/documentation/library-coverage/coverage.rst @@ -9,6 +9,6 @@ C# framework & library support Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE-079` :sub:`Cross-site scripting` `ServiceStack `_,"``ServiceStack.*``, ``ServiceStack``",,7,194, System,"``System.*``, ``System``",47,12241,54,5 - Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.AspNetCore.Components``, ``Microsoft.AspNetCore.Http``, ``Microsoft.AspNetCore.Mvc``, ``Microsoft.AspNetCore.WebUtilities``, ``Microsoft.CSharp``, ``Microsoft.Data.SqlClient``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.DotNet.Build.Tasks``, ``Microsoft.DotNet.PlatformAbstractions``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.Diagnostics.Metrics``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.JSInterop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.VisualBasic``, ``Microsoft.Win32``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",60,2257,159,4 - Totals,,107,14505,407,9 + Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.AspNetCore.Components``, ``Microsoft.AspNetCore.Http``, ``Microsoft.AspNetCore.Mvc``, ``Microsoft.AspNetCore.WebUtilities``, ``Microsoft.CSharp``, ``Microsoft.Data.SqlClient``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.DotNet.Build.Tasks``, ``Microsoft.DotNet.PlatformAbstractions``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.Diagnostics.Metrics``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.JSInterop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.VisualBasic``, ``Microsoft.Win32``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``NHibernate``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",60,2257,162,4 + Totals,,107,14505,410,9 diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/BUILD.bazel b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/BUILD.bazel index 96ecccc31aa0..0dc2a3661250 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/BUILD.bazel +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/BUILD.bazel @@ -16,5 +16,6 @@ codeql_csharp_library( "//csharp/extractor/Semmle.Extraction.CSharp", "//csharp/extractor/Semmle.Util", "@paket.main//newtonsoft.json", + "@paket.main//nuget.versioning", ], ) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 040e89dcec1d..ad69d0c85c37 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -283,7 +283,7 @@ private void AddNetFrameworkDlls(ISet dllLocations, ISet { foreach (var fp in frameworkPaths) { - dotnetFrameworkVersionVariantCount += NugetPackageRestorer.GetOrderedPackageVersionSubDirectories(fp.Path!).Length; + dotnetFrameworkVersionVariantCount += nugetPackageRestorer.GetOrderedPackageVersionSubDirectories(fp.Path!).Length; } var folder = nugetPackageRestorer.GetNewestNugetPackageVersionFolder(frameworkPath.Path, ".NET Framework"); diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs index 7bc792384154..9d3d79e4c4ff 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs @@ -3,6 +3,7 @@ using System.Collections.ObjectModel; using System.IO; using System.Linq; +using System.Threading; using Newtonsoft.Json.Linq; using Semmle.Util; @@ -36,12 +37,29 @@ private DotNet(ILogger logger, string? dotNetPath, TemporaryDirectory tempWorkin public static IDotNet Make(ILogger logger, string? dotNetPath, TemporaryDirectory tempWorkingDirectory, DependabotProxy? dependabotProxy) => new DotNet(logger, dotNetPath, tempWorkingDirectory, dependabotProxy); + private static void HandleRetryExitCode143(string dotnet, int attempt, ILogger logger) + { + logger.LogWarning($"Running '{dotnet} --info' failed with exit code 143. Retrying..."); + var sleep = Math.Pow(2, attempt) * 1000; + Thread.Sleep((int)sleep); + } + private void Info() { - var res = dotnetCliInvoker.RunCommand("--info", silent: false); - if (!res) + // Allow up to four attempts (with up to three retries) to run `dotnet --info`, to mitigate transient issues + for (int attempt = 0; attempt < 4; attempt++) { - throw new Exception($"{dotnetCliInvoker.Exec} --info failed."); + var exitCode = dotnetCliInvoker.RunCommandExitCode("--info", silent: false); + switch (exitCode) + { + case 0: + return; + case 143 when attempt < 3: + HandleRetryExitCode143(dotnetCliInvoker.Exec, attempt, logger); + continue; + default: + throw new Exception($"{dotnetCliInvoker.Exec} --info failed with exit code {exitCode}."); + } } } @@ -59,7 +77,7 @@ private string GetRestoreArgs(RestoreSettings restoreSettings) Directory.CreateDirectory(path); } - args += $" /p:TargetFrameworkRootPath=\"{path}\" /p:NetCoreTargetingPackRoot=\"{path}\""; + args += $" /p:TargetFrameworkRootPath=\"{path}\" /p:NetCoreTargetingPackRoot=\"{path}\" /p:AllowMissingPrunePackageData=true"; } if (restoreSettings.PathToNugetConfig != null) @@ -139,7 +157,7 @@ public IList GetNugetFeedsFromFolder(string folderPath) } // The version number should be kept in sync with the version .NET version used for building the application. - public const string LatestDotNetSdkVersion = "9.0.300"; + public const string LatestDotNetSdkVersion = "10.0.100"; public static ReadOnlyDictionary MinimalEnvironment => IDotNetCliInvoker.MinimalEnvironment; @@ -193,6 +211,35 @@ private static BuildScript DownloadDotNet(IBuildActions actions, ILogger logger, return BuildScript.Failure; } + /// + /// Returns a script for running `dotnet --info`, with retries on exit code 143. + /// + public static BuildScript InfoScript(IBuildActions actions, string dotnet, IDictionary? environment, ILogger logger) + { + var info = new CommandBuilder(actions, null, environment). + RunCommand(dotnet). + Argument("--info"); + var script = info.Script; + for (var attempt = 0; attempt < 4; attempt++) + { + var attemptCopy = attempt; // Capture in local variable + script = BuildScript.Bind(script, ret => + { + switch (ret) + { + case 0: + return BuildScript.Success; + case 143 when attemptCopy < 3: + HandleRetryExitCode143(dotnet, attemptCopy, logger); + return info.Script; + default: + return BuildScript.Failure; + } + }); + } + return script; + } + /// /// Returns a script for downloading specific .NET SDK versions, if the /// versions are not already installed. @@ -292,9 +339,7 @@ BuildScript GetInstall(string pwsh) => }; } - var dotnetInfo = new CommandBuilder(actions, environment: MinimalEnvironment). - RunCommand(actions.PathCombine(path, "dotnet")). - Argument("--info").Script; + var dotnetInfo = InfoScript(actions, actions.PathCombine(path, "dotnet"), MinimalEnvironment.ToDictionary(), logger); Func getInstallAndVerify = version => // run `dotnet --info` after install, to check that it executes successfully diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNetCliInvoker.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNetCliInvoker.cs index 45f69a1fdfcd..4c4e789973ca 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNetCliInvoker.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNetCliInvoker.cs @@ -57,15 +57,21 @@ private ProcessStartInfo MakeDotnetStartInfo(string args, string? workingDirecto return startInfo; } - private bool RunCommandAux(string args, string? workingDirectory, out IList output, bool silent) + private int RunCommandExitCodeAux(string args, string? workingDirectory, out IList output, out string dirLog, bool silent) { - var dirLog = string.IsNullOrWhiteSpace(workingDirectory) ? "" : $" in {workingDirectory}"; + dirLog = string.IsNullOrWhiteSpace(workingDirectory) ? "" : $" in {workingDirectory}"; var pi = MakeDotnetStartInfo(args, workingDirectory); var threadId = Environment.CurrentManagedThreadId; void onOut(string s) => logger.Log(silent ? Severity.Debug : Severity.Info, s, threadId); void onError(string s) => logger.LogError(s, threadId); logger.LogInfo($"Running '{Exec} {args}'{dirLog}"); var exitCode = pi.ReadOutput(out output, onOut, onError); + return exitCode; + } + + private bool RunCommandAux(string args, string? workingDirectory, out IList output, bool silent) + { + var exitCode = RunCommandExitCodeAux(args, workingDirectory, out output, out var dirLog, silent); if (exitCode != 0) { logger.LogError($"Command '{Exec} {args}'{dirLog} failed with exit code {exitCode}"); @@ -77,6 +83,9 @@ private bool RunCommandAux(string args, string? workingDirectory, out IList RunCommandAux(args, null, out _, silent); + public int RunCommandExitCode(string args, bool silent = true) => + RunCommandExitCodeAux(args, null, out _, out _, silent); + public bool RunCommand(string args, out IList output, bool silent = true) => RunCommandAux(args, null, out output, silent); diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNetVersion.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNetVersion.cs index b4273d02b77a..31a4ac2292dc 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNetVersion.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNetVersion.cs @@ -1,24 +1,16 @@ using System; using System.IO; +using NuGet.Versioning; namespace Semmle.Extraction.CSharp.DependencyFetching { internal record DotNetVersion : IComparable { private readonly string dir; - private readonly Version version; - private readonly Version? preReleaseVersion; - private readonly string? preReleaseVersionType; - private bool IsPreRelease => preReleaseVersionType is not null && preReleaseVersion is not null; + private readonly NuGetVersion version; - private string FullVersion - { - get - { - var preRelease = IsPreRelease ? $"-{preReleaseVersionType}.{preReleaseVersion}" : ""; - return this.version + preRelease; - } - } + private string FullVersion => + version.ToString(); public string FullPath => Path.Combine(dir, FullVersion); @@ -48,37 +40,14 @@ public string? FullPathReferenceAssemblies } - public DotNetVersion(string dir, string version, string preReleaseVersionType, string preReleaseVersion) + public DotNetVersion(string dir, NuGetVersion version) { this.dir = dir; - this.version = Version.Parse(version); - if (!string.IsNullOrEmpty(preReleaseVersion) && !string.IsNullOrEmpty(preReleaseVersionType)) - { - this.preReleaseVersionType = preReleaseVersionType; - this.preReleaseVersion = Version.Parse(preReleaseVersion); - } + this.version = version; } - public int CompareTo(DotNetVersion? other) - { - var c = version.CompareTo(other?.version); - if (c == 0 && IsPreRelease) - { - if (!other!.IsPreRelease) - { - return -1; - } - - // Both are pre-release like runtime versions. - // The pre-release version types are sorted alphabetically (e.g. alpha, beta, preview, rc) - // and the pre-release version types are more important that the pre-release version numbers. - return preReleaseVersionType != other!.preReleaseVersionType - ? preReleaseVersionType!.CompareTo(other!.preReleaseVersionType) - : preReleaseVersion!.CompareTo(other!.preReleaseVersion); - } - - return c; - } + public int CompareTo(DotNetVersion? other) => + version.CompareTo(other?.version); public override string ToString() => FullPath; } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FilePathFilter.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FilePathFilter.cs index 1a1e9934e8c8..e33e6703b439 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FilePathFilter.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FilePathFilter.cs @@ -55,12 +55,12 @@ public IEnumerable Filter(IEnumerable files) } else { - logger.LogInfo($"Invalid filter: {filter}"); + logger.LogWarning($"Invalid filter: {filter}"); continue; } var regex = new FilePattern(filterText).RegexPattern; - logger.LogInfo($"Filtering {(include ? "in" : "out")} files matching '{regex}'. Original glob filter: '{filter}'"); + logger.LogDebug($"Filtering {(include ? "in" : "out")} files matching '{regex}'. Original glob filter: '{filter}'"); pathFilters.Add(new PathFilter(new Regex(regex, RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline), include)); } @@ -91,7 +91,7 @@ public IEnumerable Filter(IEnumerable files) if (!include) { - logger.LogInfo($"Excluding '{f.FileInfo.FullName}'"); + logger.LogDebug($"Excluding '{f.FileInfo.FullName}'"); } return include; diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNetCliInvoker.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNetCliInvoker.cs index 3a599afe96d7..61d0ea4260db 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNetCliInvoker.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNetCliInvoker.cs @@ -30,6 +30,12 @@ internal interface IDotNetCliInvoker /// bool RunCommand(string args, bool silent = true); + /// + /// Execute `dotnet ` and return the exit code. + /// If `silent` is true the output of the command is logged as `debug` otherwise as `info`. + /// + int RunCommandExitCode(string args, bool silent = true); + /// /// Execute `dotnet ` and return true if the command succeeded, otherwise false. /// The output of the command is returned in `output`. diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs index e2e548a46a96..29cec8a0e339 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs @@ -10,6 +10,7 @@ using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; +using NuGet.Versioning; using Semmle.Util; using Semmle.Util.Logging; @@ -87,11 +88,22 @@ public string GetNewestNugetPackageVersionFolder(string packagePath, string pack return selectedFrameworkFolder; } - public static DirectoryInfo[] GetOrderedPackageVersionSubDirectories(string packagePath) + public DirectoryInfo[] GetOrderedPackageVersionSubDirectories(string packagePath) { + // Only consider directories with valid NuGet version names. return new DirectoryInfo(packagePath) .EnumerateDirectories("*", new EnumerationOptions { MatchCasing = MatchCasing.CaseInsensitive, RecurseSubdirectories = false }) - .OrderByDescending(d => d.Name) // TODO: Improve sorting to handle pre-release versions. + .SelectMany(d => + { + if (NuGetVersion.TryParse(d.Name, out var version)) + { + return new[] { new { Directory = d, NuGetVersion = version } }; + } + logger.LogInfo($"Ignoring package directory '{d.FullName}' as it does not have a valid NuGet version name."); + return []; + }) + .OrderByDescending(dw => dw.NuGetVersion) + .Select(dw => dw.Directory) .ToArray(); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs index a489ec504c45..64c835d27fcc 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Runtime.InteropServices; using System.Text.RegularExpressions; +using NuGet.Versioning; using Semmle.Util; using Semmle.Util.Logging; @@ -27,7 +28,7 @@ public Runtime(IDotNet dotNet) this.newestRuntimes = new(GetNewestRuntimes); } - [GeneratedRegex(@"^(\S+)\s(\d+\.\d+\.\d+)(-([a-z]+)\.(\d+\.\d+\.\d+))?\s\[(.+)\]$")] + [GeneratedRegex(@"^(\S+)\s(\d+\.\d+\.\d+(-[a-z]+\.\d+\.\d+\.\d+)?)\s\[(.+)\]$")] private static partial Regex RuntimeRegex(); /// @@ -44,9 +45,9 @@ private static Dictionary ParseRuntimes(IList lis listed.ForEach(r => { var match = regex.Match(r); - if (match.Success) + if (match.Success && NuGetVersion.TryParse(match.Groups[2].Value, out var version)) { - runtimes.AddOrUpdateToLatest(match.Groups[1].Value, new DotNetVersion(match.Groups[6].Value, match.Groups[2].Value, match.Groups[4].Value, match.Groups[5].Value)); + runtimes.AddOrUpdateToLatest(match.Groups[1].Value, new DotNetVersion(match.Groups[4].Value, version)); } }); diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Sdk.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Sdk.cs index 848350bce982..c4d1ba9ac087 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Sdk.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Sdk.cs @@ -3,6 +3,7 @@ using System.IO; using System.Linq; using System.Text.RegularExpressions; +using NuGet.Versioning; using Semmle.Util; using Semmle.Util.Logging; @@ -27,7 +28,7 @@ public Sdk(IDotNet dotNet, ILogger logger) cscPath = new Lazy(GetCscPath); } - [GeneratedRegex(@"^(\d+\.\d+\.\d+)(-([a-z]+)\.(\d+\.\d+\.\d+))?\s\[(.+)\]$")] + [GeneratedRegex(@"^(\d+\.\d+\.\d+(-[a-z]+\.\d+\.\d+\.\d+)?)\s\[(.+)\]$")] private static partial Regex SdkRegex(); private static HashSet ParseSdks(IList listed) @@ -37,9 +38,9 @@ private static HashSet ParseSdks(IList listed) listed.ForEach(r => { var match = regex.Match(r); - if (match.Success) + if (match.Success && NuGetVersion.TryParse(match.Groups[1].Value, out var version)) { - sdks.Add(new DotNetVersion(match.Groups[5].Value, match.Groups[1].Value, match.Groups[3].Value, match.Groups[4].Value)); + sdks.Add(new DotNetVersion(match.Groups[3].Value, version)); } }); @@ -73,4 +74,4 @@ private static HashSet ParseSdks(IList listed) return path; } } -} \ No newline at end of file +} diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/paket.references b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/paket.references index 99e44f5d76ed..f4c783b379aa 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/paket.references +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/paket.references @@ -1 +1,2 @@ Newtonsoft.Json +NuGet.Versioning diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/Semmle.Extraction.CSharp.DependencyStubGenerator.csproj b/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/Semmle.Extraction.CSharp.DependencyStubGenerator.csproj index 9ec282989508..2f05a1f9fe44 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/Semmle.Extraction.CSharp.DependencyStubGenerator.csproj +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/Semmle.Extraction.CSharp.DependencyStubGenerator.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 Semmle.Extraction.CSharp.DependencyStubGenerator Semmle.Extraction.CSharp.DependencyStubGenerator enable @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/paket.references b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/paket.references index 9a2eede6b350..ec65ce95b918 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/paket.references +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/paket.references @@ -1,5 +1 @@ Microsoft.Build -Microsoft.Win32.Primitives -System.Net.Primitives -System.Security.Principal -System.Threading.ThreadPool diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Constructor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Constructor.cs index 2c3b25b2e1c4..14d9b5480151 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Constructor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Constructor.cs @@ -74,6 +74,7 @@ protected override void ExtractInitializers(TextWriter trapFile) { case SyntaxKind.BaseConstructorInitializer: initializerType = Symbol.ContainingType.BaseType!; + ExtractObjectInitCall(trapFile); break; case SyntaxKind.ThisConstructorInitializer: initializerType = Symbol.ContainingType; @@ -90,10 +91,12 @@ protected override void ExtractInitializers(TextWriter trapFile) var primaryInfo = Context.GetSymbolInfo(primaryInitializer); var primarySymbol = primaryInfo.Symbol; + ExtractObjectInitCall(trapFile); ExtractSourceInitializer(trapFile, primarySymbol?.ContainingType, (IMethodSymbol?)primarySymbol, primaryInitializer.ArgumentList, primaryInitializer.GetLocation()); } else if (Symbol.MethodKind is MethodKind.Constructor) { + ExtractObjectInitCall(trapFile); var baseType = Symbol.ContainingType.BaseType; if (baseType is null) { @@ -127,6 +130,27 @@ protected override void ExtractInitializers(TextWriter trapFile) } } + private void ExtractObjectInitCall(TextWriter trapFile) + { + var target = ObjectInitMethod.Create(Context, ContainingType!); + + var type = Context.Compilation.GetSpecialType(SpecialType.System_Void); + + var info = new ExpressionInfo(Context, + AnnotatedTypeSymbol.CreateNotAnnotated(type), + Location, + Kinds.ExprKind.METHOD_INVOCATION, + this, + -2, + isCompilerGenerated: true, + null); + var obinitCall = new Expression(info); + + trapFile.expr_call(obinitCall, target); + + Expressions.This.CreateImplicit(Context, Symbol.ContainingType, Location, obinitCall, -1); + } + private void ExtractSourceInitializer(TextWriter trapFile, ITypeSymbol? type, IMethodSymbol? symbol, ArgumentListSyntax arguments, Microsoft.CodeAnalysis.Location location) { var initInfo = new ExpressionInfo(Context, diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/IMethodEntity.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/IMethodEntity.cs new file mode 100644 index 000000000000..278f2b18798e --- /dev/null +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/IMethodEntity.cs @@ -0,0 +1,9 @@ +namespace Semmle.Extraction.CSharp.Entities +{ + /// + /// Marker interface for method entities. + /// + public interface IMethodEntity : IEntity + { + } +} diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs index c1b0f1a65bcb..c92c561f31b6 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs @@ -9,7 +9,7 @@ namespace Semmle.Extraction.CSharp.Entities { - internal abstract class Method : CachedSymbol, IExpressionParentEntity, IStatementParentEntity + internal abstract class Method : CachedSymbol, IExpressionParentEntity, IStatementParentEntity, IMethodEntity { protected Method(Context cx, IMethodSymbol init) : base(cx, init) { } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/ObjectInitMethod.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/ObjectInitMethod.cs new file mode 100644 index 000000000000..81c08ec35d55 --- /dev/null +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/ObjectInitMethod.cs @@ -0,0 +1,56 @@ +using System.IO; +using Microsoft.CodeAnalysis; + +namespace Semmle.Extraction.CSharp.Entities +{ + internal sealed class ObjectInitMethod : CachedEntity, IMethodEntity + { + private Type ContainingType { get; } + + private ObjectInitMethod(Context cx, Type containingType) + : base(cx) + { + this.ContainingType = containingType; + } + + private static readonly string Name = ""; + + public static ObjectInitMethod Create(Context cx, Type containingType) + { + return ObjectInitMethodFactory.Instance.CreateEntity(cx, (typeof(ObjectInitMethod), containingType), containingType); + } + + public override void Populate(TextWriter trapFile) + { + var returnType = Type.Create(Context, Context.Compilation.GetSpecialType(SpecialType.System_Void)); + + trapFile.methods(this, Name, ContainingType, returnType.TypeRef, this); + + trapFile.compiler_generated(this); + + trapFile.method_location(this, Context.CreateLocation(ReportingLocation)); + } + + public override void WriteId(EscapingTextWriter trapFile) + { + trapFile.WriteSubId(ContainingType); + trapFile.Write("."); + trapFile.Write(Name); + trapFile.Write(";method"); + } + + public override Microsoft.CodeAnalysis.Location? ReportingLocation => ContainingType.ReportingLocation; + + public override bool NeedsPopulation => true; + + public override TrapStackBehaviour TrapStackBehaviour => TrapStackBehaviour.NoLabel; + + private class ObjectInitMethodFactory : CachedEntityFactory + { + public static ObjectInitMethodFactory Instance { get; } = new ObjectInitMethodFactory(); + + public override ObjectInitMethod Create(Context cx, Type containingType) => + new ObjectInitMethod(cx, containingType); + } + } +} diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Trap/Tuples.cs b/csharp/extractor/Semmle.Extraction.CSharp/Trap/Tuples.cs index 8960b6adb67f..b789eaa2e9c7 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Trap/Tuples.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Trap/Tuples.cs @@ -175,7 +175,7 @@ internal static void expr_argument(this TextWriter trapFile, Expression expr, in internal static void expr_argument_name(this TextWriter trapFile, Expression expr, string name) => trapFile.WriteTuple("expr_argument_name", expr, name); - internal static void expr_call(this TextWriter trapFile, Expression expr, Method target) => + internal static void expr_call(this TextWriter trapFile, Expression expr, IMethodEntity target) => trapFile.WriteTuple("expr_call", expr, target); internal static void expr_flowstate(this TextWriter trapFile, Expression expr, int flowState) => @@ -247,10 +247,10 @@ internal static void localvar_location(this TextWriter trapFile, LocalVariable v internal static void localvars(this TextWriter trapFile, LocalVariable key, VariableKind kind, string name, int @var, Type type, Expression expr) => trapFile.WriteTuple("localvars", key, (int)kind, name, @var, type, expr); - internal static void method_location(this TextWriter trapFile, Method method, Location location) => + internal static void method_location(this TextWriter trapFile, IMethodEntity method, Location location) => trapFile.WriteTuple("method_location", method, location); - internal static void methods(this TextWriter trapFile, Method method, string name, Type declType, Type retType, Method originalDefinition) => + internal static void methods(this TextWriter trapFile, IMethodEntity method, string name, Type declType, Type retType, IMethodEntity originalDefinition) => trapFile.WriteTuple("methods", method, name, declType, retType, originalDefinition); internal static void modifiers(this TextWriter trapFile, Label entity, string modifier) => diff --git a/csharp/extractor/Semmle.Extraction.Tests/BUILD.bazel b/csharp/extractor/Semmle.Extraction.Tests/BUILD.bazel index 4d13f7f4fb82..2b27e4048ba9 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/BUILD.bazel +++ b/csharp/extractor/Semmle.Extraction.Tests/BUILD.bazel @@ -16,6 +16,5 @@ codeql_xunit_test( "//csharp/extractor/Semmle.Extraction.CSharp.StubGenerator", "//csharp/extractor/Semmle.Util", "@paket.main//microsoft.net.test.sdk", - "@paket.main//system.io.filesystem", ], ) diff --git a/csharp/extractor/Semmle.Extraction.Tests/DotNet.cs b/csharp/extractor/Semmle.Extraction.Tests/DotNet.cs index 904ad04ce82f..a2996497e005 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/DotNet.cs +++ b/csharp/extractor/Semmle.Extraction.Tests/DotNet.cs @@ -12,6 +12,7 @@ internal class DotNetCliInvokerStub : IDotNetCliInvoker private string lastArgs = ""; public string WorkingDirectory { get; private set; } = ""; public bool Success { get; set; } = true; + public int ExitCode { get; set; } = 0; public DotNetCliInvokerStub(IList output) { @@ -26,6 +27,12 @@ public bool RunCommand(string args, bool silent) return Success; } + public int RunCommandExitCode(string args, bool silent) + { + lastArgs = args; + return ExitCode; + } + public bool RunCommand(string args, out IList output, bool silent) { lastArgs = args; @@ -83,7 +90,7 @@ public void TestDotnetInfo() public void TestDotnetInfoFailure() { // Setup - var dotnetCliInvoker = new DotNetCliInvokerStub(new List()) { Success = false }; + var dotnetCliInvoker = new DotNetCliInvokerStub(new List()) { ExitCode = 1 }; // Execute try @@ -94,7 +101,7 @@ public void TestDotnetInfoFailure() // Verify catch (Exception e) { - Assert.Equal("dotnet --info failed.", e.Message); + Assert.Equal("dotnet --info failed with exit code 1.", e.Message); return; } Assert.Fail("Expected exception"); diff --git a/csharp/extractor/Semmle.Extraction.Tests/paket.references b/csharp/extractor/Semmle.Extraction.Tests/paket.references index 83bb87685b19..0582094502ab 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/paket.references +++ b/csharp/extractor/Semmle.Extraction.Tests/paket.references @@ -1,4 +1,3 @@ -System.IO.FileSystem xunit xunit.runner.visualstudio Microsoft.NET.Test.Sdk diff --git a/csharp/paket.dependencies b/csharp/paket.dependencies index cd2ac36422bc..32f495954dc1 100644 --- a/csharp/paket.dependencies +++ b/csharp/paket.dependencies @@ -1,21 +1,17 @@ -framework: net9.0 +framework: net10.0 storage: none source https://api.nuget.org/v3/index.json # behave like nuget in choosing transitive dependency versions strategy: max -nuget Basic.CompilerLog.Util 0.9.21 +nuget Basic.CompilerLog.Util 0.9.25 nuget Mono.Posix.NETStandard nuget Newtonsoft.Json +nuget NuGet.Versioning nuget xunit nuget xunit.runner.visualstudio nuget xunit.runner.utility nuget Microsoft.NET.Test.Sdk -nuget Microsoft.CodeAnalysis.CSharp 4.14.0 -nuget Microsoft.CodeAnalysis 4.14.0 -nuget Microsoft.Build 17.14.28 -nuget Microsoft.Win32.Primitives -nuget System.Net.Primitives -nuget System.Security.Principal -nuget System.Threading.ThreadPool -nuget System.IO.FileSystem +nuget Microsoft.CodeAnalysis.CSharp 5.0.0 +nuget Microsoft.CodeAnalysis 5.0.0 +nuget Microsoft.Build 18.0.2 diff --git a/csharp/paket.lock b/csharp/paket.lock index d503e19d87df..f0226edbbd59 100644 --- a/csharp/paket.lock +++ b/csharp/paket.lock @@ -1,9 +1,9 @@ STORAGE: NONE STRATEGY: MAX -RESTRICTION: == net9.0 +RESTRICTION: == net10.0 NUGET remote: https://api.nuget.org/v3/index.json - Basic.CompilerLog.Util (0.9.21) + Basic.CompilerLog.Util (0.9.25) MessagePack (>= 3.1.4) Microsoft.Bcl.Memory (>= 9.0.10) Microsoft.CodeAnalysis (>= 4.8) @@ -12,197 +12,132 @@ NUGET Microsoft.Extensions.ObjectPool (>= 9.0.10) MSBuild.StructuredLogger (>= 2.3.71) NaturalSort.Extension (>= 4.4) - Humanizer.Core (2.14.1) + NuGet.Versioning (>= 6.14) + Humanizer.Core (3.0.1) MessagePack (3.1.4) MessagePack.Annotations (>= 3.1.4) MessagePackAnalyzer (>= 3.1.4) Microsoft.NET.StringTools (>= 17.11.4) MessagePack.Annotations (3.1.4) MessagePackAnalyzer (3.1.4) - Microsoft.Bcl.AsyncInterfaces (9.0.10) - Microsoft.Bcl.Memory (9.0.10) - Microsoft.Build (17.14.28) - Microsoft.Build.Framework (>= 17.14.28) - Microsoft.NET.StringTools (>= 17.14.28) + Microsoft.Bcl.AsyncInterfaces (10.0) + Microsoft.Bcl.Memory (10.0) + Microsoft.Build (18.0.2) + Microsoft.Build.Framework (>= 18.0.2) + Microsoft.NET.StringTools (>= 18.0.2) System.Configuration.ConfigurationManager (>= 9.0) System.Diagnostics.EventLog (>= 9.0) System.Reflection.MetadataLoadContext (>= 9.0) - System.Security.Cryptography.ProtectedData (>= 9.0) - Microsoft.Build.Framework (17.14.28) - Microsoft.Build.Utilities.Core (17.14.28) - Microsoft.Build.Framework (>= 17.14.28) - Microsoft.NET.StringTools (>= 17.14.28) - System.Collections.Immutable (>= 9.0) + System.Security.Cryptography.ProtectedData (>= 9.0.6) + Microsoft.Build.Framework (18.0.2) + Microsoft.Build.Utilities.Core (18.0.2) + Microsoft.Build.Framework (>= 18.0.2) + Microsoft.NET.StringTools (>= 18.0.2) System.Configuration.ConfigurationManager (>= 9.0) System.Diagnostics.EventLog (>= 9.0) - System.Security.Cryptography.ProtectedData (>= 9.0) - Microsoft.CodeAnalysis (4.14) + System.Security.Cryptography.ProtectedData (>= 9.0.6) + Microsoft.CodeAnalysis (5.0) Humanizer.Core (>= 2.14.1) Microsoft.Bcl.AsyncInterfaces (>= 9.0) Microsoft.CodeAnalysis.Analyzers (>= 3.11) - Microsoft.CodeAnalysis.CSharp.Workspaces (4.14) - Microsoft.CodeAnalysis.VisualBasic.Workspaces (4.14) - System.Buffers (>= 4.5.1) + Microsoft.CodeAnalysis.CSharp.Workspaces (5.0) + Microsoft.CodeAnalysis.VisualBasic.Workspaces (5.0) + System.Buffers (>= 4.6) System.Collections.Immutable (>= 9.0) System.Composition (>= 9.0) System.IO.Pipelines (>= 9.0) - System.Memory (>= 4.5.5) - System.Numerics.Vectors (>= 4.5) + System.Memory (>= 4.6) + System.Numerics.Vectors (>= 4.6) System.Reflection.Metadata (>= 9.0) - System.Runtime.CompilerServices.Unsafe (>= 6.0) - System.Text.Encoding.CodePages (>= 7.0) - System.Threading.Channels (>= 7.0) - System.Threading.Tasks.Extensions (>= 4.5.4) + System.Runtime.CompilerServices.Unsafe (>= 6.1) + System.Text.Encoding.CodePages (>= 8.0) + System.Threading.Channels (>= 8.0) + System.Threading.Tasks.Extensions (>= 4.6) Microsoft.CodeAnalysis.Analyzers (3.11) - Microsoft.CodeAnalysis.Common (4.14) + Microsoft.CodeAnalysis.Common (5.0) Microsoft.CodeAnalysis.Analyzers (>= 3.11) - System.Collections.Immutable (>= 9.0) - System.Reflection.Metadata (>= 9.0) - Microsoft.CodeAnalysis.CSharp (4.14) + Microsoft.CodeAnalysis.CSharp (5.0) Microsoft.CodeAnalysis.Analyzers (>= 3.11) - Microsoft.CodeAnalysis.Common (4.14) - System.Collections.Immutable (>= 9.0) - System.Reflection.Metadata (>= 9.0) - Microsoft.CodeAnalysis.CSharp.Workspaces (4.14) + Microsoft.CodeAnalysis.Common (5.0) + Microsoft.CodeAnalysis.CSharp.Workspaces (5.0) Humanizer.Core (>= 2.14.1) Microsoft.CodeAnalysis.Analyzers (>= 3.11) - Microsoft.CodeAnalysis.Common (4.14) - Microsoft.CodeAnalysis.CSharp (4.14) - Microsoft.CodeAnalysis.Workspaces.Common (4.14) - System.Collections.Immutable (>= 9.0) + Microsoft.CodeAnalysis.Common (5.0) + Microsoft.CodeAnalysis.CSharp (5.0) + Microsoft.CodeAnalysis.Workspaces.Common (5.0) System.Composition (>= 9.0) - System.IO.Pipelines (>= 9.0) - System.Reflection.Metadata (>= 9.0) - System.Threading.Channels (>= 7.0) - Microsoft.CodeAnalysis.VisualBasic (4.14) + Microsoft.CodeAnalysis.VisualBasic (5.0) Microsoft.CodeAnalysis.Analyzers (>= 3.11) - Microsoft.CodeAnalysis.Common (4.14) - System.Collections.Immutable (>= 9.0) - System.Reflection.Metadata (>= 9.0) - Microsoft.CodeAnalysis.VisualBasic.Workspaces (4.14) + Microsoft.CodeAnalysis.Common (5.0) + Microsoft.CodeAnalysis.VisualBasic.Workspaces (5.0) Humanizer.Core (>= 2.14.1) Microsoft.CodeAnalysis.Analyzers (>= 3.11) - Microsoft.CodeAnalysis.Common (4.14) - Microsoft.CodeAnalysis.VisualBasic (4.14) - Microsoft.CodeAnalysis.Workspaces.Common (4.14) - System.Collections.Immutable (>= 9.0) + Microsoft.CodeAnalysis.Common (5.0) + Microsoft.CodeAnalysis.VisualBasic (5.0) + Microsoft.CodeAnalysis.Workspaces.Common (5.0) System.Composition (>= 9.0) - System.IO.Pipelines (>= 9.0) - System.Reflection.Metadata (>= 9.0) - System.Threading.Channels (>= 7.0) - Microsoft.CodeAnalysis.Workspaces.Common (4.14) + Microsoft.CodeAnalysis.Workspaces.Common (5.0) Humanizer.Core (>= 2.14.1) Microsoft.CodeAnalysis.Analyzers (>= 3.11) - Microsoft.CodeAnalysis.Common (4.14) - System.Collections.Immutable (>= 9.0) + Microsoft.CodeAnalysis.Common (5.0) System.Composition (>= 9.0) - System.IO.Pipelines (>= 9.0) - System.Reflection.Metadata (>= 9.0) - System.Threading.Channels (>= 7.0) - Microsoft.CodeCoverage (18.0) - Microsoft.Extensions.ObjectPool (9.0.10) - Microsoft.NET.StringTools (17.14.28) - Microsoft.NET.Test.Sdk (18.0) - Microsoft.CodeCoverage (>= 18.0) - Microsoft.TestPlatform.TestHost (>= 18.0) - Microsoft.NETCore.Platforms (7.0.4) - Microsoft.NETCore.Targets (5.0) - Microsoft.TestPlatform.ObjectModel (18.0) + Microsoft.CodeCoverage (18.0.1) + Microsoft.Extensions.ObjectPool (10.0) + Microsoft.NET.StringTools (18.0.2) + Microsoft.NET.Test.Sdk (18.0.1) + Microsoft.CodeCoverage (>= 18.0.1) + Microsoft.TestPlatform.TestHost (>= 18.0.1) + Microsoft.TestPlatform.ObjectModel (18.0.1) System.Reflection.Metadata (>= 8.0) - Microsoft.TestPlatform.TestHost (18.0) - Microsoft.TestPlatform.ObjectModel (>= 18.0) + Microsoft.TestPlatform.TestHost (18.0.1) + Microsoft.TestPlatform.ObjectModel (>= 18.0.1) Newtonsoft.Json (>= 13.0.3) - Microsoft.Win32.Primitives (4.3) - Microsoft.NETCore.Platforms (>= 1.1) - Microsoft.NETCore.Targets (>= 1.1) - System.Runtime (>= 4.3) Mono.Posix.NETStandard (1.0) - MSBuild.StructuredLogger (2.3.71) + MSBuild.StructuredLogger (2.3.113) Microsoft.Build.Framework (>= 17.5) Microsoft.Build.Utilities.Core (>= 17.5) System.Collections.Immutable (>= 8.0) - NaturalSort.Extension (4.4) + NaturalSort.Extension (4.4.1) Newtonsoft.Json (13.0.4) + NuGet.Versioning (7.0.1) System.Buffers (4.6.1) - System.Collections.Immutable (9.0.10) - System.Composition (9.0.10) - System.Composition.AttributedModel (>= 9.0.10) - System.Composition.Convention (>= 9.0.10) - System.Composition.Hosting (>= 9.0.10) - System.Composition.Runtime (>= 9.0.10) - System.Composition.TypedParts (>= 9.0.10) - System.Composition.AttributedModel (9.0.10) - System.Composition.Convention (9.0.10) - System.Composition.AttributedModel (>= 9.0.10) - System.Composition.Hosting (9.0.10) - System.Composition.Runtime (>= 9.0.10) - System.Composition.Runtime (9.0.10) - System.Composition.TypedParts (9.0.10) - System.Composition.AttributedModel (>= 9.0.10) - System.Composition.Hosting (>= 9.0.10) - System.Composition.Runtime (>= 9.0.10) - System.Configuration.ConfigurationManager (9.0.10) - System.Diagnostics.EventLog (>= 9.0.10) - System.Security.Cryptography.ProtectedData (>= 9.0.10) - System.Diagnostics.EventLog (9.0.10) - System.IO (4.3) - Microsoft.NETCore.Platforms (>= 1.1) - Microsoft.NETCore.Targets (>= 1.1) - System.Runtime (>= 4.3) - System.Text.Encoding (>= 4.3) - System.Threading.Tasks (>= 4.3) - System.IO.FileSystem (4.3) - Microsoft.NETCore.Platforms (>= 1.1) - Microsoft.NETCore.Targets (>= 1.1) - System.IO (>= 4.3) - System.IO.FileSystem.Primitives (>= 4.3) - System.Runtime (>= 4.3) - System.Runtime.Handles (>= 4.3) - System.Text.Encoding (>= 4.3) - System.Threading.Tasks (>= 4.3) - System.IO.FileSystem.Primitives (4.3) - System.Runtime (>= 4.3) - System.IO.Pipelines (9.0.10) + System.Collections.Immutable (10.0) + System.Composition (10.0) + System.Composition.AttributedModel (>= 10.0) + System.Composition.Convention (>= 10.0) + System.Composition.Hosting (>= 10.0) + System.Composition.Runtime (>= 10.0) + System.Composition.TypedParts (>= 10.0) + System.Composition.AttributedModel (10.0) + System.Composition.Convention (10.0) + System.Composition.AttributedModel (>= 10.0) + System.Composition.Hosting (10.0) + System.Composition.Runtime (>= 10.0) + System.Composition.Runtime (10.0) + System.Composition.TypedParts (10.0) + System.Composition.AttributedModel (>= 10.0) + System.Composition.Hosting (>= 10.0) + System.Composition.Runtime (>= 10.0) + System.Configuration.ConfigurationManager (10.0) + System.Diagnostics.EventLog (>= 10.0) + System.Security.Cryptography.ProtectedData (>= 10.0) + System.Diagnostics.EventLog (10.0) + System.IO.Pipelines (10.0) System.Memory (4.6.3) - System.Net.Primitives (4.3.1) - Microsoft.NETCore.Platforms (>= 1.1.1) - Microsoft.NETCore.Targets (>= 1.1.3) - System.Runtime (>= 4.3.1) - System.Runtime.Handles (>= 4.3) System.Numerics.Vectors (4.6.1) - System.Reflection.Metadata (9.0.10) - System.Reflection.MetadataLoadContext (9.0.10) - System.Runtime (4.3.1) - Microsoft.NETCore.Platforms (>= 1.1.1) - Microsoft.NETCore.Targets (>= 1.1.3) + System.Reflection.Metadata (10.0) + System.Reflection.MetadataLoadContext (10.0) System.Runtime.CompilerServices.Unsafe (6.1.2) - System.Runtime.Handles (4.3) - Microsoft.NETCore.Platforms (>= 1.1) - Microsoft.NETCore.Targets (>= 1.1) - System.Runtime (>= 4.3) - System.Security.Cryptography.ProtectedData (9.0.10) - System.Security.Principal (4.3) - System.Runtime (>= 4.3) - System.Text.Encoding (4.3) - Microsoft.NETCore.Platforms (>= 1.1) - Microsoft.NETCore.Targets (>= 1.1) - System.Runtime (>= 4.3) - System.Text.Encoding.CodePages (9.0.10) - System.Threading.Channels (9.0.10) - System.Threading.Tasks (4.3) - Microsoft.NETCore.Platforms (>= 1.1) - Microsoft.NETCore.Targets (>= 1.1) - System.Runtime (>= 4.3) + System.Security.Cryptography.ProtectedData (10.0) + System.Text.Encoding.CodePages (10.0) + System.Threading.Channels (10.0) System.Threading.Tasks.Extensions (4.6.3) - System.Threading.ThreadPool (4.3) - System.Runtime (>= 4.3) - System.Runtime.Handles (>= 4.3) xunit (2.9.3) xunit.analyzers (>= 1.18) xunit.assert (>= 2.9.3) xunit.core (2.9.3) xunit.abstractions (2.0.3) - xunit.analyzers (1.24) + xunit.analyzers (1.26) xunit.assert (2.9.3) xunit.core (2.9.3) xunit.extensibility.core (2.9.3) diff --git a/csharp/paket.main.bzl b/csharp/paket.main.bzl index 1ef6f63df8f4..a9112bfda739 100644 --- a/csharp/paket.main.bzl +++ b/csharp/paket.main.bzl @@ -7,75 +7,63 @@ def main(): nuget_repo( name = "paket.main", packages = [ - {"name": "Basic.CompilerLog.Util", "id": "Basic.CompilerLog.Util", "version": "0.9.21", "sha512": "sha512-l+Qbzh3nVaLLwZYgv/v5zIEdprseLgxcprHBvbNBzOyer7m6XD/N5GJC+FPChnSP48kK1/p7Nj7mvQH8d5NOtA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net462": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net47": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net471": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net472": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net48": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net5.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net6.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net7.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net8.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension"], "net9.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "netcoreapp2.1": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "netcoreapp2.2": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "netcoreapp3.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "netcoreapp3.1": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "netstandard2.1": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Humanizer.Core", "id": "Humanizer.Core", "version": "2.14.1", "sha512": "sha512-yzqGU/HKNLZ9Uvr6kvSc3wYV/S5O/IvklIUW5WF7MuivGLY8wS5IZnLPkt7D1KW8Et2Enl0I3Lzg2vGWM24Xsw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "MessagePack", "id": "MessagePack", "version": "3.1.4", "sha512": "sha512-O0JoklM97ru+Rqr1hGnlCbSAxi8MOk48pwoaT458RzboCHuAkQWTh+Of9MUoN3LE0Cb2tapku0FRPt2hnk+o0g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net48": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net5.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "net6.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "net7.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "net8.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools"], "net9.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "netcoreapp3.1": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "MessagePack.Annotations", "id": "MessagePack.Annotations", "version": "3.1.4", "sha512": "sha512-kIgD3A0OHs8+VUabMhIJT9ZF4oGHqjCocaRDmERI/Ds2hzJ5q3kcvzn5zI7V3CJ2NlQ4HDI80uh6zCqglwgQCQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "MessagePackAnalyzer", "id": "MessagePackAnalyzer", "version": "3.1.4", "sha512": "sha512-DFlhiA5fia4iK6i0S+L7sYMYmo5XRgWydKxiaxwz7tfcbvIhU7nmG4JzN1D9Y2XCEmLNExvNwTzXVEgURu4GnA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.Bcl.AsyncInterfaces", "id": "Microsoft.Bcl.AsyncInterfaces", "version": "9.0.10", "sha512": "sha512-Di823U3L+0A2YQGU1HqJC7Gh8o/nuSXle5u6QDgho9s920QbVk6BS5fKJ0s+pzW+WbqM9+aPUQ2DJsfP6tLdKg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Threading.Tasks.Extensions"], "net462": ["System.Threading.Tasks.Extensions"], "net47": ["System.Threading.Tasks.Extensions"], "net471": ["System.Threading.Tasks.Extensions"], "net472": ["System.Threading.Tasks.Extensions"], "net48": ["System.Threading.Tasks.Extensions"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["System.Threading.Tasks.Extensions"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Threading.Tasks.Extensions"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.Bcl.Memory", "id": "Microsoft.Bcl.Memory", "version": "9.0.10", "sha512": "sha512-BZV+TVnrDf9O+Ak5gN47uOkECCtpiVq6MpEYX5lQcG1WFD6/Bnx5eyfueX9giDQPEk6azzhSPTGmJcWNXRBc+Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Runtime.CompilerServices.Unsafe"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.Build", "id": "Microsoft.Build", "version": "17.14.28", "sha512": "sha512-/J3DY36eYjSi/NYf/m4fS4HlxN8Zy+bCsopJUN0j4NNnrws4NR9ueWd0HKyhWEYYUa29Q1kjG1uKSGN1jBWg4g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Memory", "System.Reflection.MetadataLoadContext", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Memory", "System.Reflection.MetadataLoadContext", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Configuration.ConfigurationManager", "System.Reflection.MetadataLoadContext", "System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.Build.Framework", "id": "Microsoft.Build.Framework", "version": "17.14.28", "sha512": "sha512-Gj4C8LNilfH6u6xu7QI/y0tkJCp3yQQpde/3qeK8E2FOfrZ4ENOoG/r2eKZws15bN6HPj09PhaJoqBhdbJdLpA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Runtime.CompilerServices.Unsafe", "System.Memory", "System.Threading.Tasks.Extensions"], "net48": ["System.Runtime.CompilerServices.Unsafe", "System.Memory", "System.Threading.Tasks.Extensions"], "net5.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.Build.Utilities.Core", "id": "Microsoft.Build.Utilities.Core", "version": "17.14.28", "sha512": "sha512-A5uyO5HysGJRFR3IjjVKJ0Y69USn3E5Vlt/h51yID5Ynts4zHdh5ZELeU1gCoeF8i3tE21gO2u+QQLqQlb/iUg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "net462": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "net47": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "net471": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "net472": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "net6.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "net7.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "net8.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "net9.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "netcoreapp2.1": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "netcoreapp2.2": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "netcoreapp3.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "netcoreapp3.1": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "netstandard2.1": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeAnalysis", "id": "Microsoft.CodeAnalysis", "version": "4.14.0", "sha512": "sha512-eNBbL927Lc1Nh24ElWJmlGA928O9tu4mgWGOqmMFe6sskqQWCdnronCrrzwUdhBsBIjfx898MOCMOXuZQMtqOg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net9.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeAnalysis.Analyzers", "id": "Microsoft.CodeAnalysis.Analyzers", "version": "3.11.0", "sha512": "sha512-tP9SLzLK72XCExlh8KXfrKbU6ycmZL3ExGl/a3Ml7LNy2Uaam7gFjjUmdzyTYkMXTyckCHHpzx7bD6BMumh8Bg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeAnalysis.Common", "id": "Microsoft.CodeAnalysis.Common", "version": "4.14.0", "sha512": "sha512-k9AIzOrtcZVqr9+lmcEW0vY80emyXx5JB/757K0HUF96GeUeiTD+djOlFF2y7k4XPZo20Lru4tDgQos+VKBr0w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net462": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net47": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net471": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net472": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net48": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net5.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net6.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net7.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net8.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netstandard2.1": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeAnalysis.CSharp", "id": "Microsoft.CodeAnalysis.CSharp", "version": "4.14.0", "sha512": "sha512-kqS2NihVvNQHxzLePtyYiiJmFzoYO9Wm46O9DhfUgIIf5NwTbvSy66kV9EM+qAHmGpi7zQy4w8JU6DFnPlAyTA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeAnalysis.CSharp.Workspaces", "id": "Microsoft.CodeAnalysis.CSharp.Workspaces", "version": "4.14.0", "sha512": "sha512-q9VD/wqMEGW0S5WIKuTZ4Wr9EpsZJQrQxqCodxjlsfW0bWl7mOQ4zA7k0Nf80ZrEe7Edaz6+3SBvrALiUcaHzA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Reflection.Metadata", "System.Threading.Channels"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Reflection.Metadata", "System.Threading.Channels"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeAnalysis.VisualBasic", "id": "Microsoft.CodeAnalysis.VisualBasic", "version": "4.14.0", "sha512": "sha512-vXhNyQk07THoSHzsu/fM48tFFHYAZQumfT7uDJuL/5ZO4CRgJK9Zr6UOJOwX1Df8N//lRMeymYyT+qiAmnWiYA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "id": "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "version": "4.14.0", "sha512": "sha512-LZMVjjbRTcKOtgVDz/sZn+AXBNGL4iKYnWwu5eOvvRcdXaLNlOA7bYtTZOnSMlqig7b/3gMzkoaLqcJ+7hgddg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Reflection.Metadata", "System.Threading.Channels"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Reflection.Metadata", "System.Threading.Channels"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeAnalysis.Workspaces.Common", "id": "Microsoft.CodeAnalysis.Workspaces.Common", "version": "4.14.0", "sha512": "sha512-m/c+FWBNr/JgCYRJ/jh14U9oAtPxHTgDiujb+19QG1AA3KMNZed+UQ51PRSaOt9CbIoMubZp2AkUMSeioz4EHQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeCoverage", "id": "Microsoft.CodeCoverage", "version": "18.0.0", "sha512": "sha512-HT0zpIWW9Q0Csllqo7lefZ27HE6dl5gfh7NA4FPZjEURenH2GsvpRSZ63b1d3klDphxiX8bpxKwVSzyURhhgkQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.Extensions.ObjectPool", "id": "Microsoft.Extensions.ObjectPool", "version": "9.0.10", "sha512": "sha512-mx7sdMdkCBJuJQkSEaV9wQaB39+ciVUX0VCB7YrqAGvxyBkLRR0mgl9v7j4c6lVMeRZH79FgKOy1WaQbSyhVKA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.NET.StringTools", "id": "Microsoft.NET.StringTools", "version": "17.14.28", "sha512": "sha512-oJDGPNoVuWOmKTPpFK0lJnVwbLMRsm2oxgxBFOMKBYzSZtmiS0kcoednhArAeAicV2aSUFiuor1pw7JK/p2LwQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.NET.Test.Sdk", "id": "Microsoft.NET.Test.Sdk", "version": "18.0.0", "sha512": "sha512-+0iHCuP77nxZLLfEhCNDMOcy8+qC7IFtsLrSwSzp0qc7pUs2J28Stu2c+m9AEKkKdvhsMKB/AhlFOSyeOpdKVg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": ["Microsoft.CodeCoverage"], "net47": ["Microsoft.CodeCoverage"], "net471": ["Microsoft.CodeCoverage"], "net472": ["Microsoft.CodeCoverage"], "net48": ["Microsoft.CodeCoverage"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "net9.0": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.NETCore.Platforms", "id": "Microsoft.NETCore.Platforms", "version": "7.0.4", "sha512": "sha512-mcQWjuDBh4WHGG4WcBI0k025WAdA2afMm6fs42sm1f+3gRyNQUiuMVT5gAWNUGSHmlu6qn/TCnAQpfl4Gm6cBw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.NETCore.Targets", "id": "Microsoft.NETCore.Targets", "version": "5.0.0", "sha512": "sha512-hYHm3JAjQO/nySxcl1EpZhYEW+2P3H1eLZNr+QxgO5TnLS6hqtfi5WchjQzjid45MYmhy2X7IOmcWtDP4fpMGw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.TestPlatform.ObjectModel", "id": "Microsoft.TestPlatform.ObjectModel", "version": "18.0.0", "sha512": "sha512-/ShCZQuIxaxzGjRQqCYTLD/KnG1yQKsNZXDUtjO2d55IOB8FEyhXleLw2hw8QlK/1gkblyJsp4BfQ8BQFaEAlg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Reflection.Metadata"], "net462": ["System.Reflection.Metadata"], "net47": ["System.Reflection.Metadata"], "net471": ["System.Reflection.Metadata"], "net472": ["System.Reflection.Metadata"], "net48": ["System.Reflection.Metadata"], "net5.0": ["System.Reflection.Metadata"], "net6.0": ["System.Reflection.Metadata"], "net7.0": ["System.Reflection.Metadata"], "net8.0": ["System.Reflection.Metadata"], "net9.0": ["System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Reflection.Metadata"], "netcoreapp2.1": ["System.Reflection.Metadata"], "netcoreapp2.2": ["System.Reflection.Metadata"], "netcoreapp3.0": ["System.Reflection.Metadata"], "netcoreapp3.1": ["System.Reflection.Metadata"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Reflection.Metadata"], "netstandard2.1": ["System.Reflection.Metadata"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.TestPlatform.TestHost", "id": "Microsoft.TestPlatform.TestHost", "version": "18.0.0", "sha512": "sha512-9IZUooXUUnh+z04QtWCu5iku4D4FAfJajP1su+I6741AxXa0bnXPo2125vqjvK0Khfsk16zskgDpG6vf2Mjubg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "net9.0": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.Win32.Primitives", "id": "Microsoft.Win32.Primitives", "version": "4.3.0", "sha512": "sha512-Nm8Hp51y9tYcK3xD6qk43Wjftrg1mdH24CCJsTb6gr7HS21U1uA+CKPGEtUcVZbjU1y8Kynzm5eoJ7Pnx5gm8A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net9.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Mono.Posix.NETStandard", "id": "Mono.Posix.NETStandard", "version": "1.0.0", "sha512": "sha512-RtGiutQZJAmajvQ0QvBvh73VJye85iW9f9tjZlzF88idLxNMo4lAktP/4Y9ilCpais0LDO0tpoICt9Hdv6wooA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "MSBuild.StructuredLogger", "id": "MSBuild.StructuredLogger", "version": "2.3.71", "sha512": "sha512-u2Tw1WLYy+2VdccrQWyN3AY8zcFj4evfwqWMd7aBiicX3eGfkWkME7lsh9K2XS/+S8KVkjGNPI/g78E2A7Zx0g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable"], "net9.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "NaturalSort.Extension", "id": "NaturalSort.Extension", "version": "4.4.0", "sha512": "sha512-lcwYGJO2xZylcLW6B64tp6wE9UAt6fSn6el8MSAly5+6QG1vc/9uXQz+dsi69q1DxFv2TOaWrrheHNzg4yvy3Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Newtonsoft.Json", "id": "Newtonsoft.Json", "version": "13.0.4", "sha512": "sha512-bR+v+E/yJ6g7GV2uXw2OrUSjYYfjLkOLC8JD4kCS23msLapnKtdJPBJA75fwHH++ErIffeIqzYITLxAur4KAXA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Buffers", "id": "System.Buffers", "version": "4.6.1", "sha512": "sha512-qve/dFwECwehSWlZmpkrrlIeATCvo/Hw2koyMrUVcDBy5gXAQrnwX8pHEoqgj8DgkrWuWW1DrQbFqoMbo+Fvrg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Collections.Immutable", "id": "System.Collections.Immutable", "version": "9.0.10", "sha512": "sha512-00LI4a7blU063Z0lCdRVLlh0Mzl1yYLZaxlOZe0MiNH+TELklX0Mne/XKU7UuCZQQh6FHrcEUPDjxIsy2jZUxg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Composition", "id": "System.Composition", "version": "9.0.10", "sha512": "sha512-PyUH0f6tdjlQBntP/73cqaR53fjAZkaqGRatIi1BgZIfQH/Z0k1rPHaklBZqFV5+wKUkL74+49TrFPnB/zw+2Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net462": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net47": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net471": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net472": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net48": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net5.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net6.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net7.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net8.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net9.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp2.1": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp2.2": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp3.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp3.1": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netstandard2.1": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Composition.AttributedModel", "id": "System.Composition.AttributedModel", "version": "9.0.10", "sha512": "sha512-9Gx8SRD1DJcQLca7ZaeMjU+qUd4EdxDj6urKR4TizWx+NM7L+beoAn07XCKkdJsweqF6gUK7el93DhUbpssSqA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Composition.Convention", "id": "System.Composition.Convention", "version": "9.0.10", "sha512": "sha512-hzvwytBYpKoDX+OJpHXKoupR+BYy+QCUY5vSWOTvJLagAm3zYJKxAUR3l8OyPy46tnQ+3lK/6f5DeLHiTfbIIw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.AttributedModel"], "net462": ["System.Composition.AttributedModel"], "net47": ["System.Composition.AttributedModel"], "net471": ["System.Composition.AttributedModel"], "net472": ["System.Composition.AttributedModel"], "net48": ["System.Composition.AttributedModel"], "net5.0": ["System.Composition.AttributedModel"], "net6.0": ["System.Composition.AttributedModel"], "net7.0": ["System.Composition.AttributedModel"], "net8.0": ["System.Composition.AttributedModel"], "net9.0": ["System.Composition.AttributedModel"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.AttributedModel"], "netcoreapp2.1": ["System.Composition.AttributedModel"], "netcoreapp2.2": ["System.Composition.AttributedModel"], "netcoreapp3.0": ["System.Composition.AttributedModel"], "netcoreapp3.1": ["System.Composition.AttributedModel"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.AttributedModel"], "netstandard2.1": ["System.Composition.AttributedModel"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Composition.Hosting", "id": "System.Composition.Hosting", "version": "9.0.10", "sha512": "sha512-fPTM06IdvHrFIRJyYEpVKl5W7UTT4U3E+iiAVg3DFfuQ4Abe4XVhkoHn3DB4pUTOU2RpVc2+PxQ6y9hULPta1A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.Runtime"], "net462": ["System.Composition.Runtime"], "net47": ["System.Composition.Runtime"], "net471": ["System.Composition.Runtime"], "net472": ["System.Composition.Runtime"], "net48": ["System.Composition.Runtime"], "net5.0": ["System.Composition.Runtime"], "net6.0": ["System.Composition.Runtime"], "net7.0": ["System.Composition.Runtime"], "net8.0": ["System.Composition.Runtime"], "net9.0": ["System.Composition.Runtime"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.Runtime"], "netcoreapp2.1": ["System.Composition.Runtime"], "netcoreapp2.2": ["System.Composition.Runtime"], "netcoreapp3.0": ["System.Composition.Runtime"], "netcoreapp3.1": ["System.Composition.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.Runtime"], "netstandard2.1": ["System.Composition.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Composition.Runtime", "id": "System.Composition.Runtime", "version": "9.0.10", "sha512": "sha512-8iDtNLXkjiFwir6Ocrm4XCC19Jzj06OHTvDeL6BZ4guWhCCGRCl6nWJVPonq6G2kZmNiDfraOwC8RgV5qPAAjg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Composition.TypedParts", "id": "System.Composition.TypedParts", "version": "9.0.10", "sha512": "sha512-7OUDlDYszrhjJ8/r5na3N07XzBWl8e6/87dyGoDraDHlkl+APL4dbZ8TfniaXLJxZabDHVaaMLpViiIf+Fb9Ng==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net462": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net47": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net471": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net472": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net48": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net5.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net6.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net7.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net8.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net9.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp2.1": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp2.2": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp3.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp3.1": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netstandard2.1": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Configuration.ConfigurationManager", "id": "System.Configuration.ConfigurationManager", "version": "9.0.10", "sha512": "sha512-/LM2cc6vZulHDcDsd+9vntVD9j953k8WCCzB4Fea6YxOoIexpGP8iJhC7v13hKN5V66MDprjCJRjHHhDaDuOXw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Security.Cryptography.ProtectedData"], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Security.Cryptography.ProtectedData"], "net6.0": ["System.Security.Cryptography.ProtectedData"], "net7.0": ["System.Security.Cryptography.ProtectedData"], "net8.0": ["System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData"], "net9.0": ["System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Security.Cryptography.ProtectedData"], "netcoreapp2.1": ["System.Security.Cryptography.ProtectedData"], "netcoreapp2.2": ["System.Security.Cryptography.ProtectedData"], "netcoreapp3.0": ["System.Security.Cryptography.ProtectedData"], "netcoreapp3.1": ["System.Security.Cryptography.ProtectedData"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Security.Cryptography.ProtectedData"], "netstandard2.1": ["System.Security.Cryptography.ProtectedData"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Diagnostics.EventLog", "id": "System.Diagnostics.EventLog", "version": "9.0.10", "sha512": "sha512-3rC2TD7/ikgwu5Z7BzViMVDDp7RGyaej8pvVDzhy6rI7QZ9+x6DPiOPD5y4FjePxTLh/rFjMNcP7nG9IHWsB2Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.IO", "id": "System.IO", "version": "4.3.0", "sha512": "sha512-v8paIePhmGuXZbE9xvvNb4uJ5ME4OFXR1+8la/G/L1GIl2nbU2WFnddgb79kVK3U2us7q1aZT/uY/R0D/ovB5g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net9.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.IO.FileSystem", "id": "System.IO.FileSystem", "version": "4.3.0", "sha512": "sha512-T7WB1vhblSmgkaDpdGM3Uqo55Qsr5sip5eyowrwiXOoHBkzOx3ePd9+Zh97r9NzOwFCxqX7awO6RBxQuao7n7g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": ["System.IO.FileSystem.Primitives"], "net461": ["System.IO.FileSystem.Primitives"], "net462": ["System.IO.FileSystem.Primitives"], "net47": ["System.IO.FileSystem.Primitives"], "net471": ["System.IO.FileSystem.Primitives"], "net472": ["System.IO.FileSystem.Primitives"], "net48": ["System.IO.FileSystem.Primitives"], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "net9.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.IO.FileSystem.Primitives", "id": "System.IO.FileSystem.Primitives", "version": "4.3.0", "sha512": "sha512-WIWVPQlYLP/Zc9I6IakpBk1y8ryVGK83MtZx//zGKKi2hvHQWKAB7moRQCOz5Is/wNDksiYpocf3FeA3le6e5Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Runtime"], "net6.0": ["System.Runtime"], "net7.0": ["System.Runtime"], "net8.0": ["System.Runtime"], "net9.0": ["System.Runtime"], "netcoreapp1.0": ["System.Runtime"], "netcoreapp1.1": ["System.Runtime"], "netcoreapp2.0": ["System.Runtime"], "netcoreapp2.1": ["System.Runtime"], "netcoreapp2.2": ["System.Runtime"], "netcoreapp3.0": ["System.Runtime"], "netcoreapp3.1": ["System.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["System.Runtime"], "netstandard1.4": ["System.Runtime"], "netstandard1.5": ["System.Runtime"], "netstandard1.6": ["System.Runtime"], "netstandard2.0": ["System.Runtime"], "netstandard2.1": ["System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.IO.Pipelines", "id": "System.IO.Pipelines", "version": "9.0.10", "sha512": "sha512-kQg8x+mbt8Xi1mwm32DVEz6DtfqKn9XUGziGQvdNJ2QEGWvufcZfRWtxAf9nB+/B1FT1x7W4Wh2Fr9lcKlVWPA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net462": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net47": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net471": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net472": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net48": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net5.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net6.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net7.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Memory", "id": "System.Memory", "version": "4.6.3", "sha512": "sha512-NXcNYlWoXe5cz9sb8Huo6x2dCZVYkhwKtgE00n/MoI8V4ZI/7/t+EI5bOhQFlZfFjjqM8+U6prjU/aARt7H/tA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Net.Primitives", "id": "System.Net.Primitives", "version": "4.3.1", "sha512": "sha512-BgdlyYCI7rrdh36p3lMTqbkvaafPETpB1bk9iQlFdQxYE692kiXvmseXs8ghL+gEgQF2xgDc8GH4QLkSgUUs+Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "net9.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Numerics.Vectors", "id": "System.Numerics.Vectors", "version": "4.6.1", "sha512": "sha512-/rkvpUeUPlCY/2qYVQKiUsj5IKaXZcy2+SQAGAfemAdyEF5AgIgYOFNSTMWDXo09JWFX9HB+wV1yCyi2Mwi3TA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Reflection.Metadata", "id": "System.Reflection.Metadata", "version": "9.0.10", "sha512": "sha512-3ZztNrfQJww1qZ9UgdB5aTAYlAIWd5dMyyBagAC8jth6iG5vxawtaGbZJMh4xkL9A5v6Ng48YL+hAjt08GBWKQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Collections.Immutable", "System.Memory"], "net462": ["System.Collections.Immutable", "System.Memory"], "net47": ["System.Collections.Immutable", "System.Memory"], "net471": ["System.Collections.Immutable", "System.Memory"], "net472": ["System.Collections.Immutable", "System.Memory"], "net48": ["System.Collections.Immutable", "System.Memory"], "net5.0": ["System.Collections.Immutable", "System.Memory"], "net6.0": ["System.Collections.Immutable", "System.Memory"], "net7.0": ["System.Collections.Immutable", "System.Memory"], "net8.0": ["System.Collections.Immutable"], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Collections.Immutable", "System.Memory"], "netcoreapp2.1": ["System.Collections.Immutable", "System.Memory"], "netcoreapp2.2": ["System.Collections.Immutable", "System.Memory"], "netcoreapp3.0": ["System.Collections.Immutable", "System.Memory"], "netcoreapp3.1": ["System.Collections.Immutable", "System.Memory"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Collections.Immutable", "System.Memory"], "netstandard2.1": ["System.Collections.Immutable", "System.Memory"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Reflection.MetadataLoadContext", "id": "System.Reflection.MetadataLoadContext", "version": "9.0.10", "sha512": "sha512-qf9IjoUO2XfK4BTPhCIFDYAsiWtFCTpyiklmxoNK2Ys1wZdoVe5C3j5BH2ajSDWy2mAQcN1n+Eh/3uhd3oUcEA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net462": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net47": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net471": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net472": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net48": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net5.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net6.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net7.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net8.0": ["System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netcoreapp2.1": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netcoreapp2.2": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netcoreapp3.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netcoreapp3.1": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netstandard2.1": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Runtime", "id": "System.Runtime", "version": "4.3.1", "sha512": "sha512-Al69mPDfzdD+bKGK2HAfB+lNFOHFqnkqzNnUJmmvUe1/qEPK9M7EiTT4zuycKDPy7ev11xz8XVgJWKP0hm7NIA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net9.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Runtime.CompilerServices.Unsafe", "id": "System.Runtime.CompilerServices.Unsafe", "version": "6.1.2", "sha512": "sha512-t2aXWJZBkAkRrTOnw31OBELKEVSDD5YvC3O5dXaHFsR66/nRTKm1y3Iq6NwFI5u5IlKrWYfdan66V+GKKkY8hQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Runtime.Handles", "id": "System.Runtime.Handles", "version": "4.3.0", "sha512": "sha512-CluvHdVUv54BvLTOCCyybugreDNk/rR8unMPruzXDtxSjvrQOU3M4R831/lQf4YI8VYp668FGQa/01E+Rq8PEQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net9.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Security.Cryptography.ProtectedData", "id": "System.Security.Cryptography.ProtectedData", "version": "9.0.10", "sha512": "sha512-yR8dvnme5ndA3L6Q6F/2N+4QBCi8sdfGWg9lmRVNBZO+evqIt323UdXMu8b8MnMYoyxXaml+vTEl74t5Nu7ABQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory"], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Memory"], "net6.0": ["System.Memory"], "net7.0": ["System.Memory"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory"], "netcoreapp2.1": ["System.Memory"], "netcoreapp2.2": ["System.Memory"], "netcoreapp3.0": ["System.Memory"], "netcoreapp3.1": ["System.Memory"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory"], "netstandard2.1": ["System.Memory"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Security.Principal", "id": "System.Security.Principal", "version": "4.3.0", "sha512": "sha512-24oe0NGJY32e+DFHVQzl2okM9uwYmn0Aa6nehqtVZ55/Al4Yva7S3BN934Kn5qATH7TVTUJkgxhisdfF7mKDfg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Runtime"], "net6.0": ["System.Runtime"], "net7.0": ["System.Runtime"], "net8.0": ["System.Runtime"], "net9.0": ["System.Runtime"], "netcoreapp1.0": ["System.Runtime"], "netcoreapp1.1": ["System.Runtime"], "netcoreapp2.0": ["System.Runtime"], "netcoreapp2.1": ["System.Runtime"], "netcoreapp2.2": ["System.Runtime"], "netcoreapp3.0": ["System.Runtime"], "netcoreapp3.1": ["System.Runtime"], "netstandard": [], "netstandard1.0": ["System.Runtime"], "netstandard1.1": ["System.Runtime"], "netstandard1.2": ["System.Runtime"], "netstandard1.3": ["System.Runtime"], "netstandard1.4": ["System.Runtime"], "netstandard1.5": ["System.Runtime"], "netstandard1.6": ["System.Runtime"], "netstandard2.0": ["System.Runtime"], "netstandard2.1": ["System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Text.Encoding", "id": "System.Text.Encoding", "version": "4.3.0", "sha512": "sha512-b/f+7HMTpxIfeV7H03bkuHKMFylCGfr9/U6gePnfFFW0aF8LOWLDgQCY6V1oWUqDksC3mdNuyChM1vy9TP4sZw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net9.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Text.Encoding.CodePages", "id": "System.Text.Encoding.CodePages", "version": "9.0.10", "sha512": "sha512-LPoLnlvwb3D12yjwva2nvfzDqm4XNUBrAf/zQ5ad2IOqhTWqRm4GIXxlH4lSr3W/ET31aLtM4C4vHbr8sGEzWA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Threading.Channels", "id": "System.Threading.Channels", "version": "9.0.10", "sha512": "sha512-wMh3VX2qbwFg8rZllC1QsiXl4NjLkamNVT+O6bJG5V3sN6cwRZRza2v7f2ohFNGdGlViwUAO/PKSZgJfuJNXTg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Threading.Tasks", "id": "System.Threading.Tasks", "version": "4.3.0", "sha512": "sha512-fUiP+CyyCjs872OA8trl6p97qma/da1xGq3h4zAbJZk8zyaU4zyEfqW5vbkP80xG/Nimun1vlWBboMEk7XxdEw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net9.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Threading.Tasks.Extensions", "id": "System.Threading.Tasks.Extensions", "version": "4.6.3", "sha512": "sha512-zWRHXIBnbfzQE1SamNoW9X5NjEcW/JNAtvVxGKd3bcg71wQVmoI3pDq+WUa2A+temXSNCm7707hmAFwwcYlK0A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Threading.ThreadPool", "id": "System.Threading.ThreadPool", "version": "4.3.0", "sha512": "sha512-RQpA+UpI6Tlpeedk5JStYk2DM/M3i5HqabI/yDbfj1xDu9bIz9kdoquVpHbh/wQjOJaOCbcgRH8iQcAUv8dRWQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Runtime", "System.Runtime.Handles"], "net6.0": ["System.Runtime", "System.Runtime.Handles"], "net7.0": ["System.Runtime", "System.Runtime.Handles"], "net8.0": ["System.Runtime", "System.Runtime.Handles"], "net9.0": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp1.0": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp1.1": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp2.0": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp2.1": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp2.2": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp3.0": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp3.1": ["System.Runtime", "System.Runtime.Handles"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["System.Runtime", "System.Runtime.Handles"], "netstandard1.4": ["System.Runtime", "System.Runtime.Handles"], "netstandard1.5": ["System.Runtime", "System.Runtime.Handles"], "netstandard1.6": ["System.Runtime", "System.Runtime.Handles"], "netstandard2.0": ["System.Runtime", "System.Runtime.Handles"], "netstandard2.1": ["System.Runtime", "System.Runtime.Handles"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit", "id": "xunit", "version": "2.9.3", "sha512": "sha512-3/ayVPC7NQWQENR5REbOgXYsbhoJsmpnxQa5pO4lxbjGbckOs62nsm4kLErzc8ng7V5Xz08uwVjMqaZGJiXCrg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net20": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net30": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net35": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net40": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net403": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net45": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net451": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net452": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net46": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net461": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net462": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net47": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net471": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net472": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net48": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net5.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net6.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net7.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net8.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net9.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp1.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp1.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp2.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp2.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp2.2": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp3.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp3.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.2": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.3": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.4": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.5": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.6": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard2.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard2.1": ["xunit.core", "xunit.assert", "xunit.analyzers"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit.abstractions", "id": "xunit.abstractions", "version": "2.0.3", "sha512": "sha512-PKJri5f0qEQPFvgY6CZR9XG8JROlWSdC/ZYLkkDQuID++Egn+yWjB+Yf57AZ8U6GRlP7z33uDQ4/r5BZPer2JA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit.analyzers", "id": "xunit.analyzers", "version": "1.24.0", "sha512": "sha512-LiogS9RX6I4MHFN8V3dNgEQ4QJrtvtKq49h9k5NAOvmwcrbR1IeNMZvyuez3YITKAeF+ka9yVG3+OH6vApPB/A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit.assert", "id": "xunit.assert", "version": "2.9.3", "sha512": "sha512-wfqwCKAhSWGy9P/dPqDGSIBnPW3sUJ49MEfcTqNF+5BgJwjwtHb9SE7ajYZuR8ymTd8dwxoEGnlJHiejbgDv9w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit.core", "id": "xunit.core", "version": "2.9.3", "sha512": "sha512-cv2sO37qJkIbBL3fXDIn3EPQ2zK8LQ6FkMJNnn1xc9n8mo3ik0URA4MfUNCmwDDCx83ZiJeRrJ0y1ykasojNJg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net20": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net30": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net35": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net40": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net403": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net45": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net451": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net452": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net46": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net461": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net462": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net47": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net471": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net472": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net48": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net5.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net6.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net7.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net8.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net9.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp1.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp1.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp2.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp2.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp2.2": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp3.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp3.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.2": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.3": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.4": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.5": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.6": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard2.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard2.1": ["xunit.extensibility.core", "xunit.extensibility.execution"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit.extensibility.core", "id": "xunit.extensibility.core", "version": "2.9.3", "sha512": "sha512-S0a+jmIF/DraKuJ+FfWbqXMwvpcKxjP3GdrQzz5pr3GYtgII2XfDdAhkU/5VIWqWon2R6Q31X/9sTGaU+koDaQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["xunit.abstractions"], "net451": ["xunit.abstractions"], "net452": ["xunit.abstractions"], "net46": ["xunit.abstractions"], "net461": ["xunit.abstractions"], "net462": ["xunit.abstractions"], "net47": ["xunit.abstractions"], "net471": ["xunit.abstractions"], "net472": ["xunit.abstractions"], "net48": ["xunit.abstractions"], "net5.0": ["xunit.abstractions"], "net6.0": ["xunit.abstractions"], "net7.0": ["xunit.abstractions"], "net8.0": ["xunit.abstractions"], "net9.0": ["xunit.abstractions"], "netcoreapp1.0": ["xunit.abstractions"], "netcoreapp1.1": ["xunit.abstractions"], "netcoreapp2.0": ["xunit.abstractions"], "netcoreapp2.1": ["xunit.abstractions"], "netcoreapp2.2": ["xunit.abstractions"], "netcoreapp3.0": ["xunit.abstractions"], "netcoreapp3.1": ["xunit.abstractions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["xunit.abstractions"], "netstandard1.2": ["xunit.abstractions"], "netstandard1.3": ["xunit.abstractions"], "netstandard1.4": ["xunit.abstractions"], "netstandard1.5": ["xunit.abstractions"], "netstandard1.6": ["xunit.abstractions"], "netstandard2.0": ["xunit.abstractions"], "netstandard2.1": ["xunit.abstractions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit.extensibility.execution", "id": "xunit.extensibility.execution", "version": "2.9.3", "sha512": "sha512-IidoBSrGw/KhWzZsKXIcStohj/oRFZizbWeUv+0hOFLeMJMegSW5QoGNzmjQuF8BuRtCyPQQukWSYdNnnfPAkA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["xunit.extensibility.core"], "net451": ["xunit.extensibility.core"], "net452": ["xunit.extensibility.core"], "net46": ["xunit.extensibility.core"], "net461": ["xunit.extensibility.core"], "net462": ["xunit.extensibility.core"], "net47": ["xunit.extensibility.core"], "net471": ["xunit.extensibility.core"], "net472": ["xunit.extensibility.core"], "net48": ["xunit.extensibility.core"], "net5.0": ["xunit.extensibility.core"], "net6.0": ["xunit.extensibility.core"], "net7.0": ["xunit.extensibility.core"], "net8.0": ["xunit.extensibility.core"], "net9.0": ["xunit.extensibility.core"], "netcoreapp1.0": ["xunit.extensibility.core"], "netcoreapp1.1": ["xunit.extensibility.core"], "netcoreapp2.0": ["xunit.extensibility.core"], "netcoreapp2.1": ["xunit.extensibility.core"], "netcoreapp2.2": ["xunit.extensibility.core"], "netcoreapp3.0": ["xunit.extensibility.core"], "netcoreapp3.1": ["xunit.extensibility.core"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["xunit.extensibility.core"], "netstandard1.2": ["xunit.extensibility.core"], "netstandard1.3": ["xunit.extensibility.core"], "netstandard1.4": ["xunit.extensibility.core"], "netstandard1.5": ["xunit.extensibility.core"], "netstandard1.6": ["xunit.extensibility.core"], "netstandard2.0": ["xunit.extensibility.core"], "netstandard2.1": ["xunit.extensibility.core"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit.runner.utility", "id": "xunit.runner.utility", "version": "2.9.3", "sha512": "sha512-L2zlPa7Ci/Awf5LdeTOvKOanev1bB6xV2Gxbrc+EDDN1hO/j0AIbu5PM8lXgkX69/8xaaex7zrxHZd8gcz2ilQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": ["xunit.abstractions"], "net40": ["xunit.abstractions"], "net403": ["xunit.abstractions"], "net45": ["xunit.abstractions"], "net451": ["xunit.abstractions"], "net452": ["xunit.abstractions"], "net46": ["xunit.abstractions"], "net461": ["xunit.abstractions"], "net462": ["xunit.abstractions"], "net47": ["xunit.abstractions"], "net471": ["xunit.abstractions"], "net472": ["xunit.abstractions"], "net48": ["xunit.abstractions"], "net5.0": ["xunit.abstractions"], "net6.0": ["xunit.abstractions"], "net7.0": ["xunit.abstractions"], "net8.0": ["xunit.abstractions"], "net9.0": ["xunit.abstractions"], "netcoreapp1.0": ["xunit.abstractions"], "netcoreapp1.1": ["xunit.abstractions"], "netcoreapp2.0": ["xunit.abstractions"], "netcoreapp2.1": ["xunit.abstractions"], "netcoreapp2.2": ["xunit.abstractions"], "netcoreapp3.0": ["xunit.abstractions"], "netcoreapp3.1": ["xunit.abstractions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["xunit.abstractions"], "netstandard1.2": ["xunit.abstractions"], "netstandard1.3": ["xunit.abstractions"], "netstandard1.4": ["xunit.abstractions"], "netstandard1.5": ["xunit.abstractions"], "netstandard1.6": ["xunit.abstractions"], "netstandard2.0": ["xunit.abstractions"], "netstandard2.1": ["xunit.abstractions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit.runner.visualstudio", "id": "xunit.runner.visualstudio", "version": "3.1.5", "sha512": "sha512-b/tvN9kXtUd3wSSYbC80Ic6y/dYlYbNSvatYiv71iozPhXqM4EaOuHujkIJh85b+wY6dgf25k9ENSy8jN6mlvQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": ["Microsoft.TestPlatform.ObjectModel"], "net48": ["Microsoft.TestPlatform.ObjectModel"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Basic.CompilerLog.Util", "id": "Basic.CompilerLog.Util", "version": "0.9.25", "sha512": "sha512-AU428QscGy1Z9eM4WqAqlO19pRIyHPZ+K63jgKX+sBWFzVLHMlyc97RVdm8VUAqVVBauS7kwaiA3S1sE/mBr4w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning", "System.Buffers"], "net462": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning", "System.Buffers"], "net47": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning", "System.Buffers"], "net471": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning", "System.Buffers"], "net472": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning", "System.Buffers"], "net48": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning", "System.Buffers"], "net5.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning", "System.Buffers"], "net6.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning", "System.Buffers"], "net7.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning", "System.Buffers"], "net8.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning"], "net9.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning", "System.Buffers"], "netcoreapp2.1": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning", "System.Buffers"], "netcoreapp2.2": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning", "System.Buffers"], "netcoreapp3.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning", "System.Buffers"], "netcoreapp3.1": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning", "System.Buffers"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning", "System.Buffers"], "netstandard2.1": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "NuGet.Versioning", "System.Buffers"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Humanizer.Core", "id": "Humanizer.Core", "version": "3.0.1", "sha512": "sha512-lcQ2HfNqHljfbalRLMKc8j4M0Og3qIvMSeyLp7KY58aCcgcZwiR0s5Uf2vrJ3p7OFGoWjcgbWATTpxqzrbuBSw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Collections.Immutable", "System.Memory"], "net462": ["System.Collections.Immutable", "System.Memory"], "net47": ["System.Collections.Immutable", "System.Memory"], "net471": ["System.Collections.Immutable", "System.Memory"], "net472": ["System.Collections.Immutable", "System.Memory"], "net48": ["System.Collections.Immutable", "System.Memory"], "net5.0": ["System.Collections.Immutable", "System.Memory"], "net6.0": ["System.Collections.Immutable", "System.Memory"], "net7.0": ["System.Collections.Immutable", "System.Memory"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Collections.Immutable", "System.Memory"], "netcoreapp2.1": ["System.Collections.Immutable", "System.Memory"], "netcoreapp2.2": ["System.Collections.Immutable", "System.Memory"], "netcoreapp3.0": ["System.Collections.Immutable", "System.Memory"], "netcoreapp3.1": ["System.Collections.Immutable", "System.Memory"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Collections.Immutable", "System.Memory"], "netstandard2.1": ["System.Collections.Immutable", "System.Memory"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "MessagePack", "id": "MessagePack", "version": "3.1.4", "sha512": "sha512-O0JoklM97ru+Rqr1hGnlCbSAxi8MOk48pwoaT458RzboCHuAkQWTh+Of9MUoN3LE0Cb2tapku0FRPt2hnk+o0g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net48": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net5.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "net6.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "net7.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "net8.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools"], "net9.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "netcoreapp3.1": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "MessagePack.Annotations", "id": "MessagePack.Annotations", "version": "3.1.4", "sha512": "sha512-kIgD3A0OHs8+VUabMhIJT9ZF4oGHqjCocaRDmERI/Ds2hzJ5q3kcvzn5zI7V3CJ2NlQ4HDI80uh6zCqglwgQCQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "MessagePackAnalyzer", "id": "MessagePackAnalyzer", "version": "3.1.4", "sha512": "sha512-DFlhiA5fia4iK6i0S+L7sYMYmo5XRgWydKxiaxwz7tfcbvIhU7nmG4JzN1D9Y2XCEmLNExvNwTzXVEgURu4GnA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.Bcl.AsyncInterfaces", "id": "Microsoft.Bcl.AsyncInterfaces", "version": "10.0.0", "sha512": "sha512-3HqmWl57VHdP18TtKeRpM62/ACKgg58AEX9j1Zof+HA879/aGJ6s0WgngeLTEzlUAB9tRxm3kGfkIDJRV168BQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Threading.Tasks.Extensions"], "net462": ["System.Threading.Tasks.Extensions"], "net47": ["System.Threading.Tasks.Extensions"], "net471": ["System.Threading.Tasks.Extensions"], "net472": ["System.Threading.Tasks.Extensions"], "net48": ["System.Threading.Tasks.Extensions"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["System.Threading.Tasks.Extensions"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Threading.Tasks.Extensions"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.Bcl.Memory", "id": "Microsoft.Bcl.Memory", "version": "10.0.0", "sha512": "sha512-gP4skrltie3xbrXIKZ0j8gnnT+MoslGYsC2Eqi3Ap9g3QSnu1KYp92d96cZZQ31VfvI1AYx/rEmSfCU2K6R2zg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Runtime.CompilerServices.Unsafe"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.Build", "id": "Microsoft.Build", "version": "18.0.2", "sha512": "sha512-/rRET3AtEAUTKFDboKvp/GTDxGwU7VBBfwaKeZtzGg+pyqYdvasHeR3ERTuoxSrgJqnu1J23xd4H481IiJFhnA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Configuration.ConfigurationManager", "System.Reflection.MetadataLoadContext", "System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Memory", "System.Reflection.MetadataLoadContext", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Memory", "System.Reflection.MetadataLoadContext", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.Build.Framework", "id": "Microsoft.Build.Framework", "version": "18.0.2", "sha512": "sha512-cmXoGncAIrDZgu0NumtXJSTILv9NHU2sPhrlkckefMK1XCuJUrvClVxkmvQDpvm4sCKwSFolW2AanGCLNJ6xDw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": ["System.Collections.Immutable", "System.Runtime.CompilerServices.Unsafe", "System.Memory", "System.Threading.Tasks.Extensions"], "net48": ["System.Collections.Immutable", "System.Runtime.CompilerServices.Unsafe", "System.Memory", "System.Threading.Tasks.Extensions"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.Build.Utilities.Core", "id": "Microsoft.Build.Utilities.Core", "version": "18.0.2", "sha512": "sha512-4f5DSPN/nLyGddOx2Etrjy42XFQ9tWeJ8lwJr/tLloRl/YRzT1kV+1txwRFXlav9V93wMOUrwMQqpnd131Sb+w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Configuration.ConfigurationManager", "System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Build.Framework"], "net462": ["Microsoft.Build.Framework"], "net47": ["Microsoft.Build.Framework"], "net471": ["Microsoft.Build.Framework"], "net472": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.Build.Framework"], "net6.0": ["Microsoft.Build.Framework"], "net7.0": ["Microsoft.Build.Framework"], "net8.0": ["Microsoft.Build.Framework"], "net9.0": ["Microsoft.Build.Framework"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Build.Framework"], "netcoreapp2.1": ["Microsoft.Build.Framework"], "netcoreapp2.2": ["Microsoft.Build.Framework"], "netcoreapp3.0": ["Microsoft.Build.Framework"], "netcoreapp3.1": ["Microsoft.Build.Framework"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Build.Framework"], "netstandard2.1": ["Microsoft.Build.Framework"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.CodeAnalysis", "id": "Microsoft.CodeAnalysis", "version": "5.0.0", "sha512": "sha512-ToXzcZLcHA9vT4e1A6jNafAPuTJj4osfqJck562Be8ByvzS78pY9I+SdO5yo2Kwka0lz++hOWypW1Qdf1TtR4w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net9.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.CodeAnalysis.Analyzers", "id": "Microsoft.CodeAnalysis.Analyzers", "version": "3.11.0", "sha512": "sha512-tP9SLzLK72XCExlh8KXfrKbU6ycmZL3ExGl/a3Ml7LNy2Uaam7gFjjUmdzyTYkMXTyckCHHpzx7bD6BMumh8Bg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.CodeAnalysis.Common", "id": "Microsoft.CodeAnalysis.Common", "version": "5.0.0", "sha512": "sha512-uK5yslTJQ2UznzYlttFuDCa/6KruN1aQW/ZNFFHvK+yyA6q7vZ5o0BSPvLj+Com1/R7wGJ07c2O0lPcbDrmQdw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["Microsoft.CodeAnalysis.Analyzers"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net462": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net47": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net471": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net472": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net48": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net5.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net6.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net7.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net8.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Analyzers"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netstandard2.1": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.CodeAnalysis.CSharp", "id": "Microsoft.CodeAnalysis.CSharp", "version": "5.0.0", "sha512": "sha512-wwT/CJOQyQ72Ldouy7gjS/3Vi92hbAAoU3Y0e/6mb39+Vp7aXr3PxuBD73U2QrK1zzgTyv3QhvJPrQX0EiWS8Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.CodeAnalysis.CSharp.Workspaces", "id": "Microsoft.CodeAnalysis.CSharp.Workspaces", "version": "5.0.0", "sha512": "sha512-Fy0BNxco9b7XC7LKdTgq+Kk62HKapyEM05LN5ua3Nt6PZ4pzfAAh+9Dg/VW4aSflgYoiQw/mjnotgUuM9NP6Kw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Composition"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Composition"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.CodeAnalysis.VisualBasic", "id": "Microsoft.CodeAnalysis.VisualBasic", "version": "5.0.0", "sha512": "sha512-jGrTRyHgUXYd0iH1wF4svuGnB/3kPerq+iIbaLq5XpNv2+3hbZPyyDla+k/Ylpur6+9ZsDoP0ymhribbgXLmYA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "id": "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "version": "5.0.0", "sha512": "sha512-sgWa3mUtCHIfPcSCyKKksrZNlYnmKWeivbZdENrPLTJQXiKXCjFcVYaxRvGBcYeAQES5J63iV03XVviSkJyMqQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Composition"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Composition"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.CodeAnalysis.Workspaces.Common", "id": "Microsoft.CodeAnalysis.Workspaces.Common", "version": "5.0.0", "sha512": "sha512-zbKJyIkFW+2Bx5eQl/IWBLmbPTpo9/UyAbt8vaVTXsoi4EYlXrJftCRZmUsmyQP7pg3qKMiR6czPdUjTadNkhA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "System.Composition", "Microsoft.CodeAnalysis.Analyzers"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "System.Composition", "System.IO.Pipelines", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "System.Composition", "Microsoft.CodeAnalysis.Analyzers"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.CodeCoverage", "id": "Microsoft.CodeCoverage", "version": "18.0.1", "sha512": "sha512-0bzrz+vR49E/jtdBySXaJSPP4plwnMHE2qsyJZgZJuDdIOtLUFswInVa7krxIVz2ur6KJZFdTPXr3WMXfgnDNg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.Extensions.ObjectPool", "id": "Microsoft.Extensions.ObjectPool", "version": "10.0.0", "sha512": "sha512-c9pc0Jh0Sm3hl+y5qTwyJ1weldQt3C73SwPFhalL4gTWGxQGo5XFGVvy5nNqsOH5tXYePwcjuCEoJXi/nI6nYA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.NET.StringTools", "id": "Microsoft.NET.StringTools", "version": "18.0.2", "sha512": "sha512-s9BywFgRKhPV5OyY2t2EMQXfoDrvYSEzX4bHaWkZ/PwYJnxbxmLEqA/dh8MQ2mUOq48sGr3hbkgnghZQHeZc7Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net9.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.NET.Test.Sdk", "id": "Microsoft.NET.Test.Sdk", "version": "18.0.1", "sha512": "sha512-cfpn4IW0Q+emID8eUocS7xfmwwYgD/JX5S+zCZA2l7gcYzxZ1vvfcdZHcKkuzCH4gMbBYqcZqtBn9uZa0WJRUg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": ["Microsoft.CodeCoverage"], "net47": ["Microsoft.CodeCoverage"], "net471": ["Microsoft.CodeCoverage"], "net472": ["Microsoft.CodeCoverage"], "net48": ["Microsoft.CodeCoverage"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "net9.0": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.TestPlatform.ObjectModel", "id": "Microsoft.TestPlatform.ObjectModel", "version": "18.0.1", "sha512": "sha512-qZKcsS5mN7GMwtpd+tRfAt4Dmg8yVbtWkm9iGfqY2GNOG2qW95NH6zf/FrTLXTiS7rB7zqihWGEcSspOaSK8TQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["System.Reflection.Metadata"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Reflection.Metadata"], "net462": ["System.Reflection.Metadata"], "net47": ["System.Reflection.Metadata"], "net471": ["System.Reflection.Metadata"], "net472": ["System.Reflection.Metadata"], "net48": ["System.Reflection.Metadata"], "net5.0": ["System.Reflection.Metadata"], "net6.0": ["System.Reflection.Metadata"], "net7.0": ["System.Reflection.Metadata"], "net8.0": ["System.Reflection.Metadata"], "net9.0": ["System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Reflection.Metadata"], "netcoreapp2.1": ["System.Reflection.Metadata"], "netcoreapp2.2": ["System.Reflection.Metadata"], "netcoreapp3.0": ["System.Reflection.Metadata"], "netcoreapp3.1": ["System.Reflection.Metadata"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Reflection.Metadata"], "netstandard2.1": ["System.Reflection.Metadata"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Microsoft.TestPlatform.TestHost", "id": "Microsoft.TestPlatform.TestHost", "version": "18.0.1", "sha512": "sha512-SX1FnYA8zcNv/lbWK3GjLnAx93jalmyHyQMVi+TNWA61R6xzkLMNpC3fotbfpDheXCFhwy/1rKoULyaOOe0jEg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "net9.0": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Mono.Posix.NETStandard", "id": "Mono.Posix.NETStandard", "version": "1.0.0", "sha512": "sha512-RtGiutQZJAmajvQ0QvBvh73VJye85iW9f9tjZlzF88idLxNMo4lAktP/4Y9ilCpais0LDO0tpoICt9Hdv6wooA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "MSBuild.StructuredLogger", "id": "MSBuild.StructuredLogger", "version": "2.3.113", "sha512": "sha512-FS/vecrCK5mq3v4OIyd90BU6x9clwoRzW6LiIfilSQZQBYp/E9/+G9LS2Q9nB1rHEhJ8kDWnsZdytEIsNAb4Jw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable"], "net9.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "NaturalSort.Extension", "id": "NaturalSort.Extension", "version": "4.4.1", "sha512": "sha512-UTrcQcgmn7pBdx+0Oi/NxlyPslWbMt7U8I1sg/4m36OkOCS+7QKZWY3O4dKcjHD2wQaBr9L2/XWnx3ViTaehZw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "Newtonsoft.Json", "id": "Newtonsoft.Json", "version": "13.0.4", "sha512": "sha512-bR+v+E/yJ6g7GV2uXw2OrUSjYYfjLkOLC8JD4kCS23msLapnKtdJPBJA75fwHH++ErIffeIqzYITLxAur4KAXA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "NuGet.Versioning", "id": "NuGet.Versioning", "version": "7.0.1", "sha512": "sha512-ibGcrpgA8foidKNcnf+AQ4zEaVZu4OyWjcPITii6mNgwt2uhd8VFsEq7/Mb0KDxrEJaew+nWJQb7Ju166SAyzw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Buffers", "id": "System.Buffers", "version": "4.6.1", "sha512": "sha512-qve/dFwECwehSWlZmpkrrlIeATCvo/Hw2koyMrUVcDBy5gXAQrnwX8pHEoqgj8DgkrWuWW1DrQbFqoMbo+Fvrg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Collections.Immutable", "id": "System.Collections.Immutable", "version": "10.0.0", "sha512": "sha512-X8f2K6WYvpYzbYT4QLhZfzEXLp8RG7VYKRpFQtcrOcBnfA5ifRxwTN3G2EE6N7MwdNfH8ygbmtB18ql62Uzqjw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Composition", "id": "System.Composition", "version": "10.0.0", "sha512": "sha512-H9t7Q6f4JGhLrsc1oEcGZw67YqJKyRDqptuXkop09EW7TEuyhN+YTlKGREF2V7b/Ea4mqJLjcuT9gQBTSnQC0g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net462": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net47": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net471": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net472": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net48": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net5.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net6.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net7.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net8.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net9.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp2.1": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp2.2": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp3.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp3.1": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netstandard2.1": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Composition.AttributedModel", "id": "System.Composition.AttributedModel", "version": "10.0.0", "sha512": "sha512-4NLPtVh/LQYIhOV+2/+me510VExg+pCRclLlYHSF77QpjV0uvZcXTICcCoKUMfqUeWFqk0tXqXpv9mBNTzdGug==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Composition.Convention", "id": "System.Composition.Convention", "version": "10.0.0", "sha512": "sha512-9ufTkv7jkezJiHJjRW7T9HBrL04JRAH2s6l7YBPFmm8t7WVTR9ZxKndEUdy+shk5R8ldKTuIclQPkd6yOKNBdw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["System.Composition.AttributedModel"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.AttributedModel"], "net462": ["System.Composition.AttributedModel"], "net47": ["System.Composition.AttributedModel"], "net471": ["System.Composition.AttributedModel"], "net472": ["System.Composition.AttributedModel"], "net48": ["System.Composition.AttributedModel"], "net5.0": ["System.Composition.AttributedModel"], "net6.0": ["System.Composition.AttributedModel"], "net7.0": ["System.Composition.AttributedModel"], "net8.0": ["System.Composition.AttributedModel"], "net9.0": ["System.Composition.AttributedModel"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.AttributedModel"], "netcoreapp2.1": ["System.Composition.AttributedModel"], "netcoreapp2.2": ["System.Composition.AttributedModel"], "netcoreapp3.0": ["System.Composition.AttributedModel"], "netcoreapp3.1": ["System.Composition.AttributedModel"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.AttributedModel"], "netstandard2.1": ["System.Composition.AttributedModel"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Composition.Hosting", "id": "System.Composition.Hosting", "version": "10.0.0", "sha512": "sha512-dUSww1dWPykYinDRV1zhLbYhEykPBijsF+N/MvOOeT7o9ZpZUtjuOzPyQ/Tt4GYju30qBbfZQSd8N/mON/uWMQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["System.Composition.Runtime"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.Runtime"], "net462": ["System.Composition.Runtime"], "net47": ["System.Composition.Runtime"], "net471": ["System.Composition.Runtime"], "net472": ["System.Composition.Runtime"], "net48": ["System.Composition.Runtime"], "net5.0": ["System.Composition.Runtime"], "net6.0": ["System.Composition.Runtime"], "net7.0": ["System.Composition.Runtime"], "net8.0": ["System.Composition.Runtime"], "net9.0": ["System.Composition.Runtime"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.Runtime"], "netcoreapp2.1": ["System.Composition.Runtime"], "netcoreapp2.2": ["System.Composition.Runtime"], "netcoreapp3.0": ["System.Composition.Runtime"], "netcoreapp3.1": ["System.Composition.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.Runtime"], "netstandard2.1": ["System.Composition.Runtime"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Composition.Runtime", "id": "System.Composition.Runtime", "version": "10.0.0", "sha512": "sha512-aI6VwYsLL96Az4sum1F2jf8Zqao+cpDwMEwz8gcIbk5Bzqpt3GDaxixiVhSrfbpGgvrlfQibSZJskevDKOkpVA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Composition.TypedParts", "id": "System.Composition.TypedParts", "version": "10.0.0", "sha512": "sha512-maWE8bEZMVv84NU1XEfwrdARVNG/n4Xreg8uYN4+R0j/NR70wzSmjV+i1XXSRC+N96gqLwvBa+jVbeFRY4asPw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net462": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net47": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net471": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net472": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net48": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net5.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net6.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net7.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net8.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net9.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp2.1": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp2.2": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp3.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp3.1": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netstandard2.1": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Configuration.ConfigurationManager", "id": "System.Configuration.ConfigurationManager", "version": "10.0.0", "sha512": "sha512-siDQPzzFWSwUHLz/eNsgWkQKTZSVHcDybHGY0OvvAEe3GaHWfjIDbtnqzSjxUxAfKWmmPaAqubv3p1TF9RCfRg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Security.Cryptography.ProtectedData"], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Security.Cryptography.ProtectedData"], "net6.0": ["System.Security.Cryptography.ProtectedData"], "net7.0": ["System.Security.Cryptography.ProtectedData"], "net8.0": ["System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData"], "net9.0": ["System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Security.Cryptography.ProtectedData"], "netcoreapp2.1": ["System.Security.Cryptography.ProtectedData"], "netcoreapp2.2": ["System.Security.Cryptography.ProtectedData"], "netcoreapp3.0": ["System.Security.Cryptography.ProtectedData"], "netcoreapp3.1": ["System.Security.Cryptography.ProtectedData"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Security.Cryptography.ProtectedData"], "netstandard2.1": ["System.Security.Cryptography.ProtectedData"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Diagnostics.EventLog", "id": "System.Diagnostics.EventLog", "version": "10.0.0", "sha512": "sha512-MW9Vd1l580ev4JdChWxxOS9llYO3U79gHvcFu5YiDcDMDJhiqHF/GC67teJ1tEDiTyQHUKhSBSijhi/zY4zhuA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.IO.Pipelines", "id": "System.IO.Pipelines", "version": "10.0.0", "sha512": "sha512-u/DHKOwXB6sPdswZln+du+jUpWYkik9bFjT3KinfYey/wKBV845m4Y2ul3HtkEJ2BJJnfTYN556iQ6xc/MEvqg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net462": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net47": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net471": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net472": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net48": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net5.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net6.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net7.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Memory", "id": "System.Memory", "version": "4.6.3", "sha512": "sha512-NXcNYlWoXe5cz9sb8Huo6x2dCZVYkhwKtgE00n/MoI8V4ZI/7/t+EI5bOhQFlZfFjjqM8+U6prjU/aARt7H/tA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Numerics.Vectors", "id": "System.Numerics.Vectors", "version": "4.6.1", "sha512": "sha512-/rkvpUeUPlCY/2qYVQKiUsj5IKaXZcy2+SQAGAfemAdyEF5AgIgYOFNSTMWDXo09JWFX9HB+wV1yCyi2Mwi3TA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Reflection.Metadata", "id": "System.Reflection.Metadata", "version": "10.0.0", "sha512": "sha512-se+gXT13zqFct0l43vU8SbjExvQ/4oUD/kyf0OP4dVzxJHQdow49oSVYZ5XlMthXyNTvJ+sdZDBtPoP7yNdKOg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Collections.Immutable"], "net462": ["System.Collections.Immutable"], "net47": ["System.Collections.Immutable"], "net471": ["System.Collections.Immutable"], "net472": ["System.Collections.Immutable"], "net48": ["System.Collections.Immutable"], "net5.0": ["System.Collections.Immutable"], "net6.0": ["System.Collections.Immutable"], "net7.0": ["System.Collections.Immutable"], "net8.0": ["System.Collections.Immutable"], "net9.0": ["System.Collections.Immutable"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Collections.Immutable"], "netcoreapp2.1": ["System.Collections.Immutable"], "netcoreapp2.2": ["System.Collections.Immutable"], "netcoreapp3.0": ["System.Collections.Immutable"], "netcoreapp3.1": ["System.Collections.Immutable"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Collections.Immutable"], "netstandard2.1": ["System.Collections.Immutable"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Reflection.MetadataLoadContext", "id": "System.Reflection.MetadataLoadContext", "version": "10.0.0", "sha512": "sha512-1ZLtiaq0AjW8wkN+DmCLvrNrJRhjNN3RB1s7wSGNEuoqYbG2BiTrOrbvYwxylPJvEyGuKn/nCXs1Z7oEbS5Eew==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net462": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net47": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net471": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net472": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net48": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net5.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net6.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net7.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net8.0": ["System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netcoreapp2.1": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netcoreapp2.2": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netcoreapp3.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netcoreapp3.1": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netstandard2.1": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Runtime.CompilerServices.Unsafe", "id": "System.Runtime.CompilerServices.Unsafe", "version": "6.1.2", "sha512": "sha512-t2aXWJZBkAkRrTOnw31OBELKEVSDD5YvC3O5dXaHFsR66/nRTKm1y3Iq6NwFI5u5IlKrWYfdan66V+GKKkY8hQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Security.Cryptography.ProtectedData", "id": "System.Security.Cryptography.ProtectedData", "version": "10.0.0", "sha512": "sha512-teHxNzoQmQKZz4y0rF/bdfZbHe7JuLujMDJ0Ec+mhdy9/55AbOnGXqOaQ8nlJVVdSeMw8xOL3LDzAce1qFBeBw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory"], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Memory"], "net6.0": ["System.Memory"], "net7.0": ["System.Memory"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory"], "netcoreapp2.1": ["System.Memory"], "netcoreapp2.2": ["System.Memory"], "netcoreapp3.0": ["System.Memory"], "netcoreapp3.1": ["System.Memory"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory"], "netstandard2.1": ["System.Memory"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Text.Encoding.CodePages", "id": "System.Text.Encoding.CodePages", "version": "10.0.0", "sha512": "sha512-okG5NSnh+Q9OYFrwgx0KAaUKXkBmhhI2fjUjB2K9RPboJcpeAplMR4JqbKGOTjHzAZhx6/b05KV3d4B4g7chfQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Threading.Channels", "id": "System.Threading.Channels", "version": "10.0.0", "sha512": "sha512-8eOjQcZanQbdFWIgrf13QPEme7lxkSBucz513v5iEvKZLZEdkNNhHBU21fP2fI02wWGeYTfa+S5eMnTiiDcZQg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "System.Threading.Tasks.Extensions", "id": "System.Threading.Tasks.Extensions", "version": "4.6.3", "sha512": "sha512-zWRHXIBnbfzQE1SamNoW9X5NjEcW/JNAtvVxGKd3bcg71wQVmoI3pDq+WUa2A+temXSNCm7707hmAFwwcYlK0A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "xunit", "id": "xunit", "version": "2.9.3", "sha512": "sha512-3/ayVPC7NQWQENR5REbOgXYsbhoJsmpnxQa5pO4lxbjGbckOs62nsm4kLErzc8ng7V5Xz08uwVjMqaZGJiXCrg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net11": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net20": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net30": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net35": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net40": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net403": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net45": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net451": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net452": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net46": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net461": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net462": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net47": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net471": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net472": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net48": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net5.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net6.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net7.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net8.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net9.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp1.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp1.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp2.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp2.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp2.2": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp3.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp3.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.2": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.3": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.4": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.5": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.6": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard2.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard2.1": ["xunit.core", "xunit.assert", "xunit.analyzers"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "xunit.abstractions", "id": "xunit.abstractions", "version": "2.0.3", "sha512": "sha512-PKJri5f0qEQPFvgY6CZR9XG8JROlWSdC/ZYLkkDQuID++Egn+yWjB+Yf57AZ8U6GRlP7z33uDQ4/r5BZPer2JA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "xunit.analyzers", "id": "xunit.analyzers", "version": "1.26.0", "sha512": "sha512-gJ6shgzXmTVaWJsRCpWrfp1ymSSIwjandPL5myGv3wt+96TkARHFUV1bAS4omFPPkSLkFV7nOssjCeEIorPE+w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "xunit.assert", "id": "xunit.assert", "version": "2.9.3", "sha512": "sha512-wfqwCKAhSWGy9P/dPqDGSIBnPW3sUJ49MEfcTqNF+5BgJwjwtHb9SE7ajYZuR8ymTd8dwxoEGnlJHiejbgDv9w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "xunit.core", "id": "xunit.core", "version": "2.9.3", "sha512": "sha512-cv2sO37qJkIbBL3fXDIn3EPQ2zK8LQ6FkMJNnn1xc9n8mo3ik0URA4MfUNCmwDDCx83ZiJeRrJ0y1ykasojNJg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net11": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net20": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net30": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net35": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net40": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net403": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net45": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net451": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net452": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net46": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net461": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net462": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net47": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net471": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net472": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net48": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net5.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net6.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net7.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net8.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net9.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp1.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp1.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp2.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp2.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp2.2": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp3.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp3.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.2": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.3": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.4": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.5": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.6": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard2.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard2.1": ["xunit.extensibility.core", "xunit.extensibility.execution"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "xunit.extensibility.core", "id": "xunit.extensibility.core", "version": "2.9.3", "sha512": "sha512-S0a+jmIF/DraKuJ+FfWbqXMwvpcKxjP3GdrQzz5pr3GYtgII2XfDdAhkU/5VIWqWon2R6Q31X/9sTGaU+koDaQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["xunit.abstractions"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["xunit.abstractions"], "net451": ["xunit.abstractions"], "net452": ["xunit.abstractions"], "net46": ["xunit.abstractions"], "net461": ["xunit.abstractions"], "net462": ["xunit.abstractions"], "net47": ["xunit.abstractions"], "net471": ["xunit.abstractions"], "net472": ["xunit.abstractions"], "net48": ["xunit.abstractions"], "net5.0": ["xunit.abstractions"], "net6.0": ["xunit.abstractions"], "net7.0": ["xunit.abstractions"], "net8.0": ["xunit.abstractions"], "net9.0": ["xunit.abstractions"], "netcoreapp1.0": ["xunit.abstractions"], "netcoreapp1.1": ["xunit.abstractions"], "netcoreapp2.0": ["xunit.abstractions"], "netcoreapp2.1": ["xunit.abstractions"], "netcoreapp2.2": ["xunit.abstractions"], "netcoreapp3.0": ["xunit.abstractions"], "netcoreapp3.1": ["xunit.abstractions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["xunit.abstractions"], "netstandard1.2": ["xunit.abstractions"], "netstandard1.3": ["xunit.abstractions"], "netstandard1.4": ["xunit.abstractions"], "netstandard1.5": ["xunit.abstractions"], "netstandard1.6": ["xunit.abstractions"], "netstandard2.0": ["xunit.abstractions"], "netstandard2.1": ["xunit.abstractions"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "xunit.extensibility.execution", "id": "xunit.extensibility.execution", "version": "2.9.3", "sha512": "sha512-IidoBSrGw/KhWzZsKXIcStohj/oRFZizbWeUv+0hOFLeMJMegSW5QoGNzmjQuF8BuRtCyPQQukWSYdNnnfPAkA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["xunit.extensibility.core"], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["xunit.extensibility.core"], "net451": ["xunit.extensibility.core"], "net452": ["xunit.extensibility.core"], "net46": ["xunit.extensibility.core"], "net461": ["xunit.extensibility.core"], "net462": ["xunit.extensibility.core"], "net47": ["xunit.extensibility.core"], "net471": ["xunit.extensibility.core"], "net472": ["xunit.extensibility.core"], "net48": ["xunit.extensibility.core"], "net5.0": ["xunit.extensibility.core"], "net6.0": ["xunit.extensibility.core"], "net7.0": ["xunit.extensibility.core"], "net8.0": ["xunit.extensibility.core"], "net9.0": ["xunit.extensibility.core"], "netcoreapp1.0": ["xunit.extensibility.core"], "netcoreapp1.1": ["xunit.extensibility.core"], "netcoreapp2.0": ["xunit.extensibility.core"], "netcoreapp2.1": ["xunit.extensibility.core"], "netcoreapp2.2": ["xunit.extensibility.core"], "netcoreapp3.0": ["xunit.extensibility.core"], "netcoreapp3.1": ["xunit.extensibility.core"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["xunit.extensibility.core"], "netstandard1.2": ["xunit.extensibility.core"], "netstandard1.3": ["xunit.extensibility.core"], "netstandard1.4": ["xunit.extensibility.core"], "netstandard1.5": ["xunit.extensibility.core"], "netstandard1.6": ["xunit.extensibility.core"], "netstandard2.0": ["xunit.extensibility.core"], "netstandard2.1": ["xunit.extensibility.core"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "xunit.runner.utility", "id": "xunit.runner.utility", "version": "2.9.3", "sha512": "sha512-L2zlPa7Ci/Awf5LdeTOvKOanev1bB6xV2Gxbrc+EDDN1hO/j0AIbu5PM8lXgkX69/8xaaex7zrxHZd8gcz2ilQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": ["xunit.abstractions"], "net11": [], "net20": [], "net30": [], "net35": ["xunit.abstractions"], "net40": ["xunit.abstractions"], "net403": ["xunit.abstractions"], "net45": ["xunit.abstractions"], "net451": ["xunit.abstractions"], "net452": ["xunit.abstractions"], "net46": ["xunit.abstractions"], "net461": ["xunit.abstractions"], "net462": ["xunit.abstractions"], "net47": ["xunit.abstractions"], "net471": ["xunit.abstractions"], "net472": ["xunit.abstractions"], "net48": ["xunit.abstractions"], "net5.0": ["xunit.abstractions"], "net6.0": ["xunit.abstractions"], "net7.0": ["xunit.abstractions"], "net8.0": ["xunit.abstractions"], "net9.0": ["xunit.abstractions"], "netcoreapp1.0": ["xunit.abstractions"], "netcoreapp1.1": ["xunit.abstractions"], "netcoreapp2.0": ["xunit.abstractions"], "netcoreapp2.1": ["xunit.abstractions"], "netcoreapp2.2": ["xunit.abstractions"], "netcoreapp3.0": ["xunit.abstractions"], "netcoreapp3.1": ["xunit.abstractions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["xunit.abstractions"], "netstandard1.2": ["xunit.abstractions"], "netstandard1.3": ["xunit.abstractions"], "netstandard1.4": ["xunit.abstractions"], "netstandard1.5": ["xunit.abstractions"], "netstandard1.6": ["xunit.abstractions"], "netstandard2.0": ["xunit.abstractions"], "netstandard2.1": ["xunit.abstractions"]}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, + {"name": "xunit.runner.visualstudio", "id": "xunit.runner.visualstudio", "version": "3.1.5", "sha512": "sha512-b/tvN9kXtUd3wSSYbC80Ic6y/dYlYbNSvatYiv71iozPhXqM4EaOuHujkIJh85b+wY6dgf25k9ENSy8jN6mlvQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net10.0": [], "net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": ["Microsoft.TestPlatform.ObjectModel"], "net48": ["Microsoft.TestPlatform.ObjectModel"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": [], "tools": {}}, ], ) diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 34a8c2f37991..73990a2c6fde 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.55 + +No user-facing changes. + ## 1.7.54 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.55.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.55.md new file mode 100644 index 000000000000..8c13e6f51912 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.55.md @@ -0,0 +1,3 @@ +## 1.7.55 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index 7d3013ec3c05..26e02fb41f41 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.54 +lastReleaseVersion: 1.7.55 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 46ee34eb0ea1..46f964a1bae7 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.54 +version: 1.7.56-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 34a8c2f37991..73990a2c6fde 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.55 + +No user-facing changes. + ## 1.7.54 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.55.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.55.md new file mode 100644 index 000000000000..8c13e6f51912 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.55.md @@ -0,0 +1,3 @@ +## 1.7.55 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index 7d3013ec3c05..26e02fb41f41 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.54 +lastReleaseVersion: 1.7.55 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 47f14d99c479..cb91019ff14a 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.54 +version: 1.7.56-dev groups: - csharp - solorigate diff --git a/csharp/ql/integration-tests/all-platforms/autobuild/global.json b/csharp/ql/integration-tests/all-platforms/autobuild/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/autobuild/global.json +++ b/csharp/ql/integration-tests/all-platforms/autobuild/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/binlog/Files.expected b/csharp/ql/integration-tests/all-platforms/binlog/Files.expected index 1b566ea2fd24..8535872531f9 100644 --- a/csharp/ql/integration-tests/all-platforms/binlog/Files.expected +++ b/csharp/ql/integration-tests/all-platforms/binlog/Files.expected @@ -1,10 +1,10 @@ | a/A.cs:0:0:0:0 | a/A.cs | -| a/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:0:0:0:0 | a/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs | -| a/obj/Debug/net9.0/test.AssemblyInfo.cs:0:0:0:0 | a/obj/Debug/net9.0/test.AssemblyInfo.cs | -| a/obj/Debug/net9.0/test.GlobalUsings.g.cs:0:0:0:0 | a/obj/Debug/net9.0/test.GlobalUsings.g.cs | +| a/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs:0:0:0:0 | a/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs | +| a/obj/Debug/net10.0/test.AssemblyInfo.cs:0:0:0:0 | a/obj/Debug/net10.0/test.AssemblyInfo.cs | +| a/obj/Debug/net10.0/test.GlobalUsings.g.cs:0:0:0:0 | a/obj/Debug/net10.0/test.GlobalUsings.g.cs | | b/B.cs:0:0:0:0 | b/B.cs | -| b/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:0:0:0:0 | b/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs | -| b/obj/Debug/net9.0/test.AssemblyInfo.cs:0:0:0:0 | b/obj/Debug/net9.0/test.AssemblyInfo.cs | -| b/obj/Debug/net9.0/test.GlobalUsings.g.cs:0:0:0:0 | b/obj/Debug/net9.0/test.GlobalUsings.g.cs | -| generated/a/test.csproj (net9.0)/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs:0:0:0:0 | generated/a/test.csproj (net9.0)/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs | -| generated/b/test.csproj (net9.0)/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs:0:0:0:0 | generated/b/test.csproj (net9.0)/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs | +| b/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs:0:0:0:0 | b/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs | +| b/obj/Debug/net10.0/test.AssemblyInfo.cs:0:0:0:0 | b/obj/Debug/net10.0/test.AssemblyInfo.cs | +| b/obj/Debug/net10.0/test.GlobalUsings.g.cs:0:0:0:0 | b/obj/Debug/net10.0/test.GlobalUsings.g.cs | +| generated/a/test.csproj (net10.0)/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs:0:0:0:0 | generated/a/test.csproj (net10.0)/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs | +| generated/b/test.csproj (net10.0)/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs:0:0:0:0 | generated/b/test.csproj (net10.0)/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs | diff --git a/csharp/ql/integration-tests/all-platforms/binlog/a/test.csproj b/csharp/ql/integration-tests/all-platforms/binlog/a/test.csproj index 694035b3acd5..dfb40caafcf9 100644 --- a/csharp/ql/integration-tests/all-platforms/binlog/a/test.csproj +++ b/csharp/ql/integration-tests/all-platforms/binlog/a/test.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/binlog/b/test.csproj b/csharp/ql/integration-tests/all-platforms/binlog/b/test.csproj index 694035b3acd5..dfb40caafcf9 100644 --- a/csharp/ql/integration-tests/all-platforms/binlog/b/test.csproj +++ b/csharp/ql/integration-tests/all-platforms/binlog/b/test.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/binlog/global.json b/csharp/ql/integration-tests/all-platforms/binlog/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/binlog/global.json +++ b/csharp/ql/integration-tests/all-platforms/binlog/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/binlog_multiple/Files.expected b/csharp/ql/integration-tests/all-platforms/binlog_multiple/Files.expected index 1b566ea2fd24..8535872531f9 100644 --- a/csharp/ql/integration-tests/all-platforms/binlog_multiple/Files.expected +++ b/csharp/ql/integration-tests/all-platforms/binlog_multiple/Files.expected @@ -1,10 +1,10 @@ | a/A.cs:0:0:0:0 | a/A.cs | -| a/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:0:0:0:0 | a/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs | -| a/obj/Debug/net9.0/test.AssemblyInfo.cs:0:0:0:0 | a/obj/Debug/net9.0/test.AssemblyInfo.cs | -| a/obj/Debug/net9.0/test.GlobalUsings.g.cs:0:0:0:0 | a/obj/Debug/net9.0/test.GlobalUsings.g.cs | +| a/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs:0:0:0:0 | a/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs | +| a/obj/Debug/net10.0/test.AssemblyInfo.cs:0:0:0:0 | a/obj/Debug/net10.0/test.AssemblyInfo.cs | +| a/obj/Debug/net10.0/test.GlobalUsings.g.cs:0:0:0:0 | a/obj/Debug/net10.0/test.GlobalUsings.g.cs | | b/B.cs:0:0:0:0 | b/B.cs | -| b/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:0:0:0:0 | b/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs | -| b/obj/Debug/net9.0/test.AssemblyInfo.cs:0:0:0:0 | b/obj/Debug/net9.0/test.AssemblyInfo.cs | -| b/obj/Debug/net9.0/test.GlobalUsings.g.cs:0:0:0:0 | b/obj/Debug/net9.0/test.GlobalUsings.g.cs | -| generated/a/test.csproj (net9.0)/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs:0:0:0:0 | generated/a/test.csproj (net9.0)/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs | -| generated/b/test.csproj (net9.0)/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs:0:0:0:0 | generated/b/test.csproj (net9.0)/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs | +| b/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs:0:0:0:0 | b/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs | +| b/obj/Debug/net10.0/test.AssemblyInfo.cs:0:0:0:0 | b/obj/Debug/net10.0/test.AssemblyInfo.cs | +| b/obj/Debug/net10.0/test.GlobalUsings.g.cs:0:0:0:0 | b/obj/Debug/net10.0/test.GlobalUsings.g.cs | +| generated/a/test.csproj (net10.0)/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs:0:0:0:0 | generated/a/test.csproj (net10.0)/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs | +| generated/b/test.csproj (net10.0)/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs:0:0:0:0 | generated/b/test.csproj (net10.0)/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs | diff --git a/csharp/ql/integration-tests/all-platforms/binlog_multiple/a/test.csproj b/csharp/ql/integration-tests/all-platforms/binlog_multiple/a/test.csproj index 694035b3acd5..dfb40caafcf9 100644 --- a/csharp/ql/integration-tests/all-platforms/binlog_multiple/a/test.csproj +++ b/csharp/ql/integration-tests/all-platforms/binlog_multiple/a/test.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/binlog_multiple/b/test.csproj b/csharp/ql/integration-tests/all-platforms/binlog_multiple/b/test.csproj index 694035b3acd5..dfb40caafcf9 100644 --- a/csharp/ql/integration-tests/all-platforms/binlog_multiple/b/test.csproj +++ b/csharp/ql/integration-tests/all-platforms/binlog_multiple/b/test.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/binlog_multiple/global.json b/csharp/ql/integration-tests/all-platforms/binlog_multiple/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/binlog_multiple/global.json +++ b/csharp/ql/integration-tests/all-platforms/binlog_multiple/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/blazor/BlazorTest/BlazorTest.csproj b/csharp/ql/integration-tests/all-platforms/blazor/BlazorTest/BlazorTest.csproj index 6568b3dcfb4b..a3a34b647cd2 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor/BlazorTest/BlazorTest.csproj +++ b/csharp/ql/integration-tests/all-platforms/blazor/BlazorTest/BlazorTest.csproj @@ -1,7 +1,7 @@ - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/blazor/BlazorTest/global.json b/csharp/ql/integration-tests/all-platforms/blazor/BlazorTest/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor/BlazorTest/global.json +++ b/csharp/ql/integration-tests/all-platforms/blazor/BlazorTest/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/blazor/Files.expected b/csharp/ql/integration-tests/all-platforms/blazor/Files.expected index 5242b9f73d15..cd035dc7ae99 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor/Files.expected +++ b/csharp/ql/integration-tests/all-platforms/blazor/Files.expected @@ -8,15 +8,18 @@ | BlazorTest/Components/Routes.razor:0:0:0:0 | BlazorTest/Components/Routes.razor | | BlazorTest/Components/_Imports.razor:0:0:0:0 | BlazorTest/Components/_Imports.razor | | BlazorTest/Program.cs:0:0:0:0 | BlazorTest/Program.cs | -| BlazorTest/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:0:0:0:0 | BlazorTest/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs | -| BlazorTest/obj/Debug/net9.0/BlazorTest.AssemblyInfo.cs:0:0:0:0 | BlazorTest/obj/Debug/net9.0/BlazorTest.AssemblyInfo.cs | -| BlazorTest/obj/Debug/net9.0/BlazorTest.GlobalUsings.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net9.0/BlazorTest.GlobalUsings.g.cs | -| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_App_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_App_razor.g.cs | -| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Layout_MainLayout_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Layout_MainLayout_razor.g.cs | -| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Layout_NavMenu_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Layout_NavMenu_razor.g.cs | -| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_MyInput_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_MyInput_razor.g.cs | -| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_MyOutput_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_MyOutput_razor.g.cs | -| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_Error_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_Error_razor.g.cs | -| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs | -| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Routes_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Routes_razor.g.cs | -| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components__Imports_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components__Imports_razor.g.cs | +| BlazorTest/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs:0:0:0:0 | BlazorTest/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs | +| BlazorTest/obj/Debug/net10.0/BlazorTest.AssemblyInfo.cs:0:0:0:0 | BlazorTest/obj/Debug/net10.0/BlazorTest.AssemblyInfo.cs | +| BlazorTest/obj/Debug/net10.0/BlazorTest.GlobalUsings.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net10.0/BlazorTest.GlobalUsings.g.cs | +| BlazorTest/obj/Debug/net10.0/EmbeddedAttribute.cs:0:0:0:0 | BlazorTest/obj/Debug/net10.0/EmbeddedAttribute.cs | +| BlazorTest/obj/Debug/net10.0/ValidatableTypeAttribute.cs:0:0:0:0 | BlazorTest/obj/Debug/net10.0/ValidatableTypeAttribute.cs | +| BlazorTest/obj/Debug/net10.0/generated/Microsoft.AspNetCore.App.SourceGenerators/Microsoft.AspNetCore.SourceGenerators.PublicProgramSourceGenerator/PublicTopLevelProgram.Generated.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net10.0/generated/Microsoft.AspNetCore.App.SourceGenerators/Microsoft.AspNetCore.SourceGenerators.PublicProgramSourceGenerator/PublicTopLevelProgram.Generated.g.cs | +| BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_App_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_App_razor.g.cs | +| BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Layout_MainLayout_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Layout_MainLayout_razor.g.cs | +| BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Layout_NavMenu_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Layout_NavMenu_razor.g.cs | +| BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_MyInput_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_MyInput_razor.g.cs | +| BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_MyOutput_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_MyOutput_razor.g.cs | +| BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_Error_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_Error_razor.g.cs | +| BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs | +| BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Routes_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Routes_razor.g.cs | +| BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components__Imports_razor.g.cs:0:0:0:0 | BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components__Imports_razor.g.cs | diff --git a/csharp/ql/integration-tests/all-platforms/blazor/XSS.expected b/csharp/ql/integration-tests/all-platforms/blazor/XSS.expected index 2129be6da473..6518eb74a9fc 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor/XSS.expected +++ b/csharp/ql/integration-tests/all-platforms/blazor/XSS.expected @@ -3,8 +3,8 @@ | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | User-provided value | | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | User-provided value | edges -| BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:553:16:561:13 | call to method TypeCheck : String | provenance | Src:MaD:2 MaD:3 | -| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:553:16:561:13 | call to method TypeCheck : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | provenance | Sink:MaD:1 | +| BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:553:16:561:13 | call to method TypeCheck : String | provenance | Src:MaD:2 MaD:3 | +| BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:553:16:561:13 | call to method TypeCheck : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | provenance | Sink:MaD:1 | models | 1 | Sink: Microsoft.AspNetCore.Components; MarkupString; false; MarkupString; (System.String); ; Argument[0]; html-injection; manual | | 2 | Source: Microsoft.AspNetCore.Components; SupplyParameterFromQueryAttribute; false; ; ; Attribute.Getter; ReturnValue; remote; manual | @@ -14,5 +14,5 @@ nodes | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | semmle.label | access to property UrlParam | | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | semmle.label | access to property QueryParam | | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | semmle.label | access to property QueryParam : String | -| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:553:16:561:13 | call to method TypeCheck : String | semmle.label | call to method TypeCheck : String | +| BlazorTest/obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:553:16:561:13 | call to method TypeCheck : String | semmle.label | call to method TypeCheck : String | subpaths diff --git a/csharp/ql/integration-tests/all-platforms/blazor/global.json b/csharp/ql/integration-tests/all-platforms/blazor/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor/global.json +++ b/csharp/ql/integration-tests/all-platforms/blazor/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/BlazorTest/BlazorTest.csproj b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/BlazorTest/BlazorTest.csproj index 6568b3dcfb4b..a3a34b647cd2 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/BlazorTest/BlazorTest.csproj +++ b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/BlazorTest/BlazorTest.csproj @@ -1,7 +1,7 @@ - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/BlazorTest/global.json b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/BlazorTest/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/BlazorTest/global.json +++ b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/BlazorTest/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/global.json b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/global.json +++ b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/conditional_compilation/global.json b/csharp/ql/integration-tests/all-platforms/conditional_compilation/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/conditional_compilation/global.json +++ b/csharp/ql/integration-tests/all-platforms/conditional_compilation/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/conditional_compilation/test.csproj b/csharp/ql/integration-tests/all-platforms/conditional_compilation/test.csproj index d457711bd99f..a421553fde20 100644 --- a/csharp/ql/integration-tests/all-platforms/conditional_compilation/test.csproj +++ b/csharp/ql/integration-tests/all-platforms/conditional_compilation/test.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/cshtml/Files.expected b/csharp/ql/integration-tests/all-platforms/cshtml/Files.expected index 946bef624625..ef4dc96389f2 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml/Files.expected +++ b/csharp/ql/integration-tests/all-platforms/cshtml/Files.expected @@ -1,7 +1,8 @@ | Program.cs:0:0:0:0 | Program.cs | | Views/Home/Index.cshtml:0:0:0:0 | Views/Home/Index.cshtml | -| obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:0:0:0:0 | obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs | -| obj/Debug/net9.0/cshtml.AssemblyInfo.cs:0:0:0:0 | obj/Debug/net9.0/cshtml.AssemblyInfo.cs | -| obj/Debug/net9.0/cshtml.GlobalUsings.g.cs:0:0:0:0 | obj/Debug/net9.0/cshtml.GlobalUsings.g.cs | -| obj/Debug/net9.0/cshtml.RazorAssemblyInfo.cs:0:0:0:0 | obj/Debug/net9.0/cshtml.RazorAssemblyInfo.cs | -| obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Views_Home_Index_cshtml.g.cs:0:0:0:0 | obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Views_Home_Index_cshtml.g.cs | +| obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs:0:0:0:0 | obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs | +| obj/Debug/net10.0/cshtml.AssemblyInfo.cs:0:0:0:0 | obj/Debug/net10.0/cshtml.AssemblyInfo.cs | +| obj/Debug/net10.0/cshtml.GlobalUsings.g.cs:0:0:0:0 | obj/Debug/net10.0/cshtml.GlobalUsings.g.cs | +| obj/Debug/net10.0/cshtml.RazorAssemblyInfo.cs:0:0:0:0 | obj/Debug/net10.0/cshtml.RazorAssemblyInfo.cs | +| obj/Debug/net10.0/generated/Microsoft.AspNetCore.App.SourceGenerators/Microsoft.AspNetCore.SourceGenerators.PublicProgramSourceGenerator/PublicTopLevelProgram.Generated.g.cs:0:0:0:0 | obj/Debug/net10.0/generated/Microsoft.AspNetCore.App.SourceGenerators/Microsoft.AspNetCore.SourceGenerators.PublicProgramSourceGenerator/PublicTopLevelProgram.Generated.g.cs | +| obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Views_Home_Index_cshtml.g.cs:0:0:0:0 | obj/Debug/net10.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Views_Home_Index_cshtml.g.cs | diff --git a/csharp/ql/integration-tests/all-platforms/cshtml/cshtml.csproj b/csharp/ql/integration-tests/all-platforms/cshtml/cshtml.csproj index bdb0e0d0c31a..3fe9d113e46a 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml/cshtml.csproj +++ b/csharp/ql/integration-tests/all-platforms/cshtml/cshtml.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/cshtml/global.json b/csharp/ql/integration-tests/all-platforms/cshtml/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml/global.json +++ b/csharp/ql/integration-tests/all-platforms/cshtml/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/cshtml.csproj b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/cshtml.csproj index bdb0e0d0c31a..3fe9d113e46a 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/cshtml.csproj +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/cshtml.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/global.json b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/global.json +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/cshtml.csproj b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/cshtml.csproj index bdb0e0d0c31a..3fe9d113e46a 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/cshtml.csproj +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/cshtml.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/global.json b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/global.json +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/cshtml.csproj b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/cshtml.csproj index 6568b3dcfb4b..a3a34b647cd2 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/cshtml.csproj +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/cshtml.csproj @@ -1,7 +1,7 @@ - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/global.json b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/global.json +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/diag_dotnet_incompatible/global.json b/csharp/ql/integration-tests/all-platforms/diag_dotnet_incompatible/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/diag_dotnet_incompatible/global.json +++ b/csharp/ql/integration-tests/all-platforms/diag_dotnet_incompatible/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/diag_missing_project_files/global.json b/csharp/ql/integration-tests/all-platforms/diag_missing_project_files/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/diag_missing_project_files/global.json +++ b/csharp/ql/integration-tests/all-platforms/diag_missing_project_files/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/diag_missing_xamarin_sdk/global.json b/csharp/ql/integration-tests/all-platforms/diag_missing_xamarin_sdk/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/diag_missing_xamarin_sdk/global.json +++ b/csharp/ql/integration-tests/all-platforms/diag_missing_xamarin_sdk/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/diag_missing_xamarin_sdk/test.csproj b/csharp/ql/integration-tests/all-platforms/diag_missing_xamarin_sdk/test.csproj index 6bb5914483b3..06f7ce8bff03 100644 --- a/csharp/ql/integration-tests/all-platforms/diag_missing_xamarin_sdk/test.csproj +++ b/csharp/ql/integration-tests/all-platforms/diag_missing_xamarin_sdk/test.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable $(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets diff --git a/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/global.json b/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/global.json +++ b/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/test.csproj b/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/test.csproj index 546e25e0172a..b3b85d194062 100644 --- a/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/test.csproj +++ b/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/test.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_10/test.py b/csharp/ql/integration-tests/all-platforms/dotnet_10/test.py index d34be2b8b506..1f1fe52a4e5e 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_10/test.py +++ b/csharp/ql/integration-tests/all-platforms/dotnet_10/test.py @@ -1,9 +1,7 @@ import pytest -@pytest.mark.skip(reason=".NET 10 info command crashes") def test1(codeql, csharp): codeql.database.create() -@pytest.mark.skip(reason=".NET 10 info command crashes") def test2(codeql, csharp): codeql.database.create(build_mode="none") diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_build/dotnet_build.csproj b/csharp/ql/integration-tests/all-platforms/dotnet_build/dotnet_build.csproj index 694035b3acd5..dfb40caafcf9 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_build/dotnet_build.csproj +++ b/csharp/ql/integration-tests/all-platforms/dotnet_build/dotnet_build.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_build/global.json b/csharp/ql/integration-tests/all-platforms/dotnet_build/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_build/global.json +++ b/csharp/ql/integration-tests/all-platforms/dotnet_build/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_no_args_inject/dotnet_build.csproj b/csharp/ql/integration-tests/all-platforms/dotnet_no_args_inject/dotnet_build.csproj index 694035b3acd5..dfb40caafcf9 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_no_args_inject/dotnet_build.csproj +++ b/csharp/ql/integration-tests/all-platforms/dotnet_no_args_inject/dotnet_build.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_no_args_inject/global.json b/csharp/ql/integration-tests/all-platforms/dotnet_no_args_inject/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_no_args_inject/global.json +++ b/csharp/ql/integration-tests/all-platforms/dotnet_no_args_inject/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_pack/dotnet_pack.csproj b/csharp/ql/integration-tests/all-platforms/dotnet_pack/dotnet_pack.csproj index 694035b3acd5..dfb40caafcf9 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_pack/dotnet_pack.csproj +++ b/csharp/ql/integration-tests/all-platforms/dotnet_pack/dotnet_pack.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_pack/global.json b/csharp/ql/integration-tests/all-platforms/dotnet_pack/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_pack/global.json +++ b/csharp/ql/integration-tests/all-platforms/dotnet_pack/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_publish/dotnet_publish.csproj b/csharp/ql/integration-tests/all-platforms/dotnet_publish/dotnet_publish.csproj index 694035b3acd5..dfb40caafcf9 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_publish/dotnet_publish.csproj +++ b/csharp/ql/integration-tests/all-platforms/dotnet_publish/dotnet_publish.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_publish/global.json b/csharp/ql/integration-tests/all-platforms/dotnet_publish/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_publish/global.json +++ b/csharp/ql/integration-tests/all-platforms/dotnet_publish/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_run/dotnet_run.csproj b/csharp/ql/integration-tests/all-platforms/dotnet_run/dotnet_run.csproj index 8bb8e6387f97..dfc5eaaa0325 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_run/dotnet_run.csproj +++ b/csharp/ql/integration-tests/all-platforms/dotnet_run/dotnet_run.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_run/global.json b/csharp/ql/integration-tests/all-platforms/dotnet_run/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_run/global.json +++ b/csharp/ql/integration-tests/all-platforms/dotnet_run/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/source_generator/Files.expected b/csharp/ql/integration-tests/all-platforms/source_generator/Files.expected index 48151f8387f9..9e84046bb154 100644 --- a/csharp/ql/integration-tests/all-platforms/source_generator/Files.expected +++ b/csharp/ql/integration-tests/all-platforms/source_generator/Files.expected @@ -1,6 +1,7 @@ +| Generated/Microsoft.AspNetCore.App.SourceGenerators/Microsoft.AspNetCore.SourceGenerators.PublicProgramSourceGenerator/PublicTopLevelProgram.Generated.g.cs:0:0:0:0 | Generated/Microsoft.AspNetCore.App.SourceGenerators/Microsoft.AspNetCore.SourceGenerators.PublicProgramSourceGenerator/PublicTopLevelProgram.Generated.g.cs | | Generated/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs:0:0:0:0 | Generated/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs | | Generated/x.cs:0:0:0:0 | Generated/x.cs | | Program.cs:0:0:0:0 | Program.cs | -| obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:0:0:0:0 | obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs | -| obj/Debug/net9.0/test.AssemblyInfo.cs:0:0:0:0 | obj/Debug/net9.0/test.AssemblyInfo.cs | -| obj/Debug/net9.0/test.GlobalUsings.g.cs:0:0:0:0 | obj/Debug/net9.0/test.GlobalUsings.g.cs | +| obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs:0:0:0:0 | obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs | +| obj/Debug/net10.0/test.AssemblyInfo.cs:0:0:0:0 | obj/Debug/net10.0/test.AssemblyInfo.cs | +| obj/Debug/net10.0/test.GlobalUsings.g.cs:0:0:0:0 | obj/Debug/net10.0/test.GlobalUsings.g.cs | diff --git a/csharp/ql/integration-tests/all-platforms/source_generator/global.json b/csharp/ql/integration-tests/all-platforms/source_generator/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/source_generator/global.json +++ b/csharp/ql/integration-tests/all-platforms/source_generator/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/source_generator/test.csproj b/csharp/ql/integration-tests/all-platforms/source_generator/test.csproj index 966a7fdb5c57..bfbc94c22eaa 100644 --- a/csharp/ql/integration-tests/all-platforms/source_generator/test.csproj +++ b/csharp/ql/integration-tests/all-platforms/source_generator/test.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/standalone/DatabaseQualityDiagnostics.expected b/csharp/ql/integration-tests/all-platforms/standalone/DatabaseQualityDiagnostics.expected index e9b4f2e24283..662b7d18f72f 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/DatabaseQualityDiagnostics.expected +++ b/csharp/ql/integration-tests/all-platforms/standalone/DatabaseQualityDiagnostics.expected @@ -1,6 +1,6 @@ diagnosticAttributes -| Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 25 % (threshold 85 %). Percentage of expressions with known type: 58 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityCliSummaryTable | true | -| Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 25 % (threshold 85 %). Percentage of expressions with known type: 58 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityStatusPage | true | -| Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 25 % (threshold 85 %). Percentage of expressions with known type: 58 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityTelemetry | true | +| Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 40 % (threshold 85 %). Percentage of expressions with known type: 64 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityCliSummaryTable | true | +| Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 40 % (threshold 85 %). Percentage of expressions with known type: 64 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityStatusPage | true | +| Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 40 % (threshold 85 %). Percentage of expressions with known type: 64 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityTelemetry | true | #select -| Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 25 % (threshold 85 %). Percentage of expressions with known type: 58 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 25 % (threshold 85 %). Percentage of expressions with known type: 58 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | 1 | +| Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 40 % (threshold 85 %). Percentage of expressions with known type: 64 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 40 % (threshold 85 %). Percentage of expressions with known type: 64 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | 1 | diff --git a/csharp/ql/integration-tests/all-platforms/standalone/global.json b/csharp/ql/integration-tests/all-platforms/standalone/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/global.json +++ b/csharp/ql/integration-tests/all-platforms/standalone/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/standalone/standalone.csproj b/csharp/ql/integration-tests/all-platforms/standalone/standalone.csproj index 8bb8e6387f97..dfc5eaaa0325 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/standalone.csproj +++ b/csharp/ql/integration-tests/all-platforms/standalone/standalone.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/global.json b/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/global.json +++ b/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/standalone.csproj b/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/standalone.csproj index 92e46ddaccf8..a15a29bf12c2 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/standalone.csproj +++ b/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/standalone.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 diff --git a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/global.json b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/global.json index 4c6e2601f69c..376af49c07fa 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/global.json +++ b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/standalone_dependency_dir/proj/global.json b/csharp/ql/integration-tests/all-platforms/standalone_dependency_dir/proj/global.json index 4c6e2601f69c..376af49c07fa 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_dependency_dir/proj/global.json +++ b/csharp/ql/integration-tests/all-platforms/standalone_dependency_dir/proj/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/standalone_dependency_dir/proj/standalone.csproj b/csharp/ql/integration-tests/all-platforms/standalone_dependency_dir/proj/standalone.csproj index 29604e2cbd87..92273963f8c6 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_dependency_dir/proj/standalone.csproj +++ b/csharp/ql/integration-tests/all-platforms/standalone_dependency_dir/proj/standalone.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 diff --git a/csharp/ql/integration-tests/all-platforms/standalone_failed/global.json b/csharp/ql/integration-tests/all-platforms/standalone_failed/global.json index 4c6e2601f69c..376af49c07fa 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_failed/global.json +++ b/csharp/ql/integration-tests/all-platforms/standalone_failed/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/standalone_failed/standalone.csproj b/csharp/ql/integration-tests/all-platforms/standalone_failed/standalone.csproj index 8bb8e6387f97..dfc5eaaa0325 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_failed/standalone.csproj +++ b/csharp/ql/integration-tests/all-platforms/standalone_failed/standalone.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/all-platforms/standalone_resx/Members.expected b/csharp/ql/integration-tests/all-platforms/standalone_resx/Members.expected index 469a8556db63..0de697aab2d9 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_resx/Members.expected +++ b/csharp/ql/integration-tests/all-platforms/standalone_resx/Members.expected @@ -1,4 +1,5 @@ | Program | Program.
$ | +| Program | Program. | | Program | Program.Program | | Resx.Test1.Test2.test | Resx.Test1.Test2.test.Culture | | Resx.Test1.Test2.test | Resx.Test1.Test2.test.GetResourceString | diff --git a/csharp/ql/integration-tests/all-platforms/standalone_resx/global.json b/csharp/ql/integration-tests/all-platforms/standalone_resx/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_resx/global.json +++ b/csharp/ql/integration-tests/all-platforms/standalone_resx/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/standalone_resx/resx.csproj b/csharp/ql/integration-tests/all-platforms/standalone_resx/resx.csproj index 951f79551f23..919ededcdce0 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_resx/resx.csproj +++ b/csharp/ql/integration-tests/all-platforms/standalone_resx/resx.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable Resx.Test1.Test2 diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected index d973f6d8be48..aa00093875ce 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected @@ -1,49 +1,50 @@ -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Accessibility.dll:0:0:0:0 | Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.Forms.dll:0:0:0:0 | Microsoft.VisualBasic.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Registry.AccessControl.dll:0:0:0:0 | Microsoft.Win32.Registry.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.SystemEvents.dll:0:0:0:0 | Microsoft.Win32.SystemEvents, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationCore.dll:0:0:0:0 | PresentationCore, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Aero2.dll:0:0:0:0 | PresentationFramework.Aero2, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Aero.dll:0:0:0:0 | PresentationFramework.Aero, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.AeroLite.dll:0:0:0:0 | PresentationFramework.AeroLite, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Classic.dll:0:0:0:0 | PresentationFramework.Classic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Luna.dll:0:0:0:0 | PresentationFramework.Luna, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Royale.dll:0:0:0:0 | PresentationFramework.Royale, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.dll:0:0:0:0 | PresentationFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationUI.dll:0:0:0:0 | PresentationUI, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/ReachFramework.dll:0:0:0:0 | ReachFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.CodeDom.dll:0:0:0:0 | System.CodeDom, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Configuration.ConfigurationManager.dll:0:0:0:0 | System.Configuration.ConfigurationManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Design.dll:0:0:0:0 | System.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Diagnostics.EventLog.dll:0:0:0:0 | System.Diagnostics.EventLog, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Diagnostics.PerformanceCounter.dll:0:0:0:0 | System.Diagnostics.PerformanceCounter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.DirectoryServices.dll:0:0:0:0 | System.DirectoryServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Drawing.Common.dll:0:0:0:0 | System.Drawing.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Drawing.Design.dll:0:0:0:0 | System.Drawing.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Formats.Nrbf.dll:0:0:0:0 | System.Formats.Nrbf, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.IO.Packaging.dll:0:0:0:0 | System.IO.Packaging, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Printing.dll:0:0:0:0 | System.Printing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Private.Windows.Core.dll:0:0:0:0 | System.Private.Windows.Core, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Resources.Extensions.dll:0:0:0:0 | System.Resources.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Pkcs.dll:0:0:0:0 | System.Security.Cryptography.Pkcs, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.ProtectedData.dll:0:0:0:0 | System.Security.Cryptography.ProtectedData, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Xml.dll:0:0:0:0 | System.Security.Cryptography.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Security.Permissions.dll:0:0:0:0 | System.Security.Permissions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Threading.AccessControl.dll:0:0:0:0 | System.Threading.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Controls.Ribbon.dll:0:0:0:0 | System.Windows.Controls.Ribbon, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Extensions.dll:0:0:0:0 | System.Windows.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Forms.Design.Editors.dll:0:0:0:0 | System.Windows.Forms.Design.Editors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Forms.Design.dll:0:0:0:0 | System.Windows.Forms.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Forms.Primitives.dll:0:0:0:0 | System.Windows.Forms.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Forms.dll:0:0:0:0 | System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Input.Manipulations.dll:0:0:0:0 | System.Windows.Input.Manipulations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Presentation.dll:0:0:0:0 | System.Windows.Presentation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Xaml.dll:0:0:0:0 | System.Xaml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/UIAutomationClient.dll:0:0:0:0 | UIAutomationClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/UIAutomationClientSideProviders.dll:0:0:0:0 | UIAutomationClientSideProviders, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/UIAutomationProvider.dll:0:0:0:0 | UIAutomationProvider, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/UIAutomationTypes.dll:0:0:0:0 | UIAutomationTypes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/WindowsFormsIntegration.dll:0:0:0:0 | WindowsFormsIntegration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/Accessibility.dll:0:0:0:0 | Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/Microsoft.VisualBasic.Forms.dll:0:0:0:0 | Microsoft.VisualBasic.Forms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/Microsoft.Win32.Registry.AccessControl.dll:0:0:0:0 | Microsoft.Win32.Registry.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/Microsoft.Win32.SystemEvents.dll:0:0:0:0 | Microsoft.Win32.SystemEvents, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationCore.dll:0:0:0:0 | PresentationCore, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationFramework.Aero2.dll:0:0:0:0 | PresentationFramework.Aero2, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationFramework.Aero.dll:0:0:0:0 | PresentationFramework.Aero, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationFramework.AeroLite.dll:0:0:0:0 | PresentationFramework.AeroLite, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationFramework.Classic.dll:0:0:0:0 | PresentationFramework.Classic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationFramework.Luna.dll:0:0:0:0 | PresentationFramework.Luna, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationFramework.Royale.dll:0:0:0:0 | PresentationFramework.Royale, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationFramework.dll:0:0:0:0 | PresentationFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationUI.dll:0:0:0:0 | PresentationUI, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/ReachFramework.dll:0:0:0:0 | ReachFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.CodeDom.dll:0:0:0:0 | System.CodeDom, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Configuration.ConfigurationManager.dll:0:0:0:0 | System.Configuration.ConfigurationManager, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Design.dll:0:0:0:0 | System.Design, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Diagnostics.EventLog.dll:0:0:0:0 | System.Diagnostics.EventLog, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Diagnostics.PerformanceCounter.dll:0:0:0:0 | System.Diagnostics.PerformanceCounter, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.DirectoryServices.dll:0:0:0:0 | System.DirectoryServices, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Drawing.Common.dll:0:0:0:0 | System.Drawing.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Drawing.Design.dll:0:0:0:0 | System.Drawing.Design, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Formats.Nrbf.dll:0:0:0:0 | System.Formats.Nrbf, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.IO.Packaging.dll:0:0:0:0 | System.IO.Packaging, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Printing.dll:0:0:0:0 | System.Printing, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Private.Windows.Core.dll:0:0:0:0 | System.Private.Windows.Core, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Private.Windows.GdiPlus.dll:0:0:0:0 | System.Private.Windows.GdiPlus, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Resources.Extensions.dll:0:0:0:0 | System.Resources.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Pkcs.dll:0:0:0:0 | System.Security.Cryptography.Pkcs, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.ProtectedData.dll:0:0:0:0 | System.Security.Cryptography.ProtectedData, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Xml.dll:0:0:0:0 | System.Security.Cryptography.Xml, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Security.Permissions.dll:0:0:0:0 | System.Security.Permissions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Controls.Ribbon.dll:0:0:0:0 | System.Windows.Controls.Ribbon, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Extensions.dll:0:0:0:0 | System.Windows.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Forms.Design.Editors.dll:0:0:0:0 | System.Windows.Forms.Design.Editors, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Forms.Design.dll:0:0:0:0 | System.Windows.Forms.Design, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Forms.Primitives.dll:0:0:0:0 | System.Windows.Forms.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Forms.dll:0:0:0:0 | System.Windows.Forms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Input.Manipulations.dll:0:0:0:0 | System.Windows.Input.Manipulations, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Presentation.dll:0:0:0:0 | System.Windows.Presentation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Primitives.dll:0:0:0:0 | System.Windows.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Xaml.dll:0:0:0:0 | System.Xaml, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/UIAutomationClient.dll:0:0:0:0 | UIAutomationClient, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/UIAutomationClientSideProviders.dll:0:0:0:0 | UIAutomationClientSideProviders, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/UIAutomationProvider.dll:0:0:0:0 | UIAutomationProvider, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/UIAutomationTypes.dll:0:0:0:0 | UIAutomationTypes, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/WindowsFormsIntegration.dll:0:0:0:0 | WindowsFormsIntegration, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/global.json b/csharp/ql/integration-tests/all-platforms/standalone_winforms/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_winforms/global.json +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/winforms.csproj b/csharp/ql/integration-tests/all-platforms/standalone_winforms/winforms.csproj index 355e815cdeec..848cf9fdca56 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_winforms/winforms.csproj +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/winforms.csproj @@ -2,10 +2,10 @@ WinExe - net9.0-windows + net10.0-windows enable true enable - \ No newline at end of file + diff --git a/csharp/ql/integration-tests/linux/compiler_args/CompilerArgs.expected b/csharp/ql/integration-tests/linux/compiler_args/CompilerArgs.expected index ee3063b3c2b8..67a23e2d9413 100644 --- a/csharp/ql/integration-tests/linux/compiler_args/CompilerArgs.expected +++ b/csharp/ql/integration-tests/linux/compiler_args/CompilerArgs.expected @@ -5,199 +5,203 @@ | 4 | /fullpaths | | 5 | /nostdlib+ | | 6 | /errorreport:prompt | -| 7 | /warn:9 | -| 8 | /define:TRACE;DEBUG;NET;NET9_0;NETCOREAPP;NET5_0_OR_GREATER;NET6_0_OR_GREATER;NET7_0_OR_GREATER;NET8_0_OR_GREATER;NET9_0_OR_GREATER;NETCOREAPP1_0_OR_GREATER;NETCOREAPP1_1_OR_GREATER;NETCOREAPP2_0_OR_GREATER;NETCOREAPP2_1_OR_GREATER;NETCOREAPP2_2_OR_GREATER;NETCOREAPP3_0_OR_GREATER;NETCOREAPP3_1_OR_GREATER | +| 7 | /warn:10 | +| 8 | /define:TRACE;DEBUG;NET;NET10_0;NETCOREAPP;NET5_0_OR_GREATER;NET6_0_OR_GREATER;NET7_0_OR_GREATER;NET8_0_OR_GREATER;NET9_0_OR_GREATER;NET10_0_OR_GREATER;NETCOREAPP1_0_OR_GREATER;NETCOREAPP1_1_OR_GREATER;NETCOREAPP2_0_OR_GREATER;NETCOREAPP2_1_OR_GREATER;NETCOREAPP2_2_OR_GREATER;NETCOREAPP3_0_OR_GREATER;NETCOREAPP3_1_OR_GREATER | | 9 | /preferreduilang:en | | 10 | /highentropyva+ | | 11 | /nullable:enable | -| 12 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/Microsoft.CSharp.dll | -| 13 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.Core.dll | -| 14 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.dll | -| 15 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/Microsoft.Win32.Primitives.dll | -| 16 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/Microsoft.Win32.Registry.dll | -| 17 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/mscorlib.dll | -| 18 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/netstandard.dll | -| 19 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.AppContext.dll | -| 20 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Buffers.dll | -| 21 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Collections.Concurrent.dll | -| 22 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Collections.dll | -| 23 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Collections.Immutable.dll | -| 24 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Collections.NonGeneric.dll | -| 25 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Collections.Specialized.dll | -| 26 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ComponentModel.Annotations.dll | -| 27 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ComponentModel.DataAnnotations.dll | -| 28 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ComponentModel.dll | -| 29 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ComponentModel.EventBasedAsync.dll | -| 30 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ComponentModel.Primitives.dll | -| 31 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ComponentModel.TypeConverter.dll | -| 32 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Configuration.dll | -| 33 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Console.dll | -| 34 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Core.dll | -| 35 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Data.Common.dll | -| 36 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Data.DataSetExtensions.dll | -| 37 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Data.dll | -| 38 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.Contracts.dll | -| 39 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.Debug.dll | -| 40 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.DiagnosticSource.dll | -| 41 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.FileVersionInfo.dll | -| 42 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.Process.dll | -| 43 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.StackTrace.dll | -| 44 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.TextWriterTraceListener.dll | -| 45 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.Tools.dll | -| 46 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.TraceSource.dll | -| 47 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.Tracing.dll | -| 48 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.dll | -| 49 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Drawing.dll | -| 50 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Drawing.Primitives.dll | -| 51 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Dynamic.Runtime.dll | -| 52 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Formats.Asn1.dll | -| 53 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Formats.Tar.dll | -| 54 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Globalization.Calendars.dll | -| 55 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Globalization.dll | -| 56 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Globalization.Extensions.dll | -| 57 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.Compression.Brotli.dll | -| 58 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.Compression.dll | -| 59 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.Compression.FileSystem.dll | -| 60 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.Compression.ZipFile.dll | -| 61 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.dll | -| 62 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.FileSystem.AccessControl.dll | -| 63 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.FileSystem.dll | -| 64 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.FileSystem.DriveInfo.dll | -| 65 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.FileSystem.Primitives.dll | -| 66 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.FileSystem.Watcher.dll | -| 67 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.IsolatedStorage.dll | -| 68 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.MemoryMappedFiles.dll | -| 69 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.Pipelines.dll | -| 70 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.Pipes.AccessControl.dll | -| 71 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.Pipes.dll | -| 72 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.UnmanagedMemoryStream.dll | -| 73 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Linq.dll | -| 74 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Linq.Expressions.dll | -| 75 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Linq.Parallel.dll | -| 76 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Linq.Queryable.dll | -| 77 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Memory.dll | -| 78 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.dll | -| 79 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Http.dll | -| 80 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Http.Json.dll | -| 81 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.HttpListener.dll | -| 82 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Mail.dll | -| 83 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.NameResolution.dll | -| 84 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.NetworkInformation.dll | -| 85 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Ping.dll | -| 86 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Primitives.dll | -| 87 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Quic.dll | -| 88 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Requests.dll | -| 89 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Security.dll | -| 90 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.ServicePoint.dll | -| 91 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Sockets.dll | -| 92 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.WebClient.dll | -| 93 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.WebHeaderCollection.dll | -| 94 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.WebProxy.dll | -| 95 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.WebSockets.Client.dll | -| 96 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.WebSockets.dll | -| 97 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Numerics.dll | -| 98 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Numerics.Vectors.dll | -| 99 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ObjectModel.dll | -| 100 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.DispatchProxy.dll | -| 101 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.dll | -| 102 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.Emit.dll | -| 103 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.Emit.ILGeneration.dll | -| 104 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.Emit.Lightweight.dll | -| 105 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.Extensions.dll | -| 106 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.Metadata.dll | -| 107 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.Primitives.dll | -| 108 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.TypeExtensions.dll | -| 109 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Resources.Reader.dll | -| 110 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Resources.ResourceManager.dll | -| 111 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Resources.Writer.dll | -| 112 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.Unsafe.dll | -| 113 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.VisualC.dll | -| 114 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.dll | -| 115 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Extensions.dll | -| 116 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Handles.dll | -| 117 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.dll | -| 118 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.JavaScript.dll | -| 119 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.RuntimeInformation.dll | -| 120 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Intrinsics.dll | -| 121 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Loader.dll | -| 122 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Numerics.dll | -| 123 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Serialization.dll | -| 124 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Formatters.dll | -| 125 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Json.dll | -| 126 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Primitives.dll | -| 127 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Xml.dll | -| 128 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.AccessControl.dll | -| 129 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Claims.dll | -| 130 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Cryptography.Algorithms.dll | -| 131 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Cryptography.Cng.dll | -| 132 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Cryptography.Csp.dll | -| 133 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Cryptography.dll | -| 134 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Cryptography.Encoding.dll | -| 135 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Cryptography.OpenSsl.dll | -| 136 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Cryptography.Primitives.dll | -| 137 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Cryptography.X509Certificates.dll | -| 138 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.dll | -| 139 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Principal.dll | -| 140 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Principal.Windows.dll | -| 141 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.SecureString.dll | -| 142 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ServiceModel.Web.dll | -| 143 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ServiceProcess.dll | -| 144 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Text.Encoding.CodePages.dll | -| 145 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Text.Encoding.dll | -| 146 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Text.Encoding.Extensions.dll | -| 147 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Text.Encodings.Web.dll | -| 148 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Text.Json.dll | -| 149 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Text.RegularExpressions.dll | -| 150 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.Channels.dll | -| 151 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.dll | -| 152 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.Overlapped.dll | -| 153 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.Tasks.Dataflow.dll | -| 154 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.Tasks.dll | -| 155 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.Tasks.Extensions.dll | -| 156 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.Tasks.Parallel.dll | -| 157 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.Thread.dll | -| 158 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.ThreadPool.dll | -| 159 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.Timer.dll | -| 160 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Transactions.dll | -| 161 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Transactions.Local.dll | -| 162 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ValueTuple.dll | -| 163 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Web.dll | -| 164 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Web.HttpUtility.dll | -| 165 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Windows.dll | -| 166 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.dll | -| 167 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.Linq.dll | -| 168 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.ReaderWriter.dll | -| 169 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.Serialization.dll | -| 170 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.XDocument.dll | -| 171 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.XmlDocument.dll | -| 172 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.XmlSerializer.dll | -| 173 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.XPath.dll | -| 174 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.XPath.XDocument.dll | -| 175 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/WindowsBase.dll | -| 176 | /debug+ | -| 177 | /debug:portable | -| 178 | /filealign:512 | -| 179 | /generatedfilesout:obj/Debug/net9.0//generated | -| 180 | /optimize- | -| 181 | /out:obj/Debug/net9.0/test.dll | -| 182 | /refout:obj/Debug/net9.0/refint/test.dll | -| 183 | /target:exe | -| 184 | /warnaserror- | -| 185 | /utf8output | -| 186 | /deterministic+ | -| 187 | /langversion:13.0 | -| 188 | /analyzerconfig:obj/Debug/net9.0/test.GeneratedMSBuildEditorConfig.editorconfig | -| 189 | /analyzerconfig:/usr/share/dotnet/sdk/9.0.304/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_9_default.globalconfig | -| 190 | /analyzer:/usr/share/dotnet/sdk/9.0.304/Sdks/Microsoft.NET.Sdk/targets/../analyzers/Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll | -| 191 | /analyzer:/usr/share/dotnet/sdk/9.0.304/Sdks/Microsoft.NET.Sdk/targets/../analyzers/Microsoft.CodeAnalysis.NetAnalyzers.dll | -| 192 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/analyzers/dotnet/cs/Microsoft.Interop.ComInterfaceGenerator.dll | -| 193 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/analyzers/dotnet/cs/Microsoft.Interop.JavaScript.JSImportGenerator.dll | -| 194 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/analyzers/dotnet/cs/Microsoft.Interop.LibraryImportGenerator.dll | -| 195 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/analyzers/dotnet/cs/Microsoft.Interop.SourceGeneration.dll | -| 196 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/analyzers/dotnet/cs/System.Text.Json.SourceGeneration.dll | -| 197 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/analyzers/dotnet/cs/System.Text.RegularExpressions.Generator.dll | -| 198 | Program.cs | -| 199 | obj/Debug/net9.0/test.GlobalUsings.g.cs | -| 200 | obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs | -| 201 | obj/Debug/net9.0/test.AssemblyInfo.cs | -| 202 | /warnaserror+:NU1605,SYSLIB0011 | +| 12 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/Microsoft.CSharp.dll | +| 13 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/Microsoft.VisualBasic.Core.dll | +| 14 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/Microsoft.VisualBasic.dll | +| 15 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/Microsoft.Win32.Primitives.dll | +| 16 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/Microsoft.Win32.Registry.dll | +| 17 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/mscorlib.dll | +| 18 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/netstandard.dll | +| 19 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.AppContext.dll | +| 20 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Buffers.dll | +| 21 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Collections.Concurrent.dll | +| 22 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Collections.dll | +| 23 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Collections.Immutable.dll | +| 24 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Collections.NonGeneric.dll | +| 25 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Collections.Specialized.dll | +| 26 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.ComponentModel.Annotations.dll | +| 27 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.ComponentModel.DataAnnotations.dll | +| 28 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.ComponentModel.dll | +| 29 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.ComponentModel.EventBasedAsync.dll | +| 30 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.ComponentModel.Primitives.dll | +| 31 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.ComponentModel.TypeConverter.dll | +| 32 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Configuration.dll | +| 33 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Console.dll | +| 34 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Core.dll | +| 35 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Data.Common.dll | +| 36 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Data.DataSetExtensions.dll | +| 37 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Data.dll | +| 38 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Diagnostics.Contracts.dll | +| 39 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Diagnostics.Debug.dll | +| 40 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Diagnostics.DiagnosticSource.dll | +| 41 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Diagnostics.FileVersionInfo.dll | +| 42 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Diagnostics.Process.dll | +| 43 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Diagnostics.StackTrace.dll | +| 44 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Diagnostics.TextWriterTraceListener.dll | +| 45 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Diagnostics.Tools.dll | +| 46 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Diagnostics.TraceSource.dll | +| 47 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Diagnostics.Tracing.dll | +| 48 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.dll | +| 49 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Drawing.dll | +| 50 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Drawing.Primitives.dll | +| 51 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Dynamic.Runtime.dll | +| 52 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Formats.Asn1.dll | +| 53 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Formats.Tar.dll | +| 54 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Globalization.Calendars.dll | +| 55 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Globalization.dll | +| 56 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Globalization.Extensions.dll | +| 57 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.IO.Compression.Brotli.dll | +| 58 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.IO.Compression.dll | +| 59 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.IO.Compression.FileSystem.dll | +| 60 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.IO.Compression.ZipFile.dll | +| 61 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.IO.dll | +| 62 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.IO.FileSystem.AccessControl.dll | +| 63 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.IO.FileSystem.dll | +| 64 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.IO.FileSystem.DriveInfo.dll | +| 65 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.IO.FileSystem.Primitives.dll | +| 66 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.IO.FileSystem.Watcher.dll | +| 67 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.IO.IsolatedStorage.dll | +| 68 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.IO.MemoryMappedFiles.dll | +| 69 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.IO.Pipelines.dll | +| 70 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.IO.Pipes.AccessControl.dll | +| 71 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.IO.Pipes.dll | +| 72 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.IO.UnmanagedMemoryStream.dll | +| 73 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Linq.AsyncEnumerable.dll | +| 74 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Linq.dll | +| 75 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Linq.Expressions.dll | +| 76 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Linq.Parallel.dll | +| 77 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Linq.Queryable.dll | +| 78 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Memory.dll | +| 79 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.dll | +| 80 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.Http.dll | +| 81 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.Http.Json.dll | +| 82 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.HttpListener.dll | +| 83 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.Mail.dll | +| 84 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.NameResolution.dll | +| 85 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.NetworkInformation.dll | +| 86 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.Ping.dll | +| 87 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.Primitives.dll | +| 88 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.Quic.dll | +| 89 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.Requests.dll | +| 90 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.Security.dll | +| 91 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.ServerSentEvents.dll | +| 92 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.ServicePoint.dll | +| 93 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.Sockets.dll | +| 94 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.WebClient.dll | +| 95 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.WebHeaderCollection.dll | +| 96 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.WebProxy.dll | +| 97 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.WebSockets.Client.dll | +| 98 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Net.WebSockets.dll | +| 99 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Numerics.dll | +| 100 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Numerics.Vectors.dll | +| 101 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.ObjectModel.dll | +| 102 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Reflection.DispatchProxy.dll | +| 103 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Reflection.dll | +| 104 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Reflection.Emit.dll | +| 105 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Reflection.Emit.ILGeneration.dll | +| 106 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Reflection.Emit.Lightweight.dll | +| 107 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Reflection.Extensions.dll | +| 108 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Reflection.Metadata.dll | +| 109 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Reflection.Primitives.dll | +| 110 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Reflection.TypeExtensions.dll | +| 111 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Resources.Reader.dll | +| 112 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Resources.ResourceManager.dll | +| 113 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Resources.Writer.dll | +| 114 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Runtime.CompilerServices.Unsafe.dll | +| 115 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Runtime.CompilerServices.VisualC.dll | +| 116 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Runtime.dll | +| 117 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Runtime.Extensions.dll | +| 118 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Runtime.Handles.dll | +| 119 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Runtime.InteropServices.dll | +| 120 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Runtime.InteropServices.JavaScript.dll | +| 121 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Runtime.InteropServices.RuntimeInformation.dll | +| 122 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Runtime.Intrinsics.dll | +| 123 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Runtime.Loader.dll | +| 124 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Runtime.Numerics.dll | +| 125 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Runtime.Serialization.dll | +| 126 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Formatters.dll | +| 127 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Json.dll | +| 128 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Primitives.dll | +| 129 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Xml.dll | +| 130 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Security.AccessControl.dll | +| 131 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Security.Claims.dll | +| 132 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Security.Cryptography.Algorithms.dll | +| 133 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Security.Cryptography.Cng.dll | +| 134 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Security.Cryptography.Csp.dll | +| 135 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Security.Cryptography.dll | +| 136 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Security.Cryptography.Encoding.dll | +| 137 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Security.Cryptography.OpenSsl.dll | +| 138 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Security.Cryptography.Primitives.dll | +| 139 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Security.Cryptography.X509Certificates.dll | +| 140 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Security.dll | +| 141 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Security.Principal.dll | +| 142 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Security.Principal.Windows.dll | +| 143 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Security.SecureString.dll | +| 144 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.ServiceModel.Web.dll | +| 145 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.ServiceProcess.dll | +| 146 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Text.Encoding.CodePages.dll | +| 147 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Text.Encoding.dll | +| 148 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Text.Encoding.Extensions.dll | +| 149 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Text.Encodings.Web.dll | +| 150 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Text.Json.dll | +| 151 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Text.RegularExpressions.dll | +| 152 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Threading.AccessControl.dll | +| 153 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Threading.Channels.dll | +| 154 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Threading.dll | +| 155 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Threading.Overlapped.dll | +| 156 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Threading.Tasks.Dataflow.dll | +| 157 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Threading.Tasks.dll | +| 158 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Threading.Tasks.Extensions.dll | +| 159 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Threading.Tasks.Parallel.dll | +| 160 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Threading.Thread.dll | +| 161 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Threading.ThreadPool.dll | +| 162 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Threading.Timer.dll | +| 163 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Transactions.dll | +| 164 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Transactions.Local.dll | +| 165 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.ValueTuple.dll | +| 166 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Web.dll | +| 167 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Web.HttpUtility.dll | +| 168 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Windows.dll | +| 169 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Xml.dll | +| 170 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Xml.Linq.dll | +| 171 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Xml.ReaderWriter.dll | +| 172 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Xml.Serialization.dll | +| 173 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Xml.XDocument.dll | +| 174 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Xml.XmlDocument.dll | +| 175 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Xml.XmlSerializer.dll | +| 176 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Xml.XPath.dll | +| 177 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/System.Xml.XPath.XDocument.dll | +| 178 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/WindowsBase.dll | +| 179 | /features:"InterceptorsNamespaces=;Microsoft.Extensions.Validation.Generated" | +| 180 | /debug+ | +| 181 | /debug:portable | +| 182 | /filealign:512 | +| 183 | /generatedfilesout:obj/Debug/net10.0//generated | +| 184 | /optimize- | +| 185 | /out:obj/Debug/net10.0/test.dll | +| 186 | /refout:obj/Debug/net10.0/refint/test.dll | +| 187 | /target:exe | +| 188 | /warnaserror- | +| 189 | /utf8output | +| 190 | /deterministic+ | +| 191 | /langversion:14.0 | +| 192 | /analyzerconfig:obj/Debug/net10.0/test.GeneratedMSBuildEditorConfig.editorconfig | +| 193 | /analyzerconfig:/usr/share/dotnet/sdk/10.0.100/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_10_default.globalconfig | +| 194 | /analyzer:/usr/share/dotnet/sdk/10.0.100/Sdks/Microsoft.NET.Sdk/targets/../analyzers/Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll | +| 195 | /analyzer:/usr/share/dotnet/sdk/10.0.100/Sdks/Microsoft.NET.Sdk/targets/../analyzers/Microsoft.CodeAnalysis.NetAnalyzers.dll | +| 196 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/analyzers/dotnet/cs/Microsoft.Interop.ComInterfaceGenerator.dll | +| 197 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/analyzers/dotnet/cs/Microsoft.Interop.JavaScript.JSImportGenerator.dll | +| 198 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/analyzers/dotnet/cs/Microsoft.Interop.LibraryImportGenerator.dll | +| 199 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/analyzers/dotnet/cs/Microsoft.Interop.SourceGeneration.dll | +| 200 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/analyzers/dotnet/cs/System.Text.Json.SourceGeneration.dll | +| 201 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/analyzers/dotnet/cs/System.Text.RegularExpressions.Generator.dll | +| 202 | Program.cs | +| 203 | obj/Debug/net10.0/test.GlobalUsings.g.cs | +| 204 | obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs | +| 205 | obj/Debug/net10.0/test.AssemblyInfo.cs | +| 206 | /warnaserror+:NU1605,SYSLIB0011 | diff --git a/csharp/ql/integration-tests/linux/compiler_args/global.json b/csharp/ql/integration-tests/linux/compiler_args/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/linux/compiler_args/global.json +++ b/csharp/ql/integration-tests/linux/compiler_args/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/linux/compiler_args/test.csproj b/csharp/ql/integration-tests/linux/compiler_args/test.csproj index 8bb8e6387f97..dfc5eaaa0325 100644 --- a/csharp/ql/integration-tests/linux/compiler_args/test.csproj +++ b/csharp/ql/integration-tests/linux/compiler_args/test.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/global.json b/csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/global.json +++ b/csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/test.csproj b/csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/test.csproj index 92e46ddaccf8..a15a29bf12c2 100644 --- a/csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/test.csproj +++ b/csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/test.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 diff --git a/csharp/ql/integration-tests/posix/dotnet_test/dotnet_test.csproj b/csharp/ql/integration-tests/posix/dotnet_test/dotnet_test.csproj index ae7979043154..149082b384cd 100644 --- a/csharp/ql/integration-tests/posix/dotnet_test/dotnet_test.csproj +++ b/csharp/ql/integration-tests/posix/dotnet_test/dotnet_test.csproj @@ -1,7 +1,7 @@ - net9.0 + net10.0 enable false diff --git a/csharp/ql/integration-tests/posix/dotnet_test/global.json b/csharp/ql/integration-tests/posix/dotnet_test/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/posix/dotnet_test/global.json +++ b/csharp/ql/integration-tests/posix/dotnet_test/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/posix/dotnet_test_mstest/dotnet_test_mstest.csproj b/csharp/ql/integration-tests/posix/dotnet_test_mstest/dotnet_test_mstest.csproj index 45ccf93ee740..9237cbc44efc 100644 --- a/csharp/ql/integration-tests/posix/dotnet_test_mstest/dotnet_test_mstest.csproj +++ b/csharp/ql/integration-tests/posix/dotnet_test_mstest/dotnet_test_mstest.csproj @@ -1,7 +1,7 @@ - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/posix/dotnet_test_mstest/global.json b/csharp/ql/integration-tests/posix/dotnet_test_mstest/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/posix/dotnet_test_mstest/global.json +++ b/csharp/ql/integration-tests/posix/dotnet_test_mstest/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/posix/inherit-env-vars/global.json b/csharp/ql/integration-tests/posix/inherit-env-vars/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/posix/inherit-env-vars/global.json +++ b/csharp/ql/integration-tests/posix/inherit-env-vars/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies/Assemblies.expected index 05b3826c73cf..619475882b51 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies/Assemblies.expected +++ b/csharp/ql/integration-tests/posix/standalone_dependencies/Assemblies.expected @@ -1,167 +1,170 @@ | test-db/working/packages/avalara.avatax/23.11.0/lib/netstandard2.0/Avalara.AvaTax.RestClient.dll:0:0:0:0 | Avalara.AvaTax.RestClient, Version=0.0.0.0, Culture=neutral, PublicKeyToken=be94eb8ba37fd33c | | test-db/working/packages/microsoft.bcl.asyncinterfaces/8.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll:0:0:0:0 | Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Console.dll:0:0:0:0 | System.Console, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipelines.dll:0:0:0:0 | System.IO.Pipelines, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.dll:0:0:0:0 | System.IO, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Console.dll:0:0:0:0 | System.Console, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Pipelines.dll:0:0:0:0 | System.IO.Pipelines, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.dll:0:0:0:0 | System.IO, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.AsyncEnumerable.dll:0:0:0:0 | System.Linq.AsyncEnumerable, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.ServerSentEvents.dll:0:0:0:0 | System.Net.ServerSentEvents, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.AccessControl.dll:0:0:0:0 | System.Threading.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | | test-db/working/packages/newtonsoft.json/12.0.1/lib/netstandard2.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies/global.json index 4c6e2601f69c..376af49c07fa 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies/standalone.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies/standalone.csproj index 58df1d80a862..88362e96131a 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies/standalone.csproj +++ b/csharp/ql/integration-tests/posix/standalone_dependencies/standalone.csproj @@ -2,7 +2,7 @@ Exe - net9.0;net6.0;netcoreapp3.1;netstandard2.0;net48 + net10.0;net6.0;netcoreapp3.1;netstandard2.0;net48 diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_executing_runtime/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_executing_runtime/Assemblies.expected index bbfd3417df37..0b408640770b 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_executing_runtime/Assemblies.expected +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_executing_runtime/Assemblies.expected @@ -23,6 +23,7 @@ | [...]/csharp/tools/[...]/Mono.Posix.NETStandard.dll | | [...]/csharp/tools/[...]/NaturalSort.Extension.dll | | [...]/csharp/tools/[...]/Newtonsoft.Json.dll | +| [...]/csharp/tools/[...]/NuGet.Versioning.dll | | [...]/csharp/tools/[...]/StructuredLogger.dll | | [...]/csharp/tools/[...]/System.AppContext.dll | | [...]/csharp/tools/[...]/System.Buffers.dll | @@ -84,6 +85,7 @@ | [...]/csharp/tools/[...]/System.IO.Pipes.dll | | [...]/csharp/tools/[...]/System.IO.UnmanagedMemoryStream.dll | | [...]/csharp/tools/[...]/System.IO.dll | +| [...]/csharp/tools/[...]/System.Linq.AsyncEnumerable.dll | | [...]/csharp/tools/[...]/System.Linq.Expressions.dll | | [...]/csharp/tools/[...]/System.Linq.Parallel.dll | | [...]/csharp/tools/[...]/System.Linq.Queryable.dll | @@ -100,6 +102,7 @@ | [...]/csharp/tools/[...]/System.Net.Quic.dll | | [...]/csharp/tools/[...]/System.Net.Requests.dll | | [...]/csharp/tools/[...]/System.Net.Security.dll | +| [...]/csharp/tools/[...]/System.Net.ServerSentEvents.dll | | [...]/csharp/tools/[...]/System.Net.ServicePoint.dll | | [...]/csharp/tools/[...]/System.Net.Sockets.dll | | [...]/csharp/tools/[...]/System.Net.WebClient.dll | @@ -168,6 +171,7 @@ | [...]/csharp/tools/[...]/System.Text.Encodings.Web.dll | | [...]/csharp/tools/[...]/System.Text.Json.dll | | [...]/csharp/tools/[...]/System.Text.RegularExpressions.dll | +| [...]/csharp/tools/[...]/System.Threading.AccessControl.dll | | [...]/csharp/tools/[...]/System.Threading.Channels.dll | | [...]/csharp/tools/[...]/System.Threading.Overlapped.dll | | [...]/csharp/tools/[...]/System.Threading.Tasks.Dataflow.dll | diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/Assemblies.expected index 05b3826c73cf..619475882b51 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/Assemblies.expected +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/Assemblies.expected @@ -1,167 +1,170 @@ | test-db/working/packages/avalara.avatax/23.11.0/lib/netstandard2.0/Avalara.AvaTax.RestClient.dll:0:0:0:0 | Avalara.AvaTax.RestClient, Version=0.0.0.0, Culture=neutral, PublicKeyToken=be94eb8ba37fd33c | | test-db/working/packages/microsoft.bcl.asyncinterfaces/8.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll:0:0:0:0 | Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Console.dll:0:0:0:0 | System.Console, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipelines.dll:0:0:0:0 | System.IO.Pipelines, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.dll:0:0:0:0 | System.IO, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Console.dll:0:0:0:0 | System.Console, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Pipelines.dll:0:0:0:0 | System.IO.Pipelines, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.dll:0:0:0:0 | System.IO, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.AsyncEnumerable.dll:0:0:0:0 | System.Linq.AsyncEnumerable, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.ServerSentEvents.dll:0:0:0:0 | System.Net.ServerSentEvents, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.AccessControl.dll:0:0:0:0 | System.Threading.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | | test-db/working/packages/newtonsoft.json/12.0.1/lib/netstandard2.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/global.json index 4c6e2601f69c..376af49c07fa 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/standalone1.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/standalone1.csproj index 45639c4ecd27..998b6402127b 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/standalone1.csproj +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/standalone1.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/standalone2.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/standalone2.csproj index 40d116df47fe..d5249ad8ef5a 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/standalone2.csproj +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/standalone2.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/Assemblies.expected index 1e4df659dedd..7e3b8f6e4531 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/Assemblies.expected +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/Assemblies.expected @@ -1,164 +1,167 @@ -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Console.dll:0:0:0:0 | System.Console, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipelines.dll:0:0:0:0 | System.IO.Pipelines, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.dll:0:0:0:0 | System.IO, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Console.dll:0:0:0:0 | System.Console, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Pipelines.dll:0:0:0:0 | System.IO.Pipelines, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.dll:0:0:0:0 | System.IO, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.AsyncEnumerable.dll:0:0:0:0 | System.Linq.AsyncEnumerable, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.ServerSentEvents.dll:0:0:0:0 | System.Net.ServerSentEvents, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.AccessControl.dll:0:0:0:0 | System.Threading.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/global.json index 4c6e2601f69c..376af49c07fa 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/net70.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/net70.csproj index 694035b3acd5..dfb40caafcf9 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/net70.csproj +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/net70.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/Assemblies.expected index 0934f8063db0..10fa68733831 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/Assemblies.expected +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/Assemblies.expected @@ -1 +1 @@ -| test-db/working/packages/newtonsoft.json/6.0.4/lib/net45/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | +| test-db/working/packages/newtonsoft.json/13.0.1/lib/netstandard2.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test_sdk.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test_sdk.csproj index 3beee773f83e..58c469d39c7c 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test_sdk.csproj +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test_sdk.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 @@ -11,6 +11,6 @@ - + diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/proj/proj.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/proj/proj.csproj index e16e4f4b6a64..6010c6c7f37c 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/proj/proj.csproj +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/proj/proj.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj index e16e4f4b6a64..6010c6c7f37c 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/proj/proj.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/proj/proj.csproj index e16e4f4b6a64..6010c6c7f37c 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/proj/proj.csproj +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/proj/proj.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/proj/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/proj/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/proj/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/proj/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/d1/test1.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/d1/test1.csproj index 47798ff95a4c..faba700d1104 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/d1/test1.csproj +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/d1/test1.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/d2/test2.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/d2/test2.csproj index 29604e2cbd87..92273963f8c6 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/d2/test2.csproj +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/d2/test2.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/posix/warn_as_error/WarnAsError.csproj b/csharp/ql/integration-tests/posix/warn_as_error/WarnAsError.csproj index 3c234e423027..2c22edadfc9e 100644 --- a/csharp/ql/integration-tests/posix/warn_as_error/WarnAsError.csproj +++ b/csharp/ql/integration-tests/posix/warn_as_error/WarnAsError.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable true diff --git a/csharp/ql/integration-tests/posix/warn_as_error/global.json b/csharp/ql/integration-tests/posix/warn_as_error/global.json index d488208a2a75..481e95ec7be1 100644 --- a/csharp/ql/integration-tests/posix/warn_as_error/global.json +++ b/csharp/ql/integration-tests/posix/warn_as_error/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/windows/standalone_dependencies/Assemblies.expected b/csharp/ql/integration-tests/windows/standalone_dependencies/Assemblies.expected index 0b4ea613c8e8..90a2806afe5f 100644 --- a/csharp/ql/integration-tests/windows/standalone_dependencies/Assemblies.expected +++ b/csharp/ql/integration-tests/windows/standalone_dependencies/Assemblies.expected @@ -1,213 +1,217 @@ | test-db/working/packages/avalara.avatax/23.11.0/lib/netstandard2.0/Avalara.AvaTax.RestClient.dll:0:0:0:0 | Avalara.AvaTax.RestClient, Version=0.0.0.0, Culture=neutral, PublicKeyToken=be94eb8ba37fd33c | | test-db/working/packages/microsoft.bcl.asyncinterfaces/8.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll:0:0:0:0 | Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Console.dll:0:0:0:0 | System.Console, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipelines.dll:0:0:0:0 | System.IO.Pipelines, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.dll:0:0:0:0 | System.IO, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Accessibility.dll:0:0:0:0 | Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.Forms.dll:0:0:0:0 | Microsoft.VisualBasic.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Registry.AccessControl.dll:0:0:0:0 | Microsoft.Win32.Registry.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.SystemEvents.dll:0:0:0:0 | Microsoft.Win32.SystemEvents, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationCore.dll:0:0:0:0 | PresentationCore, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Aero2.dll:0:0:0:0 | PresentationFramework.Aero2, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Aero.dll:0:0:0:0 | PresentationFramework.Aero, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.AeroLite.dll:0:0:0:0 | PresentationFramework.AeroLite, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Classic.dll:0:0:0:0 | PresentationFramework.Classic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Luna.dll:0:0:0:0 | PresentationFramework.Luna, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Royale.dll:0:0:0:0 | PresentationFramework.Royale, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.dll:0:0:0:0 | PresentationFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationUI.dll:0:0:0:0 | PresentationUI, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/ReachFramework.dll:0:0:0:0 | ReachFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.CodeDom.dll:0:0:0:0 | System.CodeDom, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Configuration.ConfigurationManager.dll:0:0:0:0 | System.Configuration.ConfigurationManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Design.dll:0:0:0:0 | System.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Diagnostics.EventLog.dll:0:0:0:0 | System.Diagnostics.EventLog, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Diagnostics.PerformanceCounter.dll:0:0:0:0 | System.Diagnostics.PerformanceCounter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.DirectoryServices.dll:0:0:0:0 | System.DirectoryServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Drawing.Common.dll:0:0:0:0 | System.Drawing.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Drawing.Design.dll:0:0:0:0 | System.Drawing.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Formats.Nrbf.dll:0:0:0:0 | System.Formats.Nrbf, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.IO.Packaging.dll:0:0:0:0 | System.IO.Packaging, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Printing.dll:0:0:0:0 | System.Printing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Private.Windows.Core.dll:0:0:0:0 | System.Private.Windows.Core, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Resources.Extensions.dll:0:0:0:0 | System.Resources.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Pkcs.dll:0:0:0:0 | System.Security.Cryptography.Pkcs, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.ProtectedData.dll:0:0:0:0 | System.Security.Cryptography.ProtectedData, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Xml.dll:0:0:0:0 | System.Security.Cryptography.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Security.Permissions.dll:0:0:0:0 | System.Security.Permissions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Threading.AccessControl.dll:0:0:0:0 | System.Threading.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Controls.Ribbon.dll:0:0:0:0 | System.Windows.Controls.Ribbon, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Extensions.dll:0:0:0:0 | System.Windows.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Forms.Design.Editors.dll:0:0:0:0 | System.Windows.Forms.Design.Editors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Forms.Design.dll:0:0:0:0 | System.Windows.Forms.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Forms.Primitives.dll:0:0:0:0 | System.Windows.Forms.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Forms.dll:0:0:0:0 | System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Input.Manipulations.dll:0:0:0:0 | System.Windows.Input.Manipulations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Presentation.dll:0:0:0:0 | System.Windows.Presentation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Xaml.dll:0:0:0:0 | System.Xaml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/UIAutomationClient.dll:0:0:0:0 | UIAutomationClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/UIAutomationClientSideProviders.dll:0:0:0:0 | UIAutomationClientSideProviders, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/UIAutomationProvider.dll:0:0:0:0 | UIAutomationProvider, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/UIAutomationTypes.dll:0:0:0:0 | UIAutomationTypes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/WindowsFormsIntegration.dll:0:0:0:0 | WindowsFormsIntegration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Console.dll:0:0:0:0 | System.Console, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Pipelines.dll:0:0:0:0 | System.IO.Pipelines, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.IO.dll:0:0:0:0 | System.IO, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.AsyncEnumerable.dll:0:0:0:0 | System.Linq.AsyncEnumerable, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.ServerSentEvents.dll:0:0:0:0 | System.Net.ServerSentEvents, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.AccessControl.dll:0:0:0:0 | System.Threading.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/Accessibility.dll:0:0:0:0 | Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/Microsoft.VisualBasic.Forms.dll:0:0:0:0 | Microsoft.VisualBasic.Forms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/Microsoft.Win32.Registry.AccessControl.dll:0:0:0:0 | Microsoft.Win32.Registry.AccessControl, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/Microsoft.Win32.SystemEvents.dll:0:0:0:0 | Microsoft.Win32.SystemEvents, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationCore.dll:0:0:0:0 | PresentationCore, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationFramework.Aero2.dll:0:0:0:0 | PresentationFramework.Aero2, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationFramework.Aero.dll:0:0:0:0 | PresentationFramework.Aero, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationFramework.AeroLite.dll:0:0:0:0 | PresentationFramework.AeroLite, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationFramework.Classic.dll:0:0:0:0 | PresentationFramework.Classic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationFramework.Luna.dll:0:0:0:0 | PresentationFramework.Luna, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationFramework.Royale.dll:0:0:0:0 | PresentationFramework.Royale, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationFramework.dll:0:0:0:0 | PresentationFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/PresentationUI.dll:0:0:0:0 | PresentationUI, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/ReachFramework.dll:0:0:0:0 | ReachFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.CodeDom.dll:0:0:0:0 | System.CodeDom, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Configuration.ConfigurationManager.dll:0:0:0:0 | System.Configuration.ConfigurationManager, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Design.dll:0:0:0:0 | System.Design, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Diagnostics.EventLog.dll:0:0:0:0 | System.Diagnostics.EventLog, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Diagnostics.PerformanceCounter.dll:0:0:0:0 | System.Diagnostics.PerformanceCounter, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.DirectoryServices.dll:0:0:0:0 | System.DirectoryServices, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Drawing.Common.dll:0:0:0:0 | System.Drawing.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Drawing.Design.dll:0:0:0:0 | System.Drawing.Design, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Formats.Nrbf.dll:0:0:0:0 | System.Formats.Nrbf, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.IO.Packaging.dll:0:0:0:0 | System.IO.Packaging, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Printing.dll:0:0:0:0 | System.Printing, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Private.Windows.Core.dll:0:0:0:0 | System.Private.Windows.Core, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Private.Windows.GdiPlus.dll:0:0:0:0 | System.Private.Windows.GdiPlus, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Resources.Extensions.dll:0:0:0:0 | System.Resources.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Pkcs.dll:0:0:0:0 | System.Security.Cryptography.Pkcs, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.ProtectedData.dll:0:0:0:0 | System.Security.Cryptography.ProtectedData, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Security.Cryptography.Xml.dll:0:0:0:0 | System.Security.Cryptography.Xml, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Security.Permissions.dll:0:0:0:0 | System.Security.Permissions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Controls.Ribbon.dll:0:0:0:0 | System.Windows.Controls.Ribbon, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Extensions.dll:0:0:0:0 | System.Windows.Extensions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Forms.Design.Editors.dll:0:0:0:0 | System.Windows.Forms.Design.Editors, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Forms.Design.dll:0:0:0:0 | System.Windows.Forms.Design, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Forms.Primitives.dll:0:0:0:0 | System.Windows.Forms.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Forms.dll:0:0:0:0 | System.Windows.Forms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Input.Manipulations.dll:0:0:0:0 | System.Windows.Input.Manipulations, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Presentation.dll:0:0:0:0 | System.Windows.Presentation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Windows.Primitives.dll:0:0:0:0 | System.Windows.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/System.Xaml.dll:0:0:0:0 | System.Xaml, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/UIAutomationClient.dll:0:0:0:0 | UIAutomationClient, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/UIAutomationClientSideProviders.dll:0:0:0:0 | UIAutomationClientSideProviders, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/UIAutomationProvider.dll:0:0:0:0 | UIAutomationProvider, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/UIAutomationTypes.dll:0:0:0:0 | UIAutomationTypes, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/10.0.0/ref/net10.0/WindowsFormsIntegration.dll:0:0:0:0 | WindowsFormsIntegration, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | | test-db/working/packages/newtonsoft.json/12.0.1/lib/netstandard2.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/windows/standalone_dependencies/global.json b/csharp/ql/integration-tests/windows/standalone_dependencies/global.json index 4c6e2601f69c..376af49c07fa 100644 --- a/csharp/ql/integration-tests/windows/standalone_dependencies/global.json +++ b/csharp/ql/integration-tests/windows/standalone_dependencies/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.304" + "version": "10.0.100" } } diff --git a/csharp/ql/integration-tests/windows/standalone_dependencies/standalone.csproj b/csharp/ql/integration-tests/windows/standalone_dependencies/standalone.csproj index 58df1d80a862..88362e96131a 100644 --- a/csharp/ql/integration-tests/windows/standalone_dependencies/standalone.csproj +++ b/csharp/ql/integration-tests/windows/standalone_dependencies/standalone.csproj @@ -2,7 +2,7 @@ Exe - net9.0;net6.0;netcoreapp3.1;netstandard2.0;net48 + net10.0;net6.0;netcoreapp3.1;netstandard2.0;net48 diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 3e3a49681f9d..59eb2a98cf0a 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.4.3 + +No user-facing changes. + ## 5.4.2 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/2025-12-03-implicit-map-value-reads.md b/csharp/ql/lib/change-notes/2025-12-03-implicit-map-value-reads.md new file mode 100644 index 000000000000..2b7f47fe98d5 --- /dev/null +++ b/csharp/ql/lib/change-notes/2025-12-03-implicit-map-value-reads.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added implicit reads of `System.Collections.Generic.KeyValuePair.Value` at taint-tracking sinks and at inputs to additional taint steps. As a result, taint-tracking queries will now produce more results when a container is tainted. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2025-12-03-run-tracer-after-compilation.md b/csharp/ql/lib/change-notes/2025-12-03-run-tracer-after-compilation.md new file mode 100644 index 000000000000..d7dd475cb0b4 --- /dev/null +++ b/csharp/ql/lib/change-notes/2025-12-03-run-tracer-after-compilation.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* Fixed an issue where compiler-generated files were not being extracted. The extractor now runs after compilation completes to ensure all generated files are properly analyzed. diff --git a/csharp/ql/lib/change-notes/2025-12-04-bmn-dotnet-fixes.md b/csharp/ql/lib/change-notes/2025-12-04-bmn-dotnet-fixes.md new file mode 100644 index 000000000000..af1f1b919666 --- /dev/null +++ b/csharp/ql/lib/change-notes/2025-12-04-bmn-dotnet-fixes.md @@ -0,0 +1,6 @@ +--- +category: fix +--- +* Fixed two issues affecting build mode `none`: + * Corrected version sorting logic when detecting the newest .NET framework to use. + * Improved stability for .NET 10 compatibility. diff --git a/csharp/ql/lib/change-notes/2025-12-09-bmn-default-dotnet.md b/csharp/ql/lib/change-notes/2025-12-09-bmn-default-dotnet.md new file mode 100644 index 000000000000..832e6069ee07 --- /dev/null +++ b/csharp/ql/lib/change-notes/2025-12-09-bmn-default-dotnet.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* In `build mode: none`, .NET 10 is now used by default unless a specific .NET version is specified elsewhere. diff --git a/csharp/ql/lib/change-notes/2025-12-11-net10-basic-support.md b/csharp/ql/lib/change-notes/2025-12-11-net10-basic-support.md new file mode 100644 index 000000000000..d15a55a7eb41 --- /dev/null +++ b/csharp/ql/lib/change-notes/2025-12-11-net10-basic-support.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Basic extractor support for .NET 10 is now available. Extraction is supported for .NET 10 projects in both traced mode and `build mode: none`. However, code that uses language features new to C# 14 is not yet fully supported for extraction and analysis. diff --git a/csharp/ql/lib/change-notes/released/5.4.3.md b/csharp/ql/lib/change-notes/released/5.4.3.md new file mode 100644 index 000000000000..61270c2fe02d --- /dev/null +++ b/csharp/ql/lib/change-notes/released/5.4.3.md @@ -0,0 +1,3 @@ +## 5.4.3 + +No user-facing changes. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 0318ae05ad85..dc2d3dec96cc 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.4.2 +lastReleaseVersion: 5.4.3 diff --git a/csharp/ql/lib/ext/NHibernate.model.yml b/csharp/ql/lib/ext/NHibernate.model.yml new file mode 100644 index 000000000000..472374cfbc3a --- /dev/null +++ b/csharp/ql/lib/ext/NHibernate.model.yml @@ -0,0 +1,8 @@ +extensions: + - addsTo: + pack: codeql/csharp-all + extensible: sinkModel + data: + - ["NHibernate", "ISession", True, "CreateSQLQuery", "(System.String)", "", "Argument[0]", "sql-injection", "manual"] + - ["NHibernate", "IStatelessSession", True, "CreateSQLQuery", "(System.String)", "", "Argument[0]", "sql-injection", "manual"] + - ["NHibernate.Impl", "AbstractSessionImpl", True, "CreateSQLQuery", "(System.String)", "", "Argument[0]", "sql-injection", "manual"] \ No newline at end of file diff --git a/csharp/ql/lib/ext/empty.model.yml b/csharp/ql/lib/ext/empty.model.yml index 6b38b783cbe2..09d848ea57d5 100644 --- a/csharp/ql/lib/ext/empty.model.yml +++ b/csharp/ql/lib/ext/empty.model.yml @@ -11,6 +11,16 @@ extensions: extensible: sinkModel data: [] + - addsTo: + pack: codeql/csharp-all + extensible: barrierModel + data: [] + + - addsTo: + pack: codeql/csharp-all + extensible: barrierGuardModel + data: [] + - addsTo: pack: codeql/csharp-all extensible: summaryModel diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index e4fb716f6983..527e890f47b3 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.4.2 +version: 5.4.4-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/lib/semmle/code/csharp/Callable.qll b/csharp/ql/lib/semmle/code/csharp/Callable.qll index 44e7c3cf4ca8..49a2271b27c8 100644 --- a/csharp/ql/lib/semmle/code/csharp/Callable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Callable.qll @@ -281,7 +281,6 @@ class Method extends Callable, Virtualizable, Attributable, @method { /** Holds if this method has a `params` parameter. */ predicate hasParams() { exists(this.getParamsType()) } - // Remove when `Callable.isOverridden()` is removed override predicate fromSource() { Callable.super.fromSource() and not this.isCompilerGenerated() @@ -317,6 +316,19 @@ class ExtensionMethod extends Method { override string getAPrimaryQlClass() { result = "ExtensionMethod" } } +/** + * An object initializer method. + * + * This is an extractor-synthesized method that executes the field + * initializers. Note that the AST nodes for the field initializers are nested + * directly under the class, and therefore this method has no body in the AST. + * On the other hand, this provides the unique enclosing callable for the field + * initializers and their control flow graph. + */ +class ObjectInitMethod extends Method { + ObjectInitMethod() { this.getName() = "" } +} + /** * A constructor, for example `public C() { }` on line 2 in * @@ -350,6 +362,9 @@ class Constructor extends Callable, Member, Attributable, @constructor { */ ConstructorInitializer getInitializer() { result = this.getChildExpr(-1) } + /** Gets the object initializer call of this constructor, if any. */ + MethodCall getObjectInitializerCall() { result = this.getChildExpr(-2) } + /** Holds if this constructor has an initializer. */ predicate hasInitializer() { exists(this.getInitializer()) } diff --git a/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll b/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll index be79c5795133..aa834ef91038 100644 --- a/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll +++ b/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll @@ -55,7 +55,8 @@ class TopLevelExprParent extends Element, @top_level_expr_parent { /** INTERNAL: Do not use. */ Expr getExpressionBody(Callable c) { result = c.getAChildExpr() and - not result = c.(Constructor).getInitializer() + not result = c.(Constructor).getInitializer() and + not result = c.(Constructor).getObjectInitializerCall() } /** INTERNAL: Do not use. */ @@ -211,6 +212,8 @@ private module Cached { enclosingBody(cfe, getBody(c)) or parent*(enclosingStart(cfe), c.(Constructor).getInitializer()) + or + parent*(cfe, c.(Constructor).getObjectInitializerCall()) } /** Holds if the enclosing statement of expression `e` is `s`. */ diff --git a/csharp/ql/lib/semmle/code/csharp/commons/Strings.qll b/csharp/ql/lib/semmle/code/csharp/commons/Strings.qll index 908d1c2fb5ab..bdf9e5585394 100644 --- a/csharp/ql/lib/semmle/code/csharp/commons/Strings.qll +++ b/csharp/ql/lib/semmle/code/csharp/commons/Strings.qll @@ -3,6 +3,7 @@ */ import csharp +private import semmle.code.csharp.commons.Collections private import semmle.code.csharp.frameworks.Format private import semmle.code.csharp.frameworks.System private import semmle.code.csharp.frameworks.system.Text @@ -33,7 +34,7 @@ class ImplicitToStringExpr extends Expr { or p instanceof StringFormatItemParameter and not p.getType() = - any(ArrayType at | + any(ParamsCollectionType at | at.getElementType() instanceof ObjectType and this.getType().isImplicitlyConvertibleTo(at) ) diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll index f61d7f9c3a78..414cfc2d50ae 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll @@ -842,6 +842,40 @@ module Internal { e3 = any(NullCoalescingExpr nce | e1 = nce.getLeftOperand() and e2 = nce.getRightOperand()) } + predicate nullValueImplied(Expr e) { + nullValue(e) + or + exists(Expr e1 | nullValueImplied(e1) and nullValueImpliedUnary(e1, e)) + or + exists(Expr e1, Expr e2 | + nullValueImplied(e1) and nullValueImplied(e2) and nullValueImpliedBinary(e1, e2, e) + ) + or + e = + any(Ssa::Definition def | + forex(Ssa::Definition u | u = def.getAnUltimateDefinition() | nullDef(u)) + ).getARead() + } + + private predicate nullDef(Ssa::ExplicitDefinition def) { + nullValueImplied(def.getADefinition().getSource()) + } + + predicate nonNullValueImplied(Expr e) { + nonNullValue(e) + or + exists(Expr e1 | nonNullValueImplied(e1) and nonNullValueImpliedUnary(e1, e)) + or + e = + any(Ssa::Definition def | + forex(Ssa::Definition u | u = def.getAnUltimateDefinition() | nonNullDef(u)) + ).getARead() + } + + private predicate nonNullDef(Ssa::ExplicitDefinition def) { + nonNullValueImplied(def.getADefinition().getSource()) + } + /** A callable that always returns a non-`null` value. */ private class NonNullCallable extends Callable { NonNullCallable() { this = any(SystemObjectClass c).getGetTypeMethod() } @@ -936,154 +970,21 @@ module Internal { e = any(BinaryArithmeticOperation bao | result = bao.getAnOperand()) } - // The predicates in this module should be evaluated in the same stage as the CFG - // construction stage. This is to avoid recomputation of pre-basic-blocks and - // pre-SSA predicates - private module PreCfg { - private import semmle.code.csharp.controlflow.internal.PreBasicBlocks as PreBasicBlocks - private import semmle.code.csharp.controlflow.internal.PreSsa - - private predicate nullDef(PreSsa::Definition def) { - nullValueImplied(def.getDefinition().getSource()) - } - - private predicate nonNullDef(PreSsa::Definition def) { - nonNullValueImplied(def.getDefinition().getSource()) - } - - private predicate emptyDef(PreSsa::Definition def) { - emptyValue(def.getDefinition().getSource()) - } - - private predicate nonEmptyDef(PreSsa::Definition def) { - nonEmptyValue(def.getDefinition().getSource()) - } - - deprecated predicate isGuard(Expr e, GuardValue val) { - ( - e.getType() instanceof BoolType and - not e instanceof BoolLiteral and - not e instanceof SwitchCaseExpr and - not e instanceof PatternExpr and - exists(val.asBooleanValue()) - or - e instanceof DereferenceableExpr and - val.isNullness(_) - ) and - not e = any(ExprStmt es).getExpr() and - not e = any(LocalVariableDeclStmt s).getAVariableDeclExpr() - } - - cached - private module CachedWithCfg { - private import semmle.code.csharp.Caching - - private predicate firstReadSameVarUniquePredecessor( - PreSsa::Definition def, AssignableRead read - ) { - read = def.getAFirstRead() and - ( - not PreSsa::adjacentReadPairSameVar(_, read) - or - read = unique(AssignableRead read0 | PreSsa::adjacentReadPairSameVar(read0, read)) - ) - } - - cached - predicate nullValueImplied(Expr e) { - nullValue(e) - or - exists(Expr e1 | nullValueImplied(e1) and nullValueImpliedUnary(e1, e)) - or - exists(Expr e1, Expr e2 | - nullValueImplied(e1) and nullValueImplied(e2) and nullValueImpliedBinary(e1, e2, e) - ) - or - e = - any(PreSsa::Definition def | - forex(PreSsa::Definition u | u = def.getAnUltimateDefinition() | nullDef(u)) - ).getARead() - } - - cached - predicate nonNullValueImplied(Expr e) { - nonNullValue(e) - or - exists(Expr e1 | nonNullValueImplied(e1) and nonNullValueImpliedUnary(e1, e)) - or - e = - any(PreSsa::Definition def | - forex(PreSsa::Definition u | u = def.getAnUltimateDefinition() | nonNullDef(u)) - ).getARead() - } - - private predicate adjacentReadPairSameVarUniquePredecessor( - AssignableRead read1, AssignableRead read2 - ) { - PreSsa::adjacentReadPairSameVar(read1, read2) and - ( - read1 = read2 and - read1 = unique(AssignableRead other | PreSsa::adjacentReadPairSameVar(other, read2)) - or - read1 = - unique(AssignableRead other | - PreSsa::adjacentReadPairSameVar(other, read2) and other != read2 - ) - ) - } - - cached - predicate emptyValue(Expr e) { - e.(ArrayCreation).getALengthArgument().getValue().toInt() = 0 - or - e.(ArrayInitializer).hasNoElements() - or - exists(Expr mid | emptyValue(mid) | - mid = e.(AssignExpr).getRValue() - or - mid = e.(Cast).getExpr() - ) - or - exists(PreSsa::Definition def | emptyDef(def) | firstReadSameVarUniquePredecessor(def, e)) - or - exists(MethodCall mc | - mc.getTarget().getAnUltimateImplementee().getUnboundDeclaration() = - any(SystemCollectionsGenericICollectionInterface c).getClearMethod() and - adjacentReadPairSameVarUniquePredecessor(mc.getQualifier(), e) - ) - } - - cached - predicate nonEmptyValue(Expr e) { - forex(Expr length | length = e.(ArrayCreation).getALengthArgument() | - length.getValue().toInt() != 0 - ) - or - e.(ArrayInitializer).getNumberOfElements() > 0 - or - exists(Expr mid | nonEmptyValue(mid) | - mid = e.(AssignExpr).getRValue() - or - mid = e.(Cast).getExpr() - ) - or - exists(PreSsa::Definition def | nonEmptyDef(def) | - firstReadSameVarUniquePredecessor(def, e) - ) - or - exists(MethodCall mc | - mc.getTarget().getAnUltimateImplementee().getUnboundDeclaration() = - any(SystemCollectionsGenericICollectionInterface c).getAddMethod() and - adjacentReadPairSameVarUniquePredecessor(mc.getQualifier(), e) - ) - } - } - - import CachedWithCfg + deprecated predicate isGuard(Expr e, GuardValue val) { + ( + e.getType() instanceof BoolType and + not e instanceof BoolLiteral and + not e instanceof SwitchCaseExpr and + not e instanceof PatternExpr and + exists(val.asBooleanValue()) + or + e instanceof DereferenceableExpr and + val.isNullness(_) + ) and + not e = any(ExprStmt es).getExpr() and + not e = any(LocalVariableDeclStmt s).getAVariableDeclExpr() } - import PreCfg - private predicate interestingDescendantCandidate(Expr e) { guardControls(e, _, _) or diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll index 5f62d6d21df1..96fe5703090e 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll @@ -6,10 +6,65 @@ import csharp private import codeql.controlflow.Cfg as CfgShared private import Completion -private import Splitting private import semmle.code.csharp.ExprOrStmtParent private import semmle.code.csharp.commons.Compilation +private module Initializers { + /** + * A non-static member with an initializer, for example a field `int Field = 0`. + */ + class InitializedInstanceMember extends Member { + private AssignExpr ae; + + InitializedInstanceMember() { + not this.isStatic() and + expr_parent_top_level(ae, _, this) and + not ae = any(Callable c).getExpressionBody() + } + + /** Gets the initializer expression. */ + AssignExpr getInitializer() { result = ae } + } + + /** + * Holds if `obinit` is an object initializer method that performs the initialization + * of a member via assignment `init`. + */ + predicate obinitInitializes(ObjectInitMethod obinit, AssignExpr init) { + exists(InitializedInstanceMember m | + obinit.getDeclaringType().getAMember() = m and + init = m.getInitializer() + ) + } + + /** + * Gets the `i`th member initializer expression for object initializer method `obinit` + * in compilation `comp`. + */ + AssignExpr initializedInstanceMemberOrder(ObjectInitMethod obinit, CompilationExt comp, int i) { + obinitInitializes(obinit, result) and + result = + rank[i + 1](AssignExpr ae0, Location l | + obinitInitializes(obinit, ae0) and + l = ae0.getLocation() and + getCompilation(l.getFile()) = comp + | + ae0 order by l.getStartLine(), l.getStartColumn(), l.getFile().getAbsolutePath() + ) + } + + /** + * Gets the last member initializer expression for object initializer method `obinit` + * in compilation `comp`. + */ + AssignExpr lastInitializer(ObjectInitMethod obinit, CompilationExt comp) { + exists(int i | + result = initializedInstanceMemberOrder(obinit, comp, i) and + not exists(initializedInstanceMemberOrder(obinit, comp, i + 1)) + ) + } +} + /** An element that defines a new CFG scope. */ class CfgScope extends Element, @top_level_exprorstmt_parent { CfgScope() { @@ -19,7 +74,7 @@ class CfgScope extends Element, @top_level_exprorstmt_parent { any(Callable c | c.(Constructor).hasInitializer() or - InitializerSplitting::constructorInitializes(c, _) + Initializers::obinitInitializes(c, _) or c.hasBody() ) @@ -146,14 +201,16 @@ private predicate expr_parent_top_level_adjusted2( predicate scopeFirst(CfgScope scope, AstNode first) { scope = any(Callable c | - if exists(c.(Constructor).getInitializer()) - then first(c.(Constructor).getInitializer(), first) + if exists(c.(Constructor).getObjectInitializerCall()) + then first(c.(Constructor).getObjectInitializerCall(), first) else - if InitializerSplitting::constructorInitializes(c, _) - then first(InitializerSplitting::constructorInitializeOrder(c, _, 0), first) + if exists(c.(Constructor).getInitializer()) + then first(c.(Constructor).getInitializer(), first) else first(c.getBody(), first) ) or + first(Initializers::initializedInstanceMemberOrder(scope, _, 0), first) + or expr_parent_top_level_adjusted2(any(Expr e | first(e, first)), _, scope) and not scope instanceof Callable } @@ -165,14 +222,40 @@ predicate scopeLast(CfgScope scope, AstNode last, Completion c) { last(callable.getBody(), last, c) and not c instanceof GotoCompletion or - last(InitializerSplitting::lastConstructorInitializer(scope, _), last, c) and + last(callable.(Constructor).getInitializer(), last, c) and + not callable.hasBody() + or + // This is only relevant in the context of compilation errors, since + // normally the existence of an object initializer call implies the + // existence of an initializer. + last(callable.(Constructor).getObjectInitializerCall(), last, c) and + not callable.(Constructor).hasInitializer() and not callable.hasBody() ) or + last(Initializers::lastInitializer(scope, _), last, c) + or expr_parent_top_level_adjusted2(any(Expr e | last(e, last, c)), _, scope) and not scope instanceof Callable } +private class ObjectInitTree extends ControlFlowTree instanceof ObjectInitMethod { + final override predicate propagatesAbnormal(AstNode child) { none() } + + final override predicate first(AstNode first) { none() } + + final override predicate last(AstNode last, Completion c) { none() } + + final override predicate succ(AstNode pred, AstNode succ, Completion c) { + exists(CompilationExt comp, int i | + // Flow from one member initializer to the next + last(Initializers::initializedInstanceMemberOrder(this, comp, i), pred, c) and + c instanceof NormalCompletion and + first(Initializers::initializedInstanceMemberOrder(this, comp, i + 1), succ) + ) + } +} + private class ConstructorTree extends ControlFlowTree instanceof Constructor { final override predicate propagatesAbnormal(AstNode child) { none() } @@ -187,17 +270,29 @@ private class ConstructorTree extends ControlFlowTree instanceof Constructor { comp = getCompilation(result.getFile()) } + pragma[noinline] + private MethodCall getObjectInitializerCall(CompilationExt comp) { + result = super.getObjectInitializerCall() and + comp = getCompilation(result.getFile()) + } + + pragma[noinline] + private ConstructorInitializer getInitializer(CompilationExt comp) { + result = super.getInitializer() and + comp = getCompilation(result.getFile()) + } + final override predicate succ(AstNode pred, AstNode succ, Completion c) { - exists(CompilationExt comp, int i, AssignExpr ae | - ae = InitializerSplitting::constructorInitializeOrder(this, comp, i) and - last(ae, pred, c) and + exists(CompilationExt comp | + last(this.getObjectInitializerCall(comp), pred, c) and c instanceof NormalCompletion | - // Flow from one member initializer to the next - first(InitializerSplitting::constructorInitializeOrder(this, comp, i + 1), succ) + first(this.getInitializer(comp), succ) or - // Flow from last member initializer to constructor body - ae = InitializerSplitting::lastConstructorInitializer(this, comp) and + // This is only relevant in the context of compilation errors, since + // normally the existence of an object initializer call implies the + // existence of an initializer. + not exists(this.getInitializer(comp)) and first(this.getBody(comp), succ) ) } @@ -837,13 +932,7 @@ module Expressions { last(this, pred, c) and con = super.getConstructor() and comp = getCompilation(this.getFile()) and - c instanceof NormalCompletion - | - // Flow from constructor initializer to first member initializer - first(InitializerSplitting::constructorInitializeOrder(con, comp, 0), succ) - or - // Flow from constructor initializer to first element of constructor body - not exists(InitializerSplitting::constructorInitializeOrder(con, comp, _)) and + c instanceof NormalCompletion and first(con.getBody(comp), succ) ) } diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreSsa.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreSsa.qll deleted file mode 100644 index 4921e6926232..000000000000 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreSsa.qll +++ /dev/null @@ -1,221 +0,0 @@ -import csharp - -/** - * Provides an SSA implementation based on "pre-basic-blocks", restricted - * to local scope variables and fields/properties that behave like local - * scope variables. - */ -module PreSsa { - private import AssignableDefinitions - private import semmle.code.csharp.controlflow.internal.ControlFlowGraphImpl - private import semmle.code.csharp.controlflow.internal.PreBasicBlocks as PreBasicBlocks - private import codeql.ssa.Ssa as SsaImplCommon - - private predicate definitionAt( - AssignableDefinition def, PreBasicBlocks::PreBasicBlock bb, int i, SsaInput::SourceVariable v - ) { - bb.getNode(i) = def.getExpr() and - v = def.getTarget() and - // In cases like `(x, x) = (0, 1)`, we discard the first (dead) definition of `x` - not exists(TupleAssignmentDefinition first, TupleAssignmentDefinition second | first = def | - second.getAssignment() = first.getAssignment() and - second.getEvaluationOrder() > first.getEvaluationOrder() and - second.getTarget() = v - ) - or - def.(ImplicitParameterDefinition).getParameter() = v and - exists(Callable c | v = c.getAParameter() | - scopeFirst(c, bb) and - i = -1 - ) - } - - predicate implicitEntryDef( - Callable c, PreBasicBlocks::PreBasicBlock bb, SsaInput::SourceVariable v - ) { - c = v.getACallable() and - scopeFirst(c, bb) and - ( - not v instanceof LocalScopeVariable - or - v.(SimpleLocalScopeVariable).isReadonlyCapturedBy(c) - ) - } - - /** Holds if `a` is assigned in callable `c`. */ - pragma[nomagic] - private predicate assignableDefinition(Assignable a, Callable c) { - exists(AssignableDefinition def | - def.getTarget() = a and - c = def.getEnclosingCallable() - | - not c instanceof Constructor or - a instanceof LocalScopeVariable - ) - } - - pragma[nomagic] - private predicate assignableUniqueWriter(Assignable a, Callable c) { - c = unique(Callable c0 | assignableDefinition(a, c0) | c0) - } - - /** Holds if `a` is accessed in callable `c`. */ - pragma[nomagic] - private predicate assignableAccess(Assignable a, Callable c) { - exists(AssignableAccess aa | aa.getTarget() = a | c = aa.getEnclosingCallable()) - } - - /** - * A local scope variable that is amenable to SSA analysis. - * - * This is either a local variable that is not captured, or one - * where all writes happen in the defining callable. - */ - class SimpleLocalScopeVariable extends LocalScopeVariable { - SimpleLocalScopeVariable() { assignableUniqueWriter(this, this.getCallable()) } - - /** Holds if this local scope variable is read-only captured by `c`. */ - predicate isReadonlyCapturedBy(Callable c) { - assignableAccess(this, c) and - c != this.getCallable() - } - } - - module SsaInput implements SsaImplCommon::InputSig { - private import semmle.code.csharp.Caching - - private class ExitBasicBlock extends PreBasicBlocks::PreBasicBlock { - ExitBasicBlock() { scopeLast(_, this.getLastNode(), _) } - } - - pragma[noinline] - private predicate assignableNoComplexQualifiers(Assignable a) { - forall(QualifiableExpr qe | qe.(AssignableAccess).getTarget() = a | qe.targetIsThisInstance()) - } - - /** - * A simple assignable. Either a local scope variable or a field/property - * that behaves like a local scope variable. - */ - class SourceVariable extends Assignable { - private Callable c; - - SourceVariable() { - assignableAccess(this, c) and - ( - this instanceof SimpleLocalScopeVariable - or - ( - this = any(Field f | not f.isVolatile()) - or - this = any(TrivialProperty tp | not tp.isOverridableOrImplementable()) - ) and - ( - not assignableDefinition(this, _) - or - assignableUniqueWriter(this, c) - ) and - assignableNoComplexQualifiers(this) - ) - } - - /** Gets a callable in which this simple assignable can be analyzed. */ - Callable getACallable() { result = c } - } - - predicate variableWrite( - PreBasicBlocks::PreBasicBlock bb, int i, SourceVariable v, boolean certain - ) { - Stages::ControlFlowStage::forceCachingInSameStage() and - exists(AssignableDefinition def | - definitionAt(def, bb, i, v) and - if def.getTargetAccess().isRefArgument() then certain = false else certain = true - ) - or - implicitEntryDef(_, bb, v) and - i = -1 and - certain = true - } - - predicate variableRead( - PreBasicBlocks::PreBasicBlock bb, int i, SourceVariable v, boolean certain - ) { - exists(AssignableRead read | - read = bb.getNode(i) and - read.getTarget() = v and - certain = true - ) - or - v = - any(LocalScopeVariable lsv | - lsv.getCallable() = bb.(ExitBasicBlock).getEnclosingCallable() and - i = bb.length() and - (lsv.isRef() or v.(Parameter).isOut()) and - certain = false - ) - } - } - - private module SsaImpl = SsaImplCommon::Make; - - class Definition extends SsaImpl::Definition { - final AssignableRead getARead() { - exists(PreBasicBlocks::PreBasicBlock bb, int i | - SsaImpl::ssaDefReachesRead(_, this, bb, i) and - result = bb.getNode(i) - ) - } - - final AssignableDefinition getDefinition() { - exists(PreBasicBlocks::PreBasicBlock bb, int i, SsaInput::SourceVariable v | - this.definesAt(v, bb, i) and - definitionAt(result, bb, i, v) - ) - } - - final AssignableRead getAFirstRead() { - exists(PreBasicBlocks::PreBasicBlock bb, int i | - SsaImpl::firstUse(this, bb, i, true) and - result = bb.getNode(i) - ) - } - - private Definition getAPhiInputOrPriorDefinition() { - result = this.(PhiNode).getAnInput() or - SsaImpl::uncertainWriteDefinitionInput(this, result) - } - - final Definition getAnUltimateDefinition() { - result = this.getAPhiInputOrPriorDefinition*() and - not result instanceof PhiNode - } - - final predicate isLiveAtEndOfBlock(PreBasicBlocks::PreBasicBlock bb) { - SsaImpl::ssaDefReachesEndOfBlock(bb, this, _) - } - - override Location getLocation() { - result = this.getDefinition().getLocation() - or - exists(Callable c, PreBasicBlocks::PreBasicBlock bb, SsaInput::SourceVariable v | - this.definesAt(v, bb, -1) and - implicitEntryDef(c, bb, v) and - result = c.getLocation() - ) - } - } - - class PhiNode extends SsaImpl::PhiNode, Definition { - final override Location getLocation() { result = this.getBasicBlock().getLocation() } - - final Definition getAnInput() { SsaImpl::phiHasInputFromBlock(this, result, _) } - } - - predicate adjacentReadPairSameVar(AssignableRead read1, AssignableRead read2) { - exists(PreBasicBlocks::PreBasicBlock bb1, int i1, PreBasicBlocks::PreBasicBlock bb2, int i2 | - read1 = bb1.getNode(i1) and - SsaImpl::adjacentUseUse(bb1, i1, bb2, i2, _, true) and - read2 = bb2.getNode(i2) - ) - } -} diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll index 63d2c181da45..55b75ed31a71 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll @@ -9,27 +9,16 @@ private import Completion as Comp private import Comp private import ControlFlowGraphImpl private import semmle.code.csharp.controlflow.ControlFlowGraph::ControlFlow as Cfg -private import semmle.code.csharp.controlflow.internal.PreSsa cached private module Cached { private import semmle.code.csharp.Caching cached - newtype TBooleanSplitSubKind = - TSsaBooleanSplitSubKind(PreSsa::Definition def) { - Stages::ControlFlowStage::forceCachingInSameStage() - } - - cached - newtype TSplitKind = - TInitializerSplitKind() or - TConditionalCompletionSplitKind() + newtype TSplitKind = TConditionalCompletionSplitKind() cached - newtype TSplit = - TInitializerSplit(Constructor c) { InitializerSplitting::constructorInitializes(c, _) } or - TConditionalCompletionSplit(ConditionalCompletion c) + newtype TSplit = TConditionalCompletionSplit(ConditionalCompletion c) } import Cached @@ -43,186 +32,6 @@ class Split extends TSplit { string toString() { none() } } -module InitializerSplitting { - private import semmle.code.csharp.ExprOrStmtParent - - /** - * A non-static member with an initializer, for example a field `int Field = 0`. - */ - class InitializedInstanceMember extends Member { - InitializedInstanceMember() { - exists(AssignExpr ae | - not this.isStatic() and - expr_parent_top_level(ae, _, this) and - not ae = any(Callable c).getExpressionBody() - ) - } - - /** Gets the initializer expression. */ - AssignExpr getInitializer() { expr_parent_top_level(result, _, this) } - - /** - * Gets a control flow element that is a syntactic descendant of the - * initializer expression. - */ - AstNode getAnInitializerDescendant() { - result = this.getInitializer() - or - result = this.getAnInitializerDescendant().getAChild() - } - } - - /** - * Holds if `c` is a non-static constructor that performs the initialization - * of a member via assignment `init`. - */ - predicate constructorInitializes(InstanceConstructor c, AssignExpr init) { - exists(InitializedInstanceMember m | - c.isUnboundDeclaration() and - c.getDeclaringType().getAMember() = m and - not c.getInitializer().isThis() and - init = m.getInitializer() - ) - } - - /** - * Gets the `i`th member initializer expression for non-static constructor `c` - * in compilation `comp`. - */ - AssignExpr constructorInitializeOrder(Constructor c, CompilationExt comp, int i) { - constructorInitializes(c, result) and - result = - rank[i + 1](AssignExpr ae0, Location l | - constructorInitializes(c, ae0) and - l = ae0.getLocation() and - getCompilation(l.getFile()) = comp - | - ae0 order by l.getStartLine(), l.getStartColumn(), l.getFile().getAbsolutePath() - ) - } - - /** - * Gets the last member initializer expression for non-static constructor `c` - * in compilation `comp`. - */ - AssignExpr lastConstructorInitializer(Constructor c, CompilationExt comp) { - exists(int i | - result = constructorInitializeOrder(c, comp, i) and - not exists(constructorInitializeOrder(c, comp, i + 1)) - ) - } - - /** - * A split for non-static member initializers belonging to a given non-static - * constructor. For example, in - * - * ```csharp - * class C - * { - * int Field1 = 0; - * int Field2 = Field1 + 1; - * int Field3; - * - * public C() - * { - * Field3 = 2; - * } - * - * public C(int i) - * { - * Field3 = 3; - * } - * } - * ``` - * - * the initializer expressions `Field1 = 0` and `Field2 = Field1 + 1` are split - * on the two constructors. This is in order to generate CFGs for the two - * constructors that mimic - * - * ```csharp - * public C() - * { - * Field1 = 0; - * Field2 = Field1 + 1; - * Field3 = 2; - * } - * ``` - * - * and - * - * ```csharp - * public C() - * { - * Field1 = 0; - * Field2 = Field1 + 1; - * Field3 = 3; - * } - * ``` - * - * respectively. - */ - private class InitializerSplit extends Split, TInitializerSplit { - private Constructor c; - - InitializerSplit() { this = TInitializerSplit(c) } - - /** Gets the constructor. */ - Constructor getConstructor() { result = c } - - override string toString() { result = "" } - } - - private class InitializerSplitKind extends SplitKind, TInitializerSplitKind { - override int getListOrder() { result = 0 } - - override predicate isEnabled(AstNode cfe) { this.appliesTo(cfe) } - - override string toString() { result = "Initializer" } - } - - int getNextListOrder() { result = 1 } - - private class InitializerSplitImpl extends SplitImpl instanceof InitializerSplit { - override InitializerSplitKind getKind() { any() } - - override predicate hasEntry(AstNode pred, AstNode succ, Completion c) { - exists(ConstructorInitializer ci | - last(ci, pred, c) and - succ(pred, succ, c) and - succ = any(InitializedInstanceMember m).getAnInitializerDescendant() and - super.getConstructor() = ci.getConstructor() - ) - } - - override predicate hasEntryScope(CfgScope scope, AstNode first) { - scopeFirst(scope, first) and - scope = super.getConstructor() and - first = any(InitializedInstanceMember m).getAnInitializerDescendant() - } - - override predicate hasExit(AstNode pred, AstNode succ, Completion c) { - this.appliesTo(pred) and - succ(pred, succ, c) and - not succ = any(InitializedInstanceMember m).getAnInitializerDescendant() and - succ.(ControlFlowElement).getEnclosingCallable() = super.getConstructor() - } - - override predicate hasExitScope(CfgScope scope, AstNode last, Completion c) { - this.appliesTo(last) and - scopeLast(scope, last, c) and - scope = super.getConstructor() - } - - override predicate hasSuccessor(AstNode pred, AstNode succ, Completion c) { - this.appliesSucc(pred, succ, c) and - succ = - any(InitializedInstanceMember m | - constructorInitializes(super.getConstructor(), m.getInitializer()) - ).getAnInitializerDescendant() - } - } -} - module ConditionalCompletionSplitting { /** * A split for conditional completions. For example, in @@ -249,7 +58,7 @@ module ConditionalCompletionSplitting { } private class ConditionalCompletionSplitKind_ extends SplitKind, TConditionalCompletionSplitKind { - override int getListOrder() { result = InitializerSplitting::getNextListOrder() } + override int getListOrder() { result = 0 } override predicate isEnabled(AstNode cfe) { this.appliesTo(cfe) } @@ -312,6 +121,4 @@ module ConditionalCompletionSplitting { ) } } - - int getNextListOrder() { result = InitializerSplitting::getNextListOrder() + 1 } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/BaseSSA.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/BaseSSA.qll index 747cf790d91f..a994873274af 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/BaseSSA.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/BaseSSA.qll @@ -43,10 +43,47 @@ module BaseSsa { ) } - private module SsaInput implements SsaImplCommon::InputSig { - private import semmle.code.csharp.controlflow.internal.PreSsa + /** Holds if `a` is assigned in callable `c`. */ + pragma[nomagic] + private predicate assignableDefinition(Assignable a, Callable c) { + exists(AssignableDefinition def | + def.getTarget() = a and + c = def.getEnclosingCallable() + | + not c instanceof Constructor or + a instanceof LocalScopeVariable + ) + } + + pragma[nomagic] + private predicate assignableUniqueWriter(Assignable a, Callable c) { + c = unique(Callable c0 | assignableDefinition(a, c0) | c0) + } + + /** Holds if `a` is accessed in callable `c`. */ + pragma[nomagic] + private predicate assignableAccess(Assignable a, Callable c) { + exists(AssignableAccess aa | aa.getTarget() = a | c = aa.getEnclosingCallable()) + } - class SourceVariable = PreSsa::SimpleLocalScopeVariable; + /** + * A local scope variable that is amenable to SSA analysis. + * + * This is either a local variable that is not captured, or one + * where all writes happen in the defining callable. + */ + class SimpleLocalScopeVariable extends LocalScopeVariable { + SimpleLocalScopeVariable() { assignableUniqueWriter(this, this.getCallable()) } + + /** Holds if this local scope variable is read-only captured by `c`. */ + predicate isReadonlyCapturedBy(Callable c) { + assignableAccess(this, c) and + c != this.getCallable() + } + } + + private module SsaInput implements SsaImplCommon::InputSig { + class SourceVariable = SimpleLocalScopeVariable; predicate variableWrite(ControlFlow::BasicBlock bb, int i, SourceVariable v, boolean certain) { exists(AssignableDefinition def | diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll index 9ba96154820d..c7d34a389793 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll @@ -16,7 +16,7 @@ private import semmle.code.csharp.internal.Location */ Callable getCallableForDataFlow(Callable c) { result = c.getUnboundDeclaration() and - result.hasBody() and + (result.hasBody() or result instanceof ObjectInitMethod) and result.getFile().fromSource() } @@ -27,6 +27,12 @@ newtype TReturnKind = private predicate hasMultipleSourceLocations(Callable c) { strictcount(getASourceLocation(c)) > 1 } +private predicate objectInitEntry(ObjectInitMethod m, ControlFlowElement first) { + exists(ControlFlow::Nodes::EntryNode en | + en.getCallable() = m and first.getControlFlowNode() = en.getASuccessor() + ) +} + private module NearestBodyLocationInput implements NearestLocationInputSig { class C = ControlFlowElement; @@ -34,7 +40,7 @@ private module NearestBodyLocationInput implements NearestLocationInputSig { exists(Callable c | hasMultipleSourceLocations(c) and l1 = getASourceLocation(c) and - body = c.getBody() and + (body = c.getBody() or objectInitEntry(c, body)) and l2 = body.getLocation() ) } @@ -207,7 +213,9 @@ class DataFlowCallable extends TDataFlowCallable { private ControlFlow::Nodes::ElementNode getAMultiBodyEntryNode(ControlFlow::BasicBlock bb, int i) { this.isMultiBodied() and exists(ControlFlowElement body, Location l | - body = this.asCallable(l).getBody() and + body = this.asCallable(l).getBody() or + objectInitEntry(this.asCallable(l), body) + | NearestLocation::nearestLocation(body, l, _) and result = body.getAControlFlowEntryNode() ) and diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index 4f7f0141da2a..a05651b4c644 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -178,12 +178,24 @@ private module ThisFlow { cfn = n.(InstanceParameterAccessPreNode).getUnderlyingControlFlowNode() } + private predicate primaryConstructorThisAccess(Node n, BasicBlock bb, int ppos) { + exists(Parameter p | + n.(PrimaryConstructorThisAccessPreNode).getParameter() = p and + bb.getCallable() = p.getCallable() and + ppos = p.getPosition() + ) + } + + private int numberOfPrimaryConstructorParameters(BasicBlock bb) { + result = strictcount(int primaryParamPos | primaryConstructorThisAccess(_, bb, primaryParamPos)) + } + private predicate thisAccess(Node n, BasicBlock bb, int i) { thisAccess(n, bb.getNode(i)) or - exists(Parameter p | n.(PrimaryConstructorThisAccessPreNode).getParameter() = p | - bb.getCallable() = p.getCallable() and - i = p.getPosition() + 1 + exists(int ppos | + primaryConstructorThisAccess(n, bb, ppos) and + i = ppos - numberOfPrimaryConstructorParameters(bb) ) or exists(DataFlowCallable c, ControlFlow::BasicBlocks::EntryBlock entry | @@ -195,8 +207,11 @@ private module ThisFlow { // entry definition. In case `c` doesn't have multiple bodies, the line below // is simply the same as `bb = entry`, because `entry.getFirstNode().getASuccessor()` // will be in the entry block. - bb = succ.getBasicBlock() and - i = -1 + bb = succ.getBasicBlock() + | + i = -1 - numberOfPrimaryConstructorParameters(bb) + or + not exists(numberOfPrimaryConstructorParameters(bb)) and i = -1 ) ) } @@ -3035,8 +3050,11 @@ predicate additionalLambdaFlowStep(Node nodeFrom, Node nodeTo, boolean preserves exists(AssignableDefinition def | def.getTargetAccess() = fa and nodeFrom.asExpr() = def.getSource() and - nodeTo = TFlowInsensitiveFieldNode(f) and + nodeTo = TFlowInsensitiveFieldNode(f) + | nodeFrom.getEnclosingCallable() instanceof Constructor + or + nodeFrom.getEnclosingCallable() instanceof ObjectInitMethod ) or nodeFrom = TFlowInsensitiveFieldNode(f) and @@ -3070,6 +3088,9 @@ predicate allowParameterReturnInSelf(ParameterNode p) { or VariableCapture::Flow::heuristicAllowInstanceParameterReturnInSelf(p.(DelegateSelfReferenceNode) .getCallable()) + or + // Allow field initializers to access Primary Constructor parameters + p.getEnclosingCallable() instanceof ObjectInitMethod } /** An approximated `Content`. */ diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll index 87b28b76e99a..75d14034e000 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll @@ -88,7 +88,7 @@ */ import csharp -import ExternalFlowExtensions +private import ExternalFlowExtensions::Extensions as Extensions private import DataFlowDispatch private import DataFlowPrivate private import DataFlowPublic @@ -101,100 +101,13 @@ private import semmle.code.csharp.dispatch.OverridableCallable private import semmle.code.csharp.frameworks.System private import codeql.dataflow.internal.AccessPathSyntax as AccessPathSyntax private import codeql.mad.ModelValidation as SharedModelVal +private import codeql.mad.static.ModelsAsData as SharedMaD -/** - * Holds if the given extension tuple `madId` should pretty-print as `model`. - * - * This predicate should only be used in tests. - */ -predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) { - exists( - string namespace, string type, boolean subtypes, string name, string signature, string ext, - string output, string kind, string provenance - | - sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, provenance, madId) and - model = - "Source: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; " - + ext + "; " + output + "; " + kind + "; " + provenance - ) - or - exists( - string namespace, string type, boolean subtypes, string name, string signature, string ext, - string input, string kind, string provenance - | - sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, provenance, madId) and - model = - "Sink: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; " + - ext + "; " + input + "; " + kind + "; " + provenance - ) - or - exists( - string namespace, string type, boolean subtypes, string name, string signature, string ext, - string input, string output, string kind, string provenance - | - summaryModel(namespace, type, subtypes, name, signature, ext, input, output, kind, provenance, - madId) and - model = - "Summary: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + - "; " + ext + "; " + input + "; " + output + "; " + kind + "; " + provenance - ) -} +private module MadInput implements SharedMaD::InputSig { } -private predicate relevantNamespace(string namespace) { - sourceModel(namespace, _, _, _, _, _, _, _, _, _) or - sinkModel(namespace, _, _, _, _, _, _, _, _, _) or - summaryModel(namespace, _, _, _, _, _, _, _, _, _, _) -} +private module MaD = SharedMaD::ModelsAsData; -private predicate namespaceLink(string shortns, string longns) { - relevantNamespace(shortns) and - relevantNamespace(longns) and - longns.prefix(longns.indexOf(".")) = shortns -} - -private predicate canonicalNamespace(string namespace) { - relevantNamespace(namespace) and not namespaceLink(_, namespace) -} - -private predicate canonicalNamespaceLink(string namespace, string subns) { - canonicalNamespace(namespace) and - (subns = namespace or namespaceLink(namespace, subns)) -} - -/** - * Holds if MaD framework coverage of `namespace` is `n` api endpoints of the - * kind `(kind, part)`, and `namespaces` is the number of subnamespaces of - * `namespace` which have MaD framework coverage (including `namespace` - * itself). - */ -predicate modelCoverage(string namespace, int namespaces, string kind, string part, int n) { - namespaces = strictcount(string subns | canonicalNamespaceLink(namespace, subns)) and - ( - part = "source" and - n = - strictcount(string subns, string type, boolean subtypes, string name, string signature, - string ext, string output, string provenance | - canonicalNamespaceLink(namespace, subns) and - sourceModel(subns, type, subtypes, name, signature, ext, output, kind, provenance, _) - ) - or - part = "sink" and - n = - strictcount(string subns, string type, boolean subtypes, string name, string signature, - string ext, string input, string provenance | - canonicalNamespaceLink(namespace, subns) and - sinkModel(subns, type, subtypes, name, signature, ext, input, kind, provenance, _) - ) - or - part = "summary" and - n = - strictcount(string subns, string type, boolean subtypes, string name, string signature, - string ext, string input, string output, string provenance | - canonicalNamespaceLink(namespace, subns) and - summaryModel(subns, type, subtypes, name, signature, ext, input, output, kind, provenance, _) - ) - ) -} +import MaD /** Provides a query predicate to check the MaD models for validation errors. */ module ModelValidation { @@ -258,7 +171,7 @@ module ModelValidation { predicate sourceKind(string kind) { sourceModel(_, _, _, _, _, _, _, kind, _, _) } - predicate neutralKind(string kind) { neutralModel(_, _, _, _, kind, _) } + predicate neutralKind(string kind) { Extensions::neutralModel(_, _, _, _, kind, _) } } private module KindVal = SharedModelVal::KindValidation; @@ -275,7 +188,7 @@ module ModelValidation { summaryModel(namespace, type, _, name, signature, ext, _, _, _, provenance, _) and pred = "summary" or - neutralModel(namespace, type, name, signature, _, provenance) and + Extensions::neutralModel(namespace, type, name, signature, _, provenance) and ext = "" and pred = "neutral" | @@ -318,7 +231,7 @@ private predicate elementSpec( or summaryModel(namespace, type, subtypes, name, signature, ext, _, _, _, _, _) or - neutralModel(namespace, type, name, signature, _, _) and ext = "" and subtypes = true + Extensions::neutralModel(namespace, type, name, signature, _, _) and ext = "" and subtypes = true } private predicate elementSpec( @@ -590,19 +503,17 @@ private predicate interpretSummary( UnboundCallable c, string input, string output, string kind, string provenance, string model ) { exists( - string namespace, string type, boolean subtypes, string name, string signature, string ext, - QlBuiltins::ExtensionId madId + string namespace, string type, boolean subtypes, string name, string signature, string ext | summaryModel(namespace, type, subtypes, name, signature, ext, input, output, kind, provenance, - madId) and - model = "MaD:" + madId.toString() and + model) and c = interpretElement(namespace, type, subtypes, name, signature, ext) ) } predicate interpretNeutral(UnboundCallable c, string kind, string provenance) { exists(string namespace, string type, string name, string signature | - neutralModel(namespace, type, name, signature, kind, provenance) and + Extensions::neutralModel(namespace, type, name, signature, kind, provenance) and c = interpretElement(namespace, type, true, name, signature, "") ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlowExtensions.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlowExtensions.qll index f761a0a9f5cd..3461f0a51863 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlowExtensions.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlowExtensions.qll @@ -2,6 +2,8 @@ * This module provides extensible predicates for defining MaD models. */ +private import codeql.mad.static.ModelsAsData as SharedMaD + /** * Holds if a source model exists for the given parameters. */ @@ -18,6 +20,22 @@ extensible predicate sinkModel( string input, string kind, string provenance, QlBuiltins::ExtensionId madId ); +/** + * Holds if a barrier model exists for the given parameters. + */ +extensible predicate barrierModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string output, string kind, string provenance, QlBuiltins::ExtensionId madId +); + +/** + * Holds if a barrier guard model exists for the given parameters. + */ +extensible predicate barrierGuardModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string input, string acceptingvalue, string kind, string provenance, QlBuiltins::ExtensionId madId +); + /** * Holds if a summary model exists for the given parameters. */ @@ -32,3 +50,9 @@ extensible predicate summaryModel( extensible predicate neutralModel( string namespace, string type, string name, string signature, string kind, string provenance ); + +module Extensions implements SharedMaD::ExtensionsSig { + import ExternalFlowExtensions + + predicate namespaceGrouping(string group, string namespace) { none() } +} diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll index 3ee16f21489c..56278b9ef950 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -213,11 +213,9 @@ module SourceSinkInterpretationInput implements Element e, string output, string kind, Public::Provenance provenance, string model ) { exists( - string namespace, string type, boolean subtypes, string name, string signature, string ext, - QlBuiltins::ExtensionId madId + string namespace, string type, boolean subtypes, string name, string signature, string ext | - sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, provenance, madId) and - model = "MaD:" + madId.toString() and + sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, provenance, model) and e = interpretElement(namespace, type, subtypes, name, signature, ext) ) } @@ -226,15 +224,26 @@ module SourceSinkInterpretationInput implements Element e, string input, string kind, Public::Provenance provenance, string model ) { exists( - string namespace, string type, boolean subtypes, string name, string signature, string ext, - QlBuiltins::ExtensionId madId + string namespace, string type, boolean subtypes, string name, string signature, string ext | - sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, provenance, madId) and - model = "MaD:" + madId.toString() and + sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, provenance, model) and e = interpretElement(namespace, type, subtypes, name, signature, ext) ) } + predicate barrierElement( + Element n, string output, string kind, Public::Provenance provenance, string model + ) { + none() + } + + predicate barrierGuardElement( + Element n, string input, Public::AcceptingValue acceptingvalue, string kind, + Public::Provenance provenance, string model + ) { + none() + } + class SourceOrSinkElement = Element; private newtype TInterpretNode = diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll index 70fda2b12964..277abd1d26ed 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll @@ -5,9 +5,9 @@ import csharp private import codeql.ssa.Ssa as SsaImplCommon private import AssignableDefinitions -private import semmle.code.csharp.controlflow.internal.PreSsa private import semmle.code.csharp.controlflow.BasicBlocks as BasicBlocks private import semmle.code.csharp.controlflow.Guards as Guards +private import semmle.code.csharp.dataflow.internal.BaseSSA private module SsaInput implements SsaImplCommon::InputSig { class SourceVariable = Ssa::SourceVariable; @@ -783,7 +783,7 @@ cached private module Cached { cached newtype TSourceVariable = - TLocalVar(Callable c, PreSsa::SimpleLocalScopeVariable v) { + TLocalVar(Callable c, BaseSsa::SimpleLocalScopeVariable v) { c = v.getCallable() or // Local scope variables can be captured @@ -967,18 +967,22 @@ private module Cached { cached // nothing is actually cached module BarrierGuard { - private predicate guardChecksAdjTypes( - DataFlowIntegrationInput::Guard g, DataFlowIntegrationInput::Expr e, - DataFlowIntegrationInput::GuardValue branch + private import codeql.util.Unit + + private predicate guardChecksAdjTypes(Guards::Guards::Guard g, Expr e, Guards::GuardValue v) { + guardChecks(g, e, v) + } + + private predicate guardChecksWithWrappers( + Guards::Guard g, Definition def, Guards::GuardValue val, Unit state ) { - exists(Guards::GuardValue v | - guardChecks(g, e.getAstNode(), v) and - branch = v.asBooleanValue() - ) + Guards::Guards::ValidationWrapper::guardChecksDef(g, def, val) and + exists(state) } private Node getABarrierNodeImpl() { - result = DataFlowIntegrationImpl::BarrierGuard::getABarrierNode() + result = + DataFlowIntegrationImpl::BarrierGuardDefWithState::getABarrierNode(_) } predicate getABarrierNode = getABarrierNodeImpl/0; @@ -1037,38 +1041,18 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu ) } - class GuardValue = Boolean; + class GuardValue = Guards::GuardValue; - class Guard extends Guards::Guard { - /** - * Holds if the evaluation of this guard to `branch` corresponds to the edge - * from `bb1` to `bb2`. - */ - predicate hasValueBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue branch) { - exists(ControlFlow::ConditionalSuccessor s | - this.getAControlFlowNode() = bb1.getLastNode() and - bb2 = bb1.getASuccessor(s) and - s.getValue() = branch - ) - } + class Guard = Guards::Guard; - /** - * Holds if this guard evaluating to `branch` controls the control-flow - * branch edge from `bb1` to `bb2`. That is, following the edge from - * `bb1` to `bb2` implies that this guard evaluated to `branch`. - */ - predicate valueControlsBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue branch) { - this.hasValueBranchEdge(bb1, bb2, branch) - } + /** Holds if the guard `guard` directly controls block `bb` upon evaluating to `val`. */ + predicate guardDirectlyControlsBlock(Guard guard, BasicBlock bb, GuardValue val) { + guard.directlyValueControls(bb, val) } - /** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */ - predicate guardDirectlyControlsBlock(Guard guard, ControlFlow::BasicBlock bb, GuardValue branch) { - exists(ConditionBlock conditionBlock, ControlFlow::ConditionalSuccessor s | - guard.getAControlFlowNode() = conditionBlock.getLastNode() and - s.getValue() = branch and - conditionBlock.edgeDominates(bb, s) - ) + /** Holds if the guard `guard` controls block `bb` upon evaluating to `val`. */ + predicate guardControlsBlock(Guard guard, BasicBlock bb, GuardValue val) { + guard.valueControls(bb, val) } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll index 3146720efe86..b24a104d3880 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll @@ -24,6 +24,13 @@ predicate defaultTaintSanitizer(DataFlow::Node node) { ) } +/** + * Gets the (unbound) property `System.Collections.Generic.KeyValuePair.Value`. + */ +private Property keyValuePairValue() { + result.hasFullyQualifiedName("System.Collections.Generic", "KeyValuePair`2", "Value") +} + /** * Holds if default `TaintTracking::Configuration`s should allow implicit reads * of `c` at sinks and inputs to additional taint steps. @@ -31,7 +38,11 @@ predicate defaultTaintSanitizer(DataFlow::Node node) { bindingset[node] predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::ContentSet c) { exists(node) and - c.isElement() + ( + c.isElement() + or + c.isProperty(keyValuePairValue()) + ) } private class LocalTaintExprStepConfiguration extends ControlFlowReachabilityConfiguration { diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/Sql.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/Sql.qll index 77d749a03333..6b1eb7b67fb7 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/Sql.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/Sql.qll @@ -52,7 +52,7 @@ class IDbCommandConstructionSqlExpr extends SqlExpr, ObjectCreation { class DapperCommandDefinitionMethodCallSqlExpr extends SqlExpr, ObjectCreation { DapperCommandDefinitionMethodCallSqlExpr() { this.getObjectType() instanceof Dapper::CommandDefinitionStruct and - DapperCommandDefinitionMethodCallSql::flow(DataFlow::exprNode(this), _) + DapperCommandDefinitionMethodCallSql::flowFromExpr(this) } override Expr getSql() { result = this.getArgumentForName("commandText") } diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll index f1a64f6810b8..e623628fea6c 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll @@ -85,7 +85,7 @@ module RemoteSourceToExternalApi = TaintTracking::Global # 171| 1: [TypeMention] int # 171| 4: [BlockStmt] {...} -# 174| 7: [Method] M +# 174| 8: [Method] M # 174| -1: [TypeMention] Void #-----| 0: (Attributes) # 173| 1: [DefaultAttribute] [OverloadResolutionPriority(...)] diff --git a/csharp/ql/test/library-tests/comments/PrintAst.expected b/csharp/ql/test/library-tests/comments/PrintAst.expected index 68c2c582e371..9bc446858ee1 100644 --- a/csharp/ql/test/library-tests/comments/PrintAst.expected +++ b/csharp/ql/test/library-tests/comments/PrintAst.expected @@ -1,19 +1,19 @@ comments1.cs: # 9| [Class] C # 34| [Class] Foo -# 39| 5: [Field] x +# 39| 6: [Field] x # 39| -1: [TypeMention] int -# 42| 6: [Field] y +# 42| 7: [Field] y # 42| -1: [TypeMention] int -# 43| 7: [Field] z +# 43| 8: [Field] z # 43| -1: [TypeMention] int comments2.cs: # 11| [Class] C2 -# 13| 4: [Field] field1 +# 13| 5: [Field] field1 # 13| -1: [TypeMention] int -# 14| 5: [Field] field2 +# 14| 6: [Field] field2 # 14| -1: [TypeMention] int -# 19| 6: [Method] f +# 19| 7: [Method] f # 19| -1: [TypeMention] Void # 20| 4: [BlockStmt] {...} # 23| 0: [ExprStmt] ...; @@ -21,7 +21,7 @@ comments2.cs: # 26| 1: [ExprStmt] ...; # 26| 0: [MethodCall] call to method g # 26| 0: [IntLiteral] 2 -# 29| 7: [Method] g +# 29| 8: [Method] g # 29| -1: [TypeMention] Void #-----| 2: (Parameters) # 29| 0: [Parameter] x @@ -37,8 +37,8 @@ comments2.cs: # 34| -1: [TypeMention] int # 34| 0: [LocalVariableAccess] access to local variable z # 34| 1: [IntLiteral] 0 -# 40| 8: [Class] C3 -# 48| 9: [Property] S1 +# 40| 9: [Class] C3 +# 48| 10: [Property] S1 # 48| -1: [TypeMention] string # 52| 3: [Getter] get_S1 # 52| 4: [BlockStmt] {...} @@ -48,15 +48,15 @@ comments2.cs: #-----| 2: (Parameters) # 53| 0: [Parameter] value # 54| 4: [BlockStmt] {...} -# 61| 10: [Enum] Values +# 61| 11: [Enum] Values # 66| 5: [Field] First # 67| 6: [Field] Second # 73| 7: [Field] Third -# 79| 11: [InstanceConstructor] C2 +# 79| 12: [InstanceConstructor] C2 # 80| 4: [BlockStmt] {...} -# 85| 12: [Destructor] ~C2 +# 85| 13: [Destructor] ~C2 # 86| 4: [BlockStmt] {...} -# 90| 13: [AddOperator] + +# 90| 14: [AddOperator] + # 90| -1: [TypeMention] int #-----| 2: (Parameters) # 90| 0: [Parameter] x @@ -66,7 +66,7 @@ comments2.cs: # 91| 4: [BlockStmt] {...} # 92| 0: [ReturnStmt] return ...; # 92| 0: [IntLiteral] 2 -# 95| 14: [Method] f +# 95| 15: [Method] f # 95| -1: [TypeMention] Void #-----| 2: (Parameters) # 96| 0: [Parameter] x @@ -74,8 +74,8 @@ comments2.cs: # 97| 1: [Parameter] y # 97| -1: [TypeMention] int # 99| 4: [BlockStmt] {...} -# 103| 15: [DelegateType] D -# 107| 16: [Event] E +# 103| 16: [DelegateType] D +# 107| 17: [Event] E # 107| -1: [TypeMention] D # 107| 3: [AddEventAccessor] add_E #-----| 2: (Parameters) @@ -83,7 +83,7 @@ comments2.cs: # 107| 4: [RemoveEventAccessor] remove_E #-----| 2: (Parameters) # 107| 0: [Parameter] value -# 110| 17: [Method] gen +# 110| 18: [Method] gen # 110| -1: [TypeMention] Void # 111| 4: [BlockStmt] {...} # 112| 0: [LocalVariableDeclStmt] ... ...; @@ -110,12 +110,12 @@ comments2.cs: # 115| -1: [TypeMention] int # 115| 0: [LocalVariableAccess] access to local variable t4 # 115| 1: [MethodCall] call to method GenericFn -# 119| 20: [Class] GenericClass`1 +# 119| 21: [Class] GenericClass`1 #-----| 1: (Type parameters) # 119| 0: [TypeParameter] T -# 121| 5: [Field] f +# 121| 6: [Field] f # 121| -1: [TypeMention] int -# 125| 23: [Method] GenericFn`1 +# 125| 24: [Method] GenericFn`1 # 125| -1: [TypeMention] int #-----| 1: (Type parameters) # 125| 0: [TypeParameter] T @@ -129,7 +129,7 @@ comments2.cs: # 128| 0: [IntLiteral] 0 trivia.cs: # 14| [Class] Tr1 -# 16| 5: [Method] M1 +# 16| 6: [Method] M1 # 16| -1: [TypeMention] Void # 17| 4: [BlockStmt] {...} comments1.cs: @@ -155,7 +155,7 @@ trivia.cs: # 28| 0: [LocalVariableDeclExpr] Double d # 28| 0: [TypeMention] double # 32| [Class] Tr2 -# 34| 5: [Method] M1 +# 34| 6: [Method] M1 # 34| -1: [TypeMention] Void # 35| 4: [BlockStmt] {...} # 37| 0: [LocalVariableDeclStmt] ... ...; @@ -165,11 +165,11 @@ trivia.cs: # 39| 0: [LocalVariableDeclExpr] Int32 j # 39| 0: [TypeMention] int # 45| [Class] Tr3 -# 47| 5: [Method] M1 +# 47| 6: [Method] M1 # 47| -1: [TypeMention] Void # 48| 4: [BlockStmt] {...} # 61| [Class] Tr4 -# 63| 5: [Method] M1 +# 63| 6: [Method] M1 # 63| -1: [TypeMention] Void # 64| 4: [BlockStmt] {...} # 73| 0: [LocalVariableDeclStmt] ... ...; @@ -178,25 +178,25 @@ trivia.cs: # 73| 0: [LocalVariableAccess] access to local variable i # 73| 1: [IntLiteral] 1 # 80| [Class] Tr5 -# 83| 5: [Method] M1 +# 83| 6: [Method] M1 # 83| -1: [TypeMention] Void # 84| 4: [BlockStmt] {...} -# 88| 6: [Method] M2 +# 88| 7: [Method] M2 # 88| -1: [TypeMention] Void # 89| 4: [BlockStmt] {...} -# 92| 7: [Field] F1 +# 92| 8: [Field] F1 # 92| -1: [TypeMention] int # 94| 1: [IntLiteral] 10 -# 98| 8: [Field] F2 +# 98| 9: [Field] F2 # 98| -1: [TypeMention] int # 98| 1: [IntLiteral] 0 -# 100| 9: [Property] P1 +# 100| 10: [Property] P1 # 100| -1: [TypeMention] int # 102| 3: [Getter] get_P1 # 104| 4: [Setter] set_P1 #-----| 2: (Parameters) # 104| 0: [Parameter] value -# 108| 10: [Property] P2 +# 108| 11: [Property] P2 # 108| -1: [TypeMention] int # 108| 3: [Getter] get_P2 # 108| 4: [Setter] set_P2 diff --git a/csharp/ql/test/library-tests/constructors/PrintAst.expected b/csharp/ql/test/library-tests/constructors/PrintAst.expected index fc5c19ac2df2..000ae29f2c26 100644 --- a/csharp/ql/test/library-tests/constructors/PrintAst.expected +++ b/csharp/ql/test/library-tests/constructors/PrintAst.expected @@ -1,16 +1,16 @@ constructors.cs: # 1| [NamespaceDeclaration] namespace ... { ... } # 3| 1: [Class] Class -# 5| 4: [InstanceConstructor] Class +# 5| 5: [InstanceConstructor] Class # 6| 4: [BlockStmt] {...} -# 8| 5: [InstanceConstructor] Class +# 8| 6: [InstanceConstructor] Class #-----| 2: (Parameters) # 8| 0: [Parameter] i # 8| -1: [TypeMention] int # 9| 4: [BlockStmt] {...} -# 11| 6: [StaticConstructor] Class +# 11| 7: [StaticConstructor] Class # 12| 4: [BlockStmt] {...} -# 14| 7: [Destructor] ~Class +# 14| 8: [Destructor] ~Class # 15| 4: [BlockStmt] {...} # 16| 0: [LocalVariableDeclStmt] ... ...; # 16| 0: [LocalVariableDeclAndInitExpr] Int32 i = ... @@ -19,13 +19,13 @@ constructors.cs: # 16| 1: [IntLiteral] 0 # 21| [NamespaceDeclaration] namespace ... { ... } # 23| 1: [Class] C1 -# 23| 4: [InstanceConstructor,PrimaryConstructor] C1 +# 23| 5: [InstanceConstructor,PrimaryConstructor] C1 #-----| 2: (Parameters) # 23| 0: [Parameter] o # 23| -1: [TypeMention] object # 23| 1: [Parameter] s # 23| -1: [TypeMention] string -# 25| 5: [InstanceConstructor] C1 +# 25| 6: [InstanceConstructor] C1 #-----| 2: (Parameters) # 25| 0: [Parameter] o # 25| -1: [TypeMention] object @@ -36,7 +36,7 @@ constructors.cs: # 28| 2: [Class] C2 #-----| 3: (Base types) # 28| 0: [TypeMention] C1 -# 28| 4: [InstanceConstructor,PrimaryConstructor] C2 +# 28| 5: [InstanceConstructor,PrimaryConstructor] C2 #-----| 2: (Parameters) # 28| 0: [Parameter] o # 28| -1: [TypeMention] object diff --git a/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected b/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected index c9f7d2ab35c7..99d89a29c134 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected @@ -1,4 +1,4 @@ -| AccessorCalls.cs:1:7:1:19 | enter AccessorCalls | AccessorCalls.cs:1:7:1:19 | exit AccessorCalls | 5 | +| AccessorCalls.cs:1:7:1:19 | enter AccessorCalls | AccessorCalls.cs:1:7:1:19 | exit AccessorCalls | 7 | | AccessorCalls.cs:5:23:5:25 | enter get_Item | AccessorCalls.cs:5:23:5:25 | exit get_Item | 4 | | AccessorCalls.cs:5:33:5:35 | enter set_Item | AccessorCalls.cs:5:33:5:35 | exit set_Item | 4 | | AccessorCalls.cs:7:32:7:34 | enter add_Event | AccessorCalls.cs:7:32:7:34 | exit add_Event | 4 | @@ -12,12 +12,12 @@ | AccessorCalls.cs:56:10:56:11 | enter M7 | AccessorCalls.cs:56:10:56:11 | exit M7 | 24 | | AccessorCalls.cs:61:10:61:11 | enter M8 | AccessorCalls.cs:61:10:61:11 | exit M8 | 30 | | AccessorCalls.cs:66:10:66:11 | enter M9 | AccessorCalls.cs:66:10:66:11 | exit M9 | 58 | -| ArrayCreation.cs:1:7:1:19 | enter ArrayCreation | ArrayCreation.cs:1:7:1:19 | exit ArrayCreation | 5 | +| ArrayCreation.cs:1:7:1:19 | enter ArrayCreation | ArrayCreation.cs:1:7:1:19 | exit ArrayCreation | 7 | | ArrayCreation.cs:3:11:3:12 | enter M1 | ArrayCreation.cs:3:11:3:12 | exit M1 | 5 | | ArrayCreation.cs:5:12:5:13 | enter M2 | ArrayCreation.cs:5:12:5:13 | exit M2 | 6 | | ArrayCreation.cs:7:11:7:12 | enter M3 | ArrayCreation.cs:7:11:7:12 | exit M3 | 8 | | ArrayCreation.cs:9:12:9:13 | enter M4 | ArrayCreation.cs:9:12:9:13 | exit M4 | 13 | -| Assert.cs:5:7:5:17 | enter AssertTests | Assert.cs:5:7:5:17 | exit AssertTests | 5 | +| Assert.cs:5:7:5:17 | enter AssertTests | Assert.cs:5:7:5:17 | exit AssertTests | 7 | | Assert.cs:7:10:7:11 | enter M1 | Assert.cs:9:20:9:20 | access to parameter b | 4 | | Assert.cs:7:10:7:11 | exit M1 | Assert.cs:7:10:7:11 | exit M1 | 1 | | Assert.cs:7:10:7:11 | exit M1 (abnormal) | Assert.cs:7:10:7:11 | exit M1 (abnormal) | 1 | @@ -163,11 +163,11 @@ | Assert.cs:138:10:138:12 | exit M13 | Assert.cs:138:10:138:12 | exit M13 | 1 | | Assert.cs:138:10:138:12 | exit M13 (abnormal) | Assert.cs:138:10:138:12 | exit M13 (abnormal) | 1 | | Assert.cs:141:9:141:15 | return ...; | Assert.cs:138:10:138:12 | exit M13 (normal) | 2 | -| Assignments.cs:1:7:1:17 | enter Assignments | Assignments.cs:1:7:1:17 | exit Assignments | 5 | +| Assignments.cs:1:7:1:17 | enter Assignments | Assignments.cs:1:7:1:17 | exit Assignments | 7 | | Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | exit M | 34 | | Assignments.cs:14:18:14:35 | enter (...) => ... | Assignments.cs:14:18:14:35 | exit (...) => ... | 4 | | Assignments.cs:17:40:17:40 | enter + | Assignments.cs:17:40:17:40 | exit + | 6 | -| BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | exit BreakInTry | 5 | +| BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | exit BreakInTry | 7 | | BreakInTry.cs:3:10:3:11 | enter M1 | BreakInTry.cs:7:33:7:36 | access to parameter args | 5 | | BreakInTry.cs:3:10:3:11 | exit M1 (normal) | BreakInTry.cs:3:10:3:11 | exit M1 | 2 | | BreakInTry.cs:7:13:11:13 | foreach (... ... in ...) ... | BreakInTry.cs:7:13:11:13 | foreach (... ... in ...) ... | 1 | @@ -197,18 +197,18 @@ | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | 1 | | BreakInTry.cs:65:26:65:28 | String arg | BreakInTry.cs:67:21:67:31 | ... == ... | 6 | | BreakInTry.cs:68:21:68:26 | break; | BreakInTry.cs:68:21:68:26 | break; | 1 | -| CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators | 5 | +| CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators | 7 | | CompileTimeOperators.cs:5:9:5:15 | enter Default | CompileTimeOperators.cs:5:9:5:15 | exit Default | 6 | | CompileTimeOperators.cs:10:9:10:14 | enter Sizeof | CompileTimeOperators.cs:10:9:10:14 | exit Sizeof | 6 | | CompileTimeOperators.cs:15:10:15:15 | enter Typeof | CompileTimeOperators.cs:15:10:15:15 | exit Typeof | 6 | | CompileTimeOperators.cs:20:12:20:17 | enter Nameof | CompileTimeOperators.cs:20:12:20:17 | exit Nameof | 6 | -| CompileTimeOperators.cs:26:7:26:22 | enter GotoInTryFinally | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally | 5 | +| CompileTimeOperators.cs:26:7:26:22 | enter GotoInTryFinally | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally | 7 | | CompileTimeOperators.cs:28:10:28:10 | enter M | CompileTimeOperators.cs:37:13:37:40 | call to method WriteLine | 9 | | CompileTimeOperators.cs:28:10:28:10 | exit M | CompileTimeOperators.cs:28:10:28:10 | exit M | 1 | | CompileTimeOperators.cs:28:10:28:10 | exit M (abnormal) | CompileTimeOperators.cs:28:10:28:10 | exit M (abnormal) | 1 | | CompileTimeOperators.cs:39:9:39:34 | ...; | CompileTimeOperators.cs:39:9:39:33 | call to method WriteLine | 3 | | CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:28:10:28:10 | exit M (normal) | 5 | -| ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | exit ConditionalAccess | 5 | +| ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | exit ConditionalAccess | 7 | | ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:26:3:26 | access to parameter i | 2 | | ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:12:3:13 | exit M1 | 2 | | ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:38 | call to method ToString | 1 | @@ -245,7 +245,7 @@ | ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:32:10:32:11 | exit M8 | 2 | | ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:24 | call to method Out | 1 | | ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith | 8 | -| Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | exit Conditions | 5 | +| Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | exit Conditions | 7 | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:5:13:5:15 | access to parameter inc | 4 | | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:3:10:3:19 | exit IncrOrDecr | 2 | | Conditions.cs:6:13:6:16 | ...; | Conditions.cs:6:13:6:15 | ...++ | 3 | @@ -334,7 +334,7 @@ | Conditions.cs:145:27:145:29 | "b" | Conditions.cs:145:27:145:29 | "b" | 1 | | Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:13:147:48 | call to method WriteLine | 6 | | Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:13:149:48 | call to method WriteLine | 6 | -| ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | exit ExitMethods | 5 | +| ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | exit ExitMethods | 7 | | ExitMethods.cs:8:10:8:11 | enter M1 | ExitMethods.cs:8:10:8:11 | exit M1 | 8 | | ExitMethods.cs:14:10:14:11 | enter M2 | ExitMethods.cs:14:10:14:11 | exit M2 | 8 | | ExitMethods.cs:20:10:20:11 | enter M3 | ExitMethods.cs:20:10:20:11 | exit M3 | 7 | @@ -383,7 +383,7 @@ | Extensions.cs:10:24:10:29 | enter ToBool | Extensions.cs:10:24:10:29 | exit ToBool | 8 | | Extensions.cs:15:23:15:33 | enter CallToInt32 | Extensions.cs:15:23:15:33 | exit CallToInt32 | 5 | | Extensions.cs:20:17:20:20 | enter Main | Extensions.cs:20:17:20:20 | exit Main | 20 | -| Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | exit Finally | 5 | +| Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | exit Finally | 7 | | Finally.cs:7:10:7:11 | enter M1 | Finally.cs:15:13:15:40 | call to method WriteLine | 11 | | Finally.cs:7:10:7:11 | exit M1 | Finally.cs:7:10:7:11 | exit M1 | 1 | | Finally.cs:7:10:7:11 | exit M1 (abnormal) | Finally.cs:7:10:7:11 | exit M1 (abnormal) | 1 | @@ -464,9 +464,9 @@ | Finally.cs:161:30:161:30 | Exception e | Finally.cs:161:39:161:54 | ... == ... | 5 | | Finally.cs:162:13:164:13 | {...} | Finally.cs:163:17:163:42 | call to method WriteLine | 6 | | Finally.cs:165:13:168:13 | catch {...} | Finally.cs:167:17:167:37 | call to method WriteLine | 5 | -| Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | exit ExceptionA | 5 | -| Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | exit ExceptionB | 5 | -| Finally.cs:174:11:174:20 | enter ExceptionC | Finally.cs:174:11:174:20 | exit ExceptionC | 5 | +| Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | exit ExceptionA | 7 | +| Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | exit ExceptionB | 7 | +| Finally.cs:174:11:174:20 | enter ExceptionC | Finally.cs:174:11:174:20 | exit ExceptionC | 7 | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:17:180:18 | access to parameter b1 | 6 | | Finally.cs:176:10:176:11 | exit M9 | Finally.cs:176:10:176:11 | exit M9 | 1 | | Finally.cs:176:10:176:11 | exit M9 (abnormal) | Finally.cs:176:10:176:11 | exit M9 (abnormal) | 1 | @@ -511,7 +511,7 @@ | Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | exit M13 | 1 | | Finally.cs:263:10:263:12 | exit M13 (abnormal) | Finally.cs:263:10:263:12 | exit M13 (abnormal) | 1 | | Finally.cs:263:10:263:12 | exit M13 (normal) | Finally.cs:263:10:263:12 | exit M13 (normal) | 1 | -| Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | exit Foreach | 5 | +| Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | exit Foreach | 7 | | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:8:29:8:32 | access to parameter args | 3 | | Foreach.cs:6:10:6:11 | exit M1 (normal) | Foreach.cs:6:10:6:11 | exit M1 | 2 | | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | 1 | @@ -539,19 +539,22 @@ | Foreach.cs:36:10:36:11 | exit M6 (normal) | Foreach.cs:36:10:36:11 | exit M6 | 2 | | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | 1 | | Foreach.cs:38:26:38:26 | String x | Foreach.cs:39:11:39:11 | ; | 4 | +| Initializers.cs:3:7:3:18 | enter | Initializers.cs:3:7:3:18 | exit | 14 | | Initializers.cs:3:7:3:18 | enter Initializers | Initializers.cs:3:7:3:18 | exit Initializers | 4 | -| Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | exit Initializers | 16 | -| Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | exit Initializers | 16 | +| Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | exit Initializers | 7 | +| Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | exit Initializers | 7 | | Initializers.cs:12:10:12:10 | enter M | Initializers.cs:12:10:12:10 | exit M | 22 | | Initializers.cs:18:16:18:16 | enter H | Initializers.cs:18:16:18:16 | exit H | 5 | -| Initializers.cs:20:11:20:23 | enter NoConstructor | Initializers.cs:20:11:20:23 | exit NoConstructor | 11 | -| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | exit Sub | 12 | +| Initializers.cs:20:11:20:23 | enter | Initializers.cs:20:11:20:23 | exit | 9 | +| Initializers.cs:20:11:20:23 | enter NoConstructor | Initializers.cs:20:11:20:23 | exit NoConstructor | 7 | +| Initializers.cs:26:11:26:13 | enter | Initializers.cs:26:11:26:13 | exit | 6 | +| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | exit Sub | 11 | | Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:9:33:11 | exit Sub | 9 | -| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | exit Sub | 14 | -| Initializers.cs:39:7:39:23 | enter IndexInitializers | Initializers.cs:39:7:39:23 | exit IndexInitializers | 5 | -| Initializers.cs:41:11:41:18 | enter Compound | Initializers.cs:41:11:41:18 | exit Compound | 5 | +| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | exit Sub | 13 | +| Initializers.cs:39:7:39:23 | enter IndexInitializers | Initializers.cs:39:7:39:23 | exit IndexInitializers | 7 | +| Initializers.cs:41:11:41:18 | enter Compound | Initializers.cs:41:11:41:18 | exit Compound | 7 | | Initializers.cs:51:10:51:13 | enter Test | Initializers.cs:51:10:51:13 | exit Test | 105 | -| LoopUnrolling.cs:5:7:5:19 | enter LoopUnrolling | LoopUnrolling.cs:5:7:5:19 | exit LoopUnrolling | 5 | +| LoopUnrolling.cs:5:7:5:19 | enter LoopUnrolling | LoopUnrolling.cs:5:7:5:19 | exit LoopUnrolling | 7 | | LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:9:13:9:28 | ... == ... | 7 | | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | LoopUnrolling.cs:7:10:7:11 | exit M1 | 2 | | LoopUnrolling.cs:10:13:10:19 | return ...; | LoopUnrolling.cs:10:13:10:19 | return ...; | 1 | @@ -609,9 +612,9 @@ | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | LoopUnrolling.cs:94:10:94:12 | exit M11 | 2 | | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | 1 | | LoopUnrolling.cs:97:22:97:22 | String x | LoopUnrolling.cs:99:13:99:32 | call to method WriteLine | 5 | -| MultiImplementationA.cs:4:7:4:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | {...} | 2 | | MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationA.cs:4:7:4:8 | enter C1 | 1 | | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | MultiImplementationA.cs:4:7:4:8 | exit C1 | 2 | +| MultiImplementationA.cs:4:7:4:8 | this access | MultiImplementationA.cs:4:7:4:8 | {...} | 4 | | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | 1 | | MultiImplementationA.cs:6:22:6:31 | exit get_P1 | MultiImplementationA.cs:6:22:6:31 | exit get_P1 | 1 | | MultiImplementationA.cs:6:28:6:31 | null | MultiImplementationA.cs:6:22:6:31 | exit get_P1 (abnormal) | 3 | @@ -624,6 +627,9 @@ | MultiImplementationA.cs:8:16:8:16 | enter M | MultiImplementationA.cs:8:16:8:16 | enter M | 1 | | MultiImplementationA.cs:8:16:8:16 | exit M | MultiImplementationA.cs:8:16:8:16 | exit M | 1 | | MultiImplementationA.cs:8:29:8:32 | null | MultiImplementationA.cs:8:16:8:16 | exit M (abnormal) | 3 | +| MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationA.cs:11:7:11:8 | enter | 1 | +| MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationA.cs:11:7:11:8 | exit | 2 | +| MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:24:32:24:34 | ... = ... | 7 | | MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | exit get_Item (normal) | 2 | | MultiImplementationA.cs:14:31:14:31 | enter get_Item | MultiImplementationA.cs:14:31:14:31 | enter get_Item | 1 | | MultiImplementationA.cs:14:31:14:31 | exit get_Item | MultiImplementationA.cs:14:31:14:31 | exit get_Item | 1 | @@ -637,9 +643,9 @@ | MultiImplementationA.cs:16:17:16:18 | exit M1 (normal) | MultiImplementationA.cs:16:17:16:18 | exit M1 | 2 | | MultiImplementationA.cs:17:5:19:5 | {...} | MultiImplementationA.cs:18:9:18:22 | M2(...) | 2 | | MultiImplementationA.cs:18:9:18:22 | enter M2 | MultiImplementationA.cs:18:9:18:22 | exit M2 | 4 | -| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | 14 | | MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | enter C2 | 1 | | MultiImplementationA.cs:20:12:20:13 | exit C2 | MultiImplementationA.cs:20:12:20:13 | exit C2 | 1 | +| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | 9 | | MultiImplementationA.cs:21:12:21:13 | enter C2 | MultiImplementationA.cs:21:12:21:13 | enter C2 | 1 | | MultiImplementationA.cs:21:12:21:13 | exit C2 (normal) | MultiImplementationA.cs:21:12:21:13 | exit C2 | 2 | | MultiImplementationA.cs:21:24:21:24 | 0 | MultiImplementationA.cs:21:27:21:29 | {...} | 3 | @@ -649,35 +655,36 @@ | MultiImplementationA.cs:23:28:23:35 | enter implicit conversion | MultiImplementationA.cs:23:28:23:35 | enter implicit conversion | 1 | | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion | 1 | | MultiImplementationA.cs:23:50:23:53 | null | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion (normal) | 2 | -| MultiImplementationA.cs:28:7:28:8 | call to constructor Object | MultiImplementationA.cs:28:7:28:8 | {...} | 2 | | MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationA.cs:28:7:28:8 | enter C3 | 1 | | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | MultiImplementationA.cs:28:7:28:8 | exit C3 | 2 | +| MultiImplementationA.cs:28:7:28:8 | this access | MultiImplementationA.cs:28:7:28:8 | {...} | 4 | | MultiImplementationA.cs:30:21:30:23 | enter get_P3 | MultiImplementationA.cs:30:21:30:23 | exit get_P3 | 5 | -| MultiImplementationA.cs:34:15:34:16 | call to constructor Object | MultiImplementationA.cs:34:15:34:16 | {...} | 2 | | MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationA.cs:34:15:34:16 | enter C4 | 1 | | MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | MultiImplementationA.cs:34:15:34:16 | exit C4 | 2 | +| MultiImplementationA.cs:34:15:34:16 | this access | MultiImplementationA.cs:34:15:34:16 | {...} | 4 | | MultiImplementationA.cs:36:9:36:10 | enter M1 | MultiImplementationA.cs:36:9:36:10 | enter M1 | 1 | | MultiImplementationA.cs:36:9:36:10 | exit M1 | MultiImplementationA.cs:36:9:36:10 | exit M1 | 1 | | MultiImplementationA.cs:36:14:36:28 | {...} | MultiImplementationA.cs:36:9:36:10 | exit M1 (abnormal) | 4 | | MultiImplementationA.cs:37:9:37:10 | enter M2 | MultiImplementationA.cs:37:9:37:10 | exit M2 | 6 | -| MultiImplementationB.cs:1:7:1:8 | call to constructor Object | MultiImplementationB.cs:1:7:1:8 | {...} | 2 | +| MultiImplementationB.cs:1:7:1:8 | this access | MultiImplementationB.cs:1:7:1:8 | {...} | 4 | | MultiImplementationB.cs:3:22:3:22 | 0 | MultiImplementationA.cs:6:22:6:31 | exit get_P1 (normal) | 2 | | MultiImplementationB.cs:4:25:4:37 | {...} | MultiImplementationA.cs:7:21:7:23 | exit get_P2 (normal) | 4 | | MultiImplementationB.cs:4:43:4:45 | {...} | MultiImplementationA.cs:7:41:7:43 | exit set_P2 (normal) | 2 | | MultiImplementationB.cs:5:23:5:23 | 2 | MultiImplementationA.cs:8:16:8:16 | exit M (normal) | 2 | +| MultiImplementationB.cs:11:16:11:16 | this access | MultiImplementationB.cs:22:32:22:34 | ... = ... | 7 | | MultiImplementationB.cs:12:37:12:40 | null | MultiImplementationA.cs:14:31:14:31 | exit get_Item (abnormal) | 3 | | MultiImplementationB.cs:13:40:13:54 | {...} | MultiImplementationA.cs:15:36:15:38 | exit get_Item (abnormal) | 4 | | MultiImplementationB.cs:13:60:13:62 | {...} | MultiImplementationB.cs:13:60:13:62 | {...} | 1 | | MultiImplementationB.cs:15:5:17:5 | {...} | MultiImplementationB.cs:16:9:16:31 | M2(...) | 2 | | MultiImplementationB.cs:16:9:16:31 | enter M2 | MultiImplementationB.cs:16:9:16:31 | exit M2 | 5 | -| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | exit C2 (abnormal) | 12 | +| MultiImplementationB.cs:18:12:18:13 | this access | MultiImplementationA.cs:20:12:20:13 | exit C2 (abnormal) | 7 | | MultiImplementationB.cs:19:24:19:24 | 1 | MultiImplementationB.cs:19:27:19:29 | {...} | 3 | | MultiImplementationB.cs:20:11:20:25 | {...} | MultiImplementationA.cs:22:6:22:7 | exit ~C2 (abnormal) | 4 | | MultiImplementationB.cs:21:56:21:59 | null | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion (abnormal) | 3 | -| MultiImplementationB.cs:25:7:25:8 | call to constructor Object | MultiImplementationB.cs:25:7:25:8 | {...} | 2 | -| MultiImplementationB.cs:30:15:30:16 | call to constructor Object | MultiImplementationB.cs:30:15:30:16 | {...} | 2 | +| MultiImplementationB.cs:25:7:25:8 | this access | MultiImplementationB.cs:25:7:25:8 | {...} | 4 | +| MultiImplementationB.cs:30:15:30:16 | this access | MultiImplementationB.cs:30:15:30:16 | {...} | 4 | | MultiImplementationB.cs:32:17:32:17 | 0 | MultiImplementationA.cs:36:9:36:10 | exit M1 (normal) | 2 | -| NullCoalescing.cs:1:7:1:20 | enter NullCoalescing | NullCoalescing.cs:1:7:1:20 | exit NullCoalescing | 5 | +| NullCoalescing.cs:1:7:1:20 | enter NullCoalescing | NullCoalescing.cs:1:7:1:20 | exit NullCoalescing | 7 | | NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:23:3:23 | access to parameter i | 2 | | NullCoalescing.cs:3:23:3:28 | ... ?? ... | NullCoalescing.cs:3:9:3:10 | exit M1 | 3 | | NullCoalescing.cs:3:28:3:28 | 0 | NullCoalescing.cs:3:28:3:28 | 0 | 1 | @@ -715,9 +722,10 @@ | NullCoalescing.cs:15:31:15:31 | 0 | NullCoalescing.cs:16:17:16:18 | "" | 5 | | NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:17:13:17:19 | (...) ... | 5 | | NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:13:10:13:11 | exit M6 | 4 | -| PartialImplementationA.cs:3:12:3:18 | enter Partial | PartialImplementationA.cs:3:12:3:18 | exit Partial | 12 | -| PartialImplementationB.cs:4:12:4:18 | enter Partial | PartialImplementationB.cs:4:12:4:18 | exit Partial | 12 | -| Patterns.cs:3:7:3:14 | enter Patterns | Patterns.cs:3:7:3:14 | exit Patterns | 5 | +| PartialImplementationA.cs:1:15:1:21 | enter | PartialImplementationA.cs:1:15:1:21 | exit | 10 | +| PartialImplementationA.cs:3:12:3:18 | enter Partial | PartialImplementationA.cs:3:12:3:18 | exit Partial | 7 | +| PartialImplementationB.cs:4:12:4:18 | enter Partial | PartialImplementationB.cs:4:12:4:18 | exit Partial | 7 | +| Patterns.cs:3:7:3:14 | enter Patterns | Patterns.cs:3:7:3:14 | exit Patterns | 7 | | Patterns.cs:5:10:5:11 | enter M1 | Patterns.cs:8:18:8:23 | Int32 i1 | 8 | | Patterns.cs:8:13:8:23 | [false] ... is ... | Patterns.cs:8:13:8:23 | [false] ... is ... | 1 | | Patterns.cs:8:13:8:23 | [true] ... is ... | Patterns.cs:8:13:8:23 | [true] ... is ... | 1 | @@ -811,7 +819,7 @@ | Patterns.cs:95:29:95:38 | [no-match] ... or ... | Patterns.cs:95:29:95:38 | [no-match] ... or ... | 1 | | Patterns.cs:95:36:95:38 | access to constant B | Patterns.cs:95:36:95:38 | access to constant B | 1 | | Patterns.cs:96:9:98:9 | {...} | Patterns.cs:97:13:97:38 | call to method WriteLine | 4 | -| PostDominance.cs:3:7:3:19 | enter PostDominance | PostDominance.cs:3:7:3:19 | exit PostDominance | 5 | +| PostDominance.cs:3:7:3:19 | enter PostDominance | PostDominance.cs:3:7:3:19 | exit PostDominance | 7 | | PostDominance.cs:5:10:5:11 | enter M1 | PostDominance.cs:5:10:5:11 | exit M1 | 7 | | PostDominance.cs:10:10:10:11 | enter M2 | PostDominance.cs:12:18:12:21 | null | 5 | | PostDominance.cs:10:10:10:11 | exit M2 (normal) | PostDominance.cs:10:10:10:11 | exit M2 | 2 | @@ -825,11 +833,11 @@ | PostDominance.cs:19:13:19:21 | [true] ... is ... | PostDominance.cs:19:13:19:21 | [true] ... is ... | 1 | | PostDominance.cs:20:45:20:53 | nameof(...) | PostDominance.cs:17:10:17:11 | exit M3 (abnormal) | 4 | | PostDominance.cs:21:9:21:29 | ...; | PostDominance.cs:17:10:17:11 | exit M3 (normal) | 4 | -| Qualifiers.cs:1:7:1:16 | enter Qualifiers | Qualifiers.cs:1:7:1:16 | exit Qualifiers | 5 | +| Qualifiers.cs:1:7:1:16 | enter Qualifiers | Qualifiers.cs:1:7:1:16 | exit Qualifiers | 7 | | Qualifiers.cs:7:16:7:21 | enter Method | Qualifiers.cs:7:16:7:21 | exit Method | 4 | | Qualifiers.cs:8:23:8:34 | enter StaticMethod | Qualifiers.cs:8:23:8:34 | exit StaticMethod | 4 | | Qualifiers.cs:10:10:10:10 | enter M | Qualifiers.cs:10:10:10:10 | exit M | 58 | -| Switch.cs:3:7:3:12 | enter Switch | Switch.cs:3:7:3:12 | exit Switch | 5 | +| Switch.cs:3:7:3:12 | enter Switch | Switch.cs:3:7:3:12 | exit Switch | 7 | | Switch.cs:5:10:5:11 | enter M1 | Switch.cs:5:10:5:11 | exit M1 | 6 | | Switch.cs:10:10:10:11 | enter M2 | Switch.cs:14:18:14:20 | "a" | 6 | | Switch.cs:10:10:10:11 | exit M2 | Switch.cs:10:10:10:11 | exit M2 | 1 | @@ -947,20 +955,20 @@ | Switch.cs:171:13:171:19 | case ...: | Switch.cs:171:18:171:18 | 3 | 2 | | Switch.cs:172:17:172:46 | ...; | Switch.cs:173:17:173:22 | break; | 4 | | Switch.cs:174:13:174:20 | default: | Switch.cs:176:17:176:22 | break; | 5 | -| TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses | 5 | +| TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses | 7 | | TypeAccesses.cs:3:10:3:10 | enter M | TypeAccesses.cs:7:18:7:22 | Int32 j | 13 | | TypeAccesses.cs:7:13:7:22 | [false] ... is ... | TypeAccesses.cs:7:13:7:22 | [false] ... is ... | 1 | | TypeAccesses.cs:7:13:7:22 | [true] ... is ... | TypeAccesses.cs:7:13:7:22 | [true] ... is ... | 1 | | TypeAccesses.cs:7:25:7:25 | ; | TypeAccesses.cs:7:25:7:25 | ; | 1 | | TypeAccesses.cs:8:9:8:28 | ... ...; | TypeAccesses.cs:3:10:3:10 | exit M | 5 | -| VarDecls.cs:3:7:3:14 | enter VarDecls | VarDecls.cs:3:7:3:14 | exit VarDecls | 5 | +| VarDecls.cs:3:7:3:14 | enter VarDecls | VarDecls.cs:3:7:3:14 | exit VarDecls | 7 | | VarDecls.cs:5:18:5:19 | enter M1 | VarDecls.cs:5:18:5:19 | exit M1 | 19 | | VarDecls.cs:13:12:13:13 | enter M2 | VarDecls.cs:13:12:13:13 | exit M2 | 13 | | VarDecls.cs:19:7:19:8 | enter M3 | VarDecls.cs:25:20:25:20 | access to parameter b | 11 | | VarDecls.cs:25:20:25:28 | ... ? ... : ... | VarDecls.cs:19:7:19:8 | exit M3 | 4 | | VarDecls.cs:25:24:25:24 | access to local variable x | VarDecls.cs:25:24:25:24 | access to local variable x | 1 | | VarDecls.cs:25:28:25:28 | access to local variable y | VarDecls.cs:25:28:25:28 | access to local variable y | 1 | -| VarDecls.cs:28:11:28:11 | enter C | VarDecls.cs:28:11:28:11 | exit C | 5 | +| VarDecls.cs:28:11:28:11 | enter C | VarDecls.cs:28:11:28:11 | exit C | 7 | | VarDecls.cs:28:41:28:47 | enter Dispose | VarDecls.cs:28:41:28:47 | exit Dispose | 4 | | cflow.cs:5:17:5:20 | enter Main | cflow.cs:11:13:11:17 | ... > ... | 15 | | cflow.cs:5:17:5:20 | exit Main (normal) | cflow.cs:5:17:5:20 | exit Main | 2 | @@ -1034,7 +1042,7 @@ | cflow.cs:127:48:127:49 | "" | cflow.cs:127:48:127:49 | "" | 1 | | cflow.cs:127:53:127:57 | this access | cflow.cs:127:53:127:57 | access to field Field | 2 | | cflow.cs:127:62:127:64 | enter set_Prop | cflow.cs:127:62:127:64 | exit set_Prop | 8 | -| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | exit ControlFlow | 9 | +| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | exit ControlFlow | 11 | | cflow.cs:134:5:134:15 | enter ControlFlow | cflow.cs:134:5:134:15 | exit ControlFlow | 9 | | cflow.cs:136:12:136:22 | enter ControlFlow | cflow.cs:136:12:136:22 | exit ControlFlow | 8 | | cflow.cs:138:40:138:40 | enter + | cflow.cs:138:40:138:40 | exit + | 9 | @@ -1132,17 +1140,17 @@ | cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:264:25:264:30 | ... < ... | 3 | | cflow.cs:265:9:267:9 | {...} | cflow.cs:264:33:264:35 | ...++ | 5 | | cflow.cs:268:9:276:9 | try {...} ... | cflow.cs:275:13:275:41 | call to method WriteLine | 7 | -| cflow.cs:282:5:282:18 | enter ControlFlowSub | cflow.cs:282:5:282:18 | exit ControlFlowSub | 5 | +| cflow.cs:282:5:282:18 | enter ControlFlowSub | cflow.cs:282:5:282:18 | exit ControlFlowSub | 7 | | cflow.cs:284:5:284:18 | enter ControlFlowSub | cflow.cs:284:5:284:18 | exit ControlFlowSub | 5 | | cflow.cs:286:5:286:18 | enter ControlFlowSub | cflow.cs:286:5:286:18 | exit ControlFlowSub | 7 | -| cflow.cs:289:7:289:18 | enter DelegateCall | cflow.cs:289:7:289:18 | exit DelegateCall | 5 | +| cflow.cs:289:7:289:18 | enter DelegateCall | cflow.cs:289:7:289:18 | exit DelegateCall | 7 | | cflow.cs:291:12:291:12 | enter M | cflow.cs:291:12:291:12 | exit M | 6 | -| cflow.cs:296:5:296:25 | enter NegationInConstructor | cflow.cs:296:5:296:25 | exit NegationInConstructor | 5 | +| cflow.cs:296:5:296:25 | enter NegationInConstructor | cflow.cs:296:5:296:25 | exit NegationInConstructor | 7 | | cflow.cs:298:10:298:10 | enter M | cflow.cs:300:46:300:50 | ... > ... | 7 | | cflow.cs:300:44:300:51 | [false] !... | cflow.cs:300:44:300:51 | [false] !... | 1 | | cflow.cs:300:44:300:51 | [true] !... | cflow.cs:300:44:300:51 | [true] !... | 1 | | cflow.cs:300:44:300:64 | ... && ... | cflow.cs:298:10:298:10 | exit M | 5 | | cflow.cs:300:56:300:56 | access to parameter s | cflow.cs:300:56:300:64 | ... != ... | 3 | -| cflow.cs:304:7:304:18 | enter LambdaGetter | cflow.cs:304:7:304:18 | exit LambdaGetter | 5 | +| cflow.cs:304:7:304:18 | enter LambdaGetter | cflow.cs:304:7:304:18 | exit LambdaGetter | 7 | | cflow.cs:306:60:310:5 | enter (...) => ... | cflow.cs:306:60:310:5 | exit (...) => ... | 9 | | cflow.cs:306:60:310:5 | enter get__getter | cflow.cs:306:60:310:5 | exit get__getter | 4 | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected b/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected index f5368b5c7e98..8240e61a4199 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected @@ -1,7 +1,9 @@ dominance | AccessorCalls.cs:1:7:1:19 | call to constructor Object | AccessorCalls.cs:1:7:1:19 | {...} | -| AccessorCalls.cs:1:7:1:19 | enter AccessorCalls | AccessorCalls.cs:1:7:1:19 | call to constructor Object | +| AccessorCalls.cs:1:7:1:19 | call to method | AccessorCalls.cs:1:7:1:19 | call to constructor Object | +| AccessorCalls.cs:1:7:1:19 | enter AccessorCalls | AccessorCalls.cs:1:7:1:19 | this access | | AccessorCalls.cs:1:7:1:19 | exit AccessorCalls (normal) | AccessorCalls.cs:1:7:1:19 | exit AccessorCalls | +| AccessorCalls.cs:1:7:1:19 | this access | AccessorCalls.cs:1:7:1:19 | call to method | | AccessorCalls.cs:1:7:1:19 | {...} | AccessorCalls.cs:1:7:1:19 | exit AccessorCalls (normal) | | AccessorCalls.cs:5:23:5:25 | enter get_Item | AccessorCalls.cs:5:30:5:30 | access to parameter i | | AccessorCalls.cs:5:23:5:25 | exit get_Item (normal) | AccessorCalls.cs:5:23:5:25 | exit get_Item | @@ -305,8 +307,10 @@ dominance | AccessorCalls.cs:73:78:73:81 | dynamic access to element | AccessorCalls.cs:73:74:73:82 | (..., ...) | | AccessorCalls.cs:73:80:73:80 | 1 | AccessorCalls.cs:73:78:73:81 | dynamic access to element | | ArrayCreation.cs:1:7:1:19 | call to constructor Object | ArrayCreation.cs:1:7:1:19 | {...} | -| ArrayCreation.cs:1:7:1:19 | enter ArrayCreation | ArrayCreation.cs:1:7:1:19 | call to constructor Object | +| ArrayCreation.cs:1:7:1:19 | call to method | ArrayCreation.cs:1:7:1:19 | call to constructor Object | +| ArrayCreation.cs:1:7:1:19 | enter ArrayCreation | ArrayCreation.cs:1:7:1:19 | this access | | ArrayCreation.cs:1:7:1:19 | exit ArrayCreation (normal) | ArrayCreation.cs:1:7:1:19 | exit ArrayCreation | +| ArrayCreation.cs:1:7:1:19 | this access | ArrayCreation.cs:1:7:1:19 | call to method | | ArrayCreation.cs:1:7:1:19 | {...} | ArrayCreation.cs:1:7:1:19 | exit ArrayCreation (normal) | | ArrayCreation.cs:3:11:3:12 | enter M1 | ArrayCreation.cs:3:27:3:27 | 0 | | ArrayCreation.cs:3:11:3:12 | exit M1 (normal) | ArrayCreation.cs:3:11:3:12 | exit M1 | @@ -337,8 +341,10 @@ dominance | ArrayCreation.cs:9:45:9:45 | 2 | ArrayCreation.cs:9:48:9:48 | 3 | | ArrayCreation.cs:9:48:9:48 | 3 | ArrayCreation.cs:9:43:9:50 | { ..., ... } | | Assert.cs:5:7:5:17 | call to constructor Object | Assert.cs:5:7:5:17 | {...} | -| Assert.cs:5:7:5:17 | enter AssertTests | Assert.cs:5:7:5:17 | call to constructor Object | +| Assert.cs:5:7:5:17 | call to method | Assert.cs:5:7:5:17 | call to constructor Object | +| Assert.cs:5:7:5:17 | enter AssertTests | Assert.cs:5:7:5:17 | this access | | Assert.cs:5:7:5:17 | exit AssertTests (normal) | Assert.cs:5:7:5:17 | exit AssertTests | +| Assert.cs:5:7:5:17 | this access | Assert.cs:5:7:5:17 | call to method | | Assert.cs:5:7:5:17 | {...} | Assert.cs:5:7:5:17 | exit AssertTests (normal) | | Assert.cs:7:10:7:11 | enter M1 | Assert.cs:8:5:12:5 | {...} | | Assert.cs:8:5:12:5 | {...} | Assert.cs:9:9:9:33 | ... ...; | @@ -708,8 +714,10 @@ dominance | Assert.cs:140:33:140:34 | access to parameter b3 | Assert.cs:140:9:140:35 | call to method AssertTrueFalse | | Assert.cs:141:9:141:15 | return ...; | Assert.cs:138:10:138:12 | exit M13 (normal) | | Assignments.cs:1:7:1:17 | call to constructor Object | Assignments.cs:1:7:1:17 | {...} | -| Assignments.cs:1:7:1:17 | enter Assignments | Assignments.cs:1:7:1:17 | call to constructor Object | +| Assignments.cs:1:7:1:17 | call to method | Assignments.cs:1:7:1:17 | call to constructor Object | +| Assignments.cs:1:7:1:17 | enter Assignments | Assignments.cs:1:7:1:17 | this access | | Assignments.cs:1:7:1:17 | exit Assignments (normal) | Assignments.cs:1:7:1:17 | exit Assignments | +| Assignments.cs:1:7:1:17 | this access | Assignments.cs:1:7:1:17 | call to method | | Assignments.cs:1:7:1:17 | {...} | Assignments.cs:1:7:1:17 | exit Assignments (normal) | | Assignments.cs:3:10:3:10 | enter M | Assignments.cs:4:5:15:5 | {...} | | Assignments.cs:3:10:3:10 | exit M (normal) | Assignments.cs:3:10:3:10 | exit M | @@ -753,8 +761,10 @@ dominance | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:17:40:17:40 | exit + (normal) | | Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:19:9:19:17 | return ...; | | BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | {...} | -| BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | call to constructor Object | +| BreakInTry.cs:1:7:1:16 | call to method | BreakInTry.cs:1:7:1:16 | call to constructor Object | +| BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | this access | | BreakInTry.cs:1:7:1:16 | exit BreakInTry (normal) | BreakInTry.cs:1:7:1:16 | exit BreakInTry | +| BreakInTry.cs:1:7:1:16 | this access | BreakInTry.cs:1:7:1:16 | call to method | | BreakInTry.cs:1:7:1:16 | {...} | BreakInTry.cs:1:7:1:16 | exit BreakInTry (normal) | | BreakInTry.cs:3:10:3:11 | enter M1 | BreakInTry.cs:4:5:18:5 | {...} | | BreakInTry.cs:3:10:3:11 | exit M1 (normal) | BreakInTry.cs:3:10:3:11 | exit M1 | @@ -839,8 +849,10 @@ dominance | BreakInTry.cs:67:21:67:31 | ... == ... | BreakInTry.cs:68:21:68:26 | break; | | BreakInTry.cs:67:28:67:31 | null | BreakInTry.cs:67:21:67:31 | ... == ... | | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | CompileTimeOperators.cs:3:7:3:26 | {...} | -| CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | +| CompileTimeOperators.cs:3:7:3:26 | call to method | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | +| CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | this access | | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators (normal) | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators | +| CompileTimeOperators.cs:3:7:3:26 | this access | CompileTimeOperators.cs:3:7:3:26 | call to method | | CompileTimeOperators.cs:3:7:3:26 | {...} | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators (normal) | | CompileTimeOperators.cs:5:9:5:15 | enter Default | CompileTimeOperators.cs:6:5:8:5 | {...} | | CompileTimeOperators.cs:5:9:5:15 | exit Default (normal) | CompileTimeOperators.cs:5:9:5:15 | exit Default | @@ -863,8 +875,10 @@ dominance | CompileTimeOperators.cs:22:9:22:25 | return ...; | CompileTimeOperators.cs:20:12:20:17 | exit Nameof (normal) | | CompileTimeOperators.cs:22:16:22:24 | nameof(...) | CompileTimeOperators.cs:22:9:22:25 | return ...; | | CompileTimeOperators.cs:26:7:26:22 | call to constructor Object | CompileTimeOperators.cs:26:7:26:22 | {...} | -| CompileTimeOperators.cs:26:7:26:22 | enter GotoInTryFinally | CompileTimeOperators.cs:26:7:26:22 | call to constructor Object | +| CompileTimeOperators.cs:26:7:26:22 | call to method | CompileTimeOperators.cs:26:7:26:22 | call to constructor Object | +| CompileTimeOperators.cs:26:7:26:22 | enter GotoInTryFinally | CompileTimeOperators.cs:26:7:26:22 | this access | | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally (normal) | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally | +| CompileTimeOperators.cs:26:7:26:22 | this access | CompileTimeOperators.cs:26:7:26:22 | call to method | | CompileTimeOperators.cs:26:7:26:22 | {...} | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally (normal) | | CompileTimeOperators.cs:28:10:28:10 | enter M | CompileTimeOperators.cs:29:5:41:5 | {...} | | CompileTimeOperators.cs:29:5:41:5 | {...} | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | @@ -884,8 +898,10 @@ dominance | CompileTimeOperators.cs:40:14:40:38 | ...; | CompileTimeOperators.cs:40:32:40:36 | "End" | | CompileTimeOperators.cs:40:32:40:36 | "End" | CompileTimeOperators.cs:40:14:40:37 | call to method WriteLine | | ConditionalAccess.cs:1:7:1:23 | call to constructor Object | ConditionalAccess.cs:1:7:1:23 | {...} | -| ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | call to constructor Object | +| ConditionalAccess.cs:1:7:1:23 | call to method | ConditionalAccess.cs:1:7:1:23 | call to constructor Object | +| ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | this access | | ConditionalAccess.cs:1:7:1:23 | exit ConditionalAccess (normal) | ConditionalAccess.cs:1:7:1:23 | exit ConditionalAccess | +| ConditionalAccess.cs:1:7:1:23 | this access | ConditionalAccess.cs:1:7:1:23 | call to method | | ConditionalAccess.cs:1:7:1:23 | {...} | ConditionalAccess.cs:1:7:1:23 | exit ConditionalAccess (normal) | | ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:26:3:26 | access to parameter i | | ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:12:3:13 | exit M1 | @@ -963,8 +979,10 @@ dominance | ConditionalAccess.cs:41:75:41:78 | ", " | ConditionalAccess.cs:41:70:41:78 | ... + ... | | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | ConditionalAccess.cs:41:70:41:83 | ... + ... | | Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | {...} | -| Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | call to constructor Object | +| Conditions.cs:1:7:1:16 | call to method | Conditions.cs:1:7:1:16 | call to constructor Object | +| Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | this access | | Conditions.cs:1:7:1:16 | exit Conditions (normal) | Conditions.cs:1:7:1:16 | exit Conditions | +| Conditions.cs:1:7:1:16 | this access | Conditions.cs:1:7:1:16 | call to method | | Conditions.cs:1:7:1:16 | {...} | Conditions.cs:1:7:1:16 | exit Conditions (normal) | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:4:5:9:5 | {...} | | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:3:10:3:19 | exit IncrOrDecr | @@ -1266,8 +1284,10 @@ dominance | Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:38:149:47 | $"..." | | Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:44:149:46 | {...} | | ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | {...} | -| ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | call to constructor Object | +| ExitMethods.cs:6:7:6:17 | call to method | ExitMethods.cs:6:7:6:17 | call to constructor Object | +| ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | this access | | ExitMethods.cs:6:7:6:17 | exit ExitMethods (normal) | ExitMethods.cs:6:7:6:17 | exit ExitMethods | +| ExitMethods.cs:6:7:6:17 | this access | ExitMethods.cs:6:7:6:17 | call to method | | ExitMethods.cs:6:7:6:17 | {...} | ExitMethods.cs:6:7:6:17 | exit ExitMethods (normal) | | ExitMethods.cs:8:10:8:11 | enter M1 | ExitMethods.cs:9:5:12:5 | {...} | | ExitMethods.cs:8:10:8:11 | exit M1 (normal) | ExitMethods.cs:8:10:8:11 | exit M1 | @@ -1464,8 +1484,10 @@ dominance | Extensions.cs:25:23:25:32 | access to method Parse | Extensions.cs:25:23:25:32 | delegate creation of type Func | | Extensions.cs:25:23:25:32 | delegate creation of type Func | Extensions.cs:25:9:25:33 | call to method ToBool | | Finally.cs:3:14:3:20 | call to constructor Object | Finally.cs:3:14:3:20 | {...} | -| Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | call to constructor Object | +| Finally.cs:3:14:3:20 | call to method | Finally.cs:3:14:3:20 | call to constructor Object | +| Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | this access | | Finally.cs:3:14:3:20 | exit Finally (normal) | Finally.cs:3:14:3:20 | exit Finally | +| Finally.cs:3:14:3:20 | this access | Finally.cs:3:14:3:20 | call to method | | Finally.cs:3:14:3:20 | {...} | Finally.cs:3:14:3:20 | exit Finally (normal) | | Finally.cs:7:10:7:11 | enter M1 | Finally.cs:8:5:17:5 | {...} | | Finally.cs:8:5:17:5 | {...} | Finally.cs:9:9:16:9 | try {...} ... | @@ -1679,16 +1701,22 @@ dominance | Finally.cs:167:17:167:38 | ...; | Finally.cs:167:35:167:36 | "" | | Finally.cs:167:35:167:36 | "" | Finally.cs:167:17:167:37 | call to method WriteLine | | Finally.cs:172:11:172:20 | call to constructor Exception | Finally.cs:172:11:172:20 | {...} | -| Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | call to constructor Exception | +| Finally.cs:172:11:172:20 | call to method | Finally.cs:172:11:172:20 | call to constructor Exception | +| Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | this access | | Finally.cs:172:11:172:20 | exit ExceptionA (normal) | Finally.cs:172:11:172:20 | exit ExceptionA | +| Finally.cs:172:11:172:20 | this access | Finally.cs:172:11:172:20 | call to method | | Finally.cs:172:11:172:20 | {...} | Finally.cs:172:11:172:20 | exit ExceptionA (normal) | | Finally.cs:173:11:173:20 | call to constructor Exception | Finally.cs:173:11:173:20 | {...} | -| Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | call to constructor Exception | +| Finally.cs:173:11:173:20 | call to method | Finally.cs:173:11:173:20 | call to constructor Exception | +| Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | this access | | Finally.cs:173:11:173:20 | exit ExceptionB (normal) | Finally.cs:173:11:173:20 | exit ExceptionB | +| Finally.cs:173:11:173:20 | this access | Finally.cs:173:11:173:20 | call to method | | Finally.cs:173:11:173:20 | {...} | Finally.cs:173:11:173:20 | exit ExceptionB (normal) | | Finally.cs:174:11:174:20 | call to constructor Exception | Finally.cs:174:11:174:20 | {...} | -| Finally.cs:174:11:174:20 | enter ExceptionC | Finally.cs:174:11:174:20 | call to constructor Exception | +| Finally.cs:174:11:174:20 | call to method | Finally.cs:174:11:174:20 | call to constructor Exception | +| Finally.cs:174:11:174:20 | enter ExceptionC | Finally.cs:174:11:174:20 | this access | | Finally.cs:174:11:174:20 | exit ExceptionC (normal) | Finally.cs:174:11:174:20 | exit ExceptionC | +| Finally.cs:174:11:174:20 | this access | Finally.cs:174:11:174:20 | call to method | | Finally.cs:174:11:174:20 | {...} | Finally.cs:174:11:174:20 | exit ExceptionC (normal) | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:177:5:193:5 | {...} | | Finally.cs:177:5:193:5 | {...} | Finally.cs:178:9:192:9 | try {...} ... | @@ -1812,8 +1840,10 @@ dominance | Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:13 | access to parameter i | | Finally.cs:272:18:272:18 | 3 | Finally.cs:272:13:272:18 | ... + ... | | Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | {...} | -| Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | call to constructor Object | +| Foreach.cs:4:7:4:13 | call to method | Foreach.cs:4:7:4:13 | call to constructor Object | +| Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | this access | | Foreach.cs:4:7:4:13 | exit Foreach (normal) | Foreach.cs:4:7:4:13 | exit Foreach | +| Foreach.cs:4:7:4:13 | this access | Foreach.cs:4:7:4:13 | call to method | | Foreach.cs:4:7:4:13 | {...} | Foreach.cs:4:7:4:13 | exit Foreach (normal) | | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:7:5:10:5 | {...} | | Foreach.cs:6:10:6:11 | exit M1 (normal) | Foreach.cs:6:10:6:11 | exit M1 | @@ -1865,38 +1895,33 @@ dominance | Foreach.cs:38:26:38:26 | String x | Foreach.cs:38:33:38:33 | Int32 y | | Foreach.cs:38:33:38:33 | Int32 y | Foreach.cs:38:18:38:34 | (..., ...) | | Foreach.cs:38:39:38:42 | access to parameter args | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | +| Initializers.cs:3:7:3:18 | enter | Initializers.cs:5:9:5:9 | this access | | Initializers.cs:3:7:3:18 | enter Initializers | Initializers.cs:3:7:3:18 | {...} | +| Initializers.cs:3:7:3:18 | exit (normal) | Initializers.cs:3:7:3:18 | exit | | Initializers.cs:3:7:3:18 | exit Initializers (normal) | Initializers.cs:3:7:3:18 | exit Initializers | | Initializers.cs:3:7:3:18 | {...} | Initializers.cs:3:7:3:18 | exit Initializers (normal) | | Initializers.cs:5:9:5:9 | this access | Initializers.cs:5:13:5:13 | access to field H | -| Initializers.cs:5:9:5:9 | this access | Initializers.cs:5:13:5:13 | access to field H | -| Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:6:9:6:9 | this access | | Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:6:9:6:9 | this access | | Initializers.cs:5:13:5:13 | access to field H | Initializers.cs:5:17:5:17 | 1 | -| Initializers.cs:5:13:5:13 | access to field H | Initializers.cs:5:17:5:17 | 1 | | Initializers.cs:5:13:5:17 | ... + ... | Initializers.cs:5:9:5:17 | ... = ... | -| Initializers.cs:5:13:5:17 | ... + ... | Initializers.cs:5:9:5:17 | ... = ... | -| Initializers.cs:5:17:5:17 | 1 | Initializers.cs:5:13:5:17 | ... + ... | | Initializers.cs:5:17:5:17 | 1 | Initializers.cs:5:13:5:17 | ... + ... | | Initializers.cs:6:9:6:9 | access to property G | Initializers.cs:6:25:6:31 | ... = ... | -| Initializers.cs:6:9:6:9 | access to property G | Initializers.cs:6:25:6:31 | ... = ... | -| Initializers.cs:6:9:6:9 | this access | Initializers.cs:6:27:6:27 | access to field H | | Initializers.cs:6:9:6:9 | this access | Initializers.cs:6:27:6:27 | access to field H | -| Initializers.cs:6:25:6:31 | ... = ... | Initializers.cs:8:20:8:22 | {...} | -| Initializers.cs:6:25:6:31 | ... = ... | Initializers.cs:10:28:10:30 | {...} | +| Initializers.cs:6:25:6:31 | ... = ... | Initializers.cs:3:7:3:18 | exit (normal) | | Initializers.cs:6:27:6:27 | access to field H | Initializers.cs:6:31:6:31 | 2 | -| Initializers.cs:6:27:6:27 | access to field H | Initializers.cs:6:31:6:31 | 2 | -| Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:6:9:6:9 | access to property G | | Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:6:9:6:9 | access to property G | | Initializers.cs:6:31:6:31 | 2 | Initializers.cs:6:27:6:31 | ... + ... | -| Initializers.cs:6:31:6:31 | 2 | Initializers.cs:6:27:6:31 | ... + ... | -| Initializers.cs:8:5:8:16 | call to constructor Object | Initializers.cs:5:9:5:9 | this access | -| Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | call to constructor Object | +| Initializers.cs:8:5:8:16 | call to constructor Object | Initializers.cs:8:20:8:22 | {...} | +| Initializers.cs:8:5:8:16 | call to method | Initializers.cs:8:5:8:16 | call to constructor Object | +| Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | this access | | Initializers.cs:8:5:8:16 | exit Initializers (normal) | Initializers.cs:8:5:8:16 | exit Initializers | +| Initializers.cs:8:5:8:16 | this access | Initializers.cs:8:5:8:16 | call to method | | Initializers.cs:8:20:8:22 | {...} | Initializers.cs:8:5:8:16 | exit Initializers (normal) | -| Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:5:9:5:9 | this access | -| Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | call to constructor Object | +| Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:10:28:10:30 | {...} | +| Initializers.cs:10:5:10:16 | call to method | Initializers.cs:10:5:10:16 | call to constructor Object | +| Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | this access | | Initializers.cs:10:5:10:16 | exit Initializers (normal) | Initializers.cs:10:5:10:16 | exit Initializers | +| Initializers.cs:10:5:10:16 | this access | Initializers.cs:10:5:10:16 | call to method | | Initializers.cs:10:28:10:30 | {...} | Initializers.cs:10:5:10:16 | exit Initializers (normal) | | Initializers.cs:12:10:12:10 | enter M | Initializers.cs:13:5:16:5 | {...} | | Initializers.cs:12:10:12:10 | exit M (normal) | Initializers.cs:12:10:12:10 | exit M | @@ -1923,25 +1948,30 @@ dominance | Initializers.cs:18:16:18:16 | exit H (normal) | Initializers.cs:18:16:18:16 | exit H | | Initializers.cs:18:16:18:20 | ... = ... | Initializers.cs:18:16:18:16 | exit H (normal) | | Initializers.cs:18:20:18:20 | 1 | Initializers.cs:18:16:18:20 | ... = ... | -| Initializers.cs:20:11:20:23 | call to constructor Object | Initializers.cs:22:23:22:23 | this access | -| Initializers.cs:20:11:20:23 | enter NoConstructor | Initializers.cs:20:11:20:23 | call to constructor Object | +| Initializers.cs:20:11:20:23 | call to constructor Object | Initializers.cs:20:11:20:23 | {...} | +| Initializers.cs:20:11:20:23 | call to method | Initializers.cs:20:11:20:23 | call to constructor Object | +| Initializers.cs:20:11:20:23 | enter | Initializers.cs:22:23:22:23 | this access | +| Initializers.cs:20:11:20:23 | enter NoConstructor | Initializers.cs:20:11:20:23 | this access | +| Initializers.cs:20:11:20:23 | exit (normal) | Initializers.cs:20:11:20:23 | exit | | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | Initializers.cs:20:11:20:23 | exit NoConstructor | +| Initializers.cs:20:11:20:23 | this access | Initializers.cs:20:11:20:23 | call to method | | Initializers.cs:20:11:20:23 | {...} | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | | Initializers.cs:22:23:22:23 | this access | Initializers.cs:22:27:22:27 | 0 | | Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:23:23:23:23 | this access | | Initializers.cs:22:27:22:27 | 0 | Initializers.cs:22:23:22:27 | ... = ... | | Initializers.cs:23:23:23:23 | this access | Initializers.cs:23:27:23:27 | 1 | -| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:20:11:20:23 | {...} | +| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:20:11:20:23 | exit (normal) | | Initializers.cs:23:27:23:27 | 1 | Initializers.cs:23:23:23:27 | ... = ... | +| Initializers.cs:26:11:26:13 | enter | Initializers.cs:28:13:28:13 | this access | +| Initializers.cs:26:11:26:13 | exit (normal) | Initializers.cs:26:11:26:13 | exit | | Initializers.cs:28:13:28:13 | this access | Initializers.cs:28:17:28:17 | 2 | -| Initializers.cs:28:13:28:13 | this access | Initializers.cs:28:17:28:17 | 2 | -| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:31:24:31:33 | {...} | -| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:35:27:35:40 | {...} | -| Initializers.cs:28:17:28:17 | 2 | Initializers.cs:28:13:28:17 | ... = ... | +| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:26:11:26:13 | exit (normal) | | Initializers.cs:28:17:28:17 | 2 | Initializers.cs:28:13:28:17 | ... = ... | -| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | +| Initializers.cs:31:9:31:11 | call to method | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | +| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | this access | | Initializers.cs:31:9:31:11 | exit Sub (normal) | Initializers.cs:31:9:31:11 | exit Sub | -| Initializers.cs:31:17:31:20 | call to constructor NoConstructor | Initializers.cs:28:13:28:13 | this access | +| Initializers.cs:31:9:31:11 | this access | Initializers.cs:31:9:31:11 | call to method | +| Initializers.cs:31:17:31:20 | call to constructor NoConstructor | Initializers.cs:31:24:31:33 | {...} | | Initializers.cs:31:24:31:33 | {...} | Initializers.cs:31:26:31:31 | ...; | | Initializers.cs:31:26:31:26 | this access | Initializers.cs:31:30:31:30 | 3 | | Initializers.cs:31:26:31:30 | ... = ... | Initializers.cs:31:9:31:11 | exit Sub (normal) | @@ -1955,9 +1985,11 @@ dominance | Initializers.cs:33:31:33:35 | ... = ... | Initializers.cs:33:9:33:11 | exit Sub (normal) | | Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:31:33:31 | this access | | Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:31:33:35 | ... = ... | -| Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:28:13:28:13 | this access | -| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | +| Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:27:35:40 | {...} | +| Initializers.cs:35:9:35:11 | call to method | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | +| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | this access | | Initializers.cs:35:9:35:11 | exit Sub (normal) | Initializers.cs:35:9:35:11 | exit Sub | +| Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | call to method | | Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:29:35:38 | ...; | | Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:33:35:33 | access to parameter i | | Initializers.cs:35:29:35:37 | ... = ... | Initializers.cs:35:9:35:11 | exit Sub (normal) | @@ -1966,12 +1998,16 @@ dominance | Initializers.cs:35:33:35:37 | ... + ... | Initializers.cs:35:29:35:37 | ... = ... | | Initializers.cs:35:37:35:37 | access to parameter j | Initializers.cs:35:33:35:37 | ... + ... | | Initializers.cs:39:7:39:23 | call to constructor Object | Initializers.cs:39:7:39:23 | {...} | -| Initializers.cs:39:7:39:23 | enter IndexInitializers | Initializers.cs:39:7:39:23 | call to constructor Object | +| Initializers.cs:39:7:39:23 | call to method | Initializers.cs:39:7:39:23 | call to constructor Object | +| Initializers.cs:39:7:39:23 | enter IndexInitializers | Initializers.cs:39:7:39:23 | this access | | Initializers.cs:39:7:39:23 | exit IndexInitializers (normal) | Initializers.cs:39:7:39:23 | exit IndexInitializers | +| Initializers.cs:39:7:39:23 | this access | Initializers.cs:39:7:39:23 | call to method | | Initializers.cs:39:7:39:23 | {...} | Initializers.cs:39:7:39:23 | exit IndexInitializers (normal) | | Initializers.cs:41:11:41:18 | call to constructor Object | Initializers.cs:41:11:41:18 | {...} | -| Initializers.cs:41:11:41:18 | enter Compound | Initializers.cs:41:11:41:18 | call to constructor Object | +| Initializers.cs:41:11:41:18 | call to method | Initializers.cs:41:11:41:18 | call to constructor Object | +| Initializers.cs:41:11:41:18 | enter Compound | Initializers.cs:41:11:41:18 | this access | | Initializers.cs:41:11:41:18 | exit Compound (normal) | Initializers.cs:41:11:41:18 | exit Compound | +| Initializers.cs:41:11:41:18 | this access | Initializers.cs:41:11:41:18 | call to method | | Initializers.cs:41:11:41:18 | {...} | Initializers.cs:41:11:41:18 | exit Compound (normal) | | Initializers.cs:51:10:51:13 | enter Test | Initializers.cs:52:5:66:5 | {...} | | Initializers.cs:51:10:51:13 | exit Test (normal) | Initializers.cs:51:10:51:13 | exit Test | @@ -2078,8 +2114,10 @@ dominance | Initializers.cs:64:54:64:54 | 0 | Initializers.cs:64:50:64:54 | ... + ... | | Initializers.cs:64:59:64:61 | "1" | Initializers.cs:64:46:64:61 | ... = ... | | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | LoopUnrolling.cs:5:7:5:19 | {...} | -| LoopUnrolling.cs:5:7:5:19 | enter LoopUnrolling | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | +| LoopUnrolling.cs:5:7:5:19 | call to method | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | +| LoopUnrolling.cs:5:7:5:19 | enter LoopUnrolling | LoopUnrolling.cs:5:7:5:19 | this access | | LoopUnrolling.cs:5:7:5:19 | exit LoopUnrolling (normal) | LoopUnrolling.cs:5:7:5:19 | exit LoopUnrolling | +| LoopUnrolling.cs:5:7:5:19 | this access | LoopUnrolling.cs:5:7:5:19 | call to method | | LoopUnrolling.cs:5:7:5:19 | {...} | LoopUnrolling.cs:5:7:5:19 | exit LoopUnrolling (normal) | | LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:8:5:13:5 | {...} | | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | LoopUnrolling.cs:7:10:7:11 | exit M1 | @@ -2275,9 +2313,11 @@ dominance | LoopUnrolling.cs:99:13:99:33 | ...; | LoopUnrolling.cs:99:31:99:31 | access to local variable x | | LoopUnrolling.cs:99:31:99:31 | access to local variable x | LoopUnrolling.cs:99:13:99:32 | call to method WriteLine | | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | {...} | -| MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | -| MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | +| MultiImplementationA.cs:4:7:4:8 | call to method | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | +| MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationA.cs:4:7:4:8 | this access | +| MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationB.cs:1:7:1:8 | this access | | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | MultiImplementationA.cs:4:7:4:8 | exit C1 | +| MultiImplementationA.cs:4:7:4:8 | this access | MultiImplementationA.cs:4:7:4:8 | call to method | | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | MultiImplementationA.cs:6:28:6:31 | null | | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | MultiImplementationB.cs:3:22:3:22 | 0 | | MultiImplementationA.cs:6:22:6:31 | throw ... | MultiImplementationA.cs:6:22:6:31 | exit get_P1 (abnormal) | @@ -2296,6 +2336,9 @@ dominance | MultiImplementationA.cs:8:16:8:16 | enter M | MultiImplementationB.cs:5:23:5:23 | 2 | | MultiImplementationA.cs:8:23:8:32 | throw ... | MultiImplementationA.cs:8:16:8:16 | exit M (abnormal) | | MultiImplementationA.cs:8:29:8:32 | null | MultiImplementationA.cs:8:23:8:32 | throw ... | +| MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationA.cs:13:16:13:16 | this access | +| MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationB.cs:11:16:11:16 | this access | +| MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationA.cs:11:7:11:8 | exit | | MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:13:20:13:20 | 0 | | MultiImplementationA.cs:13:16:13:20 | ... = ... | MultiImplementationA.cs:24:16:24:16 | this access | | MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:13:16:13:20 | ... = ... | @@ -2317,9 +2360,11 @@ dominance | MultiImplementationA.cs:18:9:18:22 | enter M2 | MultiImplementationA.cs:18:21:18:21 | 0 | | MultiImplementationA.cs:18:9:18:22 | exit M2 (normal) | MultiImplementationA.cs:18:9:18:22 | exit M2 | | MultiImplementationA.cs:18:21:18:21 | 0 | MultiImplementationA.cs:18:9:18:22 | exit M2 (normal) | -| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:13:16:13:16 | this access | -| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | -| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | +| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:22:20:31 | {...} | +| MultiImplementationA.cs:20:12:20:13 | call to method | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | +| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | this access | +| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | this access | +| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | call to method | | MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:24:20:29 | ...; | | MultiImplementationA.cs:20:24:20:24 | this access | MultiImplementationA.cs:20:28:20:28 | access to parameter i | | MultiImplementationA.cs:20:24:20:28 | ... = ... | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | @@ -2338,20 +2383,23 @@ dominance | MultiImplementationA.cs:23:50:23:53 | null | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion (normal) | | MultiImplementationA.cs:24:16:24:16 | access to property P | MultiImplementationA.cs:24:32:24:34 | ... = ... | | MultiImplementationA.cs:24:16:24:16 | this access | MultiImplementationA.cs:24:34:24:34 | 0 | -| MultiImplementationA.cs:24:32:24:34 | ... = ... | MultiImplementationA.cs:20:22:20:31 | {...} | | MultiImplementationA.cs:24:34:24:34 | 0 | MultiImplementationA.cs:24:16:24:16 | access to property P | | MultiImplementationA.cs:28:7:28:8 | call to constructor Object | MultiImplementationA.cs:28:7:28:8 | {...} | -| MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationA.cs:28:7:28:8 | call to constructor Object | -| MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | +| MultiImplementationA.cs:28:7:28:8 | call to method | MultiImplementationA.cs:28:7:28:8 | call to constructor Object | +| MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationA.cs:28:7:28:8 | this access | +| MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationB.cs:25:7:25:8 | this access | | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | MultiImplementationA.cs:28:7:28:8 | exit C3 | +| MultiImplementationA.cs:28:7:28:8 | this access | MultiImplementationA.cs:28:7:28:8 | call to method | | MultiImplementationA.cs:30:21:30:23 | enter get_P3 | MultiImplementationA.cs:30:34:30:37 | null | | MultiImplementationA.cs:30:21:30:23 | exit get_P3 (abnormal) | MultiImplementationA.cs:30:21:30:23 | exit get_P3 | | MultiImplementationA.cs:30:28:30:37 | throw ... | MultiImplementationA.cs:30:21:30:23 | exit get_P3 (abnormal) | | MultiImplementationA.cs:30:34:30:37 | null | MultiImplementationA.cs:30:28:30:37 | throw ... | | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | MultiImplementationA.cs:34:15:34:16 | {...} | -| MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | -| MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | +| MultiImplementationA.cs:34:15:34:16 | call to method | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | +| MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationA.cs:34:15:34:16 | this access | +| MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationB.cs:30:15:30:16 | this access | | MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | MultiImplementationA.cs:34:15:34:16 | exit C4 | +| MultiImplementationA.cs:34:15:34:16 | this access | MultiImplementationA.cs:34:15:34:16 | call to method | | MultiImplementationA.cs:36:9:36:10 | enter M1 | MultiImplementationA.cs:36:14:36:28 | {...} | | MultiImplementationA.cs:36:9:36:10 | enter M1 | MultiImplementationB.cs:32:17:32:17 | 0 | | MultiImplementationA.cs:36:14:36:28 | {...} | MultiImplementationA.cs:36:22:36:25 | null | @@ -2363,6 +2411,8 @@ dominance | MultiImplementationA.cs:37:16:37:26 | throw ...; | MultiImplementationA.cs:37:9:37:10 | exit M2 (abnormal) | | MultiImplementationA.cs:37:22:37:25 | null | MultiImplementationA.cs:37:16:37:26 | throw ...; | | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | MultiImplementationB.cs:1:7:1:8 | {...} | +| MultiImplementationB.cs:1:7:1:8 | call to method | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | +| MultiImplementationB.cs:1:7:1:8 | this access | MultiImplementationB.cs:1:7:1:8 | call to method | | MultiImplementationB.cs:3:22:3:22 | 0 | MultiImplementationA.cs:6:22:6:31 | exit get_P1 (normal) | | MultiImplementationB.cs:4:25:4:37 | {...} | MultiImplementationB.cs:4:34:4:34 | 1 | | MultiImplementationB.cs:4:27:4:35 | return ...; | MultiImplementationA.cs:7:21:7:23 | exit get_P2 (normal) | @@ -2382,7 +2432,9 @@ dominance | MultiImplementationB.cs:16:9:16:31 | exit M2 (abnormal) | MultiImplementationB.cs:16:9:16:31 | exit M2 | | MultiImplementationB.cs:16:21:16:30 | throw ... | MultiImplementationB.cs:16:9:16:31 | exit M2 (abnormal) | | MultiImplementationB.cs:16:27:16:30 | null | MultiImplementationB.cs:16:21:16:30 | throw ... | -| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:11:16:11:16 | this access | +| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:18:22:18:36 | {...} | +| MultiImplementationB.cs:18:12:18:13 | call to method | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | +| MultiImplementationB.cs:18:12:18:13 | this access | MultiImplementationB.cs:18:12:18:13 | call to method | | MultiImplementationB.cs:18:22:18:36 | {...} | MultiImplementationB.cs:18:30:18:33 | null | | MultiImplementationB.cs:18:24:18:34 | throw ...; | MultiImplementationA.cs:20:12:20:13 | exit C2 (abnormal) | | MultiImplementationB.cs:18:30:18:33 | null | MultiImplementationB.cs:18:24:18:34 | throw ...; | @@ -2395,14 +2447,19 @@ dominance | MultiImplementationB.cs:21:56:21:59 | null | MultiImplementationB.cs:21:50:21:59 | throw ... | | MultiImplementationB.cs:22:16:22:16 | access to property P | MultiImplementationB.cs:22:32:22:34 | ... = ... | | MultiImplementationB.cs:22:16:22:16 | this access | MultiImplementationB.cs:22:34:22:34 | 1 | -| MultiImplementationB.cs:22:32:22:34 | ... = ... | MultiImplementationB.cs:18:22:18:36 | {...} | | MultiImplementationB.cs:22:34:22:34 | 1 | MultiImplementationB.cs:22:16:22:16 | access to property P | | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | MultiImplementationB.cs:25:7:25:8 | {...} | +| MultiImplementationB.cs:25:7:25:8 | call to method | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | +| MultiImplementationB.cs:25:7:25:8 | this access | MultiImplementationB.cs:25:7:25:8 | call to method | | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | MultiImplementationB.cs:30:15:30:16 | {...} | +| MultiImplementationB.cs:30:15:30:16 | call to method | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | +| MultiImplementationB.cs:30:15:30:16 | this access | MultiImplementationB.cs:30:15:30:16 | call to method | | MultiImplementationB.cs:32:17:32:17 | 0 | MultiImplementationA.cs:36:9:36:10 | exit M1 (normal) | | NullCoalescing.cs:1:7:1:20 | call to constructor Object | NullCoalescing.cs:1:7:1:20 | {...} | -| NullCoalescing.cs:1:7:1:20 | enter NullCoalescing | NullCoalescing.cs:1:7:1:20 | call to constructor Object | +| NullCoalescing.cs:1:7:1:20 | call to method | NullCoalescing.cs:1:7:1:20 | call to constructor Object | +| NullCoalescing.cs:1:7:1:20 | enter NullCoalescing | NullCoalescing.cs:1:7:1:20 | this access | | NullCoalescing.cs:1:7:1:20 | exit NullCoalescing (normal) | NullCoalescing.cs:1:7:1:20 | exit NullCoalescing | +| NullCoalescing.cs:1:7:1:20 | this access | NullCoalescing.cs:1:7:1:20 | call to method | | NullCoalescing.cs:1:7:1:20 | {...} | NullCoalescing.cs:1:7:1:20 | exit NullCoalescing (normal) | | NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:23:3:23 | access to parameter i | | NullCoalescing.cs:3:9:3:10 | exit M1 (normal) | NullCoalescing.cs:3:9:3:10 | exit M1 | @@ -2460,31 +2517,32 @@ dominance | NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:13:17:24 | ... ?? ... | | NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:9:17:24 | ... = ... | | NullCoalescing.cs:17:19:17:19 | access to parameter i | NullCoalescing.cs:17:13:17:19 | (...) ... | -| PartialImplementationA.cs:3:12:3:18 | call to constructor Object | PartialImplementationB.cs:3:16:3:16 | this access | -| PartialImplementationA.cs:3:12:3:18 | enter Partial | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | +| PartialImplementationA.cs:1:15:1:21 | enter | PartialImplementationB.cs:3:16:3:16 | this access | +| PartialImplementationA.cs:1:15:1:21 | exit (normal) | PartialImplementationA.cs:1:15:1:21 | exit | +| PartialImplementationA.cs:3:12:3:18 | call to constructor Object | PartialImplementationA.cs:3:27:3:29 | {...} | +| PartialImplementationA.cs:3:12:3:18 | call to method | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | +| PartialImplementationA.cs:3:12:3:18 | enter Partial | PartialImplementationA.cs:3:12:3:18 | this access | | PartialImplementationA.cs:3:12:3:18 | exit Partial (normal) | PartialImplementationA.cs:3:12:3:18 | exit Partial | +| PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | call to method | | PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:12:3:18 | exit Partial (normal) | | PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationB.cs:3:20:3:20 | 0 | -| PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationB.cs:3:20:3:20 | 0 | -| PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationB.cs:5:16:5:16 | this access | | PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationB.cs:5:16:5:16 | this access | | PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationB.cs:3:16:3:20 | ... = ... | -| PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationB.cs:3:16:3:20 | ... = ... | -| PartialImplementationB.cs:4:12:4:18 | call to constructor Object | PartialImplementationB.cs:3:16:3:16 | this access | -| PartialImplementationB.cs:4:12:4:18 | enter Partial | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | +| PartialImplementationB.cs:4:12:4:18 | call to constructor Object | PartialImplementationB.cs:4:22:4:24 | {...} | +| PartialImplementationB.cs:4:12:4:18 | call to method | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | +| PartialImplementationB.cs:4:12:4:18 | enter Partial | PartialImplementationB.cs:4:12:4:18 | this access | | PartialImplementationB.cs:4:12:4:18 | exit Partial (normal) | PartialImplementationB.cs:4:12:4:18 | exit Partial | +| PartialImplementationB.cs:4:12:4:18 | this access | PartialImplementationB.cs:4:12:4:18 | call to method | | PartialImplementationB.cs:4:22:4:24 | {...} | PartialImplementationB.cs:4:12:4:18 | exit Partial (normal) | | PartialImplementationB.cs:5:16:5:16 | access to property P | PartialImplementationB.cs:5:32:5:34 | ... = ... | -| PartialImplementationB.cs:5:16:5:16 | access to property P | PartialImplementationB.cs:5:32:5:34 | ... = ... | | PartialImplementationB.cs:5:16:5:16 | this access | PartialImplementationB.cs:5:34:5:34 | 0 | -| PartialImplementationB.cs:5:16:5:16 | this access | PartialImplementationB.cs:5:34:5:34 | 0 | -| PartialImplementationB.cs:5:32:5:34 | ... = ... | PartialImplementationA.cs:3:27:3:29 | {...} | -| PartialImplementationB.cs:5:32:5:34 | ... = ... | PartialImplementationB.cs:4:22:4:24 | {...} | -| PartialImplementationB.cs:5:34:5:34 | 0 | PartialImplementationB.cs:5:16:5:16 | access to property P | +| PartialImplementationB.cs:5:32:5:34 | ... = ... | PartialImplementationA.cs:1:15:1:21 | exit (normal) | | PartialImplementationB.cs:5:34:5:34 | 0 | PartialImplementationB.cs:5:16:5:16 | access to property P | | Patterns.cs:3:7:3:14 | call to constructor Object | Patterns.cs:3:7:3:14 | {...} | -| Patterns.cs:3:7:3:14 | enter Patterns | Patterns.cs:3:7:3:14 | call to constructor Object | +| Patterns.cs:3:7:3:14 | call to method | Patterns.cs:3:7:3:14 | call to constructor Object | +| Patterns.cs:3:7:3:14 | enter Patterns | Patterns.cs:3:7:3:14 | this access | | Patterns.cs:3:7:3:14 | exit Patterns (normal) | Patterns.cs:3:7:3:14 | exit Patterns | +| Patterns.cs:3:7:3:14 | this access | Patterns.cs:3:7:3:14 | call to method | | Patterns.cs:3:7:3:14 | {...} | Patterns.cs:3:7:3:14 | exit Patterns (normal) | | Patterns.cs:5:10:5:11 | enter M1 | Patterns.cs:6:5:43:5 | {...} | | Patterns.cs:5:10:5:11 | exit M1 (normal) | Patterns.cs:5:10:5:11 | exit M1 | @@ -2683,8 +2741,10 @@ dominance | Patterns.cs:97:13:97:39 | ...; | Patterns.cs:97:31:97:37 | "not C" | | Patterns.cs:97:31:97:37 | "not C" | Patterns.cs:97:13:97:38 | call to method WriteLine | | PostDominance.cs:3:7:3:19 | call to constructor Object | PostDominance.cs:3:7:3:19 | {...} | -| PostDominance.cs:3:7:3:19 | enter PostDominance | PostDominance.cs:3:7:3:19 | call to constructor Object | +| PostDominance.cs:3:7:3:19 | call to method | PostDominance.cs:3:7:3:19 | call to constructor Object | +| PostDominance.cs:3:7:3:19 | enter PostDominance | PostDominance.cs:3:7:3:19 | this access | | PostDominance.cs:3:7:3:19 | exit PostDominance (normal) | PostDominance.cs:3:7:3:19 | exit PostDominance | +| PostDominance.cs:3:7:3:19 | this access | PostDominance.cs:3:7:3:19 | call to method | | PostDominance.cs:3:7:3:19 | {...} | PostDominance.cs:3:7:3:19 | exit PostDominance (normal) | | PostDominance.cs:5:10:5:11 | enter M1 | PostDominance.cs:6:5:8:5 | {...} | | PostDominance.cs:5:10:5:11 | exit M1 (normal) | PostDominance.cs:5:10:5:11 | exit M1 | @@ -2718,8 +2778,10 @@ dominance | PostDominance.cs:21:9:21:29 | ...; | PostDominance.cs:21:27:21:27 | access to parameter s | | PostDominance.cs:21:27:21:27 | access to parameter s | PostDominance.cs:21:9:21:28 | call to method WriteLine | | Qualifiers.cs:1:7:1:16 | call to constructor Object | Qualifiers.cs:1:7:1:16 | {...} | -| Qualifiers.cs:1:7:1:16 | enter Qualifiers | Qualifiers.cs:1:7:1:16 | call to constructor Object | +| Qualifiers.cs:1:7:1:16 | call to method | Qualifiers.cs:1:7:1:16 | call to constructor Object | +| Qualifiers.cs:1:7:1:16 | enter Qualifiers | Qualifiers.cs:1:7:1:16 | this access | | Qualifiers.cs:1:7:1:16 | exit Qualifiers (normal) | Qualifiers.cs:1:7:1:16 | exit Qualifiers | +| Qualifiers.cs:1:7:1:16 | this access | Qualifiers.cs:1:7:1:16 | call to method | | Qualifiers.cs:1:7:1:16 | {...} | Qualifiers.cs:1:7:1:16 | exit Qualifiers (normal) | | Qualifiers.cs:7:16:7:21 | enter Method | Qualifiers.cs:7:28:7:31 | null | | Qualifiers.cs:7:16:7:21 | exit Method (normal) | Qualifiers.cs:7:16:7:21 | exit Method | @@ -2785,8 +2847,10 @@ dominance | Qualifiers.cs:30:13:30:37 | call to method StaticMethod | Qualifiers.cs:30:13:30:46 | call to method Method | | Qualifiers.cs:30:13:30:46 | call to method Method | Qualifiers.cs:30:9:30:46 | ... = ... | | Switch.cs:3:7:3:12 | call to constructor Object | Switch.cs:3:7:3:12 | {...} | -| Switch.cs:3:7:3:12 | enter Switch | Switch.cs:3:7:3:12 | call to constructor Object | +| Switch.cs:3:7:3:12 | call to method | Switch.cs:3:7:3:12 | call to constructor Object | +| Switch.cs:3:7:3:12 | enter Switch | Switch.cs:3:7:3:12 | this access | | Switch.cs:3:7:3:12 | exit Switch (normal) | Switch.cs:3:7:3:12 | exit Switch | +| Switch.cs:3:7:3:12 | this access | Switch.cs:3:7:3:12 | call to method | | Switch.cs:3:7:3:12 | {...} | Switch.cs:3:7:3:12 | exit Switch (normal) | | Switch.cs:5:10:5:11 | enter M1 | Switch.cs:6:5:8:5 | {...} | | Switch.cs:5:10:5:11 | exit M1 (normal) | Switch.cs:5:10:5:11 | exit M1 | @@ -3055,8 +3119,10 @@ dominance | Switch.cs:175:17:175:48 | ...; | Switch.cs:175:42:175:46 | "def" | | Switch.cs:175:42:175:46 | "def" | Switch.cs:175:17:175:47 | call to method WriteLine | | TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | {...} | -| TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | TypeAccesses.cs:1:7:1:18 | call to constructor Object | +| TypeAccesses.cs:1:7:1:18 | call to method | TypeAccesses.cs:1:7:1:18 | call to constructor Object | +| TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | TypeAccesses.cs:1:7:1:18 | this access | | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses (normal) | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses | +| TypeAccesses.cs:1:7:1:18 | this access | TypeAccesses.cs:1:7:1:18 | call to method | | TypeAccesses.cs:1:7:1:18 | {...} | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses (normal) | | TypeAccesses.cs:3:10:3:10 | enter M | TypeAccesses.cs:4:5:9:5 | {...} | | TypeAccesses.cs:3:10:3:10 | exit M (normal) | TypeAccesses.cs:3:10:3:10 | exit M | @@ -3078,8 +3144,10 @@ dominance | TypeAccesses.cs:8:13:8:27 | Type t = ... | TypeAccesses.cs:3:10:3:10 | exit M (normal) | | TypeAccesses.cs:8:17:8:27 | typeof(...) | TypeAccesses.cs:8:13:8:27 | Type t = ... | | VarDecls.cs:3:7:3:14 | call to constructor Object | VarDecls.cs:3:7:3:14 | {...} | -| VarDecls.cs:3:7:3:14 | enter VarDecls | VarDecls.cs:3:7:3:14 | call to constructor Object | +| VarDecls.cs:3:7:3:14 | call to method | VarDecls.cs:3:7:3:14 | call to constructor Object | +| VarDecls.cs:3:7:3:14 | enter VarDecls | VarDecls.cs:3:7:3:14 | this access | | VarDecls.cs:3:7:3:14 | exit VarDecls (normal) | VarDecls.cs:3:7:3:14 | exit VarDecls | +| VarDecls.cs:3:7:3:14 | this access | VarDecls.cs:3:7:3:14 | call to method | | VarDecls.cs:3:7:3:14 | {...} | VarDecls.cs:3:7:3:14 | exit VarDecls (normal) | | VarDecls.cs:5:18:5:19 | enter M1 | VarDecls.cs:6:5:11:5 | {...} | | VarDecls.cs:5:18:5:19 | exit M1 (normal) | VarDecls.cs:5:18:5:19 | exit M1 | @@ -3127,8 +3195,10 @@ dominance | VarDecls.cs:25:20:25:20 | access to parameter b | VarDecls.cs:25:28:25:28 | access to local variable y | | VarDecls.cs:25:20:25:28 | ... ? ... : ... | VarDecls.cs:25:13:25:29 | return ...; | | VarDecls.cs:28:11:28:11 | call to constructor Object | VarDecls.cs:28:11:28:11 | {...} | -| VarDecls.cs:28:11:28:11 | enter C | VarDecls.cs:28:11:28:11 | call to constructor Object | +| VarDecls.cs:28:11:28:11 | call to method | VarDecls.cs:28:11:28:11 | call to constructor Object | +| VarDecls.cs:28:11:28:11 | enter C | VarDecls.cs:28:11:28:11 | this access | | VarDecls.cs:28:11:28:11 | exit C (normal) | VarDecls.cs:28:11:28:11 | exit C | +| VarDecls.cs:28:11:28:11 | this access | VarDecls.cs:28:11:28:11 | call to method | | VarDecls.cs:28:11:28:11 | {...} | VarDecls.cs:28:11:28:11 | exit C (normal) | | VarDecls.cs:28:41:28:47 | enter Dispose | VarDecls.cs:28:51:28:53 | {...} | | VarDecls.cs:28:41:28:47 | exit Dispose (normal) | VarDecls.cs:28:41:28:47 | exit Dispose | @@ -3397,8 +3467,10 @@ dominance | cflow.cs:127:68:127:81 | ...; | cflow.cs:127:68:127:72 | this access | | cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:68:127:80 | ... = ... | | cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:130:5:132:5 | {...} | -| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | call to constructor Object | +| cflow.cs:129:5:129:15 | call to method | cflow.cs:129:5:129:15 | call to constructor Object | +| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | this access | | cflow.cs:129:5:129:15 | exit ControlFlow (normal) | cflow.cs:129:5:129:15 | exit ControlFlow | +| cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | call to method | | cflow.cs:130:5:132:5 | {...} | cflow.cs:131:9:131:18 | ...; | | cflow.cs:131:9:131:13 | this access | cflow.cs:131:17:131:17 | access to parameter s | | cflow.cs:131:9:131:17 | ... = ... | cflow.cs:129:5:129:15 | exit ControlFlow (normal) | @@ -3739,8 +3811,10 @@ dominance | cflow.cs:275:13:275:41 | call to method WriteLine | cflow.cs:261:49:261:53 | exit Yield (normal) | | cflow.cs:275:13:275:42 | ...; | cflow.cs:275:31:275:40 | "not dead" | | cflow.cs:275:31:275:40 | "not dead" | cflow.cs:275:13:275:41 | call to method WriteLine | -| cflow.cs:282:5:282:18 | enter ControlFlowSub | cflow.cs:282:24:282:27 | call to constructor ControlFlow | +| cflow.cs:282:5:282:18 | call to method | cflow.cs:282:24:282:27 | call to constructor ControlFlow | +| cflow.cs:282:5:282:18 | enter ControlFlowSub | cflow.cs:282:5:282:18 | this access | | cflow.cs:282:5:282:18 | exit ControlFlowSub (normal) | cflow.cs:282:5:282:18 | exit ControlFlowSub | +| cflow.cs:282:5:282:18 | this access | cflow.cs:282:5:282:18 | call to method | | cflow.cs:282:24:282:27 | call to constructor ControlFlow | cflow.cs:282:31:282:33 | {...} | | cflow.cs:282:31:282:33 | {...} | cflow.cs:282:5:282:18 | exit ControlFlowSub (normal) | | cflow.cs:284:5:284:18 | enter ControlFlowSub | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub | @@ -3754,8 +3828,10 @@ dominance | cflow.cs:286:34:286:45 | call to method ToString | cflow.cs:286:29:286:32 | call to constructor ControlFlowSub | | cflow.cs:286:48:286:50 | {...} | cflow.cs:286:5:286:18 | exit ControlFlowSub (normal) | | cflow.cs:289:7:289:18 | call to constructor Object | cflow.cs:289:7:289:18 | {...} | -| cflow.cs:289:7:289:18 | enter DelegateCall | cflow.cs:289:7:289:18 | call to constructor Object | +| cflow.cs:289:7:289:18 | call to method | cflow.cs:289:7:289:18 | call to constructor Object | +| cflow.cs:289:7:289:18 | enter DelegateCall | cflow.cs:289:7:289:18 | this access | | cflow.cs:289:7:289:18 | exit DelegateCall (normal) | cflow.cs:289:7:289:18 | exit DelegateCall | +| cflow.cs:289:7:289:18 | this access | cflow.cs:289:7:289:18 | call to method | | cflow.cs:289:7:289:18 | {...} | cflow.cs:289:7:289:18 | exit DelegateCall (normal) | | cflow.cs:291:12:291:12 | enter M | cflow.cs:291:38:291:38 | access to parameter f | | cflow.cs:291:12:291:12 | exit M (normal) | cflow.cs:291:12:291:12 | exit M | @@ -3763,8 +3839,10 @@ dominance | cflow.cs:291:38:291:41 | delegate call | cflow.cs:291:12:291:12 | exit M (normal) | | cflow.cs:291:40:291:40 | 0 | cflow.cs:291:38:291:41 | delegate call | | cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:52:296:54 | {...} | -| cflow.cs:296:5:296:25 | enter NegationInConstructor | cflow.cs:296:5:296:25 | call to constructor Object | +| cflow.cs:296:5:296:25 | call to method | cflow.cs:296:5:296:25 | call to constructor Object | +| cflow.cs:296:5:296:25 | enter NegationInConstructor | cflow.cs:296:5:296:25 | this access | | cflow.cs:296:5:296:25 | exit NegationInConstructor (normal) | cflow.cs:296:5:296:25 | exit NegationInConstructor | +| cflow.cs:296:5:296:25 | this access | cflow.cs:296:5:296:25 | call to method | | cflow.cs:296:52:296:54 | {...} | cflow.cs:296:5:296:25 | exit NegationInConstructor (normal) | | cflow.cs:298:10:298:10 | enter M | cflow.cs:299:5:301:5 | {...} | | cflow.cs:298:10:298:10 | exit M (normal) | cflow.cs:298:10:298:10 | exit M | @@ -3782,8 +3860,10 @@ dominance | cflow.cs:300:61:300:64 | null | cflow.cs:300:56:300:64 | ... != ... | | cflow.cs:300:70:300:71 | "" | cflow.cs:300:9:300:72 | object creation of type NegationInConstructor | | cflow.cs:304:7:304:18 | call to constructor Object | cflow.cs:304:7:304:18 | {...} | -| cflow.cs:304:7:304:18 | enter LambdaGetter | cflow.cs:304:7:304:18 | call to constructor Object | +| cflow.cs:304:7:304:18 | call to method | cflow.cs:304:7:304:18 | call to constructor Object | +| cflow.cs:304:7:304:18 | enter LambdaGetter | cflow.cs:304:7:304:18 | this access | | cflow.cs:304:7:304:18 | exit LambdaGetter (normal) | cflow.cs:304:7:304:18 | exit LambdaGetter | +| cflow.cs:304:7:304:18 | this access | cflow.cs:304:7:304:18 | call to method | | cflow.cs:304:7:304:18 | {...} | cflow.cs:304:7:304:18 | exit LambdaGetter (normal) | | cflow.cs:306:60:310:5 | (...) => ... | cflow.cs:306:60:310:5 | exit get__getter (normal) | | cflow.cs:306:60:310:5 | enter (...) => ... | cflow.cs:307:5:310:5 | {...} | @@ -3797,9 +3877,11 @@ dominance | cflow.cs:309:9:309:17 | return ...; | cflow.cs:306:60:310:5 | exit (...) => ... (normal) | | cflow.cs:309:16:309:16 | access to local variable x | cflow.cs:309:9:309:17 | return ...; | postDominance -| AccessorCalls.cs:1:7:1:19 | call to constructor Object | AccessorCalls.cs:1:7:1:19 | enter AccessorCalls | +| AccessorCalls.cs:1:7:1:19 | call to constructor Object | AccessorCalls.cs:1:7:1:19 | call to method | +| AccessorCalls.cs:1:7:1:19 | call to method | AccessorCalls.cs:1:7:1:19 | this access | | AccessorCalls.cs:1:7:1:19 | exit AccessorCalls | AccessorCalls.cs:1:7:1:19 | exit AccessorCalls (normal) | | AccessorCalls.cs:1:7:1:19 | exit AccessorCalls (normal) | AccessorCalls.cs:1:7:1:19 | {...} | +| AccessorCalls.cs:1:7:1:19 | this access | AccessorCalls.cs:1:7:1:19 | enter AccessorCalls | | AccessorCalls.cs:1:7:1:19 | {...} | AccessorCalls.cs:1:7:1:19 | call to constructor Object | | AccessorCalls.cs:5:23:5:25 | exit get_Item | AccessorCalls.cs:5:23:5:25 | exit get_Item (normal) | | AccessorCalls.cs:5:23:5:25 | exit get_Item (normal) | AccessorCalls.cs:5:30:5:30 | access to parameter i | @@ -4102,9 +4184,11 @@ postDominance | AccessorCalls.cs:73:78:73:78 | access to local variable d | AccessorCalls.cs:73:75:73:75 | 0 | | AccessorCalls.cs:73:78:73:81 | dynamic access to element | AccessorCalls.cs:73:80:73:80 | 1 | | AccessorCalls.cs:73:80:73:80 | 1 | AccessorCalls.cs:73:78:73:78 | access to local variable d | -| ArrayCreation.cs:1:7:1:19 | call to constructor Object | ArrayCreation.cs:1:7:1:19 | enter ArrayCreation | +| ArrayCreation.cs:1:7:1:19 | call to constructor Object | ArrayCreation.cs:1:7:1:19 | call to method | +| ArrayCreation.cs:1:7:1:19 | call to method | ArrayCreation.cs:1:7:1:19 | this access | | ArrayCreation.cs:1:7:1:19 | exit ArrayCreation | ArrayCreation.cs:1:7:1:19 | exit ArrayCreation (normal) | | ArrayCreation.cs:1:7:1:19 | exit ArrayCreation (normal) | ArrayCreation.cs:1:7:1:19 | {...} | +| ArrayCreation.cs:1:7:1:19 | this access | ArrayCreation.cs:1:7:1:19 | enter ArrayCreation | | ArrayCreation.cs:1:7:1:19 | {...} | ArrayCreation.cs:1:7:1:19 | call to constructor Object | | ArrayCreation.cs:3:11:3:12 | exit M1 | ArrayCreation.cs:3:11:3:12 | exit M1 (normal) | | ArrayCreation.cs:3:11:3:12 | exit M1 (normal) | ArrayCreation.cs:3:19:3:28 | array creation of type Int32[] | @@ -4134,9 +4218,11 @@ postDominance | ArrayCreation.cs:9:43:9:50 | { ..., ... } | ArrayCreation.cs:9:48:9:48 | 3 | | ArrayCreation.cs:9:45:9:45 | 2 | ArrayCreation.cs:9:33:9:40 | { ..., ... } | | ArrayCreation.cs:9:48:9:48 | 3 | ArrayCreation.cs:9:45:9:45 | 2 | -| Assert.cs:5:7:5:17 | call to constructor Object | Assert.cs:5:7:5:17 | enter AssertTests | +| Assert.cs:5:7:5:17 | call to constructor Object | Assert.cs:5:7:5:17 | call to method | +| Assert.cs:5:7:5:17 | call to method | Assert.cs:5:7:5:17 | this access | | Assert.cs:5:7:5:17 | exit AssertTests | Assert.cs:5:7:5:17 | exit AssertTests (normal) | | Assert.cs:5:7:5:17 | exit AssertTests (normal) | Assert.cs:5:7:5:17 | {...} | +| Assert.cs:5:7:5:17 | this access | Assert.cs:5:7:5:17 | enter AssertTests | | Assert.cs:5:7:5:17 | {...} | Assert.cs:5:7:5:17 | call to constructor Object | | Assert.cs:7:10:7:11 | exit M1 (normal) | Assert.cs:11:9:11:35 | call to method WriteLine | | Assert.cs:8:5:12:5 | {...} | Assert.cs:7:10:7:11 | enter M1 | @@ -4492,9 +4578,11 @@ postDominance | Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:25:140:26 | access to parameter b1 | | Assert.cs:140:33:140:34 | access to parameter b3 | Assert.cs:140:29:140:30 | access to parameter b2 | | Assert.cs:141:9:141:15 | return ...; | Assert.cs:140:9:140:35 | call to method AssertTrueFalse | -| Assignments.cs:1:7:1:17 | call to constructor Object | Assignments.cs:1:7:1:17 | enter Assignments | +| Assignments.cs:1:7:1:17 | call to constructor Object | Assignments.cs:1:7:1:17 | call to method | +| Assignments.cs:1:7:1:17 | call to method | Assignments.cs:1:7:1:17 | this access | | Assignments.cs:1:7:1:17 | exit Assignments | Assignments.cs:1:7:1:17 | exit Assignments (normal) | | Assignments.cs:1:7:1:17 | exit Assignments (normal) | Assignments.cs:1:7:1:17 | {...} | +| Assignments.cs:1:7:1:17 | this access | Assignments.cs:1:7:1:17 | enter Assignments | | Assignments.cs:1:7:1:17 | {...} | Assignments.cs:1:7:1:17 | call to constructor Object | | Assignments.cs:3:10:3:10 | exit M | Assignments.cs:3:10:3:10 | exit M (normal) | | Assignments.cs:3:10:3:10 | exit M (normal) | Assignments.cs:14:9:14:35 | ... += ... | @@ -4537,9 +4625,11 @@ postDominance | Assignments.cs:18:5:20:5 | {...} | Assignments.cs:17:40:17:40 | enter + | | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:19:16:19:16 | access to parameter x | | Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:18:5:20:5 | {...} | -| BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | enter BreakInTry | +| BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | call to method | +| BreakInTry.cs:1:7:1:16 | call to method | BreakInTry.cs:1:7:1:16 | this access | | BreakInTry.cs:1:7:1:16 | exit BreakInTry | BreakInTry.cs:1:7:1:16 | exit BreakInTry (normal) | | BreakInTry.cs:1:7:1:16 | exit BreakInTry (normal) | BreakInTry.cs:1:7:1:16 | {...} | +| BreakInTry.cs:1:7:1:16 | this access | BreakInTry.cs:1:7:1:16 | enter BreakInTry | | BreakInTry.cs:1:7:1:16 | {...} | BreakInTry.cs:1:7:1:16 | call to constructor Object | | BreakInTry.cs:3:10:3:11 | exit M1 | BreakInTry.cs:3:10:3:11 | exit M1 (normal) | | BreakInTry.cs:3:10:3:11 | exit M1 (normal) | BreakInTry.cs:15:17:15:28 | ... == ... | @@ -4620,9 +4710,11 @@ postDominance | BreakInTry.cs:67:21:67:23 | access to local variable arg | BreakInTry.cs:67:17:68:26 | if (...) ... | | BreakInTry.cs:67:21:67:31 | ... == ... | BreakInTry.cs:67:28:67:31 | null | | BreakInTry.cs:67:28:67:31 | null | BreakInTry.cs:67:21:67:23 | access to local variable arg | -| CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | +| CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | CompileTimeOperators.cs:3:7:3:26 | call to method | +| CompileTimeOperators.cs:3:7:3:26 | call to method | CompileTimeOperators.cs:3:7:3:26 | this access | | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators (normal) | | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators (normal) | CompileTimeOperators.cs:3:7:3:26 | {...} | +| CompileTimeOperators.cs:3:7:3:26 | this access | CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | | CompileTimeOperators.cs:3:7:3:26 | {...} | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | | CompileTimeOperators.cs:5:9:5:15 | exit Default | CompileTimeOperators.cs:5:9:5:15 | exit Default (normal) | | CompileTimeOperators.cs:5:9:5:15 | exit Default (normal) | CompileTimeOperators.cs:7:9:7:28 | return ...; | @@ -4644,9 +4736,11 @@ postDominance | CompileTimeOperators.cs:21:5:23:5 | {...} | CompileTimeOperators.cs:20:12:20:17 | enter Nameof | | CompileTimeOperators.cs:22:9:22:25 | return ...; | CompileTimeOperators.cs:22:16:22:24 | nameof(...) | | CompileTimeOperators.cs:22:16:22:24 | nameof(...) | CompileTimeOperators.cs:21:5:23:5 | {...} | -| CompileTimeOperators.cs:26:7:26:22 | call to constructor Object | CompileTimeOperators.cs:26:7:26:22 | enter GotoInTryFinally | +| CompileTimeOperators.cs:26:7:26:22 | call to constructor Object | CompileTimeOperators.cs:26:7:26:22 | call to method | +| CompileTimeOperators.cs:26:7:26:22 | call to method | CompileTimeOperators.cs:26:7:26:22 | this access | | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally (normal) | | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally (normal) | CompileTimeOperators.cs:26:7:26:22 | {...} | +| CompileTimeOperators.cs:26:7:26:22 | this access | CompileTimeOperators.cs:26:7:26:22 | enter GotoInTryFinally | | CompileTimeOperators.cs:26:7:26:22 | {...} | CompileTimeOperators.cs:26:7:26:22 | call to constructor Object | | CompileTimeOperators.cs:28:10:28:10 | exit M (normal) | CompileTimeOperators.cs:40:14:40:37 | call to method WriteLine | | CompileTimeOperators.cs:29:5:41:5 | {...} | CompileTimeOperators.cs:28:10:28:10 | enter M | @@ -4664,9 +4758,11 @@ postDominance | CompileTimeOperators.cs:40:14:40:37 | call to method WriteLine | CompileTimeOperators.cs:40:32:40:36 | "End" | | CompileTimeOperators.cs:40:14:40:38 | ...; | CompileTimeOperators.cs:40:9:40:11 | End: | | CompileTimeOperators.cs:40:32:40:36 | "End" | CompileTimeOperators.cs:40:14:40:38 | ...; | -| ConditionalAccess.cs:1:7:1:23 | call to constructor Object | ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | +| ConditionalAccess.cs:1:7:1:23 | call to constructor Object | ConditionalAccess.cs:1:7:1:23 | call to method | +| ConditionalAccess.cs:1:7:1:23 | call to method | ConditionalAccess.cs:1:7:1:23 | this access | | ConditionalAccess.cs:1:7:1:23 | exit ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | exit ConditionalAccess (normal) | | ConditionalAccess.cs:1:7:1:23 | exit ConditionalAccess (normal) | ConditionalAccess.cs:1:7:1:23 | {...} | +| ConditionalAccess.cs:1:7:1:23 | this access | ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | | ConditionalAccess.cs:1:7:1:23 | {...} | ConditionalAccess.cs:1:7:1:23 | call to constructor Object | | ConditionalAccess.cs:3:12:3:13 | exit M1 | ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | | ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:26:3:26 | access to parameter i | @@ -4743,9 +4839,11 @@ postDominance | ConditionalAccess.cs:41:70:41:83 | ... + ... | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | | ConditionalAccess.cs:41:75:41:78 | ", " | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | ConditionalAccess.cs:41:70:41:78 | ... + ... | -| Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | enter Conditions | +| Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | call to method | +| Conditions.cs:1:7:1:16 | call to method | Conditions.cs:1:7:1:16 | this access | | Conditions.cs:1:7:1:16 | exit Conditions | Conditions.cs:1:7:1:16 | exit Conditions (normal) | | Conditions.cs:1:7:1:16 | exit Conditions (normal) | Conditions.cs:1:7:1:16 | {...} | +| Conditions.cs:1:7:1:16 | this access | Conditions.cs:1:7:1:16 | enter Conditions | | Conditions.cs:1:7:1:16 | {...} | Conditions.cs:1:7:1:16 | call to constructor Object | | Conditions.cs:3:10:3:19 | exit IncrOrDecr | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:7:13:7:16 | [false] !... | @@ -5040,9 +5138,11 @@ postDominance | Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:149:13:149:49 | ...; | | Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:45:149:45 | access to local variable s | | Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:40:149:43 | "b = " | -| ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | enter ExitMethods | +| ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | call to method | +| ExitMethods.cs:6:7:6:17 | call to method | ExitMethods.cs:6:7:6:17 | this access | | ExitMethods.cs:6:7:6:17 | exit ExitMethods | ExitMethods.cs:6:7:6:17 | exit ExitMethods (normal) | | ExitMethods.cs:6:7:6:17 | exit ExitMethods (normal) | ExitMethods.cs:6:7:6:17 | {...} | +| ExitMethods.cs:6:7:6:17 | this access | ExitMethods.cs:6:7:6:17 | enter ExitMethods | | ExitMethods.cs:6:7:6:17 | {...} | ExitMethods.cs:6:7:6:17 | call to constructor Object | | ExitMethods.cs:8:10:8:11 | exit M1 | ExitMethods.cs:8:10:8:11 | exit M1 (normal) | | ExitMethods.cs:8:10:8:11 | exit M1 (normal) | ExitMethods.cs:11:9:11:15 | return ...; | @@ -5231,9 +5331,11 @@ postDominance | Extensions.cs:25:9:25:34 | ...; | Extensions.cs:24:9:24:45 | call to method ToBool | | Extensions.cs:25:23:25:32 | access to method Parse | Extensions.cs:25:9:25:14 | "true" | | Extensions.cs:25:23:25:32 | delegate creation of type Func | Extensions.cs:25:23:25:32 | access to method Parse | -| Finally.cs:3:14:3:20 | call to constructor Object | Finally.cs:3:14:3:20 | enter Finally | +| Finally.cs:3:14:3:20 | call to constructor Object | Finally.cs:3:14:3:20 | call to method | +| Finally.cs:3:14:3:20 | call to method | Finally.cs:3:14:3:20 | this access | | Finally.cs:3:14:3:20 | exit Finally | Finally.cs:3:14:3:20 | exit Finally (normal) | | Finally.cs:3:14:3:20 | exit Finally (normal) | Finally.cs:3:14:3:20 | {...} | +| Finally.cs:3:14:3:20 | this access | Finally.cs:3:14:3:20 | enter Finally | | Finally.cs:3:14:3:20 | {...} | Finally.cs:3:14:3:20 | call to constructor Object | | Finally.cs:7:10:7:11 | exit M1 (normal) | Finally.cs:15:13:15:40 | call to method WriteLine | | Finally.cs:8:5:17:5 | {...} | Finally.cs:7:10:7:11 | enter M1 | @@ -5433,17 +5535,23 @@ postDominance | Finally.cs:167:17:167:37 | call to method WriteLine | Finally.cs:167:35:167:36 | "" | | Finally.cs:167:17:167:38 | ...; | Finally.cs:166:13:168:13 | {...} | | Finally.cs:167:35:167:36 | "" | Finally.cs:167:17:167:38 | ...; | -| Finally.cs:172:11:172:20 | call to constructor Exception | Finally.cs:172:11:172:20 | enter ExceptionA | +| Finally.cs:172:11:172:20 | call to constructor Exception | Finally.cs:172:11:172:20 | call to method | +| Finally.cs:172:11:172:20 | call to method | Finally.cs:172:11:172:20 | this access | | Finally.cs:172:11:172:20 | exit ExceptionA | Finally.cs:172:11:172:20 | exit ExceptionA (normal) | | Finally.cs:172:11:172:20 | exit ExceptionA (normal) | Finally.cs:172:11:172:20 | {...} | +| Finally.cs:172:11:172:20 | this access | Finally.cs:172:11:172:20 | enter ExceptionA | | Finally.cs:172:11:172:20 | {...} | Finally.cs:172:11:172:20 | call to constructor Exception | -| Finally.cs:173:11:173:20 | call to constructor Exception | Finally.cs:173:11:173:20 | enter ExceptionB | +| Finally.cs:173:11:173:20 | call to constructor Exception | Finally.cs:173:11:173:20 | call to method | +| Finally.cs:173:11:173:20 | call to method | Finally.cs:173:11:173:20 | this access | | Finally.cs:173:11:173:20 | exit ExceptionB | Finally.cs:173:11:173:20 | exit ExceptionB (normal) | | Finally.cs:173:11:173:20 | exit ExceptionB (normal) | Finally.cs:173:11:173:20 | {...} | +| Finally.cs:173:11:173:20 | this access | Finally.cs:173:11:173:20 | enter ExceptionB | | Finally.cs:173:11:173:20 | {...} | Finally.cs:173:11:173:20 | call to constructor Exception | -| Finally.cs:174:11:174:20 | call to constructor Exception | Finally.cs:174:11:174:20 | enter ExceptionC | +| Finally.cs:174:11:174:20 | call to constructor Exception | Finally.cs:174:11:174:20 | call to method | +| Finally.cs:174:11:174:20 | call to method | Finally.cs:174:11:174:20 | this access | | Finally.cs:174:11:174:20 | exit ExceptionC | Finally.cs:174:11:174:20 | exit ExceptionC (normal) | | Finally.cs:174:11:174:20 | exit ExceptionC (normal) | Finally.cs:174:11:174:20 | {...} | +| Finally.cs:174:11:174:20 | this access | Finally.cs:174:11:174:20 | enter ExceptionC | | Finally.cs:174:11:174:20 | {...} | Finally.cs:174:11:174:20 | call to constructor Exception | | Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:186:21:186:22 | access to parameter b2 | | Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:190:21:190:22 | access to parameter b1 | @@ -5560,9 +5668,11 @@ postDominance | Finally.cs:272:13:272:18 | ... = ... | Finally.cs:272:13:272:18 | ... + ... | | Finally.cs:272:13:272:19 | ...; | Finally.cs:271:13:271:34 | call to method WriteLine | | Finally.cs:272:18:272:18 | 3 | Finally.cs:272:13:272:13 | access to parameter i | -| Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | enter Foreach | +| Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | call to method | +| Foreach.cs:4:7:4:13 | call to method | Foreach.cs:4:7:4:13 | this access | | Foreach.cs:4:7:4:13 | exit Foreach | Foreach.cs:4:7:4:13 | exit Foreach (normal) | | Foreach.cs:4:7:4:13 | exit Foreach (normal) | Foreach.cs:4:7:4:13 | {...} | +| Foreach.cs:4:7:4:13 | this access | Foreach.cs:4:7:4:13 | enter Foreach | | Foreach.cs:4:7:4:13 | {...} | Foreach.cs:4:7:4:13 | call to constructor Object | | Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:6:10:6:11 | exit M1 (normal) | | Foreach.cs:6:10:6:11 | exit M1 (normal) | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | @@ -5614,39 +5724,34 @@ postDominance | Foreach.cs:38:33:38:33 | Int32 y | Foreach.cs:38:26:38:26 | String x | | Foreach.cs:38:39:38:42 | access to parameter args | Foreach.cs:37:5:40:5 | {...} | | Foreach.cs:39:11:39:11 | ; | Foreach.cs:38:18:38:34 | (..., ...) | +| Initializers.cs:3:7:3:18 | exit | Initializers.cs:3:7:3:18 | exit (normal) | +| Initializers.cs:3:7:3:18 | exit (normal) | Initializers.cs:6:25:6:31 | ... = ... | | Initializers.cs:3:7:3:18 | exit Initializers | Initializers.cs:3:7:3:18 | exit Initializers (normal) | | Initializers.cs:3:7:3:18 | exit Initializers (normal) | Initializers.cs:3:7:3:18 | {...} | | Initializers.cs:3:7:3:18 | {...} | Initializers.cs:3:7:3:18 | enter Initializers | -| Initializers.cs:5:9:5:9 | this access | Initializers.cs:8:5:8:16 | call to constructor Object | -| Initializers.cs:5:9:5:9 | this access | Initializers.cs:10:5:10:16 | call to constructor Object | +| Initializers.cs:5:9:5:9 | this access | Initializers.cs:3:7:3:18 | enter | | Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:5:13:5:17 | ... + ... | -| Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:5:13:5:17 | ... + ... | -| Initializers.cs:5:13:5:13 | access to field H | Initializers.cs:5:9:5:9 | this access | | Initializers.cs:5:13:5:13 | access to field H | Initializers.cs:5:9:5:9 | this access | | Initializers.cs:5:13:5:17 | ... + ... | Initializers.cs:5:17:5:17 | 1 | -| Initializers.cs:5:13:5:17 | ... + ... | Initializers.cs:5:17:5:17 | 1 | | Initializers.cs:5:17:5:17 | 1 | Initializers.cs:5:13:5:13 | access to field H | -| Initializers.cs:5:17:5:17 | 1 | Initializers.cs:5:13:5:13 | access to field H | -| Initializers.cs:6:9:6:9 | access to property G | Initializers.cs:6:27:6:31 | ... + ... | | Initializers.cs:6:9:6:9 | access to property G | Initializers.cs:6:27:6:31 | ... + ... | | Initializers.cs:6:9:6:9 | this access | Initializers.cs:5:9:5:17 | ... = ... | -| Initializers.cs:6:9:6:9 | this access | Initializers.cs:5:9:5:17 | ... = ... | -| Initializers.cs:6:25:6:31 | ... = ... | Initializers.cs:6:9:6:9 | access to property G | | Initializers.cs:6:25:6:31 | ... = ... | Initializers.cs:6:9:6:9 | access to property G | | Initializers.cs:6:27:6:27 | access to field H | Initializers.cs:6:9:6:9 | this access | -| Initializers.cs:6:27:6:27 | access to field H | Initializers.cs:6:9:6:9 | this access | -| Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:6:31:6:31 | 2 | | Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:6:31:6:31 | 2 | | Initializers.cs:6:31:6:31 | 2 | Initializers.cs:6:27:6:27 | access to field H | -| Initializers.cs:6:31:6:31 | 2 | Initializers.cs:6:27:6:27 | access to field H | -| Initializers.cs:8:5:8:16 | call to constructor Object | Initializers.cs:8:5:8:16 | enter Initializers | +| Initializers.cs:8:5:8:16 | call to constructor Object | Initializers.cs:8:5:8:16 | call to method | +| Initializers.cs:8:5:8:16 | call to method | Initializers.cs:8:5:8:16 | this access | | Initializers.cs:8:5:8:16 | exit Initializers | Initializers.cs:8:5:8:16 | exit Initializers (normal) | | Initializers.cs:8:5:8:16 | exit Initializers (normal) | Initializers.cs:8:20:8:22 | {...} | -| Initializers.cs:8:20:8:22 | {...} | Initializers.cs:6:25:6:31 | ... = ... | -| Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:10:5:10:16 | enter Initializers | +| Initializers.cs:8:5:8:16 | this access | Initializers.cs:8:5:8:16 | enter Initializers | +| Initializers.cs:8:20:8:22 | {...} | Initializers.cs:8:5:8:16 | call to constructor Object | +| Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:10:5:10:16 | call to method | +| Initializers.cs:10:5:10:16 | call to method | Initializers.cs:10:5:10:16 | this access | | Initializers.cs:10:5:10:16 | exit Initializers | Initializers.cs:10:5:10:16 | exit Initializers (normal) | | Initializers.cs:10:5:10:16 | exit Initializers (normal) | Initializers.cs:10:28:10:30 | {...} | -| Initializers.cs:10:28:10:30 | {...} | Initializers.cs:6:25:6:31 | ... = ... | +| Initializers.cs:10:5:10:16 | this access | Initializers.cs:10:5:10:16 | enter Initializers | +| Initializers.cs:10:28:10:30 | {...} | Initializers.cs:10:5:10:16 | call to constructor Object | | Initializers.cs:12:10:12:10 | exit M | Initializers.cs:12:10:12:10 | exit M (normal) | | Initializers.cs:12:10:12:10 | exit M (normal) | Initializers.cs:15:13:15:63 | Initializers[] iz = ... | | Initializers.cs:13:5:16:5 | {...} | Initializers.cs:12:10:12:10 | enter M | @@ -5672,26 +5777,31 @@ postDominance | Initializers.cs:18:16:18:16 | exit H (normal) | Initializers.cs:18:16:18:20 | ... = ... | | Initializers.cs:18:16:18:20 | ... = ... | Initializers.cs:18:20:18:20 | 1 | | Initializers.cs:18:20:18:20 | 1 | Initializers.cs:18:16:18:16 | enter H | -| Initializers.cs:20:11:20:23 | call to constructor Object | Initializers.cs:20:11:20:23 | enter NoConstructor | +| Initializers.cs:20:11:20:23 | call to constructor Object | Initializers.cs:20:11:20:23 | call to method | +| Initializers.cs:20:11:20:23 | call to method | Initializers.cs:20:11:20:23 | this access | +| Initializers.cs:20:11:20:23 | exit | Initializers.cs:20:11:20:23 | exit (normal) | +| Initializers.cs:20:11:20:23 | exit (normal) | Initializers.cs:23:23:23:27 | ... = ... | | Initializers.cs:20:11:20:23 | exit NoConstructor | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | Initializers.cs:20:11:20:23 | {...} | -| Initializers.cs:20:11:20:23 | {...} | Initializers.cs:23:23:23:27 | ... = ... | -| Initializers.cs:22:23:22:23 | this access | Initializers.cs:20:11:20:23 | call to constructor Object | +| Initializers.cs:20:11:20:23 | this access | Initializers.cs:20:11:20:23 | enter NoConstructor | +| Initializers.cs:20:11:20:23 | {...} | Initializers.cs:20:11:20:23 | call to constructor Object | +| Initializers.cs:22:23:22:23 | this access | Initializers.cs:20:11:20:23 | enter | | Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:22:27:22:27 | 0 | | Initializers.cs:22:27:22:27 | 0 | Initializers.cs:22:23:22:23 | this access | | Initializers.cs:23:23:23:23 | this access | Initializers.cs:22:23:22:27 | ... = ... | | Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:23:27:23:27 | 1 | | Initializers.cs:23:27:23:27 | 1 | Initializers.cs:23:23:23:23 | this access | -| Initializers.cs:28:13:28:13 | this access | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | -| Initializers.cs:28:13:28:13 | this access | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | -| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:28:17:28:17 | 2 | +| Initializers.cs:26:11:26:13 | exit | Initializers.cs:26:11:26:13 | exit (normal) | +| Initializers.cs:26:11:26:13 | exit (normal) | Initializers.cs:28:13:28:17 | ... = ... | +| Initializers.cs:28:13:28:13 | this access | Initializers.cs:26:11:26:13 | enter | | Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:28:17:28:17 | 2 | | Initializers.cs:28:17:28:17 | 2 | Initializers.cs:28:13:28:13 | this access | -| Initializers.cs:28:17:28:17 | 2 | Initializers.cs:28:13:28:13 | this access | +| Initializers.cs:31:9:31:11 | call to method | Initializers.cs:31:9:31:11 | this access | | Initializers.cs:31:9:31:11 | exit Sub | Initializers.cs:31:9:31:11 | exit Sub (normal) | | Initializers.cs:31:9:31:11 | exit Sub (normal) | Initializers.cs:31:26:31:30 | ... = ... | -| Initializers.cs:31:17:31:20 | call to constructor NoConstructor | Initializers.cs:31:9:31:11 | enter Sub | -| Initializers.cs:31:24:31:33 | {...} | Initializers.cs:28:13:28:17 | ... = ... | +| Initializers.cs:31:9:31:11 | this access | Initializers.cs:31:9:31:11 | enter Sub | +| Initializers.cs:31:17:31:20 | call to constructor NoConstructor | Initializers.cs:31:9:31:11 | call to method | +| Initializers.cs:31:24:31:33 | {...} | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | | Initializers.cs:31:26:31:26 | this access | Initializers.cs:31:26:31:31 | ...; | | Initializers.cs:31:26:31:30 | ... = ... | Initializers.cs:31:30:31:30 | 3 | | Initializers.cs:31:26:31:31 | ...; | Initializers.cs:31:24:31:33 | {...} | @@ -5704,23 +5814,29 @@ postDominance | Initializers.cs:33:31:33:35 | ... = ... | Initializers.cs:33:35:33:35 | access to parameter i | | Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:29:33:38 | {...} | | Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:31:33:31 | this access | -| Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:9:35:11 | enter Sub | +| Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:9:35:11 | call to method | +| Initializers.cs:35:9:35:11 | call to method | Initializers.cs:35:9:35:11 | this access | | Initializers.cs:35:9:35:11 | exit Sub | Initializers.cs:35:9:35:11 | exit Sub (normal) | | Initializers.cs:35:9:35:11 | exit Sub (normal) | Initializers.cs:35:29:35:37 | ... = ... | -| Initializers.cs:35:27:35:40 | {...} | Initializers.cs:28:13:28:17 | ... = ... | +| Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | enter Sub | +| Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | | Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:29:35:38 | ...; | | Initializers.cs:35:29:35:37 | ... = ... | Initializers.cs:35:33:35:37 | ... + ... | | Initializers.cs:35:29:35:38 | ...; | Initializers.cs:35:27:35:40 | {...} | | Initializers.cs:35:33:35:33 | access to parameter i | Initializers.cs:35:29:35:29 | this access | | Initializers.cs:35:33:35:37 | ... + ... | Initializers.cs:35:37:35:37 | access to parameter j | | Initializers.cs:35:37:35:37 | access to parameter j | Initializers.cs:35:33:35:33 | access to parameter i | -| Initializers.cs:39:7:39:23 | call to constructor Object | Initializers.cs:39:7:39:23 | enter IndexInitializers | +| Initializers.cs:39:7:39:23 | call to constructor Object | Initializers.cs:39:7:39:23 | call to method | +| Initializers.cs:39:7:39:23 | call to method | Initializers.cs:39:7:39:23 | this access | | Initializers.cs:39:7:39:23 | exit IndexInitializers | Initializers.cs:39:7:39:23 | exit IndexInitializers (normal) | | Initializers.cs:39:7:39:23 | exit IndexInitializers (normal) | Initializers.cs:39:7:39:23 | {...} | +| Initializers.cs:39:7:39:23 | this access | Initializers.cs:39:7:39:23 | enter IndexInitializers | | Initializers.cs:39:7:39:23 | {...} | Initializers.cs:39:7:39:23 | call to constructor Object | -| Initializers.cs:41:11:41:18 | call to constructor Object | Initializers.cs:41:11:41:18 | enter Compound | +| Initializers.cs:41:11:41:18 | call to constructor Object | Initializers.cs:41:11:41:18 | call to method | +| Initializers.cs:41:11:41:18 | call to method | Initializers.cs:41:11:41:18 | this access | | Initializers.cs:41:11:41:18 | exit Compound | Initializers.cs:41:11:41:18 | exit Compound (normal) | | Initializers.cs:41:11:41:18 | exit Compound (normal) | Initializers.cs:41:11:41:18 | {...} | +| Initializers.cs:41:11:41:18 | this access | Initializers.cs:41:11:41:18 | enter Compound | | Initializers.cs:41:11:41:18 | {...} | Initializers.cs:41:11:41:18 | call to constructor Object | | Initializers.cs:51:10:51:13 | exit Test | Initializers.cs:51:10:51:13 | exit Test (normal) | | Initializers.cs:51:10:51:13 | exit Test (normal) | Initializers.cs:57:13:65:9 | Compound compound = ... | @@ -5826,9 +5942,11 @@ postDominance | Initializers.cs:64:50:64:54 | ... + ... | Initializers.cs:64:54:64:54 | 0 | | Initializers.cs:64:54:64:54 | 0 | Initializers.cs:64:50:64:50 | access to parameter i | | Initializers.cs:64:59:64:61 | "1" | Initializers.cs:64:50:64:54 | ... + ... | -| LoopUnrolling.cs:5:7:5:19 | call to constructor Object | LoopUnrolling.cs:5:7:5:19 | enter LoopUnrolling | +| LoopUnrolling.cs:5:7:5:19 | call to constructor Object | LoopUnrolling.cs:5:7:5:19 | call to method | +| LoopUnrolling.cs:5:7:5:19 | call to method | LoopUnrolling.cs:5:7:5:19 | this access | | LoopUnrolling.cs:5:7:5:19 | exit LoopUnrolling | LoopUnrolling.cs:5:7:5:19 | exit LoopUnrolling (normal) | | LoopUnrolling.cs:5:7:5:19 | exit LoopUnrolling (normal) | LoopUnrolling.cs:5:7:5:19 | {...} | +| LoopUnrolling.cs:5:7:5:19 | this access | LoopUnrolling.cs:5:7:5:19 | enter LoopUnrolling | | LoopUnrolling.cs:5:7:5:19 | {...} | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | | LoopUnrolling.cs:7:10:7:11 | exit M1 | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | LoopUnrolling.cs:10:13:10:19 | return ...; | @@ -6021,6 +6139,8 @@ postDominance | LoopUnrolling.cs:99:13:99:32 | call to method WriteLine | LoopUnrolling.cs:99:31:99:31 | access to local variable x | | LoopUnrolling.cs:99:13:99:33 | ...; | LoopUnrolling.cs:98:9:100:9 | {...} | | LoopUnrolling.cs:99:31:99:31 | access to local variable x | LoopUnrolling.cs:99:13:99:33 | ...; | +| MultiImplementationA.cs:4:7:4:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | call to method | +| MultiImplementationA.cs:4:7:4:8 | call to method | MultiImplementationA.cs:4:7:4:8 | this access | | MultiImplementationA.cs:4:7:4:8 | exit C1 | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | MultiImplementationA.cs:4:7:4:8 | {...} | | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | MultiImplementationB.cs:1:7:1:8 | {...} | @@ -6039,7 +6159,9 @@ postDominance | MultiImplementationA.cs:8:16:8:16 | exit M (abnormal) | MultiImplementationA.cs:8:23:8:32 | throw ... | | MultiImplementationA.cs:8:16:8:16 | exit M (normal) | MultiImplementationB.cs:5:23:5:23 | 2 | | MultiImplementationA.cs:8:23:8:32 | throw ... | MultiImplementationA.cs:8:29:8:32 | null | -| MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | +| MultiImplementationA.cs:11:7:11:8 | exit | MultiImplementationA.cs:11:7:11:8 | exit (normal) | +| MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationA.cs:24:32:24:34 | ... = ... | +| MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationB.cs:22:32:22:34 | ... = ... | | MultiImplementationA.cs:13:16:13:20 | ... = ... | MultiImplementationA.cs:13:20:13:20 | 0 | | MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:13:16:13:16 | this access | | MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | enter get_Item | @@ -6060,10 +6182,12 @@ postDominance | MultiImplementationA.cs:18:9:18:22 | exit M2 | MultiImplementationA.cs:18:9:18:22 | exit M2 (normal) | | MultiImplementationA.cs:18:9:18:22 | exit M2 (normal) | MultiImplementationA.cs:18:21:18:21 | 0 | | MultiImplementationA.cs:18:21:18:21 | 0 | MultiImplementationA.cs:18:9:18:22 | enter M2 | -| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | enter C2 | +| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | call to method | +| MultiImplementationA.cs:20:12:20:13 | call to method | MultiImplementationA.cs:20:12:20:13 | this access | | MultiImplementationA.cs:20:12:20:13 | exit C2 (abnormal) | MultiImplementationB.cs:18:24:18:34 | throw ...; | | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | MultiImplementationA.cs:20:24:20:28 | ... = ... | -| MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:24:32:24:34 | ... = ... | +| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | enter C2 | +| MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | | MultiImplementationA.cs:20:24:20:24 | this access | MultiImplementationA.cs:20:24:20:29 | ...; | | MultiImplementationA.cs:20:24:20:28 | ... = ... | MultiImplementationA.cs:20:28:20:28 | access to parameter i | | MultiImplementationA.cs:20:24:20:29 | ...; | MultiImplementationA.cs:20:22:20:31 | {...} | @@ -6083,6 +6207,8 @@ postDominance | MultiImplementationA.cs:24:16:24:16 | this access | MultiImplementationA.cs:13:16:13:20 | ... = ... | | MultiImplementationA.cs:24:32:24:34 | ... = ... | MultiImplementationA.cs:24:16:24:16 | access to property P | | MultiImplementationA.cs:24:34:24:34 | 0 | MultiImplementationA.cs:24:16:24:16 | this access | +| MultiImplementationA.cs:28:7:28:8 | call to constructor Object | MultiImplementationA.cs:28:7:28:8 | call to method | +| MultiImplementationA.cs:28:7:28:8 | call to method | MultiImplementationA.cs:28:7:28:8 | this access | | MultiImplementationA.cs:28:7:28:8 | exit C3 | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | MultiImplementationA.cs:28:7:28:8 | {...} | | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | MultiImplementationB.cs:25:7:25:8 | {...} | @@ -6091,6 +6217,8 @@ postDominance | MultiImplementationA.cs:30:21:30:23 | exit get_P3 (abnormal) | MultiImplementationA.cs:30:28:30:37 | throw ... | | MultiImplementationA.cs:30:28:30:37 | throw ... | MultiImplementationA.cs:30:34:30:37 | null | | MultiImplementationA.cs:30:34:30:37 | null | MultiImplementationA.cs:30:21:30:23 | enter get_P3 | +| MultiImplementationA.cs:34:15:34:16 | call to constructor Object | MultiImplementationA.cs:34:15:34:16 | call to method | +| MultiImplementationA.cs:34:15:34:16 | call to method | MultiImplementationA.cs:34:15:34:16 | this access | | MultiImplementationA.cs:34:15:34:16 | exit C4 | MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | | MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | MultiImplementationA.cs:34:15:34:16 | {...} | | MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | MultiImplementationB.cs:30:15:30:16 | {...} | @@ -6104,6 +6232,8 @@ postDominance | MultiImplementationA.cs:37:14:37:28 | {...} | MultiImplementationA.cs:37:9:37:10 | enter M2 | | MultiImplementationA.cs:37:16:37:26 | throw ...; | MultiImplementationA.cs:37:22:37:25 | null | | MultiImplementationA.cs:37:22:37:25 | null | MultiImplementationA.cs:37:14:37:28 | {...} | +| MultiImplementationB.cs:1:7:1:8 | call to constructor Object | MultiImplementationB.cs:1:7:1:8 | call to method | +| MultiImplementationB.cs:1:7:1:8 | call to method | MultiImplementationB.cs:1:7:1:8 | this access | | MultiImplementationB.cs:1:7:1:8 | {...} | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | | MultiImplementationB.cs:3:22:3:22 | 0 | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | | MultiImplementationB.cs:4:25:4:37 | {...} | MultiImplementationA.cs:7:21:7:23 | enter get_P2 | @@ -6111,7 +6241,6 @@ postDominance | MultiImplementationB.cs:4:34:4:34 | 1 | MultiImplementationB.cs:4:25:4:37 | {...} | | MultiImplementationB.cs:4:43:4:45 | {...} | MultiImplementationA.cs:7:41:7:43 | enter set_P2 | | MultiImplementationB.cs:5:23:5:23 | 2 | MultiImplementationA.cs:8:16:8:16 | enter M | -| MultiImplementationB.cs:11:16:11:16 | this access | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | | MultiImplementationB.cs:11:16:11:20 | ... = ... | MultiImplementationB.cs:11:20:11:20 | 1 | | MultiImplementationB.cs:11:20:11:20 | 1 | MultiImplementationB.cs:11:16:11:16 | this access | | MultiImplementationB.cs:12:31:12:40 | throw ... | MultiImplementationB.cs:12:37:12:40 | null | @@ -6122,7 +6251,9 @@ postDominance | MultiImplementationB.cs:16:9:16:31 | exit M2 (abnormal) | MultiImplementationB.cs:16:21:16:30 | throw ... | | MultiImplementationB.cs:16:21:16:30 | throw ... | MultiImplementationB.cs:16:27:16:30 | null | | MultiImplementationB.cs:16:27:16:30 | null | MultiImplementationB.cs:16:9:16:31 | enter M2 | -| MultiImplementationB.cs:18:22:18:36 | {...} | MultiImplementationB.cs:22:32:22:34 | ... = ... | +| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:18:12:18:13 | call to method | +| MultiImplementationB.cs:18:12:18:13 | call to method | MultiImplementationB.cs:18:12:18:13 | this access | +| MultiImplementationB.cs:18:22:18:36 | {...} | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | | MultiImplementationB.cs:18:24:18:34 | throw ...; | MultiImplementationB.cs:18:30:18:33 | null | | MultiImplementationB.cs:18:30:18:33 | null | MultiImplementationB.cs:18:22:18:36 | {...} | | MultiImplementationB.cs:19:19:19:22 | call to constructor C2 | MultiImplementationB.cs:19:24:19:24 | 1 | @@ -6134,12 +6265,18 @@ postDominance | MultiImplementationB.cs:22:16:22:16 | this access | MultiImplementationB.cs:11:16:11:20 | ... = ... | | MultiImplementationB.cs:22:32:22:34 | ... = ... | MultiImplementationB.cs:22:16:22:16 | access to property P | | MultiImplementationB.cs:22:34:22:34 | 1 | MultiImplementationB.cs:22:16:22:16 | this access | +| MultiImplementationB.cs:25:7:25:8 | call to constructor Object | MultiImplementationB.cs:25:7:25:8 | call to method | +| MultiImplementationB.cs:25:7:25:8 | call to method | MultiImplementationB.cs:25:7:25:8 | this access | | MultiImplementationB.cs:25:7:25:8 | {...} | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | +| MultiImplementationB.cs:30:15:30:16 | call to constructor Object | MultiImplementationB.cs:30:15:30:16 | call to method | +| MultiImplementationB.cs:30:15:30:16 | call to method | MultiImplementationB.cs:30:15:30:16 | this access | | MultiImplementationB.cs:30:15:30:16 | {...} | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | | MultiImplementationB.cs:32:17:32:17 | 0 | MultiImplementationA.cs:36:9:36:10 | enter M1 | -| NullCoalescing.cs:1:7:1:20 | call to constructor Object | NullCoalescing.cs:1:7:1:20 | enter NullCoalescing | +| NullCoalescing.cs:1:7:1:20 | call to constructor Object | NullCoalescing.cs:1:7:1:20 | call to method | +| NullCoalescing.cs:1:7:1:20 | call to method | NullCoalescing.cs:1:7:1:20 | this access | | NullCoalescing.cs:1:7:1:20 | exit NullCoalescing | NullCoalescing.cs:1:7:1:20 | exit NullCoalescing (normal) | | NullCoalescing.cs:1:7:1:20 | exit NullCoalescing (normal) | NullCoalescing.cs:1:7:1:20 | {...} | +| NullCoalescing.cs:1:7:1:20 | this access | NullCoalescing.cs:1:7:1:20 | enter NullCoalescing | | NullCoalescing.cs:1:7:1:20 | {...} | NullCoalescing.cs:1:7:1:20 | call to constructor Object | | NullCoalescing.cs:3:9:3:10 | exit M1 | NullCoalescing.cs:3:9:3:10 | exit M1 (normal) | | NullCoalescing.cs:3:9:3:10 | exit M1 (normal) | NullCoalescing.cs:3:23:3:28 | ... ?? ... | @@ -6195,31 +6332,32 @@ postDominance | NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:19:17:19 | access to parameter i | | NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:13:17:19 | (...) ... | | NullCoalescing.cs:17:19:17:19 | access to parameter i | NullCoalescing.cs:17:9:17:25 | ...; | -| PartialImplementationA.cs:3:12:3:18 | call to constructor Object | PartialImplementationA.cs:3:12:3:18 | enter Partial | +| PartialImplementationA.cs:1:15:1:21 | exit | PartialImplementationA.cs:1:15:1:21 | exit (normal) | +| PartialImplementationA.cs:1:15:1:21 | exit (normal) | PartialImplementationB.cs:5:32:5:34 | ... = ... | +| PartialImplementationA.cs:3:12:3:18 | call to constructor Object | PartialImplementationA.cs:3:12:3:18 | call to method | +| PartialImplementationA.cs:3:12:3:18 | call to method | PartialImplementationA.cs:3:12:3:18 | this access | | PartialImplementationA.cs:3:12:3:18 | exit Partial | PartialImplementationA.cs:3:12:3:18 | exit Partial (normal) | | PartialImplementationA.cs:3:12:3:18 | exit Partial (normal) | PartialImplementationA.cs:3:27:3:29 | {...} | -| PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationB.cs:5:32:5:34 | ... = ... | -| PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | -| PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | +| PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | enter Partial | +| PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | +| PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationA.cs:1:15:1:21 | enter | | PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationB.cs:3:20:3:20 | 0 | -| PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationB.cs:3:20:3:20 | 0 | -| PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationB.cs:3:16:3:16 | this access | | PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationB.cs:3:16:3:16 | this access | -| PartialImplementationB.cs:4:12:4:18 | call to constructor Object | PartialImplementationB.cs:4:12:4:18 | enter Partial | +| PartialImplementationB.cs:4:12:4:18 | call to constructor Object | PartialImplementationB.cs:4:12:4:18 | call to method | +| PartialImplementationB.cs:4:12:4:18 | call to method | PartialImplementationB.cs:4:12:4:18 | this access | | PartialImplementationB.cs:4:12:4:18 | exit Partial | PartialImplementationB.cs:4:12:4:18 | exit Partial (normal) | | PartialImplementationB.cs:4:12:4:18 | exit Partial (normal) | PartialImplementationB.cs:4:22:4:24 | {...} | -| PartialImplementationB.cs:4:22:4:24 | {...} | PartialImplementationB.cs:5:32:5:34 | ... = ... | +| PartialImplementationB.cs:4:12:4:18 | this access | PartialImplementationB.cs:4:12:4:18 | enter Partial | +| PartialImplementationB.cs:4:22:4:24 | {...} | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | | PartialImplementationB.cs:5:16:5:16 | access to property P | PartialImplementationB.cs:5:34:5:34 | 0 | -| PartialImplementationB.cs:5:16:5:16 | access to property P | PartialImplementationB.cs:5:34:5:34 | 0 | -| PartialImplementationB.cs:5:16:5:16 | this access | PartialImplementationB.cs:3:16:3:20 | ... = ... | | PartialImplementationB.cs:5:16:5:16 | this access | PartialImplementationB.cs:3:16:3:20 | ... = ... | | PartialImplementationB.cs:5:32:5:34 | ... = ... | PartialImplementationB.cs:5:16:5:16 | access to property P | -| PartialImplementationB.cs:5:32:5:34 | ... = ... | PartialImplementationB.cs:5:16:5:16 | access to property P | -| PartialImplementationB.cs:5:34:5:34 | 0 | PartialImplementationB.cs:5:16:5:16 | this access | | PartialImplementationB.cs:5:34:5:34 | 0 | PartialImplementationB.cs:5:16:5:16 | this access | -| Patterns.cs:3:7:3:14 | call to constructor Object | Patterns.cs:3:7:3:14 | enter Patterns | +| Patterns.cs:3:7:3:14 | call to constructor Object | Patterns.cs:3:7:3:14 | call to method | +| Patterns.cs:3:7:3:14 | call to method | Patterns.cs:3:7:3:14 | this access | | Patterns.cs:3:7:3:14 | exit Patterns | Patterns.cs:3:7:3:14 | exit Patterns (normal) | | Patterns.cs:3:7:3:14 | exit Patterns (normal) | Patterns.cs:3:7:3:14 | {...} | +| Patterns.cs:3:7:3:14 | this access | Patterns.cs:3:7:3:14 | enter Patterns | | Patterns.cs:3:7:3:14 | {...} | Patterns.cs:3:7:3:14 | call to constructor Object | | Patterns.cs:5:10:5:11 | exit M1 | Patterns.cs:5:10:5:11 | exit M1 (normal) | | Patterns.cs:5:10:5:11 | exit M1 (normal) | Patterns.cs:40:17:40:17 | access to local variable o | @@ -6404,9 +6542,11 @@ postDominance | Patterns.cs:97:13:97:38 | call to method WriteLine | Patterns.cs:97:31:97:37 | "not C" | | Patterns.cs:97:13:97:39 | ...; | Patterns.cs:96:9:98:9 | {...} | | Patterns.cs:97:31:97:37 | "not C" | Patterns.cs:97:13:97:39 | ...; | -| PostDominance.cs:3:7:3:19 | call to constructor Object | PostDominance.cs:3:7:3:19 | enter PostDominance | +| PostDominance.cs:3:7:3:19 | call to constructor Object | PostDominance.cs:3:7:3:19 | call to method | +| PostDominance.cs:3:7:3:19 | call to method | PostDominance.cs:3:7:3:19 | this access | | PostDominance.cs:3:7:3:19 | exit PostDominance | PostDominance.cs:3:7:3:19 | exit PostDominance (normal) | | PostDominance.cs:3:7:3:19 | exit PostDominance (normal) | PostDominance.cs:3:7:3:19 | {...} | +| PostDominance.cs:3:7:3:19 | this access | PostDominance.cs:3:7:3:19 | enter PostDominance | | PostDominance.cs:3:7:3:19 | {...} | PostDominance.cs:3:7:3:19 | call to constructor Object | | PostDominance.cs:5:10:5:11 | exit M1 | PostDominance.cs:5:10:5:11 | exit M1 (normal) | | PostDominance.cs:5:10:5:11 | exit M1 (normal) | PostDominance.cs:7:9:7:28 | call to method WriteLine | @@ -6437,9 +6577,11 @@ postDominance | PostDominance.cs:21:9:21:28 | call to method WriteLine | PostDominance.cs:21:27:21:27 | access to parameter s | | PostDominance.cs:21:9:21:29 | ...; | PostDominance.cs:19:13:19:21 | [false] ... is ... | | PostDominance.cs:21:27:21:27 | access to parameter s | PostDominance.cs:21:9:21:29 | ...; | -| Qualifiers.cs:1:7:1:16 | call to constructor Object | Qualifiers.cs:1:7:1:16 | enter Qualifiers | +| Qualifiers.cs:1:7:1:16 | call to constructor Object | Qualifiers.cs:1:7:1:16 | call to method | +| Qualifiers.cs:1:7:1:16 | call to method | Qualifiers.cs:1:7:1:16 | this access | | Qualifiers.cs:1:7:1:16 | exit Qualifiers | Qualifiers.cs:1:7:1:16 | exit Qualifiers (normal) | | Qualifiers.cs:1:7:1:16 | exit Qualifiers (normal) | Qualifiers.cs:1:7:1:16 | {...} | +| Qualifiers.cs:1:7:1:16 | this access | Qualifiers.cs:1:7:1:16 | enter Qualifiers | | Qualifiers.cs:1:7:1:16 | {...} | Qualifiers.cs:1:7:1:16 | call to constructor Object | | Qualifiers.cs:7:16:7:21 | exit Method | Qualifiers.cs:7:16:7:21 | exit Method (normal) | | Qualifiers.cs:7:16:7:21 | exit Method (normal) | Qualifiers.cs:7:28:7:31 | null | @@ -6504,9 +6646,11 @@ postDominance | Qualifiers.cs:30:9:30:47 | ...; | Qualifiers.cs:29:9:29:46 | ... = ... | | Qualifiers.cs:30:13:30:37 | call to method StaticMethod | Qualifiers.cs:30:9:30:47 | ...; | | Qualifiers.cs:30:13:30:46 | call to method Method | Qualifiers.cs:30:13:30:37 | call to method StaticMethod | -| Switch.cs:3:7:3:12 | call to constructor Object | Switch.cs:3:7:3:12 | enter Switch | +| Switch.cs:3:7:3:12 | call to constructor Object | Switch.cs:3:7:3:12 | call to method | +| Switch.cs:3:7:3:12 | call to method | Switch.cs:3:7:3:12 | this access | | Switch.cs:3:7:3:12 | exit Switch | Switch.cs:3:7:3:12 | exit Switch (normal) | | Switch.cs:3:7:3:12 | exit Switch (normal) | Switch.cs:3:7:3:12 | {...} | +| Switch.cs:3:7:3:12 | this access | Switch.cs:3:7:3:12 | enter Switch | | Switch.cs:3:7:3:12 | {...} | Switch.cs:3:7:3:12 | call to constructor Object | | Switch.cs:5:10:5:11 | exit M1 | Switch.cs:5:10:5:11 | exit M1 (normal) | | Switch.cs:5:10:5:11 | exit M1 (normal) | Switch.cs:7:17:7:17 | access to parameter o | @@ -6756,9 +6900,11 @@ postDominance | Switch.cs:175:17:175:48 | ...; | Switch.cs:174:13:174:20 | default: | | Switch.cs:175:42:175:46 | "def" | Switch.cs:175:17:175:48 | ...; | | Switch.cs:176:17:176:22 | break; | Switch.cs:175:17:175:47 | call to method WriteLine | -| TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | +| TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | call to method | +| TypeAccesses.cs:1:7:1:18 | call to method | TypeAccesses.cs:1:7:1:18 | this access | | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses (normal) | | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses (normal) | TypeAccesses.cs:1:7:1:18 | {...} | +| TypeAccesses.cs:1:7:1:18 | this access | TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | | TypeAccesses.cs:1:7:1:18 | {...} | TypeAccesses.cs:1:7:1:18 | call to constructor Object | | TypeAccesses.cs:3:10:3:10 | exit M | TypeAccesses.cs:3:10:3:10 | exit M (normal) | | TypeAccesses.cs:3:10:3:10 | exit M (normal) | TypeAccesses.cs:8:13:8:27 | Type t = ... | @@ -6779,9 +6925,11 @@ postDominance | TypeAccesses.cs:8:9:8:28 | ... ...; | TypeAccesses.cs:7:25:7:25 | ; | | TypeAccesses.cs:8:13:8:27 | Type t = ... | TypeAccesses.cs:8:17:8:27 | typeof(...) | | TypeAccesses.cs:8:17:8:27 | typeof(...) | TypeAccesses.cs:8:9:8:28 | ... ...; | -| VarDecls.cs:3:7:3:14 | call to constructor Object | VarDecls.cs:3:7:3:14 | enter VarDecls | +| VarDecls.cs:3:7:3:14 | call to constructor Object | VarDecls.cs:3:7:3:14 | call to method | +| VarDecls.cs:3:7:3:14 | call to method | VarDecls.cs:3:7:3:14 | this access | | VarDecls.cs:3:7:3:14 | exit VarDecls | VarDecls.cs:3:7:3:14 | exit VarDecls (normal) | | VarDecls.cs:3:7:3:14 | exit VarDecls (normal) | VarDecls.cs:3:7:3:14 | {...} | +| VarDecls.cs:3:7:3:14 | this access | VarDecls.cs:3:7:3:14 | enter VarDecls | | VarDecls.cs:3:7:3:14 | {...} | VarDecls.cs:3:7:3:14 | call to constructor Object | | VarDecls.cs:5:18:5:19 | exit M1 | VarDecls.cs:5:18:5:19 | exit M1 (normal) | | VarDecls.cs:5:18:5:19 | exit M1 (normal) | VarDecls.cs:9:13:9:29 | return ...; | @@ -6828,9 +6976,11 @@ postDominance | VarDecls.cs:25:20:25:20 | access to parameter b | VarDecls.cs:24:31:24:41 | C y = ... | | VarDecls.cs:25:20:25:28 | ... ? ... : ... | VarDecls.cs:25:24:25:24 | access to local variable x | | VarDecls.cs:25:20:25:28 | ... ? ... : ... | VarDecls.cs:25:28:25:28 | access to local variable y | -| VarDecls.cs:28:11:28:11 | call to constructor Object | VarDecls.cs:28:11:28:11 | enter C | +| VarDecls.cs:28:11:28:11 | call to constructor Object | VarDecls.cs:28:11:28:11 | call to method | +| VarDecls.cs:28:11:28:11 | call to method | VarDecls.cs:28:11:28:11 | this access | | VarDecls.cs:28:11:28:11 | exit C | VarDecls.cs:28:11:28:11 | exit C (normal) | | VarDecls.cs:28:11:28:11 | exit C (normal) | VarDecls.cs:28:11:28:11 | {...} | +| VarDecls.cs:28:11:28:11 | this access | VarDecls.cs:28:11:28:11 | enter C | | VarDecls.cs:28:11:28:11 | {...} | VarDecls.cs:28:11:28:11 | call to constructor Object | | VarDecls.cs:28:41:28:47 | exit Dispose | VarDecls.cs:28:41:28:47 | exit Dispose (normal) | | VarDecls.cs:28:41:28:47 | exit Dispose (normal) | VarDecls.cs:28:51:28:53 | {...} | @@ -7087,9 +7237,11 @@ postDominance | cflow.cs:127:68:127:80 | ... = ... | cflow.cs:127:76:127:80 | access to parameter value | | cflow.cs:127:68:127:81 | ...; | cflow.cs:127:66:127:83 | {...} | | cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:68:127:72 | this access | -| cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:129:5:129:15 | enter ControlFlow | +| cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:129:5:129:15 | call to method | +| cflow.cs:129:5:129:15 | call to method | cflow.cs:129:5:129:15 | this access | | cflow.cs:129:5:129:15 | exit ControlFlow | cflow.cs:129:5:129:15 | exit ControlFlow (normal) | | cflow.cs:129:5:129:15 | exit ControlFlow (normal) | cflow.cs:131:9:131:17 | ... = ... | +| cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | enter ControlFlow | | cflow.cs:130:5:132:5 | {...} | cflow.cs:129:5:129:15 | call to constructor Object | | cflow.cs:131:9:131:13 | this access | cflow.cs:131:9:131:18 | ...; | | cflow.cs:131:9:131:17 | ... = ... | cflow.cs:131:17:131:17 | access to parameter s | @@ -7421,9 +7573,11 @@ postDominance | cflow.cs:275:13:275:41 | call to method WriteLine | cflow.cs:275:31:275:40 | "not dead" | | cflow.cs:275:13:275:42 | ...; | cflow.cs:274:9:276:9 | {...} | | cflow.cs:275:31:275:40 | "not dead" | cflow.cs:275:13:275:42 | ...; | +| cflow.cs:282:5:282:18 | call to method | cflow.cs:282:5:282:18 | this access | | cflow.cs:282:5:282:18 | exit ControlFlowSub | cflow.cs:282:5:282:18 | exit ControlFlowSub (normal) | | cflow.cs:282:5:282:18 | exit ControlFlowSub (normal) | cflow.cs:282:31:282:33 | {...} | -| cflow.cs:282:24:282:27 | call to constructor ControlFlow | cflow.cs:282:5:282:18 | enter ControlFlowSub | +| cflow.cs:282:5:282:18 | this access | cflow.cs:282:5:282:18 | enter ControlFlowSub | +| cflow.cs:282:24:282:27 | call to constructor ControlFlow | cflow.cs:282:5:282:18 | call to method | | cflow.cs:282:31:282:33 | {...} | cflow.cs:282:24:282:27 | call to constructor ControlFlow | | cflow.cs:284:5:284:18 | exit ControlFlowSub | cflow.cs:284:5:284:18 | exit ControlFlowSub (normal) | | cflow.cs:284:5:284:18 | exit ControlFlowSub (normal) | cflow.cs:284:39:284:41 | {...} | @@ -7435,18 +7589,22 @@ postDominance | cflow.cs:286:34:286:34 | access to parameter i | cflow.cs:286:5:286:18 | enter ControlFlowSub | | cflow.cs:286:34:286:45 | call to method ToString | cflow.cs:286:34:286:34 | access to parameter i | | cflow.cs:286:48:286:50 | {...} | cflow.cs:286:29:286:32 | call to constructor ControlFlowSub | -| cflow.cs:289:7:289:18 | call to constructor Object | cflow.cs:289:7:289:18 | enter DelegateCall | +| cflow.cs:289:7:289:18 | call to constructor Object | cflow.cs:289:7:289:18 | call to method | +| cflow.cs:289:7:289:18 | call to method | cflow.cs:289:7:289:18 | this access | | cflow.cs:289:7:289:18 | exit DelegateCall | cflow.cs:289:7:289:18 | exit DelegateCall (normal) | | cflow.cs:289:7:289:18 | exit DelegateCall (normal) | cflow.cs:289:7:289:18 | {...} | +| cflow.cs:289:7:289:18 | this access | cflow.cs:289:7:289:18 | enter DelegateCall | | cflow.cs:289:7:289:18 | {...} | cflow.cs:289:7:289:18 | call to constructor Object | | cflow.cs:291:12:291:12 | exit M | cflow.cs:291:12:291:12 | exit M (normal) | | cflow.cs:291:12:291:12 | exit M (normal) | cflow.cs:291:38:291:41 | delegate call | | cflow.cs:291:38:291:38 | access to parameter f | cflow.cs:291:12:291:12 | enter M | | cflow.cs:291:38:291:41 | delegate call | cflow.cs:291:40:291:40 | 0 | | cflow.cs:291:40:291:40 | 0 | cflow.cs:291:38:291:38 | access to parameter f | -| cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:5:296:25 | enter NegationInConstructor | +| cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:5:296:25 | call to method | +| cflow.cs:296:5:296:25 | call to method | cflow.cs:296:5:296:25 | this access | | cflow.cs:296:5:296:25 | exit NegationInConstructor | cflow.cs:296:5:296:25 | exit NegationInConstructor (normal) | | cflow.cs:296:5:296:25 | exit NegationInConstructor (normal) | cflow.cs:296:52:296:54 | {...} | +| cflow.cs:296:5:296:25 | this access | cflow.cs:296:5:296:25 | enter NegationInConstructor | | cflow.cs:296:52:296:54 | {...} | cflow.cs:296:5:296:25 | call to constructor Object | | cflow.cs:298:10:298:10 | exit M | cflow.cs:298:10:298:10 | exit M (normal) | | cflow.cs:298:10:298:10 | exit M (normal) | cflow.cs:300:9:300:72 | object creation of type NegationInConstructor | @@ -7463,9 +7621,11 @@ postDominance | cflow.cs:300:56:300:64 | ... != ... | cflow.cs:300:61:300:64 | null | | cflow.cs:300:61:300:64 | null | cflow.cs:300:56:300:56 | access to parameter s | | cflow.cs:300:70:300:71 | "" | cflow.cs:300:44:300:64 | ... && ... | -| cflow.cs:304:7:304:18 | call to constructor Object | cflow.cs:304:7:304:18 | enter LambdaGetter | +| cflow.cs:304:7:304:18 | call to constructor Object | cflow.cs:304:7:304:18 | call to method | +| cflow.cs:304:7:304:18 | call to method | cflow.cs:304:7:304:18 | this access | | cflow.cs:304:7:304:18 | exit LambdaGetter | cflow.cs:304:7:304:18 | exit LambdaGetter (normal) | | cflow.cs:304:7:304:18 | exit LambdaGetter (normal) | cflow.cs:304:7:304:18 | {...} | +| cflow.cs:304:7:304:18 | this access | cflow.cs:304:7:304:18 | enter LambdaGetter | | cflow.cs:304:7:304:18 | {...} | cflow.cs:304:7:304:18 | call to constructor Object | | cflow.cs:306:60:310:5 | (...) => ... | cflow.cs:306:60:310:5 | enter get__getter | | cflow.cs:306:60:310:5 | exit (...) => ... | cflow.cs:306:60:310:5 | exit (...) => ... (normal) | @@ -9459,12 +9619,15 @@ blockDominance | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | Foreach.cs:38:26:38:26 | String x | | Foreach.cs:38:26:38:26 | String x | Foreach.cs:38:26:38:26 | String x | +| Initializers.cs:3:7:3:18 | enter | Initializers.cs:3:7:3:18 | enter | | Initializers.cs:3:7:3:18 | enter Initializers | Initializers.cs:3:7:3:18 | enter Initializers | | Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | enter Initializers | | Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | enter Initializers | | Initializers.cs:12:10:12:10 | enter M | Initializers.cs:12:10:12:10 | enter M | | Initializers.cs:18:16:18:16 | enter H | Initializers.cs:18:16:18:16 | enter H | +| Initializers.cs:20:11:20:23 | enter | Initializers.cs:20:11:20:23 | enter | | Initializers.cs:20:11:20:23 | enter NoConstructor | Initializers.cs:20:11:20:23 | enter NoConstructor | +| Initializers.cs:26:11:26:13 | enter | Initializers.cs:26:11:26:13 | enter | | Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | enter Sub | | Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:9:33:11 | enter Sub | | Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | enter Sub | @@ -9619,12 +9782,12 @@ blockDominance | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:97:22:97:22 | String x | | LoopUnrolling.cs:97:22:97:22 | String x | LoopUnrolling.cs:97:22:97:22 | String x | -| MultiImplementationA.cs:4:7:4:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | -| MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | | MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationA.cs:4:7:4:8 | enter C1 | | MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | -| MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | +| MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationA.cs:4:7:4:8 | this access | +| MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationB.cs:1:7:1:8 | this access | | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | +| MultiImplementationA.cs:4:7:4:8 | this access | MultiImplementationA.cs:4:7:4:8 | this access | | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | MultiImplementationA.cs:6:22:6:31 | exit get_P1 | | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | MultiImplementationA.cs:6:28:6:31 | null | @@ -9649,6 +9812,12 @@ blockDominance | MultiImplementationA.cs:8:16:8:16 | enter M | MultiImplementationB.cs:5:23:5:23 | 2 | | MultiImplementationA.cs:8:16:8:16 | exit M | MultiImplementationA.cs:8:16:8:16 | exit M | | MultiImplementationA.cs:8:29:8:32 | null | MultiImplementationA.cs:8:29:8:32 | null | +| MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationA.cs:11:7:11:8 | enter | +| MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationA.cs:11:7:11:8 | exit (normal) | +| MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationA.cs:13:16:13:16 | this access | +| MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationB.cs:11:16:11:16 | this access | +| MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationA.cs:11:7:11:8 | exit (normal) | +| MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:13:16:13:16 | this access | | MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | access to parameter i | | MultiImplementationA.cs:14:31:14:31 | enter get_Item | MultiImplementationA.cs:14:31:14:31 | access to parameter i | | MultiImplementationA.cs:14:31:14:31 | enter get_Item | MultiImplementationA.cs:14:31:14:31 | enter get_Item | @@ -9674,12 +9843,12 @@ blockDominance | MultiImplementationA.cs:16:17:16:18 | exit M1 (normal) | MultiImplementationA.cs:16:17:16:18 | exit M1 (normal) | | MultiImplementationA.cs:17:5:19:5 | {...} | MultiImplementationA.cs:17:5:19:5 | {...} | | MultiImplementationA.cs:18:9:18:22 | enter M2 | MultiImplementationA.cs:18:9:18:22 | enter M2 | -| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | -| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | | MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | enter C2 | | MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | exit C2 | -| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | +| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | this access | +| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | this access | | MultiImplementationA.cs:20:12:20:13 | exit C2 | MultiImplementationA.cs:20:12:20:13 | exit C2 | +| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | this access | | MultiImplementationA.cs:21:12:21:13 | enter C2 | MultiImplementationA.cs:21:12:21:13 | enter C2 | | MultiImplementationA.cs:21:12:21:13 | enter C2 | MultiImplementationA.cs:21:12:21:13 | exit C2 (normal) | | MultiImplementationA.cs:21:12:21:13 | enter C2 | MultiImplementationA.cs:21:24:21:24 | 0 | @@ -9698,19 +9867,19 @@ blockDominance | MultiImplementationA.cs:23:28:23:35 | enter implicit conversion | MultiImplementationB.cs:21:56:21:59 | null | | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion | | MultiImplementationA.cs:23:50:23:53 | null | MultiImplementationA.cs:23:50:23:53 | null | -| MultiImplementationA.cs:28:7:28:8 | call to constructor Object | MultiImplementationA.cs:28:7:28:8 | call to constructor Object | -| MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationA.cs:28:7:28:8 | call to constructor Object | | MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationA.cs:28:7:28:8 | enter C3 | | MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | -| MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | +| MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationA.cs:28:7:28:8 | this access | +| MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationB.cs:25:7:25:8 | this access | | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | +| MultiImplementationA.cs:28:7:28:8 | this access | MultiImplementationA.cs:28:7:28:8 | this access | | MultiImplementationA.cs:30:21:30:23 | enter get_P3 | MultiImplementationA.cs:30:21:30:23 | enter get_P3 | -| MultiImplementationA.cs:34:15:34:16 | call to constructor Object | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | -| MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | | MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationA.cs:34:15:34:16 | enter C4 | | MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | -| MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | +| MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationA.cs:34:15:34:16 | this access | +| MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationB.cs:30:15:30:16 | this access | | MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | +| MultiImplementationA.cs:34:15:34:16 | this access | MultiImplementationA.cs:34:15:34:16 | this access | | MultiImplementationA.cs:36:9:36:10 | enter M1 | MultiImplementationA.cs:36:9:36:10 | enter M1 | | MultiImplementationA.cs:36:9:36:10 | enter M1 | MultiImplementationA.cs:36:9:36:10 | exit M1 | | MultiImplementationA.cs:36:9:36:10 | enter M1 | MultiImplementationA.cs:36:14:36:28 | {...} | @@ -9718,22 +9887,23 @@ blockDominance | MultiImplementationA.cs:36:9:36:10 | exit M1 | MultiImplementationA.cs:36:9:36:10 | exit M1 | | MultiImplementationA.cs:36:14:36:28 | {...} | MultiImplementationA.cs:36:14:36:28 | {...} | | MultiImplementationA.cs:37:9:37:10 | enter M2 | MultiImplementationA.cs:37:9:37:10 | enter M2 | -| MultiImplementationB.cs:1:7:1:8 | call to constructor Object | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | +| MultiImplementationB.cs:1:7:1:8 | this access | MultiImplementationB.cs:1:7:1:8 | this access | | MultiImplementationB.cs:3:22:3:22 | 0 | MultiImplementationB.cs:3:22:3:22 | 0 | | MultiImplementationB.cs:4:25:4:37 | {...} | MultiImplementationB.cs:4:25:4:37 | {...} | | MultiImplementationB.cs:4:43:4:45 | {...} | MultiImplementationB.cs:4:43:4:45 | {...} | | MultiImplementationB.cs:5:23:5:23 | 2 | MultiImplementationB.cs:5:23:5:23 | 2 | +| MultiImplementationB.cs:11:16:11:16 | this access | MultiImplementationB.cs:11:16:11:16 | this access | | MultiImplementationB.cs:12:37:12:40 | null | MultiImplementationB.cs:12:37:12:40 | null | | MultiImplementationB.cs:13:40:13:54 | {...} | MultiImplementationB.cs:13:40:13:54 | {...} | | MultiImplementationB.cs:13:60:13:62 | {...} | MultiImplementationB.cs:13:60:13:62 | {...} | | MultiImplementationB.cs:15:5:17:5 | {...} | MultiImplementationB.cs:15:5:17:5 | {...} | | MultiImplementationB.cs:16:9:16:31 | enter M2 | MultiImplementationB.cs:16:9:16:31 | enter M2 | -| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | +| MultiImplementationB.cs:18:12:18:13 | this access | MultiImplementationB.cs:18:12:18:13 | this access | | MultiImplementationB.cs:19:24:19:24 | 1 | MultiImplementationB.cs:19:24:19:24 | 1 | | MultiImplementationB.cs:20:11:20:25 | {...} | MultiImplementationB.cs:20:11:20:25 | {...} | | MultiImplementationB.cs:21:56:21:59 | null | MultiImplementationB.cs:21:56:21:59 | null | -| MultiImplementationB.cs:25:7:25:8 | call to constructor Object | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | -| MultiImplementationB.cs:30:15:30:16 | call to constructor Object | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | +| MultiImplementationB.cs:25:7:25:8 | this access | MultiImplementationB.cs:25:7:25:8 | this access | +| MultiImplementationB.cs:30:15:30:16 | this access | MultiImplementationB.cs:30:15:30:16 | this access | | MultiImplementationB.cs:32:17:32:17 | 0 | MultiImplementationB.cs:32:17:32:17 | 0 | | NullCoalescing.cs:1:7:1:20 | enter NullCoalescing | NullCoalescing.cs:1:7:1:20 | enter NullCoalescing | | NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:9:3:10 | enter M1 | @@ -9820,6 +9990,7 @@ blockDominance | NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:16:17:16:25 | ... ?? ... | | NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:17:13:17:24 | ... ?? ... | | NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:13:17:24 | ... ?? ... | +| PartialImplementationA.cs:1:15:1:21 | enter | PartialImplementationA.cs:1:15:1:21 | enter | | PartialImplementationA.cs:3:12:3:18 | enter Partial | PartialImplementationA.cs:3:12:3:18 | enter Partial | | PartialImplementationB.cs:4:12:4:18 | enter Partial | PartialImplementationB.cs:4:12:4:18 | enter Partial | | Patterns.cs:3:7:3:14 | enter Patterns | Patterns.cs:3:7:3:14 | enter Patterns | @@ -13132,12 +13303,15 @@ postBlockDominance | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | Foreach.cs:38:26:38:26 | String x | | Foreach.cs:38:26:38:26 | String x | Foreach.cs:38:26:38:26 | String x | +| Initializers.cs:3:7:3:18 | enter | Initializers.cs:3:7:3:18 | enter | | Initializers.cs:3:7:3:18 | enter Initializers | Initializers.cs:3:7:3:18 | enter Initializers | | Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | enter Initializers | | Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | enter Initializers | | Initializers.cs:12:10:12:10 | enter M | Initializers.cs:12:10:12:10 | enter M | | Initializers.cs:18:16:18:16 | enter H | Initializers.cs:18:16:18:16 | enter H | +| Initializers.cs:20:11:20:23 | enter | Initializers.cs:20:11:20:23 | enter | | Initializers.cs:20:11:20:23 | enter NoConstructor | Initializers.cs:20:11:20:23 | enter NoConstructor | +| Initializers.cs:26:11:26:13 | enter | Initializers.cs:26:11:26:13 | enter | | Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | enter Sub | | Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:9:33:11 | enter Sub | | Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | enter Sub | @@ -13282,12 +13456,12 @@ postBlockDominance | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:97:22:97:22 | String x | | LoopUnrolling.cs:97:22:97:22 | String x | LoopUnrolling.cs:97:22:97:22 | String x | -| MultiImplementationA.cs:4:7:4:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | | MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationA.cs:4:7:4:8 | enter C1 | -| MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | MultiImplementationA.cs:4:7:4:8 | enter C1 | | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | -| MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | +| MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | MultiImplementationA.cs:4:7:4:8 | this access | +| MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | MultiImplementationB.cs:1:7:1:8 | this access | +| MultiImplementationA.cs:4:7:4:8 | this access | MultiImplementationA.cs:4:7:4:8 | this access | | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | | MultiImplementationA.cs:6:22:6:31 | exit get_P1 | MultiImplementationA.cs:6:22:6:31 | exit get_P1 | | MultiImplementationA.cs:6:28:6:31 | null | MultiImplementationA.cs:6:28:6:31 | null | @@ -13300,6 +13474,12 @@ postBlockDominance | MultiImplementationA.cs:8:16:8:16 | enter M | MultiImplementationA.cs:8:16:8:16 | enter M | | MultiImplementationA.cs:8:16:8:16 | exit M | MultiImplementationA.cs:8:16:8:16 | exit M | | MultiImplementationA.cs:8:29:8:32 | null | MultiImplementationA.cs:8:29:8:32 | null | +| MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationA.cs:11:7:11:8 | enter | +| MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationA.cs:11:7:11:8 | enter | +| MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationA.cs:11:7:11:8 | exit (normal) | +| MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationA.cs:13:16:13:16 | this access | +| MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationB.cs:11:16:11:16 | this access | +| MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:13:16:13:16 | this access | | MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | access to parameter i | | MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | enter get_Item | | MultiImplementationA.cs:14:31:14:31 | enter get_Item | MultiImplementationA.cs:14:31:14:31 | enter get_Item | @@ -13321,10 +13501,10 @@ postBlockDominance | MultiImplementationA.cs:16:17:16:18 | exit M1 (normal) | MultiImplementationB.cs:15:5:17:5 | {...} | | MultiImplementationA.cs:17:5:19:5 | {...} | MultiImplementationA.cs:17:5:19:5 | {...} | | MultiImplementationA.cs:18:9:18:22 | enter M2 | MultiImplementationA.cs:18:9:18:22 | enter M2 | -| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | -| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | enter C2 | | MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | enter C2 | | MultiImplementationA.cs:20:12:20:13 | exit C2 | MultiImplementationA.cs:20:12:20:13 | exit C2 | +| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | enter C2 | +| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | this access | | MultiImplementationA.cs:21:12:21:13 | enter C2 | MultiImplementationA.cs:21:12:21:13 | enter C2 | | MultiImplementationA.cs:21:12:21:13 | exit C2 (normal) | MultiImplementationA.cs:21:12:21:13 | enter C2 | | MultiImplementationA.cs:21:12:21:13 | exit C2 (normal) | MultiImplementationA.cs:21:12:21:13 | exit C2 (normal) | @@ -13339,24 +13519,24 @@ postBlockDominance | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion | | MultiImplementationA.cs:23:50:23:53 | null | MultiImplementationA.cs:23:28:23:35 | enter implicit conversion | | MultiImplementationA.cs:23:50:23:53 | null | MultiImplementationA.cs:23:50:23:53 | null | -| MultiImplementationA.cs:28:7:28:8 | call to constructor Object | MultiImplementationA.cs:28:7:28:8 | call to constructor Object | | MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationA.cs:28:7:28:8 | enter C3 | -| MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | MultiImplementationA.cs:28:7:28:8 | call to constructor Object | | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | MultiImplementationA.cs:28:7:28:8 | enter C3 | | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | -| MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | +| MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | MultiImplementationA.cs:28:7:28:8 | this access | +| MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | MultiImplementationB.cs:25:7:25:8 | this access | +| MultiImplementationA.cs:28:7:28:8 | this access | MultiImplementationA.cs:28:7:28:8 | this access | | MultiImplementationA.cs:30:21:30:23 | enter get_P3 | MultiImplementationA.cs:30:21:30:23 | enter get_P3 | -| MultiImplementationA.cs:34:15:34:16 | call to constructor Object | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | | MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationA.cs:34:15:34:16 | enter C4 | -| MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | | MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | MultiImplementationA.cs:34:15:34:16 | enter C4 | | MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | -| MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | +| MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | MultiImplementationA.cs:34:15:34:16 | this access | +| MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | MultiImplementationB.cs:30:15:30:16 | this access | +| MultiImplementationA.cs:34:15:34:16 | this access | MultiImplementationA.cs:34:15:34:16 | this access | | MultiImplementationA.cs:36:9:36:10 | enter M1 | MultiImplementationA.cs:36:9:36:10 | enter M1 | | MultiImplementationA.cs:36:9:36:10 | exit M1 | MultiImplementationA.cs:36:9:36:10 | exit M1 | | MultiImplementationA.cs:36:14:36:28 | {...} | MultiImplementationA.cs:36:14:36:28 | {...} | | MultiImplementationA.cs:37:9:37:10 | enter M2 | MultiImplementationA.cs:37:9:37:10 | enter M2 | -| MultiImplementationB.cs:1:7:1:8 | call to constructor Object | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | +| MultiImplementationB.cs:1:7:1:8 | this access | MultiImplementationB.cs:1:7:1:8 | this access | | MultiImplementationB.cs:3:22:3:22 | 0 | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | | MultiImplementationB.cs:3:22:3:22 | 0 | MultiImplementationB.cs:3:22:3:22 | 0 | | MultiImplementationB.cs:4:25:4:37 | {...} | MultiImplementationA.cs:7:21:7:23 | enter get_P2 | @@ -13365,17 +13545,18 @@ postBlockDominance | MultiImplementationB.cs:4:43:4:45 | {...} | MultiImplementationB.cs:4:43:4:45 | {...} | | MultiImplementationB.cs:5:23:5:23 | 2 | MultiImplementationA.cs:8:16:8:16 | enter M | | MultiImplementationB.cs:5:23:5:23 | 2 | MultiImplementationB.cs:5:23:5:23 | 2 | +| MultiImplementationB.cs:11:16:11:16 | this access | MultiImplementationB.cs:11:16:11:16 | this access | | MultiImplementationB.cs:12:37:12:40 | null | MultiImplementationB.cs:12:37:12:40 | null | | MultiImplementationB.cs:13:40:13:54 | {...} | MultiImplementationB.cs:13:40:13:54 | {...} | | MultiImplementationB.cs:13:60:13:62 | {...} | MultiImplementationB.cs:13:60:13:62 | {...} | | MultiImplementationB.cs:15:5:17:5 | {...} | MultiImplementationB.cs:15:5:17:5 | {...} | | MultiImplementationB.cs:16:9:16:31 | enter M2 | MultiImplementationB.cs:16:9:16:31 | enter M2 | -| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | +| MultiImplementationB.cs:18:12:18:13 | this access | MultiImplementationB.cs:18:12:18:13 | this access | | MultiImplementationB.cs:19:24:19:24 | 1 | MultiImplementationB.cs:19:24:19:24 | 1 | | MultiImplementationB.cs:20:11:20:25 | {...} | MultiImplementationB.cs:20:11:20:25 | {...} | | MultiImplementationB.cs:21:56:21:59 | null | MultiImplementationB.cs:21:56:21:59 | null | -| MultiImplementationB.cs:25:7:25:8 | call to constructor Object | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | -| MultiImplementationB.cs:30:15:30:16 | call to constructor Object | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | +| MultiImplementationB.cs:25:7:25:8 | this access | MultiImplementationB.cs:25:7:25:8 | this access | +| MultiImplementationB.cs:30:15:30:16 | this access | MultiImplementationB.cs:30:15:30:16 | this access | | MultiImplementationB.cs:32:17:32:17 | 0 | MultiImplementationA.cs:36:9:36:10 | enter M1 | | MultiImplementationB.cs:32:17:32:17 | 0 | MultiImplementationB.cs:32:17:32:17 | 0 | | NullCoalescing.cs:1:7:1:20 | enter NullCoalescing | NullCoalescing.cs:1:7:1:20 | enter NullCoalescing | @@ -13465,6 +13646,7 @@ postBlockDominance | NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:15:31:15:31 | 0 | | NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:16:17:16:25 | ... ?? ... | | NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:13:17:24 | ... ?? ... | +| PartialImplementationA.cs:1:15:1:21 | enter | PartialImplementationA.cs:1:15:1:21 | enter | | PartialImplementationA.cs:3:12:3:18 | enter Partial | PartialImplementationA.cs:3:12:3:18 | enter Partial | | PartialImplementationB.cs:4:12:4:18 | enter Partial | PartialImplementationB.cs:4:12:4:18 | enter Partial | | Patterns.cs:3:7:3:14 | enter Patterns | Patterns.cs:3:7:3:14 | enter Patterns | diff --git a/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected b/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected index 4a4631e454d5..14dcdb56b269 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected @@ -1,8 +1,10 @@ nodeEnclosing | AccessorCalls.cs:1:7:1:19 | call to constructor Object | AccessorCalls.cs:1:7:1:19 | AccessorCalls | +| AccessorCalls.cs:1:7:1:19 | call to method | AccessorCalls.cs:1:7:1:19 | AccessorCalls | | AccessorCalls.cs:1:7:1:19 | enter AccessorCalls | AccessorCalls.cs:1:7:1:19 | AccessorCalls | | AccessorCalls.cs:1:7:1:19 | exit AccessorCalls | AccessorCalls.cs:1:7:1:19 | AccessorCalls | | AccessorCalls.cs:1:7:1:19 | exit AccessorCalls (normal) | AccessorCalls.cs:1:7:1:19 | AccessorCalls | +| AccessorCalls.cs:1:7:1:19 | this access | AccessorCalls.cs:1:7:1:19 | AccessorCalls | | AccessorCalls.cs:1:7:1:19 | {...} | AccessorCalls.cs:1:7:1:19 | AccessorCalls | | AccessorCalls.cs:5:23:5:25 | enter get_Item | AccessorCalls.cs:5:23:5:25 | get_Item | | AccessorCalls.cs:5:23:5:25 | exit get_Item | AccessorCalls.cs:5:23:5:25 | get_Item | @@ -319,9 +321,11 @@ nodeEnclosing | AccessorCalls.cs:73:78:73:81 | dynamic access to element | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:73:80:73:80 | 1 | AccessorCalls.cs:66:10:66:11 | M9 | | ArrayCreation.cs:1:7:1:19 | call to constructor Object | ArrayCreation.cs:1:7:1:19 | ArrayCreation | +| ArrayCreation.cs:1:7:1:19 | call to method | ArrayCreation.cs:1:7:1:19 | ArrayCreation | | ArrayCreation.cs:1:7:1:19 | enter ArrayCreation | ArrayCreation.cs:1:7:1:19 | ArrayCreation | | ArrayCreation.cs:1:7:1:19 | exit ArrayCreation | ArrayCreation.cs:1:7:1:19 | ArrayCreation | | ArrayCreation.cs:1:7:1:19 | exit ArrayCreation (normal) | ArrayCreation.cs:1:7:1:19 | ArrayCreation | +| ArrayCreation.cs:1:7:1:19 | this access | ArrayCreation.cs:1:7:1:19 | ArrayCreation | | ArrayCreation.cs:1:7:1:19 | {...} | ArrayCreation.cs:1:7:1:19 | ArrayCreation | | ArrayCreation.cs:3:11:3:12 | enter M1 | ArrayCreation.cs:3:11:3:12 | M1 | | ArrayCreation.cs:3:11:3:12 | exit M1 | ArrayCreation.cs:3:11:3:12 | M1 | @@ -356,9 +360,11 @@ nodeEnclosing | ArrayCreation.cs:9:45:9:45 | 2 | ArrayCreation.cs:9:12:9:13 | M4 | | ArrayCreation.cs:9:48:9:48 | 3 | ArrayCreation.cs:9:12:9:13 | M4 | | Assert.cs:5:7:5:17 | call to constructor Object | Assert.cs:5:7:5:17 | AssertTests | +| Assert.cs:5:7:5:17 | call to method | Assert.cs:5:7:5:17 | AssertTests | | Assert.cs:5:7:5:17 | enter AssertTests | Assert.cs:5:7:5:17 | AssertTests | | Assert.cs:5:7:5:17 | exit AssertTests | Assert.cs:5:7:5:17 | AssertTests | | Assert.cs:5:7:5:17 | exit AssertTests (normal) | Assert.cs:5:7:5:17 | AssertTests | +| Assert.cs:5:7:5:17 | this access | Assert.cs:5:7:5:17 | AssertTests | | Assert.cs:5:7:5:17 | {...} | Assert.cs:5:7:5:17 | AssertTests | | Assert.cs:7:10:7:11 | enter M1 | Assert.cs:7:10:7:11 | M1 | | Assert.cs:7:10:7:11 | exit M1 | Assert.cs:7:10:7:11 | M1 | @@ -777,9 +783,11 @@ nodeEnclosing | Assert.cs:140:33:140:34 | access to parameter b3 | Assert.cs:138:10:138:12 | M13 | | Assert.cs:141:9:141:15 | return ...; | Assert.cs:138:10:138:12 | M13 | | Assignments.cs:1:7:1:17 | call to constructor Object | Assignments.cs:1:7:1:17 | Assignments | +| Assignments.cs:1:7:1:17 | call to method | Assignments.cs:1:7:1:17 | Assignments | | Assignments.cs:1:7:1:17 | enter Assignments | Assignments.cs:1:7:1:17 | Assignments | | Assignments.cs:1:7:1:17 | exit Assignments | Assignments.cs:1:7:1:17 | Assignments | | Assignments.cs:1:7:1:17 | exit Assignments (normal) | Assignments.cs:1:7:1:17 | Assignments | +| Assignments.cs:1:7:1:17 | this access | Assignments.cs:1:7:1:17 | Assignments | | Assignments.cs:1:7:1:17 | {...} | Assignments.cs:1:7:1:17 | Assignments | | Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | M | | Assignments.cs:3:10:3:10 | exit M | Assignments.cs:3:10:3:10 | M | @@ -826,9 +834,11 @@ nodeEnclosing | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:17:40:17:40 | + | | Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:17:40:17:40 | + | | BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | BreakInTry | +| BreakInTry.cs:1:7:1:16 | call to method | BreakInTry.cs:1:7:1:16 | BreakInTry | | BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | BreakInTry | | BreakInTry.cs:1:7:1:16 | exit BreakInTry | BreakInTry.cs:1:7:1:16 | BreakInTry | | BreakInTry.cs:1:7:1:16 | exit BreakInTry (normal) | BreakInTry.cs:1:7:1:16 | BreakInTry | +| BreakInTry.cs:1:7:1:16 | this access | BreakInTry.cs:1:7:1:16 | BreakInTry | | BreakInTry.cs:1:7:1:16 | {...} | BreakInTry.cs:1:7:1:16 | BreakInTry | | BreakInTry.cs:3:10:3:11 | enter M1 | BreakInTry.cs:3:10:3:11 | M1 | | BreakInTry.cs:3:10:3:11 | exit M1 | BreakInTry.cs:3:10:3:11 | M1 | @@ -917,9 +927,11 @@ nodeEnclosing | BreakInTry.cs:67:28:67:31 | null | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:68:21:68:26 | break; | BreakInTry.cs:56:10:56:11 | M4 | | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | CompileTimeOperators.cs:3:7:3:26 | CompileTimeOperators | +| CompileTimeOperators.cs:3:7:3:26 | call to method | CompileTimeOperators.cs:3:7:3:26 | CompileTimeOperators | | CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | CompileTimeOperators | | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | CompileTimeOperators | | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators (normal) | CompileTimeOperators.cs:3:7:3:26 | CompileTimeOperators | +| CompileTimeOperators.cs:3:7:3:26 | this access | CompileTimeOperators.cs:3:7:3:26 | CompileTimeOperators | | CompileTimeOperators.cs:3:7:3:26 | {...} | CompileTimeOperators.cs:3:7:3:26 | CompileTimeOperators | | CompileTimeOperators.cs:5:9:5:15 | enter Default | CompileTimeOperators.cs:5:9:5:15 | Default | | CompileTimeOperators.cs:5:9:5:15 | exit Default | CompileTimeOperators.cs:5:9:5:15 | Default | @@ -946,9 +958,11 @@ nodeEnclosing | CompileTimeOperators.cs:22:9:22:25 | return ...; | CompileTimeOperators.cs:20:12:20:17 | Nameof | | CompileTimeOperators.cs:22:16:22:24 | nameof(...) | CompileTimeOperators.cs:20:12:20:17 | Nameof | | CompileTimeOperators.cs:26:7:26:22 | call to constructor Object | CompileTimeOperators.cs:26:7:26:22 | GotoInTryFinally | +| CompileTimeOperators.cs:26:7:26:22 | call to method | CompileTimeOperators.cs:26:7:26:22 | GotoInTryFinally | | CompileTimeOperators.cs:26:7:26:22 | enter GotoInTryFinally | CompileTimeOperators.cs:26:7:26:22 | GotoInTryFinally | | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally | CompileTimeOperators.cs:26:7:26:22 | GotoInTryFinally | | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally (normal) | CompileTimeOperators.cs:26:7:26:22 | GotoInTryFinally | +| CompileTimeOperators.cs:26:7:26:22 | this access | CompileTimeOperators.cs:26:7:26:22 | GotoInTryFinally | | CompileTimeOperators.cs:26:7:26:22 | {...} | CompileTimeOperators.cs:26:7:26:22 | GotoInTryFinally | | CompileTimeOperators.cs:28:10:28:10 | enter M | CompileTimeOperators.cs:28:10:28:10 | M | | CompileTimeOperators.cs:28:10:28:10 | exit M | CompileTimeOperators.cs:28:10:28:10 | M | @@ -970,9 +984,11 @@ nodeEnclosing | CompileTimeOperators.cs:40:14:40:38 | ...; | CompileTimeOperators.cs:28:10:28:10 | M | | CompileTimeOperators.cs:40:32:40:36 | "End" | CompileTimeOperators.cs:28:10:28:10 | M | | ConditionalAccess.cs:1:7:1:23 | call to constructor Object | ConditionalAccess.cs:1:7:1:23 | ConditionalAccess | +| ConditionalAccess.cs:1:7:1:23 | call to method | ConditionalAccess.cs:1:7:1:23 | ConditionalAccess | | ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | ConditionalAccess | | ConditionalAccess.cs:1:7:1:23 | exit ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | ConditionalAccess | | ConditionalAccess.cs:1:7:1:23 | exit ConditionalAccess (normal) | ConditionalAccess.cs:1:7:1:23 | ConditionalAccess | +| ConditionalAccess.cs:1:7:1:23 | this access | ConditionalAccess.cs:1:7:1:23 | ConditionalAccess | | ConditionalAccess.cs:1:7:1:23 | {...} | ConditionalAccess.cs:1:7:1:23 | ConditionalAccess | | ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:12:3:13 | M1 | | ConditionalAccess.cs:3:12:3:13 | exit M1 | ConditionalAccess.cs:3:12:3:13 | M1 | @@ -1064,9 +1080,11 @@ nodeEnclosing | ConditionalAccess.cs:41:75:41:78 | ", " | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith | | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith | | Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | Conditions | +| Conditions.cs:1:7:1:16 | call to method | Conditions.cs:1:7:1:16 | Conditions | | Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | Conditions | | Conditions.cs:1:7:1:16 | exit Conditions | Conditions.cs:1:7:1:16 | Conditions | | Conditions.cs:1:7:1:16 | exit Conditions (normal) | Conditions.cs:1:7:1:16 | Conditions | +| Conditions.cs:1:7:1:16 | this access | Conditions.cs:1:7:1:16 | Conditions | | Conditions.cs:1:7:1:16 | {...} | Conditions.cs:1:7:1:16 | Conditions | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:3:10:3:19 | exit IncrOrDecr | Conditions.cs:3:10:3:19 | IncrOrDecr | @@ -1384,9 +1402,11 @@ nodeEnclosing | Conditions.cs:149:44:149:46 | {...} | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:143:10:143:12 | M11 | | ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | ExitMethods | +| ExitMethods.cs:6:7:6:17 | call to method | ExitMethods.cs:6:7:6:17 | ExitMethods | | ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | ExitMethods | | ExitMethods.cs:6:7:6:17 | exit ExitMethods | ExitMethods.cs:6:7:6:17 | ExitMethods | | ExitMethods.cs:6:7:6:17 | exit ExitMethods (normal) | ExitMethods.cs:6:7:6:17 | ExitMethods | +| ExitMethods.cs:6:7:6:17 | this access | ExitMethods.cs:6:7:6:17 | ExitMethods | | ExitMethods.cs:6:7:6:17 | {...} | ExitMethods.cs:6:7:6:17 | ExitMethods | | ExitMethods.cs:8:10:8:11 | enter M1 | ExitMethods.cs:8:10:8:11 | M1 | | ExitMethods.cs:8:10:8:11 | exit M1 | ExitMethods.cs:8:10:8:11 | M1 | @@ -1616,9 +1636,11 @@ nodeEnclosing | Extensions.cs:25:23:25:32 | access to method Parse | Extensions.cs:20:17:20:20 | Main | | Extensions.cs:25:23:25:32 | delegate creation of type Func | Extensions.cs:20:17:20:20 | Main | | Finally.cs:3:14:3:20 | call to constructor Object | Finally.cs:3:14:3:20 | Finally | +| Finally.cs:3:14:3:20 | call to method | Finally.cs:3:14:3:20 | Finally | | Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | Finally | | Finally.cs:3:14:3:20 | exit Finally | Finally.cs:3:14:3:20 | Finally | | Finally.cs:3:14:3:20 | exit Finally (normal) | Finally.cs:3:14:3:20 | Finally | +| Finally.cs:3:14:3:20 | this access | Finally.cs:3:14:3:20 | Finally | | Finally.cs:3:14:3:20 | {...} | Finally.cs:3:14:3:20 | Finally | | Finally.cs:7:10:7:11 | enter M1 | Finally.cs:7:10:7:11 | M1 | | Finally.cs:7:10:7:11 | exit M1 | Finally.cs:7:10:7:11 | M1 | @@ -1852,19 +1874,25 @@ nodeEnclosing | Finally.cs:167:17:167:38 | ...; | Finally.cs:147:10:147:11 | M8 | | Finally.cs:167:35:167:36 | "" | Finally.cs:147:10:147:11 | M8 | | Finally.cs:172:11:172:20 | call to constructor Exception | Finally.cs:172:11:172:20 | ExceptionA | +| Finally.cs:172:11:172:20 | call to method | Finally.cs:172:11:172:20 | ExceptionA | | Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | ExceptionA | | Finally.cs:172:11:172:20 | exit ExceptionA | Finally.cs:172:11:172:20 | ExceptionA | | Finally.cs:172:11:172:20 | exit ExceptionA (normal) | Finally.cs:172:11:172:20 | ExceptionA | +| Finally.cs:172:11:172:20 | this access | Finally.cs:172:11:172:20 | ExceptionA | | Finally.cs:172:11:172:20 | {...} | Finally.cs:172:11:172:20 | ExceptionA | | Finally.cs:173:11:173:20 | call to constructor Exception | Finally.cs:173:11:173:20 | ExceptionB | +| Finally.cs:173:11:173:20 | call to method | Finally.cs:173:11:173:20 | ExceptionB | | Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | ExceptionB | | Finally.cs:173:11:173:20 | exit ExceptionB | Finally.cs:173:11:173:20 | ExceptionB | | Finally.cs:173:11:173:20 | exit ExceptionB (normal) | Finally.cs:173:11:173:20 | ExceptionB | +| Finally.cs:173:11:173:20 | this access | Finally.cs:173:11:173:20 | ExceptionB | | Finally.cs:173:11:173:20 | {...} | Finally.cs:173:11:173:20 | ExceptionB | | Finally.cs:174:11:174:20 | call to constructor Exception | Finally.cs:174:11:174:20 | ExceptionC | +| Finally.cs:174:11:174:20 | call to method | Finally.cs:174:11:174:20 | ExceptionC | | Finally.cs:174:11:174:20 | enter ExceptionC | Finally.cs:174:11:174:20 | ExceptionC | | Finally.cs:174:11:174:20 | exit ExceptionC | Finally.cs:174:11:174:20 | ExceptionC | | Finally.cs:174:11:174:20 | exit ExceptionC (normal) | Finally.cs:174:11:174:20 | ExceptionC | +| Finally.cs:174:11:174:20 | this access | Finally.cs:174:11:174:20 | ExceptionC | | Finally.cs:174:11:174:20 | {...} | Finally.cs:174:11:174:20 | ExceptionC | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:176:10:176:11 | M9 | | Finally.cs:176:10:176:11 | exit M9 | Finally.cs:176:10:176:11 | M9 | @@ -1997,9 +2025,11 @@ nodeEnclosing | Finally.cs:272:13:272:19 | ...; | Finally.cs:263:10:263:12 | M13 | | Finally.cs:272:18:272:18 | 3 | Finally.cs:263:10:263:12 | M13 | | Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | Foreach | +| Foreach.cs:4:7:4:13 | call to method | Foreach.cs:4:7:4:13 | Foreach | | Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | Foreach | | Foreach.cs:4:7:4:13 | exit Foreach | Foreach.cs:4:7:4:13 | Foreach | | Foreach.cs:4:7:4:13 | exit Foreach (normal) | Foreach.cs:4:7:4:13 | Foreach | +| Foreach.cs:4:7:4:13 | this access | Foreach.cs:4:7:4:13 | Foreach | | Foreach.cs:4:7:4:13 | {...} | Foreach.cs:4:7:4:13 | Foreach | | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | M1 | | Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:6:10:6:11 | M1 | @@ -2058,41 +2088,37 @@ nodeEnclosing | Foreach.cs:38:33:38:33 | Int32 y | Foreach.cs:36:10:36:11 | M6 | | Foreach.cs:38:39:38:42 | access to parameter args | Foreach.cs:36:10:36:11 | M6 | | Foreach.cs:39:11:39:11 | ; | Foreach.cs:36:10:36:11 | M6 | +| Initializers.cs:3:7:3:18 | enter | Initializers.cs:3:7:3:18 | | | Initializers.cs:3:7:3:18 | enter Initializers | Initializers.cs:3:7:3:18 | Initializers | +| Initializers.cs:3:7:3:18 | exit | Initializers.cs:3:7:3:18 | | +| Initializers.cs:3:7:3:18 | exit (normal) | Initializers.cs:3:7:3:18 | | | Initializers.cs:3:7:3:18 | exit Initializers | Initializers.cs:3:7:3:18 | Initializers | | Initializers.cs:3:7:3:18 | exit Initializers (normal) | Initializers.cs:3:7:3:18 | Initializers | | Initializers.cs:3:7:3:18 | {...} | Initializers.cs:3:7:3:18 | Initializers | -| Initializers.cs:5:9:5:9 | this access | Initializers.cs:8:5:8:16 | Initializers | -| Initializers.cs:5:9:5:9 | this access | Initializers.cs:10:5:10:16 | Initializers | -| Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:8:5:8:16 | Initializers | -| Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:10:5:10:16 | Initializers | -| Initializers.cs:5:13:5:13 | access to field H | Initializers.cs:8:5:8:16 | Initializers | -| Initializers.cs:5:13:5:13 | access to field H | Initializers.cs:10:5:10:16 | Initializers | -| Initializers.cs:5:13:5:17 | ... + ... | Initializers.cs:8:5:8:16 | Initializers | -| Initializers.cs:5:13:5:17 | ... + ... | Initializers.cs:10:5:10:16 | Initializers | -| Initializers.cs:5:17:5:17 | 1 | Initializers.cs:8:5:8:16 | Initializers | -| Initializers.cs:5:17:5:17 | 1 | Initializers.cs:10:5:10:16 | Initializers | -| Initializers.cs:6:9:6:9 | access to property G | Initializers.cs:8:5:8:16 | Initializers | -| Initializers.cs:6:9:6:9 | access to property G | Initializers.cs:10:5:10:16 | Initializers | -| Initializers.cs:6:9:6:9 | this access | Initializers.cs:8:5:8:16 | Initializers | -| Initializers.cs:6:9:6:9 | this access | Initializers.cs:10:5:10:16 | Initializers | -| Initializers.cs:6:25:6:31 | ... = ... | Initializers.cs:8:5:8:16 | Initializers | -| Initializers.cs:6:25:6:31 | ... = ... | Initializers.cs:10:5:10:16 | Initializers | -| Initializers.cs:6:27:6:27 | access to field H | Initializers.cs:8:5:8:16 | Initializers | -| Initializers.cs:6:27:6:27 | access to field H | Initializers.cs:10:5:10:16 | Initializers | -| Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:8:5:8:16 | Initializers | -| Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:10:5:10:16 | Initializers | -| Initializers.cs:6:31:6:31 | 2 | Initializers.cs:8:5:8:16 | Initializers | -| Initializers.cs:6:31:6:31 | 2 | Initializers.cs:10:5:10:16 | Initializers | +| Initializers.cs:5:9:5:9 | this access | Initializers.cs:3:7:3:18 | | +| Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:3:7:3:18 | | +| Initializers.cs:5:13:5:13 | access to field H | Initializers.cs:3:7:3:18 | | +| Initializers.cs:5:13:5:17 | ... + ... | Initializers.cs:3:7:3:18 | | +| Initializers.cs:5:17:5:17 | 1 | Initializers.cs:3:7:3:18 | | +| Initializers.cs:6:9:6:9 | access to property G | Initializers.cs:3:7:3:18 | | +| Initializers.cs:6:9:6:9 | this access | Initializers.cs:3:7:3:18 | | +| Initializers.cs:6:25:6:31 | ... = ... | Initializers.cs:3:7:3:18 | | +| Initializers.cs:6:27:6:27 | access to field H | Initializers.cs:3:7:3:18 | | +| Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:3:7:3:18 | | +| Initializers.cs:6:31:6:31 | 2 | Initializers.cs:3:7:3:18 | | | Initializers.cs:8:5:8:16 | call to constructor Object | Initializers.cs:8:5:8:16 | Initializers | +| Initializers.cs:8:5:8:16 | call to method | Initializers.cs:8:5:8:16 | Initializers | | Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | Initializers | | Initializers.cs:8:5:8:16 | exit Initializers | Initializers.cs:8:5:8:16 | Initializers | | Initializers.cs:8:5:8:16 | exit Initializers (normal) | Initializers.cs:8:5:8:16 | Initializers | +| Initializers.cs:8:5:8:16 | this access | Initializers.cs:8:5:8:16 | Initializers | | Initializers.cs:8:20:8:22 | {...} | Initializers.cs:8:5:8:16 | Initializers | | Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:10:5:10:16 | Initializers | +| Initializers.cs:10:5:10:16 | call to method | Initializers.cs:10:5:10:16 | Initializers | | Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | Initializers | | Initializers.cs:10:5:10:16 | exit Initializers | Initializers.cs:10:5:10:16 | Initializers | | Initializers.cs:10:5:10:16 | exit Initializers (normal) | Initializers.cs:10:5:10:16 | Initializers | +| Initializers.cs:10:5:10:16 | this access | Initializers.cs:10:5:10:16 | Initializers | | Initializers.cs:10:28:10:30 | {...} | Initializers.cs:10:5:10:16 | Initializers | | Initializers.cs:12:10:12:10 | enter M | Initializers.cs:12:10:12:10 | M | | Initializers.cs:12:10:12:10 | exit M | Initializers.cs:12:10:12:10 | M | @@ -2117,25 +2143,32 @@ nodeEnclosing | Initializers.cs:15:42:15:61 | object creation of type Initializers | Initializers.cs:12:10:12:10 | M | | Initializers.cs:15:59:15:60 | "" | Initializers.cs:12:10:12:10 | M | | Initializers.cs:20:11:20:23 | call to constructor Object | Initializers.cs:20:11:20:23 | NoConstructor | +| Initializers.cs:20:11:20:23 | call to method | Initializers.cs:20:11:20:23 | NoConstructor | +| Initializers.cs:20:11:20:23 | enter | Initializers.cs:20:11:20:23 | | | Initializers.cs:20:11:20:23 | enter NoConstructor | Initializers.cs:20:11:20:23 | NoConstructor | +| Initializers.cs:20:11:20:23 | exit | Initializers.cs:20:11:20:23 | | +| Initializers.cs:20:11:20:23 | exit (normal) | Initializers.cs:20:11:20:23 | | | Initializers.cs:20:11:20:23 | exit NoConstructor | Initializers.cs:20:11:20:23 | NoConstructor | | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | Initializers.cs:20:11:20:23 | NoConstructor | +| Initializers.cs:20:11:20:23 | this access | Initializers.cs:20:11:20:23 | NoConstructor | | Initializers.cs:20:11:20:23 | {...} | Initializers.cs:20:11:20:23 | NoConstructor | -| Initializers.cs:22:23:22:23 | this access | Initializers.cs:20:11:20:23 | NoConstructor | -| Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:20:11:20:23 | NoConstructor | -| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:20:11:20:23 | NoConstructor | -| Initializers.cs:23:23:23:23 | this access | Initializers.cs:20:11:20:23 | NoConstructor | -| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:20:11:20:23 | NoConstructor | -| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:20:11:20:23 | NoConstructor | -| Initializers.cs:28:13:28:13 | this access | Initializers.cs:31:9:31:11 | Sub | -| Initializers.cs:28:13:28:13 | this access | Initializers.cs:35:9:35:11 | Sub | -| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:31:9:31:11 | Sub | -| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:35:9:35:11 | Sub | -| Initializers.cs:28:17:28:17 | 2 | Initializers.cs:31:9:31:11 | Sub | -| Initializers.cs:28:17:28:17 | 2 | Initializers.cs:35:9:35:11 | Sub | +| Initializers.cs:22:23:22:23 | this access | Initializers.cs:20:11:20:23 | | +| Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:20:11:20:23 | | +| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:20:11:20:23 | | +| Initializers.cs:23:23:23:23 | this access | Initializers.cs:20:11:20:23 | | +| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:20:11:20:23 | | +| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:20:11:20:23 | | +| Initializers.cs:26:11:26:13 | enter | Initializers.cs:26:11:26:13 | | +| Initializers.cs:26:11:26:13 | exit | Initializers.cs:26:11:26:13 | | +| Initializers.cs:26:11:26:13 | exit (normal) | Initializers.cs:26:11:26:13 | | +| Initializers.cs:28:13:28:13 | this access | Initializers.cs:26:11:26:13 | | +| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:26:11:26:13 | | +| Initializers.cs:28:17:28:17 | 2 | Initializers.cs:26:11:26:13 | | +| Initializers.cs:31:9:31:11 | call to method | Initializers.cs:31:9:31:11 | Sub | | Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | Sub | | Initializers.cs:31:9:31:11 | exit Sub | Initializers.cs:31:9:31:11 | Sub | | Initializers.cs:31:9:31:11 | exit Sub (normal) | Initializers.cs:31:9:31:11 | Sub | +| Initializers.cs:31:9:31:11 | this access | Initializers.cs:31:9:31:11 | Sub | | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | Initializers.cs:31:9:31:11 | Sub | | Initializers.cs:31:24:31:33 | {...} | Initializers.cs:31:9:31:11 | Sub | | Initializers.cs:31:26:31:26 | this access | Initializers.cs:31:9:31:11 | Sub | @@ -2152,9 +2185,11 @@ nodeEnclosing | Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:9:33:11 | Sub | | Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:9:33:11 | Sub | | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:9:35:11 | Sub | +| Initializers.cs:35:9:35:11 | call to method | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:9:35:11 | exit Sub | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:9:35:11 | exit Sub (normal) | Initializers.cs:35:9:35:11 | Sub | +| Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:29:35:37 | ... = ... | Initializers.cs:35:9:35:11 | Sub | @@ -2163,14 +2198,18 @@ nodeEnclosing | Initializers.cs:35:33:35:37 | ... + ... | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:37:35:37 | access to parameter j | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:39:7:39:23 | call to constructor Object | Initializers.cs:39:7:39:23 | IndexInitializers | +| Initializers.cs:39:7:39:23 | call to method | Initializers.cs:39:7:39:23 | IndexInitializers | | Initializers.cs:39:7:39:23 | enter IndexInitializers | Initializers.cs:39:7:39:23 | IndexInitializers | | Initializers.cs:39:7:39:23 | exit IndexInitializers | Initializers.cs:39:7:39:23 | IndexInitializers | | Initializers.cs:39:7:39:23 | exit IndexInitializers (normal) | Initializers.cs:39:7:39:23 | IndexInitializers | +| Initializers.cs:39:7:39:23 | this access | Initializers.cs:39:7:39:23 | IndexInitializers | | Initializers.cs:39:7:39:23 | {...} | Initializers.cs:39:7:39:23 | IndexInitializers | | Initializers.cs:41:11:41:18 | call to constructor Object | Initializers.cs:41:11:41:18 | Compound | +| Initializers.cs:41:11:41:18 | call to method | Initializers.cs:41:11:41:18 | Compound | | Initializers.cs:41:11:41:18 | enter Compound | Initializers.cs:41:11:41:18 | Compound | | Initializers.cs:41:11:41:18 | exit Compound | Initializers.cs:41:11:41:18 | Compound | | Initializers.cs:41:11:41:18 | exit Compound (normal) | Initializers.cs:41:11:41:18 | Compound | +| Initializers.cs:41:11:41:18 | this access | Initializers.cs:41:11:41:18 | Compound | | Initializers.cs:41:11:41:18 | {...} | Initializers.cs:41:11:41:18 | Compound | | Initializers.cs:51:10:51:13 | enter Test | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:51:10:51:13 | exit Test | Initializers.cs:51:10:51:13 | Test | @@ -2278,9 +2317,11 @@ nodeEnclosing | Initializers.cs:64:54:64:54 | 0 | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:64:59:64:61 | "1" | Initializers.cs:51:10:51:13 | Test | | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | LoopUnrolling.cs:5:7:5:19 | LoopUnrolling | +| LoopUnrolling.cs:5:7:5:19 | call to method | LoopUnrolling.cs:5:7:5:19 | LoopUnrolling | | LoopUnrolling.cs:5:7:5:19 | enter LoopUnrolling | LoopUnrolling.cs:5:7:5:19 | LoopUnrolling | | LoopUnrolling.cs:5:7:5:19 | exit LoopUnrolling | LoopUnrolling.cs:5:7:5:19 | LoopUnrolling | | LoopUnrolling.cs:5:7:5:19 | exit LoopUnrolling (normal) | LoopUnrolling.cs:5:7:5:19 | LoopUnrolling | +| LoopUnrolling.cs:5:7:5:19 | this access | LoopUnrolling.cs:5:7:5:19 | LoopUnrolling | | LoopUnrolling.cs:5:7:5:19 | {...} | LoopUnrolling.cs:5:7:5:19 | LoopUnrolling | | LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:7:10:7:11 | M1 | | LoopUnrolling.cs:7:10:7:11 | exit M1 | LoopUnrolling.cs:7:10:7:11 | M1 | @@ -2489,9 +2530,11 @@ nodeEnclosing | LoopUnrolling.cs:99:13:99:33 | ...; | LoopUnrolling.cs:94:10:94:12 | M11 | | LoopUnrolling.cs:99:31:99:31 | access to local variable x | LoopUnrolling.cs:94:10:94:12 | M11 | | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | C1 | +| MultiImplementationA.cs:4:7:4:8 | call to method | MultiImplementationA.cs:4:7:4:8 | C1 | | MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationA.cs:4:7:4:8 | C1 | | MultiImplementationA.cs:4:7:4:8 | exit C1 | MultiImplementationA.cs:4:7:4:8 | C1 | | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | MultiImplementationA.cs:4:7:4:8 | C1 | +| MultiImplementationA.cs:4:7:4:8 | this access | MultiImplementationA.cs:4:7:4:8 | C1 | | MultiImplementationA.cs:4:7:4:8 | {...} | MultiImplementationA.cs:4:7:4:8 | C1 | | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | MultiImplementationA.cs:6:22:6:31 | get_P1 | | MultiImplementationA.cs:6:22:6:31 | exit get_P1 | MultiImplementationA.cs:6:22:6:31 | get_P1 | @@ -2519,9 +2562,12 @@ nodeEnclosing | MultiImplementationA.cs:8:16:8:16 | exit M (normal) | MultiImplementationA.cs:8:16:8:16 | M | | MultiImplementationA.cs:8:23:8:32 | throw ... | MultiImplementationA.cs:8:16:8:16 | M | | MultiImplementationA.cs:8:29:8:32 | null | MultiImplementationA.cs:8:16:8:16 | M | -| MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:20:12:20:13 | C2 | -| MultiImplementationA.cs:13:16:13:20 | ... = ... | MultiImplementationA.cs:20:12:20:13 | C2 | -| MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:20:12:20:13 | C2 | +| MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationA.cs:11:7:11:8 | exit | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationA.cs:13:16:13:20 | ... = ... | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | get_Item | | MultiImplementationA.cs:14:31:14:31 | enter get_Item | MultiImplementationA.cs:14:31:14:31 | get_Item | | MultiImplementationA.cs:14:31:14:31 | exit get_Item | MultiImplementationA.cs:14:31:14:31 | get_Item | @@ -2548,10 +2594,12 @@ nodeEnclosing | MultiImplementationA.cs:18:9:18:22 | exit M2 (normal) | MultiImplementationA.cs:18:9:18:22 | M2 | | MultiImplementationA.cs:18:21:18:21 | 0 | MultiImplementationA.cs:18:9:18:22 | M2 | | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | C2 | +| MultiImplementationA.cs:20:12:20:13 | call to method | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:12:20:13 | exit C2 | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:12:20:13 | exit C2 (abnormal) | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | MultiImplementationA.cs:20:12:20:13 | C2 | +| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:24:20:24 | this access | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:24:20:28 | ... = ... | MultiImplementationA.cs:20:12:20:13 | C2 | @@ -2573,14 +2621,16 @@ nodeEnclosing | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion (abnormal) | MultiImplementationA.cs:23:28:23:35 | implicit conversion | | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion (normal) | MultiImplementationA.cs:23:28:23:35 | implicit conversion | | MultiImplementationA.cs:23:50:23:53 | null | MultiImplementationA.cs:23:28:23:35 | implicit conversion | -| MultiImplementationA.cs:24:16:24:16 | access to property P | MultiImplementationA.cs:20:12:20:13 | C2 | -| MultiImplementationA.cs:24:16:24:16 | this access | MultiImplementationA.cs:20:12:20:13 | C2 | -| MultiImplementationA.cs:24:32:24:34 | ... = ... | MultiImplementationA.cs:20:12:20:13 | C2 | -| MultiImplementationA.cs:24:34:24:34 | 0 | MultiImplementationA.cs:20:12:20:13 | C2 | +| MultiImplementationA.cs:24:16:24:16 | access to property P | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationA.cs:24:16:24:16 | this access | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationA.cs:24:32:24:34 | ... = ... | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationA.cs:24:34:24:34 | 0 | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationA.cs:28:7:28:8 | call to constructor Object | MultiImplementationA.cs:28:7:28:8 | C3 | +| MultiImplementationA.cs:28:7:28:8 | call to method | MultiImplementationA.cs:28:7:28:8 | C3 | | MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationA.cs:28:7:28:8 | C3 | | MultiImplementationA.cs:28:7:28:8 | exit C3 | MultiImplementationA.cs:28:7:28:8 | C3 | | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | MultiImplementationA.cs:28:7:28:8 | C3 | +| MultiImplementationA.cs:28:7:28:8 | this access | MultiImplementationA.cs:28:7:28:8 | C3 | | MultiImplementationA.cs:28:7:28:8 | {...} | MultiImplementationA.cs:28:7:28:8 | C3 | | MultiImplementationA.cs:30:21:30:23 | enter get_P3 | MultiImplementationA.cs:30:21:30:23 | get_P3 | | MultiImplementationA.cs:30:21:30:23 | exit get_P3 | MultiImplementationA.cs:30:21:30:23 | get_P3 | @@ -2588,9 +2638,11 @@ nodeEnclosing | MultiImplementationA.cs:30:28:30:37 | throw ... | MultiImplementationA.cs:30:21:30:23 | get_P3 | | MultiImplementationA.cs:30:34:30:37 | null | MultiImplementationA.cs:30:21:30:23 | get_P3 | | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | MultiImplementationA.cs:34:15:34:16 | C4 | +| MultiImplementationA.cs:34:15:34:16 | call to method | MultiImplementationA.cs:34:15:34:16 | C4 | | MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationA.cs:34:15:34:16 | C4 | | MultiImplementationA.cs:34:15:34:16 | exit C4 | MultiImplementationA.cs:34:15:34:16 | C4 | | MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | MultiImplementationA.cs:34:15:34:16 | C4 | +| MultiImplementationA.cs:34:15:34:16 | this access | MultiImplementationA.cs:34:15:34:16 | C4 | | MultiImplementationA.cs:34:15:34:16 | {...} | MultiImplementationA.cs:34:15:34:16 | C4 | | MultiImplementationA.cs:36:9:36:10 | enter M1 | MultiImplementationA.cs:36:9:36:10 | M1 | | MultiImplementationA.cs:36:9:36:10 | exit M1 | MultiImplementationA.cs:36:9:36:10 | M1 | @@ -2606,6 +2658,8 @@ nodeEnclosing | MultiImplementationA.cs:37:16:37:26 | throw ...; | MultiImplementationA.cs:37:9:37:10 | M2 | | MultiImplementationA.cs:37:22:37:25 | null | MultiImplementationA.cs:37:9:37:10 | M2 | | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | C1 | +| MultiImplementationB.cs:1:7:1:8 | call to method | MultiImplementationA.cs:4:7:4:8 | C1 | +| MultiImplementationB.cs:1:7:1:8 | this access | MultiImplementationA.cs:4:7:4:8 | C1 | | MultiImplementationB.cs:1:7:1:8 | {...} | MultiImplementationA.cs:4:7:4:8 | C1 | | MultiImplementationB.cs:3:22:3:22 | 0 | MultiImplementationA.cs:6:22:6:31 | get_P1 | | MultiImplementationB.cs:4:25:4:37 | {...} | MultiImplementationA.cs:7:21:7:23 | get_P2 | @@ -2613,9 +2667,9 @@ nodeEnclosing | MultiImplementationB.cs:4:34:4:34 | 1 | MultiImplementationA.cs:7:21:7:23 | get_P2 | | MultiImplementationB.cs:4:43:4:45 | {...} | MultiImplementationA.cs:7:41:7:43 | set_P2 | | MultiImplementationB.cs:5:23:5:23 | 2 | MultiImplementationA.cs:8:16:8:16 | M | -| MultiImplementationB.cs:11:16:11:16 | this access | MultiImplementationA.cs:20:12:20:13 | C2 | -| MultiImplementationB.cs:11:16:11:20 | ... = ... | MultiImplementationA.cs:20:12:20:13 | C2 | -| MultiImplementationB.cs:11:20:11:20 | 1 | MultiImplementationA.cs:20:12:20:13 | C2 | +| MultiImplementationB.cs:11:16:11:16 | this access | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationB.cs:11:16:11:20 | ... = ... | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationB.cs:11:20:11:20 | 1 | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationB.cs:12:31:12:40 | throw ... | MultiImplementationA.cs:14:31:14:31 | get_Item | | MultiImplementationB.cs:12:37:12:40 | null | MultiImplementationA.cs:14:31:14:31 | get_Item | | MultiImplementationB.cs:13:40:13:54 | {...} | MultiImplementationA.cs:15:36:15:38 | get_Item | @@ -2630,6 +2684,8 @@ nodeEnclosing | MultiImplementationB.cs:16:21:16:30 | throw ... | MultiImplementationB.cs:16:9:16:31 | M2 | | MultiImplementationB.cs:16:27:16:30 | null | MultiImplementationB.cs:16:9:16:31 | M2 | | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | C2 | +| MultiImplementationB.cs:18:12:18:13 | call to method | MultiImplementationA.cs:20:12:20:13 | C2 | +| MultiImplementationB.cs:18:12:18:13 | this access | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationB.cs:18:22:18:36 | {...} | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationB.cs:18:24:18:34 | throw ...; | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationB.cs:18:30:18:33 | null | MultiImplementationA.cs:20:12:20:13 | C2 | @@ -2641,19 +2697,25 @@ nodeEnclosing | MultiImplementationB.cs:20:19:20:22 | null | MultiImplementationA.cs:22:6:22:7 | ~C2 | | MultiImplementationB.cs:21:50:21:59 | throw ... | MultiImplementationA.cs:23:28:23:35 | implicit conversion | | MultiImplementationB.cs:21:56:21:59 | null | MultiImplementationA.cs:23:28:23:35 | implicit conversion | -| MultiImplementationB.cs:22:16:22:16 | access to property P | MultiImplementationA.cs:20:12:20:13 | C2 | -| MultiImplementationB.cs:22:16:22:16 | this access | MultiImplementationA.cs:20:12:20:13 | C2 | -| MultiImplementationB.cs:22:32:22:34 | ... = ... | MultiImplementationA.cs:20:12:20:13 | C2 | -| MultiImplementationB.cs:22:34:22:34 | 1 | MultiImplementationA.cs:20:12:20:13 | C2 | +| MultiImplementationB.cs:22:16:22:16 | access to property P | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationB.cs:22:16:22:16 | this access | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationB.cs:22:32:22:34 | ... = ... | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationB.cs:22:34:22:34 | 1 | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | MultiImplementationA.cs:28:7:28:8 | C3 | +| MultiImplementationB.cs:25:7:25:8 | call to method | MultiImplementationA.cs:28:7:28:8 | C3 | +| MultiImplementationB.cs:25:7:25:8 | this access | MultiImplementationA.cs:28:7:28:8 | C3 | | MultiImplementationB.cs:25:7:25:8 | {...} | MultiImplementationA.cs:28:7:28:8 | C3 | | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | MultiImplementationA.cs:34:15:34:16 | C4 | +| MultiImplementationB.cs:30:15:30:16 | call to method | MultiImplementationA.cs:34:15:34:16 | C4 | +| MultiImplementationB.cs:30:15:30:16 | this access | MultiImplementationA.cs:34:15:34:16 | C4 | | MultiImplementationB.cs:30:15:30:16 | {...} | MultiImplementationA.cs:34:15:34:16 | C4 | | MultiImplementationB.cs:32:17:32:17 | 0 | MultiImplementationA.cs:36:9:36:10 | M1 | | NullCoalescing.cs:1:7:1:20 | call to constructor Object | NullCoalescing.cs:1:7:1:20 | NullCoalescing | +| NullCoalescing.cs:1:7:1:20 | call to method | NullCoalescing.cs:1:7:1:20 | NullCoalescing | | NullCoalescing.cs:1:7:1:20 | enter NullCoalescing | NullCoalescing.cs:1:7:1:20 | NullCoalescing | | NullCoalescing.cs:1:7:1:20 | exit NullCoalescing | NullCoalescing.cs:1:7:1:20 | NullCoalescing | | NullCoalescing.cs:1:7:1:20 | exit NullCoalescing (normal) | NullCoalescing.cs:1:7:1:20 | NullCoalescing | +| NullCoalescing.cs:1:7:1:20 | this access | NullCoalescing.cs:1:7:1:20 | NullCoalescing | | NullCoalescing.cs:1:7:1:20 | {...} | NullCoalescing.cs:1:7:1:20 | NullCoalescing | | NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:9:3:10 | M1 | | NullCoalescing.cs:3:9:3:10 | exit M1 | NullCoalescing.cs:3:9:3:10 | M1 | @@ -2722,34 +2784,36 @@ nodeEnclosing | NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:13:10:13:11 | M6 | | NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:13:10:13:11 | M6 | | NullCoalescing.cs:17:19:17:19 | access to parameter i | NullCoalescing.cs:13:10:13:11 | M6 | +| PartialImplementationA.cs:1:15:1:21 | enter | PartialImplementationA.cs:1:15:1:21 | | +| PartialImplementationA.cs:1:15:1:21 | exit | PartialImplementationA.cs:1:15:1:21 | | +| PartialImplementationA.cs:1:15:1:21 | exit (normal) | PartialImplementationA.cs:1:15:1:21 | | | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | PartialImplementationA.cs:3:12:3:18 | Partial | +| PartialImplementationA.cs:3:12:3:18 | call to method | PartialImplementationA.cs:3:12:3:18 | Partial | | PartialImplementationA.cs:3:12:3:18 | enter Partial | PartialImplementationA.cs:3:12:3:18 | Partial | | PartialImplementationA.cs:3:12:3:18 | exit Partial | PartialImplementationA.cs:3:12:3:18 | Partial | | PartialImplementationA.cs:3:12:3:18 | exit Partial (normal) | PartialImplementationA.cs:3:12:3:18 | Partial | +| PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | Partial | | PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:12:3:18 | Partial | -| PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationA.cs:3:12:3:18 | Partial | -| PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationB.cs:4:12:4:18 | Partial | -| PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationA.cs:3:12:3:18 | Partial | -| PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationB.cs:4:12:4:18 | Partial | -| PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationA.cs:3:12:3:18 | Partial | -| PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationB.cs:4:12:4:18 | Partial | +| PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationA.cs:1:15:1:21 | | +| PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationA.cs:1:15:1:21 | | +| PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationA.cs:1:15:1:21 | | | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | PartialImplementationB.cs:4:12:4:18 | Partial | +| PartialImplementationB.cs:4:12:4:18 | call to method | PartialImplementationB.cs:4:12:4:18 | Partial | | PartialImplementationB.cs:4:12:4:18 | enter Partial | PartialImplementationB.cs:4:12:4:18 | Partial | | PartialImplementationB.cs:4:12:4:18 | exit Partial | PartialImplementationB.cs:4:12:4:18 | Partial | | PartialImplementationB.cs:4:12:4:18 | exit Partial (normal) | PartialImplementationB.cs:4:12:4:18 | Partial | +| PartialImplementationB.cs:4:12:4:18 | this access | PartialImplementationB.cs:4:12:4:18 | Partial | | PartialImplementationB.cs:4:22:4:24 | {...} | PartialImplementationB.cs:4:12:4:18 | Partial | -| PartialImplementationB.cs:5:16:5:16 | access to property P | PartialImplementationA.cs:3:12:3:18 | Partial | -| PartialImplementationB.cs:5:16:5:16 | access to property P | PartialImplementationB.cs:4:12:4:18 | Partial | -| PartialImplementationB.cs:5:16:5:16 | this access | PartialImplementationA.cs:3:12:3:18 | Partial | -| PartialImplementationB.cs:5:16:5:16 | this access | PartialImplementationB.cs:4:12:4:18 | Partial | -| PartialImplementationB.cs:5:32:5:34 | ... = ... | PartialImplementationA.cs:3:12:3:18 | Partial | -| PartialImplementationB.cs:5:32:5:34 | ... = ... | PartialImplementationB.cs:4:12:4:18 | Partial | -| PartialImplementationB.cs:5:34:5:34 | 0 | PartialImplementationA.cs:3:12:3:18 | Partial | -| PartialImplementationB.cs:5:34:5:34 | 0 | PartialImplementationB.cs:4:12:4:18 | Partial | +| PartialImplementationB.cs:5:16:5:16 | access to property P | PartialImplementationA.cs:1:15:1:21 | | +| PartialImplementationB.cs:5:16:5:16 | this access | PartialImplementationA.cs:1:15:1:21 | | +| PartialImplementationB.cs:5:32:5:34 | ... = ... | PartialImplementationA.cs:1:15:1:21 | | +| PartialImplementationB.cs:5:34:5:34 | 0 | PartialImplementationA.cs:1:15:1:21 | | | Patterns.cs:3:7:3:14 | call to constructor Object | Patterns.cs:3:7:3:14 | Patterns | +| Patterns.cs:3:7:3:14 | call to method | Patterns.cs:3:7:3:14 | Patterns | | Patterns.cs:3:7:3:14 | enter Patterns | Patterns.cs:3:7:3:14 | Patterns | | Patterns.cs:3:7:3:14 | exit Patterns | Patterns.cs:3:7:3:14 | Patterns | | Patterns.cs:3:7:3:14 | exit Patterns (normal) | Patterns.cs:3:7:3:14 | Patterns | +| Patterns.cs:3:7:3:14 | this access | Patterns.cs:3:7:3:14 | Patterns | | Patterns.cs:3:7:3:14 | {...} | Patterns.cs:3:7:3:14 | Patterns | | Patterns.cs:5:10:5:11 | enter M1 | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:5:10:5:11 | exit M1 | Patterns.cs:5:10:5:11 | M1 | @@ -2966,9 +3030,11 @@ nodeEnclosing | Patterns.cs:97:13:97:39 | ...; | Patterns.cs:93:17:93:19 | M10 | | Patterns.cs:97:31:97:37 | "not C" | Patterns.cs:93:17:93:19 | M10 | | PostDominance.cs:3:7:3:19 | call to constructor Object | PostDominance.cs:3:7:3:19 | PostDominance | +| PostDominance.cs:3:7:3:19 | call to method | PostDominance.cs:3:7:3:19 | PostDominance | | PostDominance.cs:3:7:3:19 | enter PostDominance | PostDominance.cs:3:7:3:19 | PostDominance | | PostDominance.cs:3:7:3:19 | exit PostDominance | PostDominance.cs:3:7:3:19 | PostDominance | | PostDominance.cs:3:7:3:19 | exit PostDominance (normal) | PostDominance.cs:3:7:3:19 | PostDominance | +| PostDominance.cs:3:7:3:19 | this access | PostDominance.cs:3:7:3:19 | PostDominance | | PostDominance.cs:3:7:3:19 | {...} | PostDominance.cs:3:7:3:19 | PostDominance | | PostDominance.cs:5:10:5:11 | enter M1 | PostDominance.cs:5:10:5:11 | M1 | | PostDominance.cs:5:10:5:11 | exit M1 | PostDominance.cs:5:10:5:11 | M1 | @@ -3007,9 +3073,11 @@ nodeEnclosing | PostDominance.cs:21:9:21:29 | ...; | PostDominance.cs:17:10:17:11 | M3 | | PostDominance.cs:21:27:21:27 | access to parameter s | PostDominance.cs:17:10:17:11 | M3 | | Qualifiers.cs:1:7:1:16 | call to constructor Object | Qualifiers.cs:1:7:1:16 | Qualifiers | +| Qualifiers.cs:1:7:1:16 | call to method | Qualifiers.cs:1:7:1:16 | Qualifiers | | Qualifiers.cs:1:7:1:16 | enter Qualifiers | Qualifiers.cs:1:7:1:16 | Qualifiers | | Qualifiers.cs:1:7:1:16 | exit Qualifiers | Qualifiers.cs:1:7:1:16 | Qualifiers | | Qualifiers.cs:1:7:1:16 | exit Qualifiers (normal) | Qualifiers.cs:1:7:1:16 | Qualifiers | +| Qualifiers.cs:1:7:1:16 | this access | Qualifiers.cs:1:7:1:16 | Qualifiers | | Qualifiers.cs:1:7:1:16 | {...} | Qualifiers.cs:1:7:1:16 | Qualifiers | | Qualifiers.cs:7:16:7:21 | enter Method | Qualifiers.cs:7:16:7:21 | Method | | Qualifiers.cs:7:16:7:21 | exit Method | Qualifiers.cs:7:16:7:21 | Method | @@ -3078,9 +3146,11 @@ nodeEnclosing | Qualifiers.cs:30:13:30:37 | call to method StaticMethod | Qualifiers.cs:10:10:10:10 | M | | Qualifiers.cs:30:13:30:46 | call to method Method | Qualifiers.cs:10:10:10:10 | M | | Switch.cs:3:7:3:12 | call to constructor Object | Switch.cs:3:7:3:12 | Switch | +| Switch.cs:3:7:3:12 | call to method | Switch.cs:3:7:3:12 | Switch | | Switch.cs:3:7:3:12 | enter Switch | Switch.cs:3:7:3:12 | Switch | | Switch.cs:3:7:3:12 | exit Switch | Switch.cs:3:7:3:12 | Switch | | Switch.cs:3:7:3:12 | exit Switch (normal) | Switch.cs:3:7:3:12 | Switch | +| Switch.cs:3:7:3:12 | this access | Switch.cs:3:7:3:12 | Switch | | Switch.cs:3:7:3:12 | {...} | Switch.cs:3:7:3:12 | Switch | | Switch.cs:5:10:5:11 | enter M1 | Switch.cs:5:10:5:11 | M1 | | Switch.cs:5:10:5:11 | exit M1 | Switch.cs:5:10:5:11 | M1 | @@ -3385,9 +3455,11 @@ nodeEnclosing | Switch.cs:175:42:175:46 | "def" | Switch.cs:163:10:163:12 | M16 | | Switch.cs:176:17:176:22 | break; | Switch.cs:163:10:163:12 | M16 | | TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | TypeAccesses | +| TypeAccesses.cs:1:7:1:18 | call to method | TypeAccesses.cs:1:7:1:18 | TypeAccesses | | TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | TypeAccesses.cs:1:7:1:18 | TypeAccesses | | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses | TypeAccesses.cs:1:7:1:18 | TypeAccesses | | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses (normal) | TypeAccesses.cs:1:7:1:18 | TypeAccesses | +| TypeAccesses.cs:1:7:1:18 | this access | TypeAccesses.cs:1:7:1:18 | TypeAccesses | | TypeAccesses.cs:1:7:1:18 | {...} | TypeAccesses.cs:1:7:1:18 | TypeAccesses | | TypeAccesses.cs:3:10:3:10 | enter M | TypeAccesses.cs:3:10:3:10 | M | | TypeAccesses.cs:3:10:3:10 | exit M | TypeAccesses.cs:3:10:3:10 | M | @@ -3411,9 +3483,11 @@ nodeEnclosing | TypeAccesses.cs:8:13:8:27 | Type t = ... | TypeAccesses.cs:3:10:3:10 | M | | TypeAccesses.cs:8:17:8:27 | typeof(...) | TypeAccesses.cs:3:10:3:10 | M | | VarDecls.cs:3:7:3:14 | call to constructor Object | VarDecls.cs:3:7:3:14 | VarDecls | +| VarDecls.cs:3:7:3:14 | call to method | VarDecls.cs:3:7:3:14 | VarDecls | | VarDecls.cs:3:7:3:14 | enter VarDecls | VarDecls.cs:3:7:3:14 | VarDecls | | VarDecls.cs:3:7:3:14 | exit VarDecls | VarDecls.cs:3:7:3:14 | VarDecls | | VarDecls.cs:3:7:3:14 | exit VarDecls (normal) | VarDecls.cs:3:7:3:14 | VarDecls | +| VarDecls.cs:3:7:3:14 | this access | VarDecls.cs:3:7:3:14 | VarDecls | | VarDecls.cs:3:7:3:14 | {...} | VarDecls.cs:3:7:3:14 | VarDecls | | VarDecls.cs:5:18:5:19 | enter M1 | VarDecls.cs:5:18:5:19 | M1 | | VarDecls.cs:5:18:5:19 | exit M1 | VarDecls.cs:5:18:5:19 | M1 | @@ -3465,9 +3539,11 @@ nodeEnclosing | VarDecls.cs:25:24:25:24 | access to local variable x | VarDecls.cs:19:7:19:8 | M3 | | VarDecls.cs:25:28:25:28 | access to local variable y | VarDecls.cs:19:7:19:8 | M3 | | VarDecls.cs:28:11:28:11 | call to constructor Object | VarDecls.cs:28:11:28:11 | C | +| VarDecls.cs:28:11:28:11 | call to method | VarDecls.cs:28:11:28:11 | C | | VarDecls.cs:28:11:28:11 | enter C | VarDecls.cs:28:11:28:11 | C | | VarDecls.cs:28:11:28:11 | exit C | VarDecls.cs:28:11:28:11 | C | | VarDecls.cs:28:11:28:11 | exit C (normal) | VarDecls.cs:28:11:28:11 | C | +| VarDecls.cs:28:11:28:11 | this access | VarDecls.cs:28:11:28:11 | C | | VarDecls.cs:28:11:28:11 | {...} | VarDecls.cs:28:11:28:11 | C | | VarDecls.cs:28:41:28:47 | enter Dispose | VarDecls.cs:28:41:28:47 | Dispose | | VarDecls.cs:28:41:28:47 | exit Dispose | VarDecls.cs:28:41:28:47 | Dispose | @@ -3753,9 +3829,11 @@ nodeEnclosing | cflow.cs:127:68:127:81 | ...; | cflow.cs:127:62:127:64 | set_Prop | | cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:62:127:64 | set_Prop | | cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:129:5:129:15 | ControlFlow | +| cflow.cs:129:5:129:15 | call to method | cflow.cs:129:5:129:15 | ControlFlow | | cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | ControlFlow | | cflow.cs:129:5:129:15 | exit ControlFlow | cflow.cs:129:5:129:15 | ControlFlow | | cflow.cs:129:5:129:15 | exit ControlFlow (normal) | cflow.cs:129:5:129:15 | ControlFlow | +| cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | ControlFlow | | cflow.cs:130:5:132:5 | {...} | cflow.cs:129:5:129:15 | ControlFlow | | cflow.cs:131:9:131:13 | this access | cflow.cs:129:5:129:15 | ControlFlow | | cflow.cs:131:9:131:17 | ... = ... | cflow.cs:129:5:129:15 | ControlFlow | @@ -4121,9 +4199,11 @@ nodeEnclosing | cflow.cs:275:13:275:41 | call to method WriteLine | cflow.cs:261:49:261:53 | Yield | | cflow.cs:275:13:275:42 | ...; | cflow.cs:261:49:261:53 | Yield | | cflow.cs:275:31:275:40 | "not dead" | cflow.cs:261:49:261:53 | Yield | +| cflow.cs:282:5:282:18 | call to method | cflow.cs:282:5:282:18 | ControlFlowSub | | cflow.cs:282:5:282:18 | enter ControlFlowSub | cflow.cs:282:5:282:18 | ControlFlowSub | | cflow.cs:282:5:282:18 | exit ControlFlowSub | cflow.cs:282:5:282:18 | ControlFlowSub | | cflow.cs:282:5:282:18 | exit ControlFlowSub (normal) | cflow.cs:282:5:282:18 | ControlFlowSub | +| cflow.cs:282:5:282:18 | this access | cflow.cs:282:5:282:18 | ControlFlowSub | | cflow.cs:282:24:282:27 | call to constructor ControlFlow | cflow.cs:282:5:282:18 | ControlFlowSub | | cflow.cs:282:31:282:33 | {...} | cflow.cs:282:5:282:18 | ControlFlowSub | | cflow.cs:284:5:284:18 | enter ControlFlowSub | cflow.cs:284:5:284:18 | ControlFlowSub | @@ -4139,9 +4219,11 @@ nodeEnclosing | cflow.cs:286:34:286:45 | call to method ToString | cflow.cs:286:5:286:18 | ControlFlowSub | | cflow.cs:286:48:286:50 | {...} | cflow.cs:286:5:286:18 | ControlFlowSub | | cflow.cs:289:7:289:18 | call to constructor Object | cflow.cs:289:7:289:18 | DelegateCall | +| cflow.cs:289:7:289:18 | call to method | cflow.cs:289:7:289:18 | DelegateCall | | cflow.cs:289:7:289:18 | enter DelegateCall | cflow.cs:289:7:289:18 | DelegateCall | | cflow.cs:289:7:289:18 | exit DelegateCall | cflow.cs:289:7:289:18 | DelegateCall | | cflow.cs:289:7:289:18 | exit DelegateCall (normal) | cflow.cs:289:7:289:18 | DelegateCall | +| cflow.cs:289:7:289:18 | this access | cflow.cs:289:7:289:18 | DelegateCall | | cflow.cs:289:7:289:18 | {...} | cflow.cs:289:7:289:18 | DelegateCall | | cflow.cs:291:12:291:12 | enter M | cflow.cs:291:12:291:12 | M | | cflow.cs:291:12:291:12 | exit M | cflow.cs:291:12:291:12 | M | @@ -4150,9 +4232,11 @@ nodeEnclosing | cflow.cs:291:38:291:41 | delegate call | cflow.cs:291:12:291:12 | M | | cflow.cs:291:40:291:40 | 0 | cflow.cs:291:12:291:12 | M | | cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:5:296:25 | NegationInConstructor | +| cflow.cs:296:5:296:25 | call to method | cflow.cs:296:5:296:25 | NegationInConstructor | | cflow.cs:296:5:296:25 | enter NegationInConstructor | cflow.cs:296:5:296:25 | NegationInConstructor | | cflow.cs:296:5:296:25 | exit NegationInConstructor | cflow.cs:296:5:296:25 | NegationInConstructor | | cflow.cs:296:5:296:25 | exit NegationInConstructor (normal) | cflow.cs:296:5:296:25 | NegationInConstructor | +| cflow.cs:296:5:296:25 | this access | cflow.cs:296:5:296:25 | NegationInConstructor | | cflow.cs:296:52:296:54 | {...} | cflow.cs:296:5:296:25 | NegationInConstructor | | cflow.cs:298:10:298:10 | enter M | cflow.cs:298:10:298:10 | M | | cflow.cs:298:10:298:10 | exit M | cflow.cs:298:10:298:10 | M | @@ -4172,9 +4256,11 @@ nodeEnclosing | cflow.cs:300:61:300:64 | null | cflow.cs:298:10:298:10 | M | | cflow.cs:300:70:300:71 | "" | cflow.cs:298:10:298:10 | M | | cflow.cs:304:7:304:18 | call to constructor Object | cflow.cs:304:7:304:18 | LambdaGetter | +| cflow.cs:304:7:304:18 | call to method | cflow.cs:304:7:304:18 | LambdaGetter | | cflow.cs:304:7:304:18 | enter LambdaGetter | cflow.cs:304:7:304:18 | LambdaGetter | | cflow.cs:304:7:304:18 | exit LambdaGetter | cflow.cs:304:7:304:18 | LambdaGetter | | cflow.cs:304:7:304:18 | exit LambdaGetter (normal) | cflow.cs:304:7:304:18 | LambdaGetter | +| cflow.cs:304:7:304:18 | this access | cflow.cs:304:7:304:18 | LambdaGetter | | cflow.cs:304:7:304:18 | {...} | cflow.cs:304:7:304:18 | LambdaGetter | | cflow.cs:306:60:310:5 | (...) => ... | cflow.cs:306:60:310:5 | get__getter | | cflow.cs:306:60:310:5 | enter (...) => ... | cflow.cs:306:60:310:5 | (...) => ... | @@ -4731,11 +4817,14 @@ blockEnclosing | Foreach.cs:36:10:36:11 | exit M6 (normal) | Foreach.cs:36:10:36:11 | M6 | | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | Foreach.cs:36:10:36:11 | M6 | | Foreach.cs:38:26:38:26 | String x | Foreach.cs:36:10:36:11 | M6 | +| Initializers.cs:3:7:3:18 | enter | Initializers.cs:3:7:3:18 | | | Initializers.cs:3:7:3:18 | enter Initializers | Initializers.cs:3:7:3:18 | Initializers | | Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | Initializers | | Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | Initializers | | Initializers.cs:12:10:12:10 | enter M | Initializers.cs:12:10:12:10 | M | +| Initializers.cs:20:11:20:23 | enter | Initializers.cs:20:11:20:23 | | | Initializers.cs:20:11:20:23 | enter NoConstructor | Initializers.cs:20:11:20:23 | NoConstructor | +| Initializers.cs:26:11:26:13 | enter | Initializers.cs:26:11:26:13 | | | Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | Sub | | Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:9:33:11 | Sub | | Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | Sub | @@ -4800,9 +4889,9 @@ blockEnclosing | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | LoopUnrolling.cs:94:10:94:12 | M11 | | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:94:10:94:12 | M11 | | LoopUnrolling.cs:97:22:97:22 | String x | LoopUnrolling.cs:94:10:94:12 | M11 | -| MultiImplementationA.cs:4:7:4:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | C1 | | MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationA.cs:4:7:4:8 | C1 | | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | MultiImplementationA.cs:4:7:4:8 | C1 | +| MultiImplementationA.cs:4:7:4:8 | this access | MultiImplementationA.cs:4:7:4:8 | C1 | | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | MultiImplementationA.cs:6:22:6:31 | get_P1 | | MultiImplementationA.cs:6:22:6:31 | exit get_P1 | MultiImplementationA.cs:6:22:6:31 | get_P1 | | MultiImplementationA.cs:6:28:6:31 | null | MultiImplementationA.cs:6:22:6:31 | get_P1 | @@ -4815,6 +4904,9 @@ blockEnclosing | MultiImplementationA.cs:8:16:8:16 | enter M | MultiImplementationA.cs:8:16:8:16 | M | | MultiImplementationA.cs:8:16:8:16 | exit M | MultiImplementationA.cs:8:16:8:16 | M | | MultiImplementationA.cs:8:29:8:32 | null | MultiImplementationA.cs:8:16:8:16 | M | +| MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | get_Item | | MultiImplementationA.cs:14:31:14:31 | enter get_Item | MultiImplementationA.cs:14:31:14:31 | get_Item | | MultiImplementationA.cs:14:31:14:31 | exit get_Item | MultiImplementationA.cs:14:31:14:31 | get_Item | @@ -4828,9 +4920,9 @@ blockEnclosing | MultiImplementationA.cs:16:17:16:18 | exit M1 (normal) | MultiImplementationA.cs:16:17:16:18 | M1 | | MultiImplementationA.cs:17:5:19:5 | {...} | MultiImplementationA.cs:16:17:16:18 | M1 | | MultiImplementationA.cs:18:9:18:22 | enter M2 | MultiImplementationA.cs:18:9:18:22 | M2 | -| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:12:20:13 | exit C2 | MultiImplementationA.cs:20:12:20:13 | C2 | +| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:21:12:21:13 | enter C2 | MultiImplementationA.cs:21:12:21:13 | C2 | | MultiImplementationA.cs:21:12:21:13 | exit C2 (normal) | MultiImplementationA.cs:21:12:21:13 | C2 | | MultiImplementationA.cs:21:24:21:24 | 0 | MultiImplementationA.cs:21:12:21:13 | C2 | @@ -4840,33 +4932,34 @@ blockEnclosing | MultiImplementationA.cs:23:28:23:35 | enter implicit conversion | MultiImplementationA.cs:23:28:23:35 | implicit conversion | | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion | MultiImplementationA.cs:23:28:23:35 | implicit conversion | | MultiImplementationA.cs:23:50:23:53 | null | MultiImplementationA.cs:23:28:23:35 | implicit conversion | -| MultiImplementationA.cs:28:7:28:8 | call to constructor Object | MultiImplementationA.cs:28:7:28:8 | C3 | | MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationA.cs:28:7:28:8 | C3 | | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | MultiImplementationA.cs:28:7:28:8 | C3 | +| MultiImplementationA.cs:28:7:28:8 | this access | MultiImplementationA.cs:28:7:28:8 | C3 | | MultiImplementationA.cs:30:21:30:23 | enter get_P3 | MultiImplementationA.cs:30:21:30:23 | get_P3 | -| MultiImplementationA.cs:34:15:34:16 | call to constructor Object | MultiImplementationA.cs:34:15:34:16 | C4 | | MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationA.cs:34:15:34:16 | C4 | | MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | MultiImplementationA.cs:34:15:34:16 | C4 | +| MultiImplementationA.cs:34:15:34:16 | this access | MultiImplementationA.cs:34:15:34:16 | C4 | | MultiImplementationA.cs:36:9:36:10 | enter M1 | MultiImplementationA.cs:36:9:36:10 | M1 | | MultiImplementationA.cs:36:9:36:10 | exit M1 | MultiImplementationA.cs:36:9:36:10 | M1 | | MultiImplementationA.cs:36:14:36:28 | {...} | MultiImplementationA.cs:36:9:36:10 | M1 | | MultiImplementationA.cs:37:9:37:10 | enter M2 | MultiImplementationA.cs:37:9:37:10 | M2 | -| MultiImplementationB.cs:1:7:1:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | C1 | +| MultiImplementationB.cs:1:7:1:8 | this access | MultiImplementationA.cs:4:7:4:8 | C1 | | MultiImplementationB.cs:3:22:3:22 | 0 | MultiImplementationA.cs:6:22:6:31 | get_P1 | | MultiImplementationB.cs:4:25:4:37 | {...} | MultiImplementationA.cs:7:21:7:23 | get_P2 | | MultiImplementationB.cs:4:43:4:45 | {...} | MultiImplementationA.cs:7:41:7:43 | set_P2 | | MultiImplementationB.cs:5:23:5:23 | 2 | MultiImplementationA.cs:8:16:8:16 | M | +| MultiImplementationB.cs:11:16:11:16 | this access | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationB.cs:12:37:12:40 | null | MultiImplementationA.cs:14:31:14:31 | get_Item | | MultiImplementationB.cs:13:40:13:54 | {...} | MultiImplementationA.cs:15:36:15:38 | get_Item | | MultiImplementationB.cs:13:60:13:62 | {...} | MultiImplementationA.cs:15:54:15:56 | set_Item | | MultiImplementationB.cs:15:5:17:5 | {...} | MultiImplementationA.cs:16:17:16:18 | M1 | | MultiImplementationB.cs:16:9:16:31 | enter M2 | MultiImplementationB.cs:16:9:16:31 | M2 | -| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | C2 | +| MultiImplementationB.cs:18:12:18:13 | this access | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationB.cs:19:24:19:24 | 1 | MultiImplementationA.cs:21:12:21:13 | C2 | | MultiImplementationB.cs:20:11:20:25 | {...} | MultiImplementationA.cs:22:6:22:7 | ~C2 | | MultiImplementationB.cs:21:56:21:59 | null | MultiImplementationA.cs:23:28:23:35 | implicit conversion | -| MultiImplementationB.cs:25:7:25:8 | call to constructor Object | MultiImplementationA.cs:28:7:28:8 | C3 | -| MultiImplementationB.cs:30:15:30:16 | call to constructor Object | MultiImplementationA.cs:34:15:34:16 | C4 | +| MultiImplementationB.cs:25:7:25:8 | this access | MultiImplementationA.cs:28:7:28:8 | C3 | +| MultiImplementationB.cs:30:15:30:16 | this access | MultiImplementationA.cs:34:15:34:16 | C4 | | MultiImplementationB.cs:32:17:32:17 | 0 | MultiImplementationA.cs:36:9:36:10 | M1 | | NullCoalescing.cs:1:7:1:20 | enter NullCoalescing | NullCoalescing.cs:1:7:1:20 | NullCoalescing | | NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:9:3:10 | M1 | @@ -4906,6 +4999,7 @@ blockEnclosing | NullCoalescing.cs:15:31:15:31 | 0 | NullCoalescing.cs:13:10:13:11 | M6 | | NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:13:10:13:11 | M6 | | NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:13:10:13:11 | M6 | +| PartialImplementationA.cs:1:15:1:21 | enter | PartialImplementationA.cs:1:15:1:21 | | | PartialImplementationA.cs:3:12:3:18 | enter Partial | PartialImplementationA.cs:3:12:3:18 | Partial | | PartialImplementationB.cs:4:12:4:18 | enter Partial | PartialImplementationB.cs:4:12:4:18 | Partial | | Patterns.cs:3:7:3:14 | enter Patterns | Patterns.cs:3:7:3:14 | Patterns | diff --git a/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected b/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected index ea7ade106ea8..da8fe4664f52 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected @@ -1,4 +1,6 @@ | AccessorCalls.cs:1:7:1:19 | call to constructor Object | AccessorCalls.cs:1:7:1:19 | call to constructor Object | +| AccessorCalls.cs:1:7:1:19 | call to method | AccessorCalls.cs:1:7:1:19 | this access | +| AccessorCalls.cs:1:7:1:19 | this access | AccessorCalls.cs:1:7:1:19 | this access | | AccessorCalls.cs:1:7:1:19 | {...} | AccessorCalls.cs:1:7:1:19 | {...} | | AccessorCalls.cs:5:30:5:30 | access to parameter i | AccessorCalls.cs:5:30:5:30 | access to parameter i | | AccessorCalls.cs:5:37:5:39 | {...} | AccessorCalls.cs:5:37:5:39 | {...} | @@ -290,6 +292,8 @@ | AccessorCalls.cs:73:78:73:81 | dynamic access to element | AccessorCalls.cs:73:78:73:78 | access to local variable d | | AccessorCalls.cs:73:80:73:80 | 1 | AccessorCalls.cs:73:80:73:80 | 1 | | ArrayCreation.cs:1:7:1:19 | call to constructor Object | ArrayCreation.cs:1:7:1:19 | call to constructor Object | +| ArrayCreation.cs:1:7:1:19 | call to method | ArrayCreation.cs:1:7:1:19 | this access | +| ArrayCreation.cs:1:7:1:19 | this access | ArrayCreation.cs:1:7:1:19 | this access | | ArrayCreation.cs:1:7:1:19 | {...} | ArrayCreation.cs:1:7:1:19 | {...} | | ArrayCreation.cs:3:19:3:28 | array creation of type Int32[] | ArrayCreation.cs:3:27:3:27 | 0 | | ArrayCreation.cs:3:27:3:27 | 0 | ArrayCreation.cs:3:27:3:27 | 0 | @@ -312,6 +316,8 @@ | ArrayCreation.cs:9:45:9:45 | 2 | ArrayCreation.cs:9:45:9:45 | 2 | | ArrayCreation.cs:9:48:9:48 | 3 | ArrayCreation.cs:9:48:9:48 | 3 | | Assert.cs:5:7:5:17 | call to constructor Object | Assert.cs:5:7:5:17 | call to constructor Object | +| Assert.cs:5:7:5:17 | call to method | Assert.cs:5:7:5:17 | this access | +| Assert.cs:5:7:5:17 | this access | Assert.cs:5:7:5:17 | this access | | Assert.cs:5:7:5:17 | {...} | Assert.cs:5:7:5:17 | {...} | | Assert.cs:8:5:12:5 | {...} | Assert.cs:8:5:12:5 | {...} | | Assert.cs:9:9:9:33 | ... ...; | Assert.cs:9:9:9:33 | ... ...; | @@ -675,6 +681,8 @@ | Assert.cs:140:33:140:34 | access to parameter b3 | Assert.cs:140:33:140:34 | access to parameter b3 | | Assert.cs:141:9:141:15 | return ...; | Assert.cs:141:9:141:15 | return ...; | | Assignments.cs:1:7:1:17 | call to constructor Object | Assignments.cs:1:7:1:17 | call to constructor Object | +| Assignments.cs:1:7:1:17 | call to method | Assignments.cs:1:7:1:17 | this access | +| Assignments.cs:1:7:1:17 | this access | Assignments.cs:1:7:1:17 | this access | | Assignments.cs:1:7:1:17 | {...} | Assignments.cs:1:7:1:17 | {...} | | Assignments.cs:4:5:15:5 | {...} | Assignments.cs:4:5:15:5 | {...} | | Assignments.cs:5:9:5:18 | ... ...; | Assignments.cs:5:9:5:18 | ... ...; | @@ -715,6 +723,8 @@ | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:19:16:19:16 | access to parameter x | | Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:19:16:19:16 | access to parameter x | | BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | call to constructor Object | +| BreakInTry.cs:1:7:1:16 | call to method | BreakInTry.cs:1:7:1:16 | this access | +| BreakInTry.cs:1:7:1:16 | this access | BreakInTry.cs:1:7:1:16 | this access | | BreakInTry.cs:1:7:1:16 | {...} | BreakInTry.cs:1:7:1:16 | {...} | | BreakInTry.cs:4:5:18:5 | {...} | BreakInTry.cs:4:5:18:5 | {...} | | BreakInTry.cs:5:9:17:9 | try {...} ... | BreakInTry.cs:5:9:17:9 | try {...} ... | @@ -791,6 +801,8 @@ | BreakInTry.cs:67:28:67:31 | null | BreakInTry.cs:67:28:67:31 | null | | BreakInTry.cs:68:21:68:26 | break; | BreakInTry.cs:68:21:68:26 | break; | | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | +| CompileTimeOperators.cs:3:7:3:26 | call to method | CompileTimeOperators.cs:3:7:3:26 | this access | +| CompileTimeOperators.cs:3:7:3:26 | this access | CompileTimeOperators.cs:3:7:3:26 | this access | | CompileTimeOperators.cs:3:7:3:26 | {...} | CompileTimeOperators.cs:3:7:3:26 | {...} | | CompileTimeOperators.cs:6:5:8:5 | {...} | CompileTimeOperators.cs:6:5:8:5 | {...} | | CompileTimeOperators.cs:7:9:7:28 | return ...; | CompileTimeOperators.cs:7:16:7:27 | default(...) | @@ -806,6 +818,8 @@ | CompileTimeOperators.cs:22:16:22:24 | nameof(...) | CompileTimeOperators.cs:22:16:22:24 | nameof(...) | | CompileTimeOperators.cs:22:23:22:23 | access to parameter i | CompileTimeOperators.cs:22:23:22:23 | access to parameter i | | CompileTimeOperators.cs:26:7:26:22 | call to constructor Object | CompileTimeOperators.cs:26:7:26:22 | call to constructor Object | +| CompileTimeOperators.cs:26:7:26:22 | call to method | CompileTimeOperators.cs:26:7:26:22 | this access | +| CompileTimeOperators.cs:26:7:26:22 | this access | CompileTimeOperators.cs:26:7:26:22 | this access | | CompileTimeOperators.cs:26:7:26:22 | {...} | CompileTimeOperators.cs:26:7:26:22 | {...} | | CompileTimeOperators.cs:29:5:41:5 | {...} | CompileTimeOperators.cs:29:5:41:5 | {...} | | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | @@ -826,6 +840,8 @@ | CompileTimeOperators.cs:40:14:40:38 | ...; | CompileTimeOperators.cs:40:14:40:38 | ...; | | CompileTimeOperators.cs:40:32:40:36 | "End" | CompileTimeOperators.cs:40:32:40:36 | "End" | | ConditionalAccess.cs:1:7:1:23 | call to constructor Object | ConditionalAccess.cs:1:7:1:23 | call to constructor Object | +| ConditionalAccess.cs:1:7:1:23 | call to method | ConditionalAccess.cs:1:7:1:23 | this access | +| ConditionalAccess.cs:1:7:1:23 | this access | ConditionalAccess.cs:1:7:1:23 | this access | | ConditionalAccess.cs:1:7:1:23 | {...} | ConditionalAccess.cs:1:7:1:23 | {...} | | ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:26:3:26 | access to parameter i | | ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:26 | access to parameter i | @@ -886,6 +902,8 @@ | ConditionalAccess.cs:41:75:41:78 | ", " | ConditionalAccess.cs:41:75:41:78 | ", " | | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | | Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | call to constructor Object | +| Conditions.cs:1:7:1:16 | call to method | Conditions.cs:1:7:1:16 | this access | +| Conditions.cs:1:7:1:16 | this access | Conditions.cs:1:7:1:16 | this access | | Conditions.cs:1:7:1:16 | {...} | Conditions.cs:1:7:1:16 | {...} | | Conditions.cs:4:5:9:5 | {...} | Conditions.cs:4:5:9:5 | {...} | | Conditions.cs:5:9:6:16 | if (...) ... | Conditions.cs:5:9:6:16 | if (...) ... | @@ -1167,6 +1185,8 @@ | Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:45:149:45 | access to local variable s | | Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:45:149:45 | access to local variable s | | ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | call to constructor Object | +| ExitMethods.cs:6:7:6:17 | call to method | ExitMethods.cs:6:7:6:17 | this access | +| ExitMethods.cs:6:7:6:17 | this access | ExitMethods.cs:6:7:6:17 | this access | | ExitMethods.cs:6:7:6:17 | {...} | ExitMethods.cs:6:7:6:17 | {...} | | ExitMethods.cs:9:5:12:5 | {...} | ExitMethods.cs:9:5:12:5 | {...} | | ExitMethods.cs:10:9:10:24 | call to method ErrorMaybe | ExitMethods.cs:10:20:10:23 | true | @@ -1336,6 +1356,8 @@ | Extensions.cs:25:23:25:32 | access to method Parse | Extensions.cs:25:23:25:32 | access to method Parse | | Extensions.cs:25:23:25:32 | delegate creation of type Func | Extensions.cs:25:23:25:32 | access to method Parse | | Finally.cs:3:14:3:20 | call to constructor Object | Finally.cs:3:14:3:20 | call to constructor Object | +| Finally.cs:3:14:3:20 | call to method | Finally.cs:3:14:3:20 | this access | +| Finally.cs:3:14:3:20 | this access | Finally.cs:3:14:3:20 | this access | | Finally.cs:3:14:3:20 | {...} | Finally.cs:3:14:3:20 | {...} | | Finally.cs:8:5:17:5 | {...} | Finally.cs:8:5:17:5 | {...} | | Finally.cs:9:9:16:9 | try {...} ... | Finally.cs:9:9:16:9 | try {...} ... | @@ -1547,10 +1569,16 @@ | Finally.cs:167:17:167:38 | ...; | Finally.cs:167:17:167:38 | ...; | | Finally.cs:167:35:167:36 | "" | Finally.cs:167:35:167:36 | "" | | Finally.cs:172:11:172:20 | call to constructor Exception | Finally.cs:172:11:172:20 | call to constructor Exception | +| Finally.cs:172:11:172:20 | call to method | Finally.cs:172:11:172:20 | this access | +| Finally.cs:172:11:172:20 | this access | Finally.cs:172:11:172:20 | this access | | Finally.cs:172:11:172:20 | {...} | Finally.cs:172:11:172:20 | {...} | | Finally.cs:173:11:173:20 | call to constructor Exception | Finally.cs:173:11:173:20 | call to constructor Exception | +| Finally.cs:173:11:173:20 | call to method | Finally.cs:173:11:173:20 | this access | +| Finally.cs:173:11:173:20 | this access | Finally.cs:173:11:173:20 | this access | | Finally.cs:173:11:173:20 | {...} | Finally.cs:173:11:173:20 | {...} | | Finally.cs:174:11:174:20 | call to constructor Exception | Finally.cs:174:11:174:20 | call to constructor Exception | +| Finally.cs:174:11:174:20 | call to method | Finally.cs:174:11:174:20 | this access | +| Finally.cs:174:11:174:20 | this access | Finally.cs:174:11:174:20 | this access | | Finally.cs:174:11:174:20 | {...} | Finally.cs:174:11:174:20 | {...} | | Finally.cs:177:5:193:5 | {...} | Finally.cs:177:5:193:5 | {...} | | Finally.cs:178:9:192:9 | try {...} ... | Finally.cs:178:9:192:9 | try {...} ... | @@ -1667,6 +1695,8 @@ | Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:19 | ...; | | Finally.cs:272:18:272:18 | 3 | Finally.cs:272:18:272:18 | 3 | | Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | call to constructor Object | +| Foreach.cs:4:7:4:13 | call to method | Foreach.cs:4:7:4:13 | this access | +| Foreach.cs:4:7:4:13 | this access | Foreach.cs:4:7:4:13 | this access | | Foreach.cs:4:7:4:13 | {...} | Foreach.cs:4:7:4:13 | {...} | | Foreach.cs:7:5:10:5 | {...} | Foreach.cs:7:5:10:5 | {...} | | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:29:8:32 | access to parameter args | @@ -1721,8 +1751,12 @@ | Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:6:27:6:27 | access to field H | | Initializers.cs:6:31:6:31 | 2 | Initializers.cs:6:31:6:31 | 2 | | Initializers.cs:8:5:8:16 | call to constructor Object | Initializers.cs:8:5:8:16 | call to constructor Object | +| Initializers.cs:8:5:8:16 | call to method | Initializers.cs:8:5:8:16 | this access | +| Initializers.cs:8:5:8:16 | this access | Initializers.cs:8:5:8:16 | this access | | Initializers.cs:8:20:8:22 | {...} | Initializers.cs:8:20:8:22 | {...} | | Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:10:5:10:16 | call to constructor Object | +| Initializers.cs:10:5:10:16 | call to method | Initializers.cs:10:5:10:16 | this access | +| Initializers.cs:10:5:10:16 | this access | Initializers.cs:10:5:10:16 | this access | | Initializers.cs:10:28:10:30 | {...} | Initializers.cs:10:28:10:30 | {...} | | Initializers.cs:13:5:16:5 | {...} | Initializers.cs:13:5:16:5 | {...} | | Initializers.cs:14:9:14:54 | ... ...; | Initializers.cs:14:9:14:54 | ... ...; | @@ -1745,6 +1779,8 @@ | Initializers.cs:18:16:18:20 | ... = ... | Initializers.cs:18:20:18:20 | 1 | | Initializers.cs:18:20:18:20 | 1 | Initializers.cs:18:20:18:20 | 1 | | Initializers.cs:20:11:20:23 | call to constructor Object | Initializers.cs:20:11:20:23 | call to constructor Object | +| Initializers.cs:20:11:20:23 | call to method | Initializers.cs:20:11:20:23 | this access | +| Initializers.cs:20:11:20:23 | this access | Initializers.cs:20:11:20:23 | this access | | Initializers.cs:20:11:20:23 | {...} | Initializers.cs:20:11:20:23 | {...} | | Initializers.cs:22:23:22:23 | access to field F | Initializers.cs:22:23:22:23 | this access | | Initializers.cs:22:23:22:23 | this access | Initializers.cs:22:23:22:23 | this access | @@ -1758,6 +1794,8 @@ | Initializers.cs:28:13:28:13 | this access | Initializers.cs:28:13:28:13 | this access | | Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:28:13:28:13 | this access | | Initializers.cs:28:17:28:17 | 2 | Initializers.cs:28:17:28:17 | 2 | +| Initializers.cs:31:9:31:11 | call to method | Initializers.cs:31:9:31:11 | this access | +| Initializers.cs:31:9:31:11 | this access | Initializers.cs:31:9:31:11 | this access | | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | | Initializers.cs:31:24:31:33 | {...} | Initializers.cs:31:24:31:33 | {...} | | Initializers.cs:31:26:31:26 | access to field I | Initializers.cs:31:26:31:26 | this access | @@ -1773,6 +1811,8 @@ | Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:31:33:36 | ...; | | Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:35:33:35 | access to parameter i | | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | +| Initializers.cs:35:9:35:11 | call to method | Initializers.cs:35:9:35:11 | this access | +| Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | this access | | Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:27:35:40 | {...} | | Initializers.cs:35:29:35:29 | access to field I | Initializers.cs:35:29:35:29 | this access | | Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:29:35:29 | this access | @@ -1782,8 +1822,12 @@ | Initializers.cs:35:33:35:37 | ... + ... | Initializers.cs:35:33:35:33 | access to parameter i | | Initializers.cs:35:37:35:37 | access to parameter j | Initializers.cs:35:37:35:37 | access to parameter j | | Initializers.cs:39:7:39:23 | call to constructor Object | Initializers.cs:39:7:39:23 | call to constructor Object | +| Initializers.cs:39:7:39:23 | call to method | Initializers.cs:39:7:39:23 | this access | +| Initializers.cs:39:7:39:23 | this access | Initializers.cs:39:7:39:23 | this access | | Initializers.cs:39:7:39:23 | {...} | Initializers.cs:39:7:39:23 | {...} | | Initializers.cs:41:11:41:18 | call to constructor Object | Initializers.cs:41:11:41:18 | call to constructor Object | +| Initializers.cs:41:11:41:18 | call to method | Initializers.cs:41:11:41:18 | this access | +| Initializers.cs:41:11:41:18 | this access | Initializers.cs:41:11:41:18 | this access | | Initializers.cs:41:11:41:18 | {...} | Initializers.cs:41:11:41:18 | {...} | | Initializers.cs:52:5:66:5 | {...} | Initializers.cs:52:5:66:5 | {...} | | Initializers.cs:54:9:54:96 | ... ...; | Initializers.cs:54:9:54:96 | ... ...; | @@ -1893,6 +1937,8 @@ | Initializers.cs:64:54:64:54 | 0 | Initializers.cs:64:54:64:54 | 0 | | Initializers.cs:64:59:64:61 | "1" | Initializers.cs:64:59:64:61 | "1" | | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | +| LoopUnrolling.cs:5:7:5:19 | call to method | LoopUnrolling.cs:5:7:5:19 | this access | +| LoopUnrolling.cs:5:7:5:19 | this access | LoopUnrolling.cs:5:7:5:19 | this access | | LoopUnrolling.cs:5:7:5:19 | {...} | LoopUnrolling.cs:5:7:5:19 | {...} | | LoopUnrolling.cs:8:5:13:5 | {...} | LoopUnrolling.cs:8:5:13:5 | {...} | | LoopUnrolling.cs:9:9:10:19 | if (...) ... | LoopUnrolling.cs:9:9:10:19 | if (...) ... | @@ -2067,6 +2113,8 @@ | LoopUnrolling.cs:99:13:99:33 | ...; | LoopUnrolling.cs:99:13:99:33 | ...; | | LoopUnrolling.cs:99:31:99:31 | access to local variable x | LoopUnrolling.cs:99:31:99:31 | access to local variable x | | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | +| MultiImplementationA.cs:4:7:4:8 | call to method | MultiImplementationA.cs:4:7:4:8 | this access | +| MultiImplementationA.cs:4:7:4:8 | this access | MultiImplementationA.cs:4:7:4:8 | this access | | MultiImplementationA.cs:4:7:4:8 | {...} | MultiImplementationA.cs:4:7:4:8 | {...} | | MultiImplementationA.cs:6:22:6:31 | throw ... | MultiImplementationA.cs:6:28:6:31 | null | | MultiImplementationA.cs:6:28:6:31 | null | MultiImplementationA.cs:6:28:6:31 | null | @@ -2092,6 +2140,8 @@ | MultiImplementationA.cs:18:9:18:22 | M2(...) | MultiImplementationA.cs:18:9:18:22 | M2(...) | | MultiImplementationA.cs:18:21:18:21 | 0 | MultiImplementationA.cs:18:21:18:21 | 0 | | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | +| MultiImplementationA.cs:20:12:20:13 | call to method | MultiImplementationA.cs:20:12:20:13 | this access | +| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | this access | | MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:22:20:31 | {...} | | MultiImplementationA.cs:20:24:20:24 | access to field F | MultiImplementationA.cs:20:24:20:24 | this access | | MultiImplementationA.cs:20:24:20:24 | this access | MultiImplementationA.cs:20:24:20:24 | this access | @@ -2108,10 +2158,14 @@ | MultiImplementationA.cs:24:32:24:34 | ... = ... | MultiImplementationA.cs:24:16:24:16 | this access | | MultiImplementationA.cs:24:34:24:34 | 0 | MultiImplementationA.cs:24:34:24:34 | 0 | | MultiImplementationA.cs:28:7:28:8 | call to constructor Object | MultiImplementationA.cs:28:7:28:8 | call to constructor Object | +| MultiImplementationA.cs:28:7:28:8 | call to method | MultiImplementationA.cs:28:7:28:8 | this access | +| MultiImplementationA.cs:28:7:28:8 | this access | MultiImplementationA.cs:28:7:28:8 | this access | | MultiImplementationA.cs:28:7:28:8 | {...} | MultiImplementationA.cs:28:7:28:8 | {...} | | MultiImplementationA.cs:30:28:30:37 | throw ... | MultiImplementationA.cs:30:34:30:37 | null | | MultiImplementationA.cs:30:34:30:37 | null | MultiImplementationA.cs:30:34:30:37 | null | | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | +| MultiImplementationA.cs:34:15:34:16 | call to method | MultiImplementationA.cs:34:15:34:16 | this access | +| MultiImplementationA.cs:34:15:34:16 | this access | MultiImplementationA.cs:34:15:34:16 | this access | | MultiImplementationA.cs:34:15:34:16 | {...} | MultiImplementationA.cs:34:15:34:16 | {...} | | MultiImplementationA.cs:36:14:36:28 | {...} | MultiImplementationA.cs:36:14:36:28 | {...} | | MultiImplementationA.cs:36:16:36:26 | throw ...; | MultiImplementationA.cs:36:22:36:25 | null | @@ -2120,6 +2174,8 @@ | MultiImplementationA.cs:37:16:37:26 | throw ...; | MultiImplementationA.cs:37:22:37:25 | null | | MultiImplementationA.cs:37:22:37:25 | null | MultiImplementationA.cs:37:22:37:25 | null | | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | +| MultiImplementationB.cs:1:7:1:8 | call to method | MultiImplementationB.cs:1:7:1:8 | this access | +| MultiImplementationB.cs:1:7:1:8 | this access | MultiImplementationB.cs:1:7:1:8 | this access | | MultiImplementationB.cs:1:7:1:8 | {...} | MultiImplementationB.cs:1:7:1:8 | {...} | | MultiImplementationB.cs:3:22:3:22 | 0 | MultiImplementationB.cs:3:22:3:22 | 0 | | MultiImplementationB.cs:4:25:4:37 | {...} | MultiImplementationB.cs:4:25:4:37 | {...} | @@ -2143,6 +2199,8 @@ | MultiImplementationB.cs:16:21:16:30 | throw ... | MultiImplementationB.cs:16:27:16:30 | null | | MultiImplementationB.cs:16:27:16:30 | null | MultiImplementationB.cs:16:27:16:30 | null | | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | +| MultiImplementationB.cs:18:12:18:13 | call to method | MultiImplementationB.cs:18:12:18:13 | this access | +| MultiImplementationB.cs:18:12:18:13 | this access | MultiImplementationB.cs:18:12:18:13 | this access | | MultiImplementationB.cs:18:22:18:36 | {...} | MultiImplementationB.cs:18:22:18:36 | {...} | | MultiImplementationB.cs:18:24:18:34 | throw ...; | MultiImplementationB.cs:18:30:18:33 | null | | MultiImplementationB.cs:18:30:18:33 | null | MultiImplementationB.cs:18:30:18:33 | null | @@ -2159,11 +2217,17 @@ | MultiImplementationB.cs:22:32:22:34 | ... = ... | MultiImplementationB.cs:22:16:22:16 | this access | | MultiImplementationB.cs:22:34:22:34 | 1 | MultiImplementationB.cs:22:34:22:34 | 1 | | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | +| MultiImplementationB.cs:25:7:25:8 | call to method | MultiImplementationB.cs:25:7:25:8 | this access | +| MultiImplementationB.cs:25:7:25:8 | this access | MultiImplementationB.cs:25:7:25:8 | this access | | MultiImplementationB.cs:25:7:25:8 | {...} | MultiImplementationB.cs:25:7:25:8 | {...} | | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | +| MultiImplementationB.cs:30:15:30:16 | call to method | MultiImplementationB.cs:30:15:30:16 | this access | +| MultiImplementationB.cs:30:15:30:16 | this access | MultiImplementationB.cs:30:15:30:16 | this access | | MultiImplementationB.cs:30:15:30:16 | {...} | MultiImplementationB.cs:30:15:30:16 | {...} | | MultiImplementationB.cs:32:17:32:17 | 0 | MultiImplementationB.cs:32:17:32:17 | 0 | | NullCoalescing.cs:1:7:1:20 | call to constructor Object | NullCoalescing.cs:1:7:1:20 | call to constructor Object | +| NullCoalescing.cs:1:7:1:20 | call to method | NullCoalescing.cs:1:7:1:20 | this access | +| NullCoalescing.cs:1:7:1:20 | this access | NullCoalescing.cs:1:7:1:20 | this access | | NullCoalescing.cs:1:7:1:20 | {...} | NullCoalescing.cs:1:7:1:20 | {...} | | NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:23:3:23 | access to parameter i | | NullCoalescing.cs:3:23:3:28 | ... ?? ... | NullCoalescing.cs:3:23:3:23 | access to parameter i | @@ -2214,18 +2278,24 @@ | NullCoalescing.cs:17:19:17:19 | access to parameter i | NullCoalescing.cs:17:19:17:19 | access to parameter i | | NullCoalescing.cs:17:24:17:24 | 1 | NullCoalescing.cs:17:24:17:24 | 1 | | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | +| PartialImplementationA.cs:3:12:3:18 | call to method | PartialImplementationA.cs:3:12:3:18 | this access | +| PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | this access | | PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:27:3:29 | {...} | | PartialImplementationB.cs:3:16:3:16 | access to field F | PartialImplementationB.cs:3:16:3:16 | this access | | PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationB.cs:3:16:3:16 | this access | | PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationB.cs:3:16:3:16 | this access | | PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationB.cs:3:20:3:20 | 0 | | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | +| PartialImplementationB.cs:4:12:4:18 | call to method | PartialImplementationB.cs:4:12:4:18 | this access | +| PartialImplementationB.cs:4:12:4:18 | this access | PartialImplementationB.cs:4:12:4:18 | this access | | PartialImplementationB.cs:4:22:4:24 | {...} | PartialImplementationB.cs:4:22:4:24 | {...} | | PartialImplementationB.cs:5:16:5:16 | access to property P | PartialImplementationB.cs:5:16:5:16 | this access | | PartialImplementationB.cs:5:16:5:16 | this access | PartialImplementationB.cs:5:16:5:16 | this access | | PartialImplementationB.cs:5:32:5:34 | ... = ... | PartialImplementationB.cs:5:16:5:16 | this access | | PartialImplementationB.cs:5:34:5:34 | 0 | PartialImplementationB.cs:5:34:5:34 | 0 | | Patterns.cs:3:7:3:14 | call to constructor Object | Patterns.cs:3:7:3:14 | call to constructor Object | +| Patterns.cs:3:7:3:14 | call to method | Patterns.cs:3:7:3:14 | this access | +| Patterns.cs:3:7:3:14 | this access | Patterns.cs:3:7:3:14 | this access | | Patterns.cs:3:7:3:14 | {...} | Patterns.cs:3:7:3:14 | {...} | | Patterns.cs:6:5:43:5 | {...} | Patterns.cs:6:5:43:5 | {...} | | Patterns.cs:7:9:7:24 | ... ...; | Patterns.cs:7:9:7:24 | ... ...; | @@ -2398,6 +2468,8 @@ | Patterns.cs:97:13:97:39 | ...; | Patterns.cs:97:13:97:39 | ...; | | Patterns.cs:97:31:97:37 | "not C" | Patterns.cs:97:31:97:37 | "not C" | | PostDominance.cs:3:7:3:19 | call to constructor Object | PostDominance.cs:3:7:3:19 | call to constructor Object | +| PostDominance.cs:3:7:3:19 | call to method | PostDominance.cs:3:7:3:19 | this access | +| PostDominance.cs:3:7:3:19 | this access | PostDominance.cs:3:7:3:19 | this access | | PostDominance.cs:3:7:3:19 | {...} | PostDominance.cs:3:7:3:19 | {...} | | PostDominance.cs:6:5:8:5 | {...} | PostDominance.cs:6:5:8:5 | {...} | | PostDominance.cs:7:9:7:28 | call to method WriteLine | PostDominance.cs:7:27:7:27 | access to parameter s | @@ -2425,6 +2497,8 @@ | PostDominance.cs:21:9:21:29 | ...; | PostDominance.cs:21:9:21:29 | ...; | | PostDominance.cs:21:27:21:27 | access to parameter s | PostDominance.cs:21:27:21:27 | access to parameter s | | Qualifiers.cs:1:7:1:16 | call to constructor Object | Qualifiers.cs:1:7:1:16 | call to constructor Object | +| Qualifiers.cs:1:7:1:16 | call to method | Qualifiers.cs:1:7:1:16 | this access | +| Qualifiers.cs:1:7:1:16 | this access | Qualifiers.cs:1:7:1:16 | this access | | Qualifiers.cs:1:7:1:16 | {...} | Qualifiers.cs:1:7:1:16 | {...} | | Qualifiers.cs:7:28:7:31 | null | Qualifiers.cs:7:28:7:31 | null | | Qualifiers.cs:8:41:8:44 | null | Qualifiers.cs:8:41:8:44 | null | @@ -2484,6 +2558,8 @@ | Qualifiers.cs:30:13:30:37 | call to method StaticMethod | Qualifiers.cs:30:13:30:37 | call to method StaticMethod | | Qualifiers.cs:30:13:30:46 | call to method Method | Qualifiers.cs:30:13:30:37 | call to method StaticMethod | | Switch.cs:3:7:3:12 | call to constructor Object | Switch.cs:3:7:3:12 | call to constructor Object | +| Switch.cs:3:7:3:12 | call to method | Switch.cs:3:7:3:12 | this access | +| Switch.cs:3:7:3:12 | this access | Switch.cs:3:7:3:12 | this access | | Switch.cs:3:7:3:12 | {...} | Switch.cs:3:7:3:12 | {...} | | Switch.cs:6:5:8:5 | {...} | Switch.cs:6:5:8:5 | {...} | | Switch.cs:7:9:7:22 | switch (...) {...} | Switch.cs:7:9:7:22 | switch (...) {...} | @@ -2734,6 +2810,8 @@ | Switch.cs:175:42:175:46 | "def" | Switch.cs:175:42:175:46 | "def" | | Switch.cs:176:17:176:22 | break; | Switch.cs:176:17:176:22 | break; | | TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | call to constructor Object | +| TypeAccesses.cs:1:7:1:18 | call to method | TypeAccesses.cs:1:7:1:18 | this access | +| TypeAccesses.cs:1:7:1:18 | this access | TypeAccesses.cs:1:7:1:18 | this access | | TypeAccesses.cs:1:7:1:18 | {...} | TypeAccesses.cs:1:7:1:18 | {...} | | TypeAccesses.cs:4:5:9:5 | {...} | TypeAccesses.cs:4:5:9:5 | {...} | | TypeAccesses.cs:5:9:5:26 | ... ...; | TypeAccesses.cs:5:9:5:26 | ... ...; | @@ -2753,6 +2831,8 @@ | TypeAccesses.cs:8:13:8:27 | Type t = ... | TypeAccesses.cs:8:17:8:27 | typeof(...) | | TypeAccesses.cs:8:17:8:27 | typeof(...) | TypeAccesses.cs:8:17:8:27 | typeof(...) | | VarDecls.cs:3:7:3:14 | call to constructor Object | VarDecls.cs:3:7:3:14 | call to constructor Object | +| VarDecls.cs:3:7:3:14 | call to method | VarDecls.cs:3:7:3:14 | this access | +| VarDecls.cs:3:7:3:14 | this access | VarDecls.cs:3:7:3:14 | this access | | VarDecls.cs:3:7:3:14 | {...} | VarDecls.cs:3:7:3:14 | {...} | | VarDecls.cs:6:5:11:5 | {...} | VarDecls.cs:6:5:11:5 | {...} | | VarDecls.cs:7:9:10:9 | fixed(...) { ... } | VarDecls.cs:7:9:10:9 | fixed(...) { ... } | @@ -2795,6 +2875,8 @@ | VarDecls.cs:25:24:25:24 | access to local variable x | VarDecls.cs:25:24:25:24 | access to local variable x | | VarDecls.cs:25:28:25:28 | access to local variable y | VarDecls.cs:25:28:25:28 | access to local variable y | | VarDecls.cs:28:11:28:11 | call to constructor Object | VarDecls.cs:28:11:28:11 | call to constructor Object | +| VarDecls.cs:28:11:28:11 | call to method | VarDecls.cs:28:11:28:11 | this access | +| VarDecls.cs:28:11:28:11 | this access | VarDecls.cs:28:11:28:11 | this access | | VarDecls.cs:28:11:28:11 | {...} | VarDecls.cs:28:11:28:11 | {...} | | VarDecls.cs:28:51:28:53 | {...} | VarDecls.cs:28:51:28:53 | {...} | | cflow.cs:6:5:35:5 | {...} | cflow.cs:6:5:35:5 | {...} | @@ -3049,6 +3131,8 @@ | cflow.cs:127:68:127:81 | ...; | cflow.cs:127:68:127:81 | ...; | | cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:76:127:80 | access to parameter value | | cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:129:5:129:15 | call to constructor Object | +| cflow.cs:129:5:129:15 | call to method | cflow.cs:129:5:129:15 | this access | +| cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | this access | | cflow.cs:130:5:132:5 | {...} | cflow.cs:130:5:132:5 | {...} | | cflow.cs:131:9:131:13 | access to field Field | cflow.cs:131:9:131:13 | this access | | cflow.cs:131:9:131:13 | this access | cflow.cs:131:9:131:13 | this access | @@ -3372,6 +3456,8 @@ | cflow.cs:275:13:275:41 | call to method WriteLine | cflow.cs:275:31:275:40 | "not dead" | | cflow.cs:275:13:275:42 | ...; | cflow.cs:275:13:275:42 | ...; | | cflow.cs:275:31:275:40 | "not dead" | cflow.cs:275:31:275:40 | "not dead" | +| cflow.cs:282:5:282:18 | call to method | cflow.cs:282:5:282:18 | this access | +| cflow.cs:282:5:282:18 | this access | cflow.cs:282:5:282:18 | this access | | cflow.cs:282:24:282:27 | call to constructor ControlFlow | cflow.cs:282:24:282:27 | call to constructor ControlFlow | | cflow.cs:282:31:282:33 | {...} | cflow.cs:282:31:282:33 | {...} | | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub | @@ -3381,11 +3467,15 @@ | cflow.cs:286:34:286:45 | call to method ToString | cflow.cs:286:34:286:34 | access to parameter i | | cflow.cs:286:48:286:50 | {...} | cflow.cs:286:48:286:50 | {...} | | cflow.cs:289:7:289:18 | call to constructor Object | cflow.cs:289:7:289:18 | call to constructor Object | +| cflow.cs:289:7:289:18 | call to method | cflow.cs:289:7:289:18 | this access | +| cflow.cs:289:7:289:18 | this access | cflow.cs:289:7:289:18 | this access | | cflow.cs:289:7:289:18 | {...} | cflow.cs:289:7:289:18 | {...} | | cflow.cs:291:38:291:38 | access to parameter f | cflow.cs:291:38:291:38 | access to parameter f | | cflow.cs:291:38:291:41 | delegate call | cflow.cs:291:38:291:38 | access to parameter f | | cflow.cs:291:40:291:40 | 0 | cflow.cs:291:40:291:40 | 0 | | cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:5:296:25 | call to constructor Object | +| cflow.cs:296:5:296:25 | call to method | cflow.cs:296:5:296:25 | this access | +| cflow.cs:296:5:296:25 | this access | cflow.cs:296:5:296:25 | this access | | cflow.cs:296:52:296:54 | {...} | cflow.cs:296:52:296:54 | {...} | | cflow.cs:299:5:301:5 | {...} | cflow.cs:299:5:301:5 | {...} | | cflow.cs:300:9:300:72 | object creation of type NegationInConstructor | cflow.cs:300:38:300:38 | 0 | @@ -3401,6 +3491,8 @@ | cflow.cs:300:61:300:64 | null | cflow.cs:300:61:300:64 | null | | cflow.cs:300:70:300:71 | "" | cflow.cs:300:70:300:71 | "" | | cflow.cs:304:7:304:18 | call to constructor Object | cflow.cs:304:7:304:18 | call to constructor Object | +| cflow.cs:304:7:304:18 | call to method | cflow.cs:304:7:304:18 | this access | +| cflow.cs:304:7:304:18 | this access | cflow.cs:304:7:304:18 | this access | | cflow.cs:304:7:304:18 | {...} | cflow.cs:304:7:304:18 | {...} | | cflow.cs:306:60:310:5 | (...) => ... | cflow.cs:306:60:310:5 | (...) => ... | | cflow.cs:307:5:310:5 | {...} | cflow.cs:307:5:310:5 | {...} | diff --git a/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected b/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected index 11880f4f8252..e3d13701cffd 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected @@ -1,4 +1,6 @@ | AccessorCalls.cs:1:7:1:19 | call to constructor Object | AccessorCalls.cs:1:7:1:19 | call to constructor Object | normal | +| AccessorCalls.cs:1:7:1:19 | call to method | AccessorCalls.cs:1:7:1:19 | call to method | normal | +| AccessorCalls.cs:1:7:1:19 | this access | AccessorCalls.cs:1:7:1:19 | this access | normal | | AccessorCalls.cs:1:7:1:19 | {...} | AccessorCalls.cs:1:7:1:19 | {...} | normal | | AccessorCalls.cs:5:30:5:30 | access to parameter i | AccessorCalls.cs:5:30:5:30 | access to parameter i | normal | | AccessorCalls.cs:5:37:5:39 | {...} | AccessorCalls.cs:5:37:5:39 | {...} | normal | @@ -290,6 +292,8 @@ | AccessorCalls.cs:73:78:73:81 | dynamic access to element | AccessorCalls.cs:73:78:73:81 | dynamic access to element | normal | | AccessorCalls.cs:73:80:73:80 | 1 | AccessorCalls.cs:73:80:73:80 | 1 | normal | | ArrayCreation.cs:1:7:1:19 | call to constructor Object | ArrayCreation.cs:1:7:1:19 | call to constructor Object | normal | +| ArrayCreation.cs:1:7:1:19 | call to method | ArrayCreation.cs:1:7:1:19 | call to method | normal | +| ArrayCreation.cs:1:7:1:19 | this access | ArrayCreation.cs:1:7:1:19 | this access | normal | | ArrayCreation.cs:1:7:1:19 | {...} | ArrayCreation.cs:1:7:1:19 | {...} | normal | | ArrayCreation.cs:3:19:3:28 | array creation of type Int32[] | ArrayCreation.cs:3:19:3:28 | array creation of type Int32[] | normal | | ArrayCreation.cs:3:27:3:27 | 0 | ArrayCreation.cs:3:27:3:27 | 0 | normal | @@ -312,6 +316,8 @@ | ArrayCreation.cs:9:45:9:45 | 2 | ArrayCreation.cs:9:45:9:45 | 2 | normal | | ArrayCreation.cs:9:48:9:48 | 3 | ArrayCreation.cs:9:48:9:48 | 3 | normal | | Assert.cs:5:7:5:17 | call to constructor Object | Assert.cs:5:7:5:17 | call to constructor Object | normal | +| Assert.cs:5:7:5:17 | call to method | Assert.cs:5:7:5:17 | call to method | normal | +| Assert.cs:5:7:5:17 | this access | Assert.cs:5:7:5:17 | this access | normal | | Assert.cs:5:7:5:17 | {...} | Assert.cs:5:7:5:17 | {...} | normal | | Assert.cs:8:5:12:5 | {...} | Assert.cs:10:9:10:31 | call to method Assert | exit | | Assert.cs:8:5:12:5 | {...} | Assert.cs:11:9:11:35 | call to method WriteLine | normal | @@ -774,6 +780,8 @@ | Assert.cs:140:33:140:34 | access to parameter b3 | Assert.cs:140:33:140:34 | access to parameter b3 | normal | | Assert.cs:141:9:141:15 | return ...; | Assert.cs:141:9:141:15 | return ...; | return | | Assignments.cs:1:7:1:17 | call to constructor Object | Assignments.cs:1:7:1:17 | call to constructor Object | normal | +| Assignments.cs:1:7:1:17 | call to method | Assignments.cs:1:7:1:17 | call to method | normal | +| Assignments.cs:1:7:1:17 | this access | Assignments.cs:1:7:1:17 | this access | normal | | Assignments.cs:1:7:1:17 | {...} | Assignments.cs:1:7:1:17 | {...} | normal | | Assignments.cs:4:5:15:5 | {...} | Assignments.cs:14:9:14:35 | ... += ... | normal | | Assignments.cs:5:9:5:18 | ... ...; | Assignments.cs:5:13:5:17 | Int32 x = ... | normal | @@ -814,6 +822,8 @@ | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:19:9:19:17 | return ...; | return | | Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:19:16:19:16 | access to parameter x | normal | | BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | call to constructor Object | normal | +| BreakInTry.cs:1:7:1:16 | call to method | BreakInTry.cs:1:7:1:16 | call to method | normal | +| BreakInTry.cs:1:7:1:16 | this access | BreakInTry.cs:1:7:1:16 | this access | normal | | BreakInTry.cs:1:7:1:16 | {...} | BreakInTry.cs:1:7:1:16 | {...} | normal | | BreakInTry.cs:4:5:18:5 | {...} | BreakInTry.cs:15:17:15:28 | ... == ... | false | | BreakInTry.cs:4:5:18:5 | {...} | BreakInTry.cs:16:17:16:17 | ; | normal | @@ -941,6 +951,8 @@ | BreakInTry.cs:67:28:67:31 | null | BreakInTry.cs:67:28:67:31 | null | normal | | BreakInTry.cs:68:21:68:26 | break; | BreakInTry.cs:68:21:68:26 | break; | break | | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | normal | +| CompileTimeOperators.cs:3:7:3:26 | call to method | CompileTimeOperators.cs:3:7:3:26 | call to method | normal | +| CompileTimeOperators.cs:3:7:3:26 | this access | CompileTimeOperators.cs:3:7:3:26 | this access | normal | | CompileTimeOperators.cs:3:7:3:26 | {...} | CompileTimeOperators.cs:3:7:3:26 | {...} | normal | | CompileTimeOperators.cs:6:5:8:5 | {...} | CompileTimeOperators.cs:7:9:7:28 | return ...; | return | | CompileTimeOperators.cs:7:9:7:28 | return ...; | CompileTimeOperators.cs:7:9:7:28 | return ...; | return | @@ -956,6 +968,8 @@ | CompileTimeOperators.cs:22:16:22:24 | nameof(...) | CompileTimeOperators.cs:22:16:22:24 | nameof(...) | normal | | CompileTimeOperators.cs:22:23:22:23 | access to parameter i | CompileTimeOperators.cs:22:23:22:23 | access to parameter i | normal | | CompileTimeOperators.cs:26:7:26:22 | call to constructor Object | CompileTimeOperators.cs:26:7:26:22 | call to constructor Object | normal | +| CompileTimeOperators.cs:26:7:26:22 | call to method | CompileTimeOperators.cs:26:7:26:22 | call to method | normal | +| CompileTimeOperators.cs:26:7:26:22 | this access | CompileTimeOperators.cs:26:7:26:22 | this access | normal | | CompileTimeOperators.cs:26:7:26:22 | {...} | CompileTimeOperators.cs:26:7:26:22 | {...} | normal | | CompileTimeOperators.cs:29:5:41:5 | {...} | CompileTimeOperators.cs:37:13:37:40 | call to method WriteLine | goto(End) [normal] (0) | | CompileTimeOperators.cs:29:5:41:5 | {...} | CompileTimeOperators.cs:37:13:37:40 | call to method WriteLine | throw(Exception) [normal] (0) | @@ -984,6 +998,8 @@ | CompileTimeOperators.cs:40:14:40:38 | ...; | CompileTimeOperators.cs:40:14:40:37 | call to method WriteLine | normal | | CompileTimeOperators.cs:40:32:40:36 | "End" | CompileTimeOperators.cs:40:32:40:36 | "End" | normal | | ConditionalAccess.cs:1:7:1:23 | call to constructor Object | ConditionalAccess.cs:1:7:1:23 | call to constructor Object | normal | +| ConditionalAccess.cs:1:7:1:23 | call to method | ConditionalAccess.cs:1:7:1:23 | call to method | normal | +| ConditionalAccess.cs:1:7:1:23 | this access | ConditionalAccess.cs:1:7:1:23 | this access | normal | | ConditionalAccess.cs:1:7:1:23 | {...} | ConditionalAccess.cs:1:7:1:23 | {...} | normal | | ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:26:3:26 | access to parameter i | non-null | | ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:26:3:26 | access to parameter i | null | @@ -1070,6 +1086,8 @@ | ConditionalAccess.cs:41:75:41:78 | ", " | ConditionalAccess.cs:41:75:41:78 | ", " | normal | | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | normal | | Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | call to constructor Object | normal | +| Conditions.cs:1:7:1:16 | call to method | Conditions.cs:1:7:1:16 | call to method | normal | +| Conditions.cs:1:7:1:16 | this access | Conditions.cs:1:7:1:16 | this access | normal | | Conditions.cs:1:7:1:16 | {...} | Conditions.cs:1:7:1:16 | {...} | normal | | Conditions.cs:4:5:9:5 | {...} | Conditions.cs:7:13:7:16 | !... | false | | Conditions.cs:4:5:9:5 | {...} | Conditions.cs:8:13:8:15 | ...-- | normal | @@ -1427,6 +1445,8 @@ | Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:44:149:46 | {...} | normal | | Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:45:149:45 | access to local variable s | normal | | ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | call to constructor Object | normal | +| ExitMethods.cs:6:7:6:17 | call to method | ExitMethods.cs:6:7:6:17 | call to method | normal | +| ExitMethods.cs:6:7:6:17 | this access | ExitMethods.cs:6:7:6:17 | this access | normal | | ExitMethods.cs:6:7:6:17 | {...} | ExitMethods.cs:6:7:6:17 | {...} | normal | | ExitMethods.cs:9:5:12:5 | {...} | ExitMethods.cs:11:9:11:15 | return ...; | return | | ExitMethods.cs:10:9:10:24 | call to method ErrorMaybe | ExitMethods.cs:10:9:10:24 | call to method ErrorMaybe | normal | @@ -1629,6 +1649,8 @@ | Extensions.cs:25:23:25:32 | access to method Parse | Extensions.cs:25:23:25:32 | access to method Parse | normal | | Extensions.cs:25:23:25:32 | delegate creation of type Func | Extensions.cs:25:23:25:32 | delegate creation of type Func | normal | | Finally.cs:3:14:3:20 | call to constructor Object | Finally.cs:3:14:3:20 | call to constructor Object | normal | +| Finally.cs:3:14:3:20 | call to method | Finally.cs:3:14:3:20 | call to method | normal | +| Finally.cs:3:14:3:20 | this access | Finally.cs:3:14:3:20 | this access | normal | | Finally.cs:3:14:3:20 | {...} | Finally.cs:3:14:3:20 | {...} | normal | | Finally.cs:8:5:17:5 | {...} | Finally.cs:15:13:15:40 | call to method WriteLine | normal | | Finally.cs:8:5:17:5 | {...} | Finally.cs:15:13:15:40 | call to method WriteLine | throw(Exception) [normal] (0) | @@ -2018,10 +2040,16 @@ | Finally.cs:167:17:167:38 | ...; | Finally.cs:167:17:167:37 | call to method WriteLine | normal | | Finally.cs:167:35:167:36 | "" | Finally.cs:167:35:167:36 | "" | normal | | Finally.cs:172:11:172:20 | call to constructor Exception | Finally.cs:172:11:172:20 | call to constructor Exception | normal | +| Finally.cs:172:11:172:20 | call to method | Finally.cs:172:11:172:20 | call to method | normal | +| Finally.cs:172:11:172:20 | this access | Finally.cs:172:11:172:20 | this access | normal | | Finally.cs:172:11:172:20 | {...} | Finally.cs:172:11:172:20 | {...} | normal | | Finally.cs:173:11:173:20 | call to constructor Exception | Finally.cs:173:11:173:20 | call to constructor Exception | normal | +| Finally.cs:173:11:173:20 | call to method | Finally.cs:173:11:173:20 | call to method | normal | +| Finally.cs:173:11:173:20 | this access | Finally.cs:173:11:173:20 | this access | normal | | Finally.cs:173:11:173:20 | {...} | Finally.cs:173:11:173:20 | {...} | normal | | Finally.cs:174:11:174:20 | call to constructor Exception | Finally.cs:174:11:174:20 | call to constructor Exception | normal | +| Finally.cs:174:11:174:20 | call to method | Finally.cs:174:11:174:20 | call to method | normal | +| Finally.cs:174:11:174:20 | this access | Finally.cs:174:11:174:20 | this access | normal | | Finally.cs:174:11:174:20 | {...} | Finally.cs:174:11:174:20 | {...} | normal | | Finally.cs:177:5:193:5 | {...} | Finally.cs:186:21:186:22 | access to parameter b2 | false | | Finally.cs:177:5:193:5 | {...} | Finally.cs:186:21:186:22 | access to parameter b2 | throw(Exception) [false] (0) | @@ -2267,6 +2295,8 @@ | Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:18 | ... = ... | normal | | Finally.cs:272:18:272:18 | 3 | Finally.cs:272:18:272:18 | 3 | normal | | Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | call to constructor Object | normal | +| Foreach.cs:4:7:4:13 | call to method | Foreach.cs:4:7:4:13 | call to method | normal | +| Foreach.cs:4:7:4:13 | this access | Foreach.cs:4:7:4:13 | this access | normal | | Foreach.cs:4:7:4:13 | {...} | Foreach.cs:4:7:4:13 | {...} | normal | | Foreach.cs:7:5:10:5 | {...} | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | empty | | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | empty | @@ -2324,8 +2354,12 @@ | Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:6:27:6:31 | ... + ... | normal | | Initializers.cs:6:31:6:31 | 2 | Initializers.cs:6:31:6:31 | 2 | normal | | Initializers.cs:8:5:8:16 | call to constructor Object | Initializers.cs:8:5:8:16 | call to constructor Object | normal | +| Initializers.cs:8:5:8:16 | call to method | Initializers.cs:8:5:8:16 | call to method | normal | +| Initializers.cs:8:5:8:16 | this access | Initializers.cs:8:5:8:16 | this access | normal | | Initializers.cs:8:20:8:22 | {...} | Initializers.cs:8:20:8:22 | {...} | normal | | Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:10:5:10:16 | call to constructor Object | normal | +| Initializers.cs:10:5:10:16 | call to method | Initializers.cs:10:5:10:16 | call to method | normal | +| Initializers.cs:10:5:10:16 | this access | Initializers.cs:10:5:10:16 | this access | normal | | Initializers.cs:10:28:10:30 | {...} | Initializers.cs:10:28:10:30 | {...} | normal | | Initializers.cs:13:5:16:5 | {...} | Initializers.cs:15:13:15:63 | Initializers[] iz = ... | normal | | Initializers.cs:14:9:14:54 | ... ...; | Initializers.cs:14:13:14:53 | Initializers i = ... | normal | @@ -2348,6 +2382,8 @@ | Initializers.cs:18:16:18:20 | ... = ... | Initializers.cs:18:16:18:20 | ... = ... | normal | | Initializers.cs:18:20:18:20 | 1 | Initializers.cs:18:20:18:20 | 1 | normal | | Initializers.cs:20:11:20:23 | call to constructor Object | Initializers.cs:20:11:20:23 | call to constructor Object | normal | +| Initializers.cs:20:11:20:23 | call to method | Initializers.cs:20:11:20:23 | call to method | normal | +| Initializers.cs:20:11:20:23 | this access | Initializers.cs:20:11:20:23 | this access | normal | | Initializers.cs:20:11:20:23 | {...} | Initializers.cs:20:11:20:23 | {...} | normal | | Initializers.cs:22:23:22:23 | access to field F | Initializers.cs:22:23:22:23 | this access | normal | | Initializers.cs:22:23:22:23 | this access | Initializers.cs:22:23:22:23 | this access | normal | @@ -2361,6 +2397,8 @@ | Initializers.cs:28:13:28:13 | this access | Initializers.cs:28:13:28:13 | this access | normal | | Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:28:13:28:17 | ... = ... | normal | | Initializers.cs:28:17:28:17 | 2 | Initializers.cs:28:17:28:17 | 2 | normal | +| Initializers.cs:31:9:31:11 | call to method | Initializers.cs:31:9:31:11 | call to method | normal | +| Initializers.cs:31:9:31:11 | this access | Initializers.cs:31:9:31:11 | this access | normal | | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | normal | | Initializers.cs:31:24:31:33 | {...} | Initializers.cs:31:26:31:30 | ... = ... | normal | | Initializers.cs:31:26:31:26 | access to field I | Initializers.cs:31:26:31:26 | this access | normal | @@ -2376,6 +2414,8 @@ | Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:31:33:35 | ... = ... | normal | | Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:35:33:35 | access to parameter i | normal | | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | normal | +| Initializers.cs:35:9:35:11 | call to method | Initializers.cs:35:9:35:11 | call to method | normal | +| Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | this access | normal | | Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:29:35:37 | ... = ... | normal | | Initializers.cs:35:29:35:29 | access to field I | Initializers.cs:35:29:35:29 | this access | normal | | Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:29:35:29 | this access | normal | @@ -2385,8 +2425,12 @@ | Initializers.cs:35:33:35:37 | ... + ... | Initializers.cs:35:33:35:37 | ... + ... | normal | | Initializers.cs:35:37:35:37 | access to parameter j | Initializers.cs:35:37:35:37 | access to parameter j | normal | | Initializers.cs:39:7:39:23 | call to constructor Object | Initializers.cs:39:7:39:23 | call to constructor Object | normal | +| Initializers.cs:39:7:39:23 | call to method | Initializers.cs:39:7:39:23 | call to method | normal | +| Initializers.cs:39:7:39:23 | this access | Initializers.cs:39:7:39:23 | this access | normal | | Initializers.cs:39:7:39:23 | {...} | Initializers.cs:39:7:39:23 | {...} | normal | | Initializers.cs:41:11:41:18 | call to constructor Object | Initializers.cs:41:11:41:18 | call to constructor Object | normal | +| Initializers.cs:41:11:41:18 | call to method | Initializers.cs:41:11:41:18 | call to method | normal | +| Initializers.cs:41:11:41:18 | this access | Initializers.cs:41:11:41:18 | this access | normal | | Initializers.cs:41:11:41:18 | {...} | Initializers.cs:41:11:41:18 | {...} | normal | | Initializers.cs:52:5:66:5 | {...} | Initializers.cs:57:13:65:9 | Compound compound = ... | normal | | Initializers.cs:54:9:54:96 | ... ...; | Initializers.cs:54:13:54:95 | Dictionary dict = ... | normal | @@ -2496,6 +2540,8 @@ | Initializers.cs:64:54:64:54 | 0 | Initializers.cs:64:54:64:54 | 0 | normal | | Initializers.cs:64:59:64:61 | "1" | Initializers.cs:64:59:64:61 | "1" | normal | | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | normal | +| LoopUnrolling.cs:5:7:5:19 | call to method | LoopUnrolling.cs:5:7:5:19 | call to method | normal | +| LoopUnrolling.cs:5:7:5:19 | this access | LoopUnrolling.cs:5:7:5:19 | this access | normal | | LoopUnrolling.cs:5:7:5:19 | {...} | LoopUnrolling.cs:5:7:5:19 | {...} | normal | | LoopUnrolling.cs:8:5:13:5 | {...} | LoopUnrolling.cs:10:13:10:19 | return ...; | return | | LoopUnrolling.cs:8:5:13:5 | {...} | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | empty | @@ -2684,6 +2730,8 @@ | LoopUnrolling.cs:99:13:99:33 | ...; | LoopUnrolling.cs:99:13:99:32 | call to method WriteLine | normal | | LoopUnrolling.cs:99:31:99:31 | access to local variable x | LoopUnrolling.cs:99:31:99:31 | access to local variable x | normal | | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | normal | +| MultiImplementationA.cs:4:7:4:8 | call to method | MultiImplementationA.cs:4:7:4:8 | call to method | normal | +| MultiImplementationA.cs:4:7:4:8 | this access | MultiImplementationA.cs:4:7:4:8 | this access | normal | | MultiImplementationA.cs:4:7:4:8 | {...} | MultiImplementationA.cs:4:7:4:8 | {...} | normal | | MultiImplementationA.cs:6:22:6:31 | throw ... | MultiImplementationA.cs:6:22:6:31 | throw ... | throw(NullReferenceException) | | MultiImplementationA.cs:6:28:6:31 | null | MultiImplementationA.cs:6:28:6:31 | null | normal | @@ -2709,6 +2757,8 @@ | MultiImplementationA.cs:18:9:18:22 | M2(...) | MultiImplementationA.cs:18:9:18:22 | M2(...) | normal | | MultiImplementationA.cs:18:21:18:21 | 0 | MultiImplementationA.cs:18:21:18:21 | 0 | normal | | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | normal | +| MultiImplementationA.cs:20:12:20:13 | call to method | MultiImplementationA.cs:20:12:20:13 | call to method | normal | +| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | this access | normal | | MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:24:20:28 | ... = ... | normal | | MultiImplementationA.cs:20:24:20:24 | access to field F | MultiImplementationA.cs:20:24:20:24 | this access | normal | | MultiImplementationA.cs:20:24:20:24 | this access | MultiImplementationA.cs:20:24:20:24 | this access | normal | @@ -2725,10 +2775,14 @@ | MultiImplementationA.cs:24:32:24:34 | ... = ... | MultiImplementationA.cs:24:32:24:34 | ... = ... | normal | | MultiImplementationA.cs:24:34:24:34 | 0 | MultiImplementationA.cs:24:34:24:34 | 0 | normal | | MultiImplementationA.cs:28:7:28:8 | call to constructor Object | MultiImplementationA.cs:28:7:28:8 | call to constructor Object | normal | +| MultiImplementationA.cs:28:7:28:8 | call to method | MultiImplementationA.cs:28:7:28:8 | call to method | normal | +| MultiImplementationA.cs:28:7:28:8 | this access | MultiImplementationA.cs:28:7:28:8 | this access | normal | | MultiImplementationA.cs:28:7:28:8 | {...} | MultiImplementationA.cs:28:7:28:8 | {...} | normal | | MultiImplementationA.cs:30:28:30:37 | throw ... | MultiImplementationA.cs:30:28:30:37 | throw ... | throw(NullReferenceException) | | MultiImplementationA.cs:30:34:30:37 | null | MultiImplementationA.cs:30:34:30:37 | null | normal | | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | normal | +| MultiImplementationA.cs:34:15:34:16 | call to method | MultiImplementationA.cs:34:15:34:16 | call to method | normal | +| MultiImplementationA.cs:34:15:34:16 | this access | MultiImplementationA.cs:34:15:34:16 | this access | normal | | MultiImplementationA.cs:34:15:34:16 | {...} | MultiImplementationA.cs:34:15:34:16 | {...} | normal | | MultiImplementationA.cs:36:14:36:28 | {...} | MultiImplementationA.cs:36:16:36:26 | throw ...; | throw(NullReferenceException) | | MultiImplementationA.cs:36:16:36:26 | throw ...; | MultiImplementationA.cs:36:16:36:26 | throw ...; | throw(NullReferenceException) | @@ -2737,6 +2791,8 @@ | MultiImplementationA.cs:37:16:37:26 | throw ...; | MultiImplementationA.cs:37:16:37:26 | throw ...; | throw(NullReferenceException) | | MultiImplementationA.cs:37:22:37:25 | null | MultiImplementationA.cs:37:22:37:25 | null | normal | | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | normal | +| MultiImplementationB.cs:1:7:1:8 | call to method | MultiImplementationB.cs:1:7:1:8 | call to method | normal | +| MultiImplementationB.cs:1:7:1:8 | this access | MultiImplementationB.cs:1:7:1:8 | this access | normal | | MultiImplementationB.cs:1:7:1:8 | {...} | MultiImplementationB.cs:1:7:1:8 | {...} | normal | | MultiImplementationB.cs:3:22:3:22 | 0 | MultiImplementationB.cs:3:22:3:22 | 0 | normal | | MultiImplementationB.cs:4:25:4:37 | {...} | MultiImplementationB.cs:4:27:4:35 | return ...; | return | @@ -2760,6 +2816,8 @@ | MultiImplementationB.cs:16:21:16:30 | throw ... | MultiImplementationB.cs:16:21:16:30 | throw ... | throw(NullReferenceException) | | MultiImplementationB.cs:16:27:16:30 | null | MultiImplementationB.cs:16:27:16:30 | null | normal | | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | normal | +| MultiImplementationB.cs:18:12:18:13 | call to method | MultiImplementationB.cs:18:12:18:13 | call to method | normal | +| MultiImplementationB.cs:18:12:18:13 | this access | MultiImplementationB.cs:18:12:18:13 | this access | normal | | MultiImplementationB.cs:18:22:18:36 | {...} | MultiImplementationB.cs:18:24:18:34 | throw ...; | throw(NullReferenceException) | | MultiImplementationB.cs:18:24:18:34 | throw ...; | MultiImplementationB.cs:18:24:18:34 | throw ...; | throw(NullReferenceException) | | MultiImplementationB.cs:18:30:18:33 | null | MultiImplementationB.cs:18:30:18:33 | null | normal | @@ -2776,11 +2834,17 @@ | MultiImplementationB.cs:22:32:22:34 | ... = ... | MultiImplementationB.cs:22:32:22:34 | ... = ... | normal | | MultiImplementationB.cs:22:34:22:34 | 1 | MultiImplementationB.cs:22:34:22:34 | 1 | normal | | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | normal | +| MultiImplementationB.cs:25:7:25:8 | call to method | MultiImplementationB.cs:25:7:25:8 | call to method | normal | +| MultiImplementationB.cs:25:7:25:8 | this access | MultiImplementationB.cs:25:7:25:8 | this access | normal | | MultiImplementationB.cs:25:7:25:8 | {...} | MultiImplementationB.cs:25:7:25:8 | {...} | normal | | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | normal | +| MultiImplementationB.cs:30:15:30:16 | call to method | MultiImplementationB.cs:30:15:30:16 | call to method | normal | +| MultiImplementationB.cs:30:15:30:16 | this access | MultiImplementationB.cs:30:15:30:16 | this access | normal | | MultiImplementationB.cs:30:15:30:16 | {...} | MultiImplementationB.cs:30:15:30:16 | {...} | normal | | MultiImplementationB.cs:32:17:32:17 | 0 | MultiImplementationB.cs:32:17:32:17 | 0 | normal | | NullCoalescing.cs:1:7:1:20 | call to constructor Object | NullCoalescing.cs:1:7:1:20 | call to constructor Object | normal | +| NullCoalescing.cs:1:7:1:20 | call to method | NullCoalescing.cs:1:7:1:20 | call to method | normal | +| NullCoalescing.cs:1:7:1:20 | this access | NullCoalescing.cs:1:7:1:20 | this access | normal | | NullCoalescing.cs:1:7:1:20 | {...} | NullCoalescing.cs:1:7:1:20 | {...} | normal | | NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:23:3:23 | access to parameter i | non-null | | NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:23:3:23 | access to parameter i | null | @@ -2847,18 +2911,24 @@ | NullCoalescing.cs:17:19:17:19 | access to parameter i | NullCoalescing.cs:17:19:17:19 | access to parameter i | normal | | NullCoalescing.cs:17:24:17:24 | 1 | NullCoalescing.cs:17:24:17:24 | 1 | normal | | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | normal | +| PartialImplementationA.cs:3:12:3:18 | call to method | PartialImplementationA.cs:3:12:3:18 | call to method | normal | +| PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | this access | normal | | PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:27:3:29 | {...} | normal | | PartialImplementationB.cs:3:16:3:16 | access to field F | PartialImplementationB.cs:3:16:3:16 | this access | normal | | PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationB.cs:3:16:3:16 | this access | normal | | PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationB.cs:3:16:3:20 | ... = ... | normal | | PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationB.cs:3:20:3:20 | 0 | normal | | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | normal | +| PartialImplementationB.cs:4:12:4:18 | call to method | PartialImplementationB.cs:4:12:4:18 | call to method | normal | +| PartialImplementationB.cs:4:12:4:18 | this access | PartialImplementationB.cs:4:12:4:18 | this access | normal | | PartialImplementationB.cs:4:22:4:24 | {...} | PartialImplementationB.cs:4:22:4:24 | {...} | normal | | PartialImplementationB.cs:5:16:5:16 | access to property P | PartialImplementationB.cs:5:16:5:16 | this access | normal | | PartialImplementationB.cs:5:16:5:16 | this access | PartialImplementationB.cs:5:16:5:16 | this access | normal | | PartialImplementationB.cs:5:32:5:34 | ... = ... | PartialImplementationB.cs:5:32:5:34 | ... = ... | normal | | PartialImplementationB.cs:5:34:5:34 | 0 | PartialImplementationB.cs:5:34:5:34 | 0 | normal | | Patterns.cs:3:7:3:14 | call to constructor Object | Patterns.cs:3:7:3:14 | call to constructor Object | normal | +| Patterns.cs:3:7:3:14 | call to method | Patterns.cs:3:7:3:14 | call to method | normal | +| Patterns.cs:3:7:3:14 | this access | Patterns.cs:3:7:3:14 | this access | normal | | Patterns.cs:3:7:3:14 | {...} | Patterns.cs:3:7:3:14 | {...} | normal | | Patterns.cs:6:5:43:5 | {...} | Patterns.cs:40:17:40:17 | access to local variable o | normal | | Patterns.cs:7:9:7:24 | ... ...; | Patterns.cs:7:16:7:23 | Object o = ... | normal | @@ -3091,6 +3161,8 @@ | Patterns.cs:97:13:97:39 | ...; | Patterns.cs:97:13:97:38 | call to method WriteLine | normal | | Patterns.cs:97:31:97:37 | "not C" | Patterns.cs:97:31:97:37 | "not C" | normal | | PostDominance.cs:3:7:3:19 | call to constructor Object | PostDominance.cs:3:7:3:19 | call to constructor Object | normal | +| PostDominance.cs:3:7:3:19 | call to method | PostDominance.cs:3:7:3:19 | call to method | normal | +| PostDominance.cs:3:7:3:19 | this access | PostDominance.cs:3:7:3:19 | this access | normal | | PostDominance.cs:3:7:3:19 | {...} | PostDominance.cs:3:7:3:19 | {...} | normal | | PostDominance.cs:6:5:8:5 | {...} | PostDominance.cs:7:9:7:28 | call to method WriteLine | normal | | PostDominance.cs:7:9:7:28 | call to method WriteLine | PostDominance.cs:7:9:7:28 | call to method WriteLine | normal | @@ -3126,6 +3198,8 @@ | PostDominance.cs:21:9:21:29 | ...; | PostDominance.cs:21:9:21:28 | call to method WriteLine | normal | | PostDominance.cs:21:27:21:27 | access to parameter s | PostDominance.cs:21:27:21:27 | access to parameter s | normal | | Qualifiers.cs:1:7:1:16 | call to constructor Object | Qualifiers.cs:1:7:1:16 | call to constructor Object | normal | +| Qualifiers.cs:1:7:1:16 | call to method | Qualifiers.cs:1:7:1:16 | call to method | normal | +| Qualifiers.cs:1:7:1:16 | this access | Qualifiers.cs:1:7:1:16 | this access | normal | | Qualifiers.cs:1:7:1:16 | {...} | Qualifiers.cs:1:7:1:16 | {...} | normal | | Qualifiers.cs:7:28:7:31 | null | Qualifiers.cs:7:28:7:31 | null | normal | | Qualifiers.cs:8:41:8:44 | null | Qualifiers.cs:8:41:8:44 | null | normal | @@ -3185,6 +3259,8 @@ | Qualifiers.cs:30:13:30:37 | call to method StaticMethod | Qualifiers.cs:30:13:30:37 | call to method StaticMethod | normal | | Qualifiers.cs:30:13:30:46 | call to method Method | Qualifiers.cs:30:13:30:46 | call to method Method | normal | | Switch.cs:3:7:3:12 | call to constructor Object | Switch.cs:3:7:3:12 | call to constructor Object | normal | +| Switch.cs:3:7:3:12 | call to method | Switch.cs:3:7:3:12 | call to method | normal | +| Switch.cs:3:7:3:12 | this access | Switch.cs:3:7:3:12 | this access | normal | | Switch.cs:3:7:3:12 | {...} | Switch.cs:3:7:3:12 | {...} | normal | | Switch.cs:6:5:8:5 | {...} | Switch.cs:7:17:7:17 | access to parameter o | normal | | Switch.cs:7:9:7:22 | switch (...) {...} | Switch.cs:7:17:7:17 | access to parameter o | normal | @@ -3579,6 +3655,8 @@ | Switch.cs:175:42:175:46 | "def" | Switch.cs:175:42:175:46 | "def" | normal | | Switch.cs:176:17:176:22 | break; | Switch.cs:176:17:176:22 | break; | break | | TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | call to constructor Object | normal | +| TypeAccesses.cs:1:7:1:18 | call to method | TypeAccesses.cs:1:7:1:18 | call to method | normal | +| TypeAccesses.cs:1:7:1:18 | this access | TypeAccesses.cs:1:7:1:18 | this access | normal | | TypeAccesses.cs:1:7:1:18 | {...} | TypeAccesses.cs:1:7:1:18 | {...} | normal | | TypeAccesses.cs:4:5:9:5 | {...} | TypeAccesses.cs:8:13:8:27 | Type t = ... | normal | | TypeAccesses.cs:5:9:5:26 | ... ...; | TypeAccesses.cs:5:13:5:25 | String s = ... | normal | @@ -3601,6 +3679,8 @@ | TypeAccesses.cs:8:13:8:27 | Type t = ... | TypeAccesses.cs:8:13:8:27 | Type t = ... | normal | | TypeAccesses.cs:8:17:8:27 | typeof(...) | TypeAccesses.cs:8:17:8:27 | typeof(...) | normal | | VarDecls.cs:3:7:3:14 | call to constructor Object | VarDecls.cs:3:7:3:14 | call to constructor Object | normal | +| VarDecls.cs:3:7:3:14 | call to method | VarDecls.cs:3:7:3:14 | call to method | normal | +| VarDecls.cs:3:7:3:14 | this access | VarDecls.cs:3:7:3:14 | this access | normal | | VarDecls.cs:3:7:3:14 | {...} | VarDecls.cs:3:7:3:14 | {...} | normal | | VarDecls.cs:6:5:11:5 | {...} | VarDecls.cs:9:13:9:29 | return ...; | return | | VarDecls.cs:7:9:10:9 | fixed(...) { ... } | VarDecls.cs:9:13:9:29 | return ...; | return | @@ -3644,6 +3724,8 @@ | VarDecls.cs:25:24:25:24 | access to local variable x | VarDecls.cs:25:24:25:24 | access to local variable x | normal | | VarDecls.cs:25:28:25:28 | access to local variable y | VarDecls.cs:25:28:25:28 | access to local variable y | normal | | VarDecls.cs:28:11:28:11 | call to constructor Object | VarDecls.cs:28:11:28:11 | call to constructor Object | normal | +| VarDecls.cs:28:11:28:11 | call to method | VarDecls.cs:28:11:28:11 | call to method | normal | +| VarDecls.cs:28:11:28:11 | this access | VarDecls.cs:28:11:28:11 | this access | normal | | VarDecls.cs:28:11:28:11 | {...} | VarDecls.cs:28:11:28:11 | {...} | normal | | VarDecls.cs:28:51:28:53 | {...} | VarDecls.cs:28:51:28:53 | {...} | normal | | cflow.cs:6:5:35:5 | {...} | cflow.cs:24:25:24:31 | ... <= ... | false | @@ -3959,6 +4041,8 @@ | cflow.cs:127:68:127:81 | ...; | cflow.cs:127:68:127:80 | ... = ... | normal | | cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:76:127:80 | access to parameter value | normal | | cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:129:5:129:15 | call to constructor Object | normal | +| cflow.cs:129:5:129:15 | call to method | cflow.cs:129:5:129:15 | call to method | normal | +| cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | this access | normal | | cflow.cs:130:5:132:5 | {...} | cflow.cs:131:9:131:17 | ... = ... | normal | | cflow.cs:131:9:131:13 | access to field Field | cflow.cs:131:9:131:13 | this access | normal | | cflow.cs:131:9:131:13 | this access | cflow.cs:131:9:131:13 | this access | normal | @@ -4352,6 +4436,8 @@ | cflow.cs:275:13:275:41 | call to method WriteLine | cflow.cs:275:13:275:41 | call to method WriteLine | normal | | cflow.cs:275:13:275:42 | ...; | cflow.cs:275:13:275:41 | call to method WriteLine | normal | | cflow.cs:275:31:275:40 | "not dead" | cflow.cs:275:31:275:40 | "not dead" | normal | +| cflow.cs:282:5:282:18 | call to method | cflow.cs:282:5:282:18 | call to method | normal | +| cflow.cs:282:5:282:18 | this access | cflow.cs:282:5:282:18 | this access | normal | | cflow.cs:282:24:282:27 | call to constructor ControlFlow | cflow.cs:282:24:282:27 | call to constructor ControlFlow | normal | | cflow.cs:282:31:282:33 | {...} | cflow.cs:282:31:282:33 | {...} | normal | | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub | normal | @@ -4361,11 +4447,15 @@ | cflow.cs:286:34:286:45 | call to method ToString | cflow.cs:286:34:286:45 | call to method ToString | normal | | cflow.cs:286:48:286:50 | {...} | cflow.cs:286:48:286:50 | {...} | normal | | cflow.cs:289:7:289:18 | call to constructor Object | cflow.cs:289:7:289:18 | call to constructor Object | normal | +| cflow.cs:289:7:289:18 | call to method | cflow.cs:289:7:289:18 | call to method | normal | +| cflow.cs:289:7:289:18 | this access | cflow.cs:289:7:289:18 | this access | normal | | cflow.cs:289:7:289:18 | {...} | cflow.cs:289:7:289:18 | {...} | normal | | cflow.cs:291:38:291:38 | access to parameter f | cflow.cs:291:38:291:38 | access to parameter f | normal | | cflow.cs:291:38:291:41 | delegate call | cflow.cs:291:38:291:41 | delegate call | normal | | cflow.cs:291:40:291:40 | 0 | cflow.cs:291:40:291:40 | 0 | normal | | cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:5:296:25 | call to constructor Object | normal | +| cflow.cs:296:5:296:25 | call to method | cflow.cs:296:5:296:25 | call to method | normal | +| cflow.cs:296:5:296:25 | this access | cflow.cs:296:5:296:25 | this access | normal | | cflow.cs:296:52:296:54 | {...} | cflow.cs:296:52:296:54 | {...} | normal | | cflow.cs:299:5:301:5 | {...} | cflow.cs:300:9:300:72 | object creation of type NegationInConstructor | normal | | cflow.cs:300:9:300:72 | object creation of type NegationInConstructor | cflow.cs:300:9:300:72 | object creation of type NegationInConstructor | normal | @@ -4383,6 +4473,8 @@ | cflow.cs:300:61:300:64 | null | cflow.cs:300:61:300:64 | null | normal | | cflow.cs:300:70:300:71 | "" | cflow.cs:300:70:300:71 | "" | normal | | cflow.cs:304:7:304:18 | call to constructor Object | cflow.cs:304:7:304:18 | call to constructor Object | normal | +| cflow.cs:304:7:304:18 | call to method | cflow.cs:304:7:304:18 | call to method | normal | +| cflow.cs:304:7:304:18 | this access | cflow.cs:304:7:304:18 | this access | normal | | cflow.cs:304:7:304:18 | {...} | cflow.cs:304:7:304:18 | {...} | normal | | cflow.cs:306:60:310:5 | (...) => ... | cflow.cs:306:60:310:5 | (...) => ... | normal | | cflow.cs:307:5:310:5 | {...} | cflow.cs:309:9:309:17 | return ...; | return | diff --git a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected index 63855522ba60..b764e2fb2a56 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected @@ -1,6 +1,8 @@ | AccessorCalls.cs:1:7:1:19 | call to constructor Object | AccessorCalls.cs:1:7:1:19 | {...} | | -| AccessorCalls.cs:1:7:1:19 | enter AccessorCalls | AccessorCalls.cs:1:7:1:19 | call to constructor Object | | +| AccessorCalls.cs:1:7:1:19 | call to method | AccessorCalls.cs:1:7:1:19 | call to constructor Object | | +| AccessorCalls.cs:1:7:1:19 | enter AccessorCalls | AccessorCalls.cs:1:7:1:19 | this access | | | AccessorCalls.cs:1:7:1:19 | exit AccessorCalls (normal) | AccessorCalls.cs:1:7:1:19 | exit AccessorCalls | | +| AccessorCalls.cs:1:7:1:19 | this access | AccessorCalls.cs:1:7:1:19 | call to method | | | AccessorCalls.cs:1:7:1:19 | {...} | AccessorCalls.cs:1:7:1:19 | exit AccessorCalls (normal) | | | AccessorCalls.cs:5:23:5:25 | enter get_Item | AccessorCalls.cs:5:30:5:30 | access to parameter i | | | AccessorCalls.cs:5:23:5:25 | exit get_Item (normal) | AccessorCalls.cs:5:23:5:25 | exit get_Item | | @@ -304,8 +306,10 @@ | AccessorCalls.cs:73:78:73:81 | dynamic access to element | AccessorCalls.cs:73:74:73:82 | (..., ...) | | | AccessorCalls.cs:73:80:73:80 | 1 | AccessorCalls.cs:73:78:73:81 | dynamic access to element | | | ArrayCreation.cs:1:7:1:19 | call to constructor Object | ArrayCreation.cs:1:7:1:19 | {...} | | -| ArrayCreation.cs:1:7:1:19 | enter ArrayCreation | ArrayCreation.cs:1:7:1:19 | call to constructor Object | | +| ArrayCreation.cs:1:7:1:19 | call to method | ArrayCreation.cs:1:7:1:19 | call to constructor Object | | +| ArrayCreation.cs:1:7:1:19 | enter ArrayCreation | ArrayCreation.cs:1:7:1:19 | this access | | | ArrayCreation.cs:1:7:1:19 | exit ArrayCreation (normal) | ArrayCreation.cs:1:7:1:19 | exit ArrayCreation | | +| ArrayCreation.cs:1:7:1:19 | this access | ArrayCreation.cs:1:7:1:19 | call to method | | | ArrayCreation.cs:1:7:1:19 | {...} | ArrayCreation.cs:1:7:1:19 | exit ArrayCreation (normal) | | | ArrayCreation.cs:3:11:3:12 | enter M1 | ArrayCreation.cs:3:27:3:27 | 0 | | | ArrayCreation.cs:3:11:3:12 | exit M1 (normal) | ArrayCreation.cs:3:11:3:12 | exit M1 | | @@ -336,8 +340,10 @@ | ArrayCreation.cs:9:45:9:45 | 2 | ArrayCreation.cs:9:48:9:48 | 3 | | | ArrayCreation.cs:9:48:9:48 | 3 | ArrayCreation.cs:9:43:9:50 | { ..., ... } | | | Assert.cs:5:7:5:17 | call to constructor Object | Assert.cs:5:7:5:17 | {...} | | -| Assert.cs:5:7:5:17 | enter AssertTests | Assert.cs:5:7:5:17 | call to constructor Object | | +| Assert.cs:5:7:5:17 | call to method | Assert.cs:5:7:5:17 | call to constructor Object | | +| Assert.cs:5:7:5:17 | enter AssertTests | Assert.cs:5:7:5:17 | this access | | | Assert.cs:5:7:5:17 | exit AssertTests (normal) | Assert.cs:5:7:5:17 | exit AssertTests | | +| Assert.cs:5:7:5:17 | this access | Assert.cs:5:7:5:17 | call to method | | | Assert.cs:5:7:5:17 | {...} | Assert.cs:5:7:5:17 | exit AssertTests (normal) | | | Assert.cs:7:10:7:11 | enter M1 | Assert.cs:8:5:12:5 | {...} | | | Assert.cs:7:10:7:11 | exit M1 (abnormal) | Assert.cs:7:10:7:11 | exit M1 | | @@ -795,8 +801,10 @@ | Assert.cs:140:33:140:34 | access to parameter b3 | Assert.cs:140:9:140:35 | call to method AssertTrueFalse | | | Assert.cs:141:9:141:15 | return ...; | Assert.cs:138:10:138:12 | exit M13 (normal) | return | | Assignments.cs:1:7:1:17 | call to constructor Object | Assignments.cs:1:7:1:17 | {...} | | -| Assignments.cs:1:7:1:17 | enter Assignments | Assignments.cs:1:7:1:17 | call to constructor Object | | +| Assignments.cs:1:7:1:17 | call to method | Assignments.cs:1:7:1:17 | call to constructor Object | | +| Assignments.cs:1:7:1:17 | enter Assignments | Assignments.cs:1:7:1:17 | this access | | | Assignments.cs:1:7:1:17 | exit Assignments (normal) | Assignments.cs:1:7:1:17 | exit Assignments | | +| Assignments.cs:1:7:1:17 | this access | Assignments.cs:1:7:1:17 | call to method | | | Assignments.cs:1:7:1:17 | {...} | Assignments.cs:1:7:1:17 | exit Assignments (normal) | | | Assignments.cs:3:10:3:10 | enter M | Assignments.cs:4:5:15:5 | {...} | | | Assignments.cs:3:10:3:10 | exit M (normal) | Assignments.cs:3:10:3:10 | exit M | | @@ -840,8 +848,10 @@ | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:17:40:17:40 | exit + (normal) | return | | Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:19:9:19:17 | return ...; | | | BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | {...} | | -| BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | call to constructor Object | | +| BreakInTry.cs:1:7:1:16 | call to method | BreakInTry.cs:1:7:1:16 | call to constructor Object | | +| BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | this access | | | BreakInTry.cs:1:7:1:16 | exit BreakInTry (normal) | BreakInTry.cs:1:7:1:16 | exit BreakInTry | | +| BreakInTry.cs:1:7:1:16 | this access | BreakInTry.cs:1:7:1:16 | call to method | | | BreakInTry.cs:1:7:1:16 | {...} | BreakInTry.cs:1:7:1:16 | exit BreakInTry (normal) | | | BreakInTry.cs:3:10:3:11 | enter M1 | BreakInTry.cs:4:5:18:5 | {...} | | | BreakInTry.cs:3:10:3:11 | exit M1 (normal) | BreakInTry.cs:3:10:3:11 | exit M1 | | @@ -942,8 +952,10 @@ | BreakInTry.cs:67:28:67:31 | null | BreakInTry.cs:67:21:67:31 | ... == ... | | | BreakInTry.cs:68:21:68:26 | break; | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | break, return | | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | CompileTimeOperators.cs:3:7:3:26 | {...} | | -| CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | | +| CompileTimeOperators.cs:3:7:3:26 | call to method | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | | +| CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | this access | | | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators (normal) | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators | | +| CompileTimeOperators.cs:3:7:3:26 | this access | CompileTimeOperators.cs:3:7:3:26 | call to method | | | CompileTimeOperators.cs:3:7:3:26 | {...} | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators (normal) | | | CompileTimeOperators.cs:5:9:5:15 | enter Default | CompileTimeOperators.cs:6:5:8:5 | {...} | | | CompileTimeOperators.cs:5:9:5:15 | exit Default (normal) | CompileTimeOperators.cs:5:9:5:15 | exit Default | | @@ -966,8 +978,10 @@ | CompileTimeOperators.cs:22:9:22:25 | return ...; | CompileTimeOperators.cs:20:12:20:17 | exit Nameof (normal) | return | | CompileTimeOperators.cs:22:16:22:24 | nameof(...) | CompileTimeOperators.cs:22:9:22:25 | return ...; | | | CompileTimeOperators.cs:26:7:26:22 | call to constructor Object | CompileTimeOperators.cs:26:7:26:22 | {...} | | -| CompileTimeOperators.cs:26:7:26:22 | enter GotoInTryFinally | CompileTimeOperators.cs:26:7:26:22 | call to constructor Object | | +| CompileTimeOperators.cs:26:7:26:22 | call to method | CompileTimeOperators.cs:26:7:26:22 | call to constructor Object | | +| CompileTimeOperators.cs:26:7:26:22 | enter GotoInTryFinally | CompileTimeOperators.cs:26:7:26:22 | this access | | | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally (normal) | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally | | +| CompileTimeOperators.cs:26:7:26:22 | this access | CompileTimeOperators.cs:26:7:26:22 | call to method | | | CompileTimeOperators.cs:26:7:26:22 | {...} | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally (normal) | | | CompileTimeOperators.cs:28:10:28:10 | enter M | CompileTimeOperators.cs:29:5:41:5 | {...} | | | CompileTimeOperators.cs:28:10:28:10 | exit M (abnormal) | CompileTimeOperators.cs:28:10:28:10 | exit M | | @@ -990,8 +1004,10 @@ | CompileTimeOperators.cs:40:14:40:38 | ...; | CompileTimeOperators.cs:40:32:40:36 | "End" | | | CompileTimeOperators.cs:40:32:40:36 | "End" | CompileTimeOperators.cs:40:14:40:37 | call to method WriteLine | | | ConditionalAccess.cs:1:7:1:23 | call to constructor Object | ConditionalAccess.cs:1:7:1:23 | {...} | | -| ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | call to constructor Object | | +| ConditionalAccess.cs:1:7:1:23 | call to method | ConditionalAccess.cs:1:7:1:23 | call to constructor Object | | +| ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | this access | | | ConditionalAccess.cs:1:7:1:23 | exit ConditionalAccess (normal) | ConditionalAccess.cs:1:7:1:23 | exit ConditionalAccess | | +| ConditionalAccess.cs:1:7:1:23 | this access | ConditionalAccess.cs:1:7:1:23 | call to method | | | ConditionalAccess.cs:1:7:1:23 | {...} | ConditionalAccess.cs:1:7:1:23 | exit ConditionalAccess (normal) | | | ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:26:3:26 | access to parameter i | | | ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:12:3:13 | exit M1 | | @@ -1085,8 +1101,10 @@ | ConditionalAccess.cs:41:75:41:78 | ", " | ConditionalAccess.cs:41:70:41:78 | ... + ... | | | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | ConditionalAccess.cs:41:70:41:83 | ... + ... | | | Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | {...} | | -| Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | call to constructor Object | | +| Conditions.cs:1:7:1:16 | call to method | Conditions.cs:1:7:1:16 | call to constructor Object | | +| Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | this access | | | Conditions.cs:1:7:1:16 | exit Conditions (normal) | Conditions.cs:1:7:1:16 | exit Conditions | | +| Conditions.cs:1:7:1:16 | this access | Conditions.cs:1:7:1:16 | call to method | | | Conditions.cs:1:7:1:16 | {...} | Conditions.cs:1:7:1:16 | exit Conditions (normal) | | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:4:5:9:5 | {...} | | | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:3:10:3:19 | exit IncrOrDecr | | @@ -1427,8 +1445,10 @@ | Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:38:149:47 | $"..." | | | Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:44:149:46 | {...} | | | ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | {...} | | -| ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | call to constructor Object | | +| ExitMethods.cs:6:7:6:17 | call to method | ExitMethods.cs:6:7:6:17 | call to constructor Object | | +| ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | this access | | | ExitMethods.cs:6:7:6:17 | exit ExitMethods (normal) | ExitMethods.cs:6:7:6:17 | exit ExitMethods | | +| ExitMethods.cs:6:7:6:17 | this access | ExitMethods.cs:6:7:6:17 | call to method | | | ExitMethods.cs:6:7:6:17 | {...} | ExitMethods.cs:6:7:6:17 | exit ExitMethods (normal) | | | ExitMethods.cs:8:10:8:11 | enter M1 | ExitMethods.cs:9:5:12:5 | {...} | | | ExitMethods.cs:8:10:8:11 | exit M1 (normal) | ExitMethods.cs:8:10:8:11 | exit M1 | | @@ -1639,8 +1659,10 @@ | Extensions.cs:25:23:25:32 | access to method Parse | Extensions.cs:25:23:25:32 | delegate creation of type Func | | | Extensions.cs:25:23:25:32 | delegate creation of type Func | Extensions.cs:25:9:25:33 | call to method ToBool | | | Finally.cs:3:14:3:20 | call to constructor Object | Finally.cs:3:14:3:20 | {...} | | -| Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | call to constructor Object | | +| Finally.cs:3:14:3:20 | call to method | Finally.cs:3:14:3:20 | call to constructor Object | | +| Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | this access | | | Finally.cs:3:14:3:20 | exit Finally (normal) | Finally.cs:3:14:3:20 | exit Finally | | +| Finally.cs:3:14:3:20 | this access | Finally.cs:3:14:3:20 | call to method | | | Finally.cs:3:14:3:20 | {...} | Finally.cs:3:14:3:20 | exit Finally (normal) | | | Finally.cs:7:10:7:11 | enter M1 | Finally.cs:8:5:17:5 | {...} | | | Finally.cs:7:10:7:11 | exit M1 (abnormal) | Finally.cs:7:10:7:11 | exit M1 | | @@ -1906,16 +1928,22 @@ | Finally.cs:167:17:167:38 | ...; | Finally.cs:167:35:167:36 | "" | | | Finally.cs:167:35:167:36 | "" | Finally.cs:167:17:167:37 | call to method WriteLine | | | Finally.cs:172:11:172:20 | call to constructor Exception | Finally.cs:172:11:172:20 | {...} | | -| Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | call to constructor Exception | | +| Finally.cs:172:11:172:20 | call to method | Finally.cs:172:11:172:20 | call to constructor Exception | | +| Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | this access | | | Finally.cs:172:11:172:20 | exit ExceptionA (normal) | Finally.cs:172:11:172:20 | exit ExceptionA | | +| Finally.cs:172:11:172:20 | this access | Finally.cs:172:11:172:20 | call to method | | | Finally.cs:172:11:172:20 | {...} | Finally.cs:172:11:172:20 | exit ExceptionA (normal) | | | Finally.cs:173:11:173:20 | call to constructor Exception | Finally.cs:173:11:173:20 | {...} | | -| Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | call to constructor Exception | | +| Finally.cs:173:11:173:20 | call to method | Finally.cs:173:11:173:20 | call to constructor Exception | | +| Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | this access | | | Finally.cs:173:11:173:20 | exit ExceptionB (normal) | Finally.cs:173:11:173:20 | exit ExceptionB | | +| Finally.cs:173:11:173:20 | this access | Finally.cs:173:11:173:20 | call to method | | | Finally.cs:173:11:173:20 | {...} | Finally.cs:173:11:173:20 | exit ExceptionB (normal) | | | Finally.cs:174:11:174:20 | call to constructor Exception | Finally.cs:174:11:174:20 | {...} | | -| Finally.cs:174:11:174:20 | enter ExceptionC | Finally.cs:174:11:174:20 | call to constructor Exception | | +| Finally.cs:174:11:174:20 | call to method | Finally.cs:174:11:174:20 | call to constructor Exception | | +| Finally.cs:174:11:174:20 | enter ExceptionC | Finally.cs:174:11:174:20 | this access | | | Finally.cs:174:11:174:20 | exit ExceptionC (normal) | Finally.cs:174:11:174:20 | exit ExceptionC | | +| Finally.cs:174:11:174:20 | this access | Finally.cs:174:11:174:20 | call to method | | | Finally.cs:174:11:174:20 | {...} | Finally.cs:174:11:174:20 | exit ExceptionC (normal) | | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:177:5:193:5 | {...} | | | Finally.cs:176:10:176:11 | exit M9 (abnormal) | Finally.cs:176:10:176:11 | exit M9 | | @@ -2067,8 +2095,10 @@ | Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:13 | access to parameter i | | | Finally.cs:272:18:272:18 | 3 | Finally.cs:272:13:272:18 | ... + ... | | | Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | {...} | | -| Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | call to constructor Object | | +| Foreach.cs:4:7:4:13 | call to method | Foreach.cs:4:7:4:13 | call to constructor Object | | +| Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | this access | | | Foreach.cs:4:7:4:13 | exit Foreach (normal) | Foreach.cs:4:7:4:13 | exit Foreach | | +| Foreach.cs:4:7:4:13 | this access | Foreach.cs:4:7:4:13 | call to method | | | Foreach.cs:4:7:4:13 | {...} | Foreach.cs:4:7:4:13 | exit Foreach (normal) | | | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:7:5:10:5 | {...} | | | Foreach.cs:6:10:6:11 | exit M1 (normal) | Foreach.cs:6:10:6:11 | exit M1 | | @@ -2129,38 +2159,33 @@ | Foreach.cs:38:33:38:33 | Int32 y | Foreach.cs:38:18:38:34 | (..., ...) | | | Foreach.cs:38:39:38:42 | access to parameter args | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | | | Foreach.cs:39:11:39:11 | ; | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | | +| Initializers.cs:3:7:3:18 | enter | Initializers.cs:5:9:5:9 | this access | | | Initializers.cs:3:7:3:18 | enter Initializers | Initializers.cs:3:7:3:18 | {...} | | +| Initializers.cs:3:7:3:18 | exit (normal) | Initializers.cs:3:7:3:18 | exit | | | Initializers.cs:3:7:3:18 | exit Initializers (normal) | Initializers.cs:3:7:3:18 | exit Initializers | | | Initializers.cs:3:7:3:18 | {...} | Initializers.cs:3:7:3:18 | exit Initializers (normal) | | | Initializers.cs:5:9:5:9 | this access | Initializers.cs:5:13:5:13 | access to field H | | -| Initializers.cs:5:9:5:9 | this access | Initializers.cs:5:13:5:13 | access to field H | | -| Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:6:9:6:9 | this access | | | Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:6:9:6:9 | this access | | | Initializers.cs:5:13:5:13 | access to field H | Initializers.cs:5:17:5:17 | 1 | | -| Initializers.cs:5:13:5:13 | access to field H | Initializers.cs:5:17:5:17 | 1 | | | Initializers.cs:5:13:5:17 | ... + ... | Initializers.cs:5:9:5:17 | ... = ... | | -| Initializers.cs:5:13:5:17 | ... + ... | Initializers.cs:5:9:5:17 | ... = ... | | -| Initializers.cs:5:17:5:17 | 1 | Initializers.cs:5:13:5:17 | ... + ... | | | Initializers.cs:5:17:5:17 | 1 | Initializers.cs:5:13:5:17 | ... + ... | | | Initializers.cs:6:9:6:9 | access to property G | Initializers.cs:6:25:6:31 | ... = ... | | -| Initializers.cs:6:9:6:9 | access to property G | Initializers.cs:6:25:6:31 | ... = ... | | -| Initializers.cs:6:9:6:9 | this access | Initializers.cs:6:27:6:27 | access to field H | | | Initializers.cs:6:9:6:9 | this access | Initializers.cs:6:27:6:27 | access to field H | | -| Initializers.cs:6:25:6:31 | ... = ... | Initializers.cs:8:20:8:22 | {...} | | -| Initializers.cs:6:25:6:31 | ... = ... | Initializers.cs:10:28:10:30 | {...} | | +| Initializers.cs:6:25:6:31 | ... = ... | Initializers.cs:3:7:3:18 | exit (normal) | | | Initializers.cs:6:27:6:27 | access to field H | Initializers.cs:6:31:6:31 | 2 | | -| Initializers.cs:6:27:6:27 | access to field H | Initializers.cs:6:31:6:31 | 2 | | -| Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:6:9:6:9 | access to property G | | | Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:6:9:6:9 | access to property G | | | Initializers.cs:6:31:6:31 | 2 | Initializers.cs:6:27:6:31 | ... + ... | | -| Initializers.cs:6:31:6:31 | 2 | Initializers.cs:6:27:6:31 | ... + ... | | -| Initializers.cs:8:5:8:16 | call to constructor Object | Initializers.cs:5:9:5:9 | this access | | -| Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | call to constructor Object | | +| Initializers.cs:8:5:8:16 | call to constructor Object | Initializers.cs:8:20:8:22 | {...} | | +| Initializers.cs:8:5:8:16 | call to method | Initializers.cs:8:5:8:16 | call to constructor Object | | +| Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | this access | | | Initializers.cs:8:5:8:16 | exit Initializers (normal) | Initializers.cs:8:5:8:16 | exit Initializers | | +| Initializers.cs:8:5:8:16 | this access | Initializers.cs:8:5:8:16 | call to method | | | Initializers.cs:8:20:8:22 | {...} | Initializers.cs:8:5:8:16 | exit Initializers (normal) | | -| Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:5:9:5:9 | this access | | -| Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | call to constructor Object | | +| Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:10:28:10:30 | {...} | | +| Initializers.cs:10:5:10:16 | call to method | Initializers.cs:10:5:10:16 | call to constructor Object | | +| Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | this access | | | Initializers.cs:10:5:10:16 | exit Initializers (normal) | Initializers.cs:10:5:10:16 | exit Initializers | | +| Initializers.cs:10:5:10:16 | this access | Initializers.cs:10:5:10:16 | call to method | | | Initializers.cs:10:28:10:30 | {...} | Initializers.cs:10:5:10:16 | exit Initializers (normal) | | | Initializers.cs:12:10:12:10 | enter M | Initializers.cs:13:5:16:5 | {...} | | | Initializers.cs:12:10:12:10 | exit M (normal) | Initializers.cs:12:10:12:10 | exit M | | @@ -2187,25 +2212,30 @@ | Initializers.cs:18:16:18:16 | exit H (normal) | Initializers.cs:18:16:18:16 | exit H | | | Initializers.cs:18:16:18:20 | ... = ... | Initializers.cs:18:16:18:16 | exit H (normal) | | | Initializers.cs:18:20:18:20 | 1 | Initializers.cs:18:16:18:20 | ... = ... | | -| Initializers.cs:20:11:20:23 | call to constructor Object | Initializers.cs:22:23:22:23 | this access | | -| Initializers.cs:20:11:20:23 | enter NoConstructor | Initializers.cs:20:11:20:23 | call to constructor Object | | +| Initializers.cs:20:11:20:23 | call to constructor Object | Initializers.cs:20:11:20:23 | {...} | | +| Initializers.cs:20:11:20:23 | call to method | Initializers.cs:20:11:20:23 | call to constructor Object | | +| Initializers.cs:20:11:20:23 | enter | Initializers.cs:22:23:22:23 | this access | | +| Initializers.cs:20:11:20:23 | enter NoConstructor | Initializers.cs:20:11:20:23 | this access | | +| Initializers.cs:20:11:20:23 | exit (normal) | Initializers.cs:20:11:20:23 | exit | | | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | Initializers.cs:20:11:20:23 | exit NoConstructor | | +| Initializers.cs:20:11:20:23 | this access | Initializers.cs:20:11:20:23 | call to method | | | Initializers.cs:20:11:20:23 | {...} | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | | | Initializers.cs:22:23:22:23 | this access | Initializers.cs:22:27:22:27 | 0 | | | Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:23:23:23:23 | this access | | | Initializers.cs:22:27:22:27 | 0 | Initializers.cs:22:23:22:27 | ... = ... | | | Initializers.cs:23:23:23:23 | this access | Initializers.cs:23:27:23:27 | 1 | | -| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:20:11:20:23 | {...} | | +| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:20:11:20:23 | exit (normal) | | | Initializers.cs:23:27:23:27 | 1 | Initializers.cs:23:23:23:27 | ... = ... | | +| Initializers.cs:26:11:26:13 | enter | Initializers.cs:28:13:28:13 | this access | | +| Initializers.cs:26:11:26:13 | exit (normal) | Initializers.cs:26:11:26:13 | exit | | | Initializers.cs:28:13:28:13 | this access | Initializers.cs:28:17:28:17 | 2 | | -| Initializers.cs:28:13:28:13 | this access | Initializers.cs:28:17:28:17 | 2 | | -| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:31:24:31:33 | {...} | | -| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:35:27:35:40 | {...} | | -| Initializers.cs:28:17:28:17 | 2 | Initializers.cs:28:13:28:17 | ... = ... | | +| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:26:11:26:13 | exit (normal) | | | Initializers.cs:28:17:28:17 | 2 | Initializers.cs:28:13:28:17 | ... = ... | | -| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | | +| Initializers.cs:31:9:31:11 | call to method | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | | +| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | this access | | | Initializers.cs:31:9:31:11 | exit Sub (normal) | Initializers.cs:31:9:31:11 | exit Sub | | -| Initializers.cs:31:17:31:20 | call to constructor NoConstructor | Initializers.cs:28:13:28:13 | this access | | +| Initializers.cs:31:9:31:11 | this access | Initializers.cs:31:9:31:11 | call to method | | +| Initializers.cs:31:17:31:20 | call to constructor NoConstructor | Initializers.cs:31:24:31:33 | {...} | | | Initializers.cs:31:24:31:33 | {...} | Initializers.cs:31:26:31:31 | ...; | | | Initializers.cs:31:26:31:26 | this access | Initializers.cs:31:30:31:30 | 3 | | | Initializers.cs:31:26:31:30 | ... = ... | Initializers.cs:31:9:31:11 | exit Sub (normal) | | @@ -2219,9 +2249,11 @@ | Initializers.cs:33:31:33:35 | ... = ... | Initializers.cs:33:9:33:11 | exit Sub (normal) | | | Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:31:33:31 | this access | | | Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:31:33:35 | ... = ... | | -| Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:28:13:28:13 | this access | | -| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | | +| Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:27:35:40 | {...} | | +| Initializers.cs:35:9:35:11 | call to method | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | | +| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | this access | | | Initializers.cs:35:9:35:11 | exit Sub (normal) | Initializers.cs:35:9:35:11 | exit Sub | | +| Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | call to method | | | Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:29:35:38 | ...; | | | Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:33:35:33 | access to parameter i | | | Initializers.cs:35:29:35:37 | ... = ... | Initializers.cs:35:9:35:11 | exit Sub (normal) | | @@ -2230,12 +2262,16 @@ | Initializers.cs:35:33:35:37 | ... + ... | Initializers.cs:35:29:35:37 | ... = ... | | | Initializers.cs:35:37:35:37 | access to parameter j | Initializers.cs:35:33:35:37 | ... + ... | | | Initializers.cs:39:7:39:23 | call to constructor Object | Initializers.cs:39:7:39:23 | {...} | | -| Initializers.cs:39:7:39:23 | enter IndexInitializers | Initializers.cs:39:7:39:23 | call to constructor Object | | +| Initializers.cs:39:7:39:23 | call to method | Initializers.cs:39:7:39:23 | call to constructor Object | | +| Initializers.cs:39:7:39:23 | enter IndexInitializers | Initializers.cs:39:7:39:23 | this access | | | Initializers.cs:39:7:39:23 | exit IndexInitializers (normal) | Initializers.cs:39:7:39:23 | exit IndexInitializers | | +| Initializers.cs:39:7:39:23 | this access | Initializers.cs:39:7:39:23 | call to method | | | Initializers.cs:39:7:39:23 | {...} | Initializers.cs:39:7:39:23 | exit IndexInitializers (normal) | | | Initializers.cs:41:11:41:18 | call to constructor Object | Initializers.cs:41:11:41:18 | {...} | | -| Initializers.cs:41:11:41:18 | enter Compound | Initializers.cs:41:11:41:18 | call to constructor Object | | +| Initializers.cs:41:11:41:18 | call to method | Initializers.cs:41:11:41:18 | call to constructor Object | | +| Initializers.cs:41:11:41:18 | enter Compound | Initializers.cs:41:11:41:18 | this access | | | Initializers.cs:41:11:41:18 | exit Compound (normal) | Initializers.cs:41:11:41:18 | exit Compound | | +| Initializers.cs:41:11:41:18 | this access | Initializers.cs:41:11:41:18 | call to method | | | Initializers.cs:41:11:41:18 | {...} | Initializers.cs:41:11:41:18 | exit Compound (normal) | | | Initializers.cs:51:10:51:13 | enter Test | Initializers.cs:52:5:66:5 | {...} | | | Initializers.cs:51:10:51:13 | exit Test (normal) | Initializers.cs:51:10:51:13 | exit Test | | @@ -2342,8 +2378,10 @@ | Initializers.cs:64:54:64:54 | 0 | Initializers.cs:64:50:64:54 | ... + ... | | | Initializers.cs:64:59:64:61 | "1" | Initializers.cs:64:46:64:61 | ... = ... | | | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | LoopUnrolling.cs:5:7:5:19 | {...} | | -| LoopUnrolling.cs:5:7:5:19 | enter LoopUnrolling | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | | +| LoopUnrolling.cs:5:7:5:19 | call to method | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | | +| LoopUnrolling.cs:5:7:5:19 | enter LoopUnrolling | LoopUnrolling.cs:5:7:5:19 | this access | | | LoopUnrolling.cs:5:7:5:19 | exit LoopUnrolling (normal) | LoopUnrolling.cs:5:7:5:19 | exit LoopUnrolling | | +| LoopUnrolling.cs:5:7:5:19 | this access | LoopUnrolling.cs:5:7:5:19 | call to method | | | LoopUnrolling.cs:5:7:5:19 | {...} | LoopUnrolling.cs:5:7:5:19 | exit LoopUnrolling (normal) | | | LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:8:5:13:5 | {...} | | | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | LoopUnrolling.cs:7:10:7:11 | exit M1 | | @@ -2558,9 +2596,11 @@ | LoopUnrolling.cs:99:13:99:33 | ...; | LoopUnrolling.cs:99:31:99:31 | access to local variable x | | | LoopUnrolling.cs:99:31:99:31 | access to local variable x | LoopUnrolling.cs:99:13:99:32 | call to method WriteLine | | | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | {...} | | -| MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | | -| MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | | +| MultiImplementationA.cs:4:7:4:8 | call to method | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | | +| MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationA.cs:4:7:4:8 | this access | | +| MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationB.cs:1:7:1:8 | this access | | | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | MultiImplementationA.cs:4:7:4:8 | exit C1 | | +| MultiImplementationA.cs:4:7:4:8 | this access | MultiImplementationA.cs:4:7:4:8 | call to method | | | MultiImplementationA.cs:4:7:4:8 | {...} | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | | | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | MultiImplementationA.cs:6:28:6:31 | null | | | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | MultiImplementationB.cs:3:22:3:22 | 0 | | @@ -2588,6 +2628,9 @@ | MultiImplementationA.cs:8:16:8:16 | exit M (normal) | MultiImplementationA.cs:8:16:8:16 | exit M | | | MultiImplementationA.cs:8:23:8:32 | throw ... | MultiImplementationA.cs:8:16:8:16 | exit M (abnormal) | exception | | MultiImplementationA.cs:8:29:8:32 | null | MultiImplementationA.cs:8:23:8:32 | throw ... | | +| MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationA.cs:13:16:13:16 | this access | | +| MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationB.cs:11:16:11:16 | this access | | +| MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationA.cs:11:7:11:8 | exit | | | MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:13:20:13:20 | 0 | | | MultiImplementationA.cs:13:16:13:20 | ... = ... | MultiImplementationA.cs:24:16:24:16 | this access | | | MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:13:16:13:20 | ... = ... | | @@ -2615,11 +2658,13 @@ | MultiImplementationA.cs:18:9:18:22 | enter M2 | MultiImplementationA.cs:18:21:18:21 | 0 | | | MultiImplementationA.cs:18:9:18:22 | exit M2 (normal) | MultiImplementationA.cs:18:9:18:22 | exit M2 | | | MultiImplementationA.cs:18:21:18:21 | 0 | MultiImplementationA.cs:18:9:18:22 | exit M2 (normal) | | -| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:13:16:13:16 | this access | | -| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | | -| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | | +| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:22:20:31 | {...} | | +| MultiImplementationA.cs:20:12:20:13 | call to method | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | | +| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | this access | | +| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | this access | | | MultiImplementationA.cs:20:12:20:13 | exit C2 (abnormal) | MultiImplementationA.cs:20:12:20:13 | exit C2 | | | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | MultiImplementationA.cs:20:12:20:13 | exit C2 | | +| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | call to method | | | MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:24:20:29 | ...; | | | MultiImplementationA.cs:20:24:20:24 | this access | MultiImplementationA.cs:20:28:20:28 | access to parameter i | | | MultiImplementationA.cs:20:24:20:28 | ... = ... | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | | @@ -2643,21 +2688,25 @@ | MultiImplementationA.cs:23:50:23:53 | null | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion (normal) | | | MultiImplementationA.cs:24:16:24:16 | access to property P | MultiImplementationA.cs:24:32:24:34 | ... = ... | | | MultiImplementationA.cs:24:16:24:16 | this access | MultiImplementationA.cs:24:34:24:34 | 0 | | -| MultiImplementationA.cs:24:32:24:34 | ... = ... | MultiImplementationA.cs:20:22:20:31 | {...} | | +| MultiImplementationA.cs:24:32:24:34 | ... = ... | MultiImplementationA.cs:11:7:11:8 | exit (normal) | | | MultiImplementationA.cs:24:34:24:34 | 0 | MultiImplementationA.cs:24:16:24:16 | access to property P | | | MultiImplementationA.cs:28:7:28:8 | call to constructor Object | MultiImplementationA.cs:28:7:28:8 | {...} | | -| MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationA.cs:28:7:28:8 | call to constructor Object | | -| MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | | +| MultiImplementationA.cs:28:7:28:8 | call to method | MultiImplementationA.cs:28:7:28:8 | call to constructor Object | | +| MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationA.cs:28:7:28:8 | this access | | +| MultiImplementationA.cs:28:7:28:8 | enter C3 | MultiImplementationB.cs:25:7:25:8 | this access | | | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | MultiImplementationA.cs:28:7:28:8 | exit C3 | | +| MultiImplementationA.cs:28:7:28:8 | this access | MultiImplementationA.cs:28:7:28:8 | call to method | | | MultiImplementationA.cs:28:7:28:8 | {...} | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | | | MultiImplementationA.cs:30:21:30:23 | enter get_P3 | MultiImplementationA.cs:30:34:30:37 | null | | | MultiImplementationA.cs:30:21:30:23 | exit get_P3 (abnormal) | MultiImplementationA.cs:30:21:30:23 | exit get_P3 | | | MultiImplementationA.cs:30:28:30:37 | throw ... | MultiImplementationA.cs:30:21:30:23 | exit get_P3 (abnormal) | exception | | MultiImplementationA.cs:30:34:30:37 | null | MultiImplementationA.cs:30:28:30:37 | throw ... | | | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | MultiImplementationA.cs:34:15:34:16 | {...} | | -| MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | | -| MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | | +| MultiImplementationA.cs:34:15:34:16 | call to method | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | | +| MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationA.cs:34:15:34:16 | this access | | +| MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationB.cs:30:15:30:16 | this access | | | MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | MultiImplementationA.cs:34:15:34:16 | exit C4 | | +| MultiImplementationA.cs:34:15:34:16 | this access | MultiImplementationA.cs:34:15:34:16 | call to method | | | MultiImplementationA.cs:34:15:34:16 | {...} | MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | | | MultiImplementationA.cs:36:9:36:10 | enter M1 | MultiImplementationA.cs:36:14:36:28 | {...} | | | MultiImplementationA.cs:36:9:36:10 | enter M1 | MultiImplementationB.cs:32:17:32:17 | 0 | | @@ -2672,6 +2721,8 @@ | MultiImplementationA.cs:37:16:37:26 | throw ...; | MultiImplementationA.cs:37:9:37:10 | exit M2 (abnormal) | exception | | MultiImplementationA.cs:37:22:37:25 | null | MultiImplementationA.cs:37:16:37:26 | throw ...; | | | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | MultiImplementationB.cs:1:7:1:8 | {...} | | +| MultiImplementationB.cs:1:7:1:8 | call to method | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | | +| MultiImplementationB.cs:1:7:1:8 | this access | MultiImplementationB.cs:1:7:1:8 | call to method | | | MultiImplementationB.cs:1:7:1:8 | {...} | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | | | MultiImplementationB.cs:3:22:3:22 | 0 | MultiImplementationA.cs:6:22:6:31 | exit get_P1 (normal) | | | MultiImplementationB.cs:4:25:4:37 | {...} | MultiImplementationB.cs:4:34:4:34 | 1 | | @@ -2694,7 +2745,9 @@ | MultiImplementationB.cs:16:9:16:31 | exit M2 (abnormal) | MultiImplementationB.cs:16:9:16:31 | exit M2 | | | MultiImplementationB.cs:16:21:16:30 | throw ... | MultiImplementationB.cs:16:9:16:31 | exit M2 (abnormal) | exception | | MultiImplementationB.cs:16:27:16:30 | null | MultiImplementationB.cs:16:21:16:30 | throw ... | | -| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:11:16:11:16 | this access | | +| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:18:22:18:36 | {...} | | +| MultiImplementationB.cs:18:12:18:13 | call to method | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | | +| MultiImplementationB.cs:18:12:18:13 | this access | MultiImplementationB.cs:18:12:18:13 | call to method | | | MultiImplementationB.cs:18:22:18:36 | {...} | MultiImplementationB.cs:18:30:18:33 | null | | | MultiImplementationB.cs:18:24:18:34 | throw ...; | MultiImplementationA.cs:20:12:20:13 | exit C2 (abnormal) | exception | | MultiImplementationB.cs:18:30:18:33 | null | MultiImplementationB.cs:18:24:18:34 | throw ...; | | @@ -2708,16 +2761,22 @@ | MultiImplementationB.cs:21:56:21:59 | null | MultiImplementationB.cs:21:50:21:59 | throw ... | | | MultiImplementationB.cs:22:16:22:16 | access to property P | MultiImplementationB.cs:22:32:22:34 | ... = ... | | | MultiImplementationB.cs:22:16:22:16 | this access | MultiImplementationB.cs:22:34:22:34 | 1 | | -| MultiImplementationB.cs:22:32:22:34 | ... = ... | MultiImplementationB.cs:18:22:18:36 | {...} | | +| MultiImplementationB.cs:22:32:22:34 | ... = ... | MultiImplementationA.cs:11:7:11:8 | exit (normal) | | | MultiImplementationB.cs:22:34:22:34 | 1 | MultiImplementationB.cs:22:16:22:16 | access to property P | | | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | MultiImplementationB.cs:25:7:25:8 | {...} | | +| MultiImplementationB.cs:25:7:25:8 | call to method | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | | +| MultiImplementationB.cs:25:7:25:8 | this access | MultiImplementationB.cs:25:7:25:8 | call to method | | | MultiImplementationB.cs:25:7:25:8 | {...} | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | | | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | MultiImplementationB.cs:30:15:30:16 | {...} | | +| MultiImplementationB.cs:30:15:30:16 | call to method | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | | +| MultiImplementationB.cs:30:15:30:16 | this access | MultiImplementationB.cs:30:15:30:16 | call to method | | | MultiImplementationB.cs:30:15:30:16 | {...} | MultiImplementationA.cs:34:15:34:16 | exit C4 (normal) | | | MultiImplementationB.cs:32:17:32:17 | 0 | MultiImplementationA.cs:36:9:36:10 | exit M1 (normal) | | | NullCoalescing.cs:1:7:1:20 | call to constructor Object | NullCoalescing.cs:1:7:1:20 | {...} | | -| NullCoalescing.cs:1:7:1:20 | enter NullCoalescing | NullCoalescing.cs:1:7:1:20 | call to constructor Object | | +| NullCoalescing.cs:1:7:1:20 | call to method | NullCoalescing.cs:1:7:1:20 | call to constructor Object | | +| NullCoalescing.cs:1:7:1:20 | enter NullCoalescing | NullCoalescing.cs:1:7:1:20 | this access | | | NullCoalescing.cs:1:7:1:20 | exit NullCoalescing (normal) | NullCoalescing.cs:1:7:1:20 | exit NullCoalescing | | +| NullCoalescing.cs:1:7:1:20 | this access | NullCoalescing.cs:1:7:1:20 | call to method | | | NullCoalescing.cs:1:7:1:20 | {...} | NullCoalescing.cs:1:7:1:20 | exit NullCoalescing (normal) | | | NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:23:3:23 | access to parameter i | | | NullCoalescing.cs:3:9:3:10 | exit M1 (normal) | NullCoalescing.cs:3:9:3:10 | exit M1 | | @@ -2792,31 +2851,32 @@ | NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:13:17:24 | ... ?? ... | non-null | | NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:9:17:24 | ... = ... | | | NullCoalescing.cs:17:19:17:19 | access to parameter i | NullCoalescing.cs:17:13:17:19 | (...) ... | | -| PartialImplementationA.cs:3:12:3:18 | call to constructor Object | PartialImplementationB.cs:3:16:3:16 | this access | | -| PartialImplementationA.cs:3:12:3:18 | enter Partial | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | | +| PartialImplementationA.cs:1:15:1:21 | enter | PartialImplementationB.cs:3:16:3:16 | this access | | +| PartialImplementationA.cs:1:15:1:21 | exit (normal) | PartialImplementationA.cs:1:15:1:21 | exit | | +| PartialImplementationA.cs:3:12:3:18 | call to constructor Object | PartialImplementationA.cs:3:27:3:29 | {...} | | +| PartialImplementationA.cs:3:12:3:18 | call to method | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | | +| PartialImplementationA.cs:3:12:3:18 | enter Partial | PartialImplementationA.cs:3:12:3:18 | this access | | | PartialImplementationA.cs:3:12:3:18 | exit Partial (normal) | PartialImplementationA.cs:3:12:3:18 | exit Partial | | +| PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | call to method | | | PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:12:3:18 | exit Partial (normal) | | | PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationB.cs:3:20:3:20 | 0 | | -| PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationB.cs:3:20:3:20 | 0 | | -| PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationB.cs:5:16:5:16 | this access | | | PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationB.cs:5:16:5:16 | this access | | | PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationB.cs:3:16:3:20 | ... = ... | | -| PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationB.cs:3:16:3:20 | ... = ... | | -| PartialImplementationB.cs:4:12:4:18 | call to constructor Object | PartialImplementationB.cs:3:16:3:16 | this access | | -| PartialImplementationB.cs:4:12:4:18 | enter Partial | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | | +| PartialImplementationB.cs:4:12:4:18 | call to constructor Object | PartialImplementationB.cs:4:22:4:24 | {...} | | +| PartialImplementationB.cs:4:12:4:18 | call to method | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | | +| PartialImplementationB.cs:4:12:4:18 | enter Partial | PartialImplementationB.cs:4:12:4:18 | this access | | | PartialImplementationB.cs:4:12:4:18 | exit Partial (normal) | PartialImplementationB.cs:4:12:4:18 | exit Partial | | +| PartialImplementationB.cs:4:12:4:18 | this access | PartialImplementationB.cs:4:12:4:18 | call to method | | | PartialImplementationB.cs:4:22:4:24 | {...} | PartialImplementationB.cs:4:12:4:18 | exit Partial (normal) | | | PartialImplementationB.cs:5:16:5:16 | access to property P | PartialImplementationB.cs:5:32:5:34 | ... = ... | | -| PartialImplementationB.cs:5:16:5:16 | access to property P | PartialImplementationB.cs:5:32:5:34 | ... = ... | | | PartialImplementationB.cs:5:16:5:16 | this access | PartialImplementationB.cs:5:34:5:34 | 0 | | -| PartialImplementationB.cs:5:16:5:16 | this access | PartialImplementationB.cs:5:34:5:34 | 0 | | -| PartialImplementationB.cs:5:32:5:34 | ... = ... | PartialImplementationA.cs:3:27:3:29 | {...} | | -| PartialImplementationB.cs:5:32:5:34 | ... = ... | PartialImplementationB.cs:4:22:4:24 | {...} | | -| PartialImplementationB.cs:5:34:5:34 | 0 | PartialImplementationB.cs:5:16:5:16 | access to property P | | +| PartialImplementationB.cs:5:32:5:34 | ... = ... | PartialImplementationA.cs:1:15:1:21 | exit (normal) | | | PartialImplementationB.cs:5:34:5:34 | 0 | PartialImplementationB.cs:5:16:5:16 | access to property P | | | Patterns.cs:3:7:3:14 | call to constructor Object | Patterns.cs:3:7:3:14 | {...} | | -| Patterns.cs:3:7:3:14 | enter Patterns | Patterns.cs:3:7:3:14 | call to constructor Object | | +| Patterns.cs:3:7:3:14 | call to method | Patterns.cs:3:7:3:14 | call to constructor Object | | +| Patterns.cs:3:7:3:14 | enter Patterns | Patterns.cs:3:7:3:14 | this access | | | Patterns.cs:3:7:3:14 | exit Patterns (normal) | Patterns.cs:3:7:3:14 | exit Patterns | | +| Patterns.cs:3:7:3:14 | this access | Patterns.cs:3:7:3:14 | call to method | | | Patterns.cs:3:7:3:14 | {...} | Patterns.cs:3:7:3:14 | exit Patterns (normal) | | | Patterns.cs:5:10:5:11 | enter M1 | Patterns.cs:6:5:43:5 | {...} | | | Patterns.cs:5:10:5:11 | exit M1 (normal) | Patterns.cs:5:10:5:11 | exit M1 | | @@ -3045,8 +3105,10 @@ | Patterns.cs:97:13:97:39 | ...; | Patterns.cs:97:31:97:37 | "not C" | | | Patterns.cs:97:31:97:37 | "not C" | Patterns.cs:97:13:97:38 | call to method WriteLine | | | PostDominance.cs:3:7:3:19 | call to constructor Object | PostDominance.cs:3:7:3:19 | {...} | | -| PostDominance.cs:3:7:3:19 | enter PostDominance | PostDominance.cs:3:7:3:19 | call to constructor Object | | +| PostDominance.cs:3:7:3:19 | call to method | PostDominance.cs:3:7:3:19 | call to constructor Object | | +| PostDominance.cs:3:7:3:19 | enter PostDominance | PostDominance.cs:3:7:3:19 | this access | | | PostDominance.cs:3:7:3:19 | exit PostDominance (normal) | PostDominance.cs:3:7:3:19 | exit PostDominance | | +| PostDominance.cs:3:7:3:19 | this access | PostDominance.cs:3:7:3:19 | call to method | | | PostDominance.cs:3:7:3:19 | {...} | PostDominance.cs:3:7:3:19 | exit PostDominance (normal) | | | PostDominance.cs:5:10:5:11 | enter M1 | PostDominance.cs:6:5:8:5 | {...} | | | PostDominance.cs:5:10:5:11 | exit M1 (normal) | PostDominance.cs:5:10:5:11 | exit M1 | | @@ -3084,8 +3146,10 @@ | PostDominance.cs:21:9:21:29 | ...; | PostDominance.cs:21:27:21:27 | access to parameter s | | | PostDominance.cs:21:27:21:27 | access to parameter s | PostDominance.cs:21:9:21:28 | call to method WriteLine | | | Qualifiers.cs:1:7:1:16 | call to constructor Object | Qualifiers.cs:1:7:1:16 | {...} | | -| Qualifiers.cs:1:7:1:16 | enter Qualifiers | Qualifiers.cs:1:7:1:16 | call to constructor Object | | +| Qualifiers.cs:1:7:1:16 | call to method | Qualifiers.cs:1:7:1:16 | call to constructor Object | | +| Qualifiers.cs:1:7:1:16 | enter Qualifiers | Qualifiers.cs:1:7:1:16 | this access | | | Qualifiers.cs:1:7:1:16 | exit Qualifiers (normal) | Qualifiers.cs:1:7:1:16 | exit Qualifiers | | +| Qualifiers.cs:1:7:1:16 | this access | Qualifiers.cs:1:7:1:16 | call to method | | | Qualifiers.cs:1:7:1:16 | {...} | Qualifiers.cs:1:7:1:16 | exit Qualifiers (normal) | | | Qualifiers.cs:7:16:7:21 | enter Method | Qualifiers.cs:7:28:7:31 | null | | | Qualifiers.cs:7:16:7:21 | exit Method (normal) | Qualifiers.cs:7:16:7:21 | exit Method | | @@ -3151,8 +3215,10 @@ | Qualifiers.cs:30:13:30:37 | call to method StaticMethod | Qualifiers.cs:30:13:30:46 | call to method Method | | | Qualifiers.cs:30:13:30:46 | call to method Method | Qualifiers.cs:30:9:30:46 | ... = ... | | | Switch.cs:3:7:3:12 | call to constructor Object | Switch.cs:3:7:3:12 | {...} | | -| Switch.cs:3:7:3:12 | enter Switch | Switch.cs:3:7:3:12 | call to constructor Object | | +| Switch.cs:3:7:3:12 | call to method | Switch.cs:3:7:3:12 | call to constructor Object | | +| Switch.cs:3:7:3:12 | enter Switch | Switch.cs:3:7:3:12 | this access | | | Switch.cs:3:7:3:12 | exit Switch (normal) | Switch.cs:3:7:3:12 | exit Switch | | +| Switch.cs:3:7:3:12 | this access | Switch.cs:3:7:3:12 | call to method | | | Switch.cs:3:7:3:12 | {...} | Switch.cs:3:7:3:12 | exit Switch (normal) | | | Switch.cs:5:10:5:11 | enter M1 | Switch.cs:6:5:8:5 | {...} | | | Switch.cs:5:10:5:11 | exit M1 (normal) | Switch.cs:5:10:5:11 | exit M1 | | @@ -3478,8 +3544,10 @@ | Switch.cs:175:42:175:46 | "def" | Switch.cs:175:17:175:47 | call to method WriteLine | | | Switch.cs:176:17:176:22 | break; | Switch.cs:163:10:163:12 | exit M16 (normal) | break | | TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | {...} | | -| TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | TypeAccesses.cs:1:7:1:18 | call to constructor Object | | +| TypeAccesses.cs:1:7:1:18 | call to method | TypeAccesses.cs:1:7:1:18 | call to constructor Object | | +| TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | TypeAccesses.cs:1:7:1:18 | this access | | | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses (normal) | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses | | +| TypeAccesses.cs:1:7:1:18 | this access | TypeAccesses.cs:1:7:1:18 | call to method | | | TypeAccesses.cs:1:7:1:18 | {...} | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses (normal) | | | TypeAccesses.cs:3:10:3:10 | enter M | TypeAccesses.cs:4:5:9:5 | {...} | | | TypeAccesses.cs:3:10:3:10 | exit M (normal) | TypeAccesses.cs:3:10:3:10 | exit M | | @@ -3503,8 +3571,10 @@ | TypeAccesses.cs:8:13:8:27 | Type t = ... | TypeAccesses.cs:3:10:3:10 | exit M (normal) | | | TypeAccesses.cs:8:17:8:27 | typeof(...) | TypeAccesses.cs:8:13:8:27 | Type t = ... | | | VarDecls.cs:3:7:3:14 | call to constructor Object | VarDecls.cs:3:7:3:14 | {...} | | -| VarDecls.cs:3:7:3:14 | enter VarDecls | VarDecls.cs:3:7:3:14 | call to constructor Object | | +| VarDecls.cs:3:7:3:14 | call to method | VarDecls.cs:3:7:3:14 | call to constructor Object | | +| VarDecls.cs:3:7:3:14 | enter VarDecls | VarDecls.cs:3:7:3:14 | this access | | | VarDecls.cs:3:7:3:14 | exit VarDecls (normal) | VarDecls.cs:3:7:3:14 | exit VarDecls | | +| VarDecls.cs:3:7:3:14 | this access | VarDecls.cs:3:7:3:14 | call to method | | | VarDecls.cs:3:7:3:14 | {...} | VarDecls.cs:3:7:3:14 | exit VarDecls (normal) | | | VarDecls.cs:5:18:5:19 | enter M1 | VarDecls.cs:6:5:11:5 | {...} | | | VarDecls.cs:5:18:5:19 | exit M1 (normal) | VarDecls.cs:5:18:5:19 | exit M1 | | @@ -3554,8 +3624,10 @@ | VarDecls.cs:25:24:25:24 | access to local variable x | VarDecls.cs:25:20:25:28 | ... ? ... : ... | | | VarDecls.cs:25:28:25:28 | access to local variable y | VarDecls.cs:25:20:25:28 | ... ? ... : ... | | | VarDecls.cs:28:11:28:11 | call to constructor Object | VarDecls.cs:28:11:28:11 | {...} | | -| VarDecls.cs:28:11:28:11 | enter C | VarDecls.cs:28:11:28:11 | call to constructor Object | | +| VarDecls.cs:28:11:28:11 | call to method | VarDecls.cs:28:11:28:11 | call to constructor Object | | +| VarDecls.cs:28:11:28:11 | enter C | VarDecls.cs:28:11:28:11 | this access | | | VarDecls.cs:28:11:28:11 | exit C (normal) | VarDecls.cs:28:11:28:11 | exit C | | +| VarDecls.cs:28:11:28:11 | this access | VarDecls.cs:28:11:28:11 | call to method | | | VarDecls.cs:28:11:28:11 | {...} | VarDecls.cs:28:11:28:11 | exit C (normal) | | | VarDecls.cs:28:41:28:47 | enter Dispose | VarDecls.cs:28:51:28:53 | {...} | | | VarDecls.cs:28:41:28:47 | exit Dispose (normal) | VarDecls.cs:28:41:28:47 | exit Dispose | | @@ -3855,8 +3927,10 @@ | cflow.cs:127:68:127:81 | ...; | cflow.cs:127:68:127:72 | this access | | | cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:68:127:80 | ... = ... | | | cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:130:5:132:5 | {...} | | -| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | call to constructor Object | | +| cflow.cs:129:5:129:15 | call to method | cflow.cs:129:5:129:15 | call to constructor Object | | +| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | this access | | | cflow.cs:129:5:129:15 | exit ControlFlow (normal) | cflow.cs:129:5:129:15 | exit ControlFlow | | +| cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | call to method | | | cflow.cs:130:5:132:5 | {...} | cflow.cs:131:9:131:18 | ...; | | | cflow.cs:131:9:131:13 | this access | cflow.cs:131:17:131:17 | access to parameter s | | | cflow.cs:131:9:131:17 | ... = ... | cflow.cs:129:5:129:15 | exit ControlFlow (normal) | | @@ -4231,8 +4305,10 @@ | cflow.cs:275:13:275:41 | call to method WriteLine | cflow.cs:261:49:261:53 | exit Yield (normal) | , return | | cflow.cs:275:13:275:42 | ...; | cflow.cs:275:31:275:40 | "not dead" | | | cflow.cs:275:31:275:40 | "not dead" | cflow.cs:275:13:275:41 | call to method WriteLine | | -| cflow.cs:282:5:282:18 | enter ControlFlowSub | cflow.cs:282:24:282:27 | call to constructor ControlFlow | | +| cflow.cs:282:5:282:18 | call to method | cflow.cs:282:24:282:27 | call to constructor ControlFlow | | +| cflow.cs:282:5:282:18 | enter ControlFlowSub | cflow.cs:282:5:282:18 | this access | | | cflow.cs:282:5:282:18 | exit ControlFlowSub (normal) | cflow.cs:282:5:282:18 | exit ControlFlowSub | | +| cflow.cs:282:5:282:18 | this access | cflow.cs:282:5:282:18 | call to method | | | cflow.cs:282:24:282:27 | call to constructor ControlFlow | cflow.cs:282:31:282:33 | {...} | | | cflow.cs:282:31:282:33 | {...} | cflow.cs:282:5:282:18 | exit ControlFlowSub (normal) | | | cflow.cs:284:5:284:18 | enter ControlFlowSub | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub | | @@ -4246,8 +4322,10 @@ | cflow.cs:286:34:286:45 | call to method ToString | cflow.cs:286:29:286:32 | call to constructor ControlFlowSub | | | cflow.cs:286:48:286:50 | {...} | cflow.cs:286:5:286:18 | exit ControlFlowSub (normal) | | | cflow.cs:289:7:289:18 | call to constructor Object | cflow.cs:289:7:289:18 | {...} | | -| cflow.cs:289:7:289:18 | enter DelegateCall | cflow.cs:289:7:289:18 | call to constructor Object | | +| cflow.cs:289:7:289:18 | call to method | cflow.cs:289:7:289:18 | call to constructor Object | | +| cflow.cs:289:7:289:18 | enter DelegateCall | cflow.cs:289:7:289:18 | this access | | | cflow.cs:289:7:289:18 | exit DelegateCall (normal) | cflow.cs:289:7:289:18 | exit DelegateCall | | +| cflow.cs:289:7:289:18 | this access | cflow.cs:289:7:289:18 | call to method | | | cflow.cs:289:7:289:18 | {...} | cflow.cs:289:7:289:18 | exit DelegateCall (normal) | | | cflow.cs:291:12:291:12 | enter M | cflow.cs:291:38:291:38 | access to parameter f | | | cflow.cs:291:12:291:12 | exit M (normal) | cflow.cs:291:12:291:12 | exit M | | @@ -4255,8 +4333,10 @@ | cflow.cs:291:38:291:41 | delegate call | cflow.cs:291:12:291:12 | exit M (normal) | | | cflow.cs:291:40:291:40 | 0 | cflow.cs:291:38:291:41 | delegate call | | | cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:52:296:54 | {...} | | -| cflow.cs:296:5:296:25 | enter NegationInConstructor | cflow.cs:296:5:296:25 | call to constructor Object | | +| cflow.cs:296:5:296:25 | call to method | cflow.cs:296:5:296:25 | call to constructor Object | | +| cflow.cs:296:5:296:25 | enter NegationInConstructor | cflow.cs:296:5:296:25 | this access | | | cflow.cs:296:5:296:25 | exit NegationInConstructor (normal) | cflow.cs:296:5:296:25 | exit NegationInConstructor | | +| cflow.cs:296:5:296:25 | this access | cflow.cs:296:5:296:25 | call to method | | | cflow.cs:296:52:296:54 | {...} | cflow.cs:296:5:296:25 | exit NegationInConstructor (normal) | | | cflow.cs:298:10:298:10 | enter M | cflow.cs:299:5:301:5 | {...} | | | cflow.cs:298:10:298:10 | exit M (normal) | cflow.cs:298:10:298:10 | exit M | | @@ -4276,8 +4356,10 @@ | cflow.cs:300:61:300:64 | null | cflow.cs:300:56:300:64 | ... != ... | | | cflow.cs:300:70:300:71 | "" | cflow.cs:300:9:300:72 | object creation of type NegationInConstructor | | | cflow.cs:304:7:304:18 | call to constructor Object | cflow.cs:304:7:304:18 | {...} | | -| cflow.cs:304:7:304:18 | enter LambdaGetter | cflow.cs:304:7:304:18 | call to constructor Object | | +| cflow.cs:304:7:304:18 | call to method | cflow.cs:304:7:304:18 | call to constructor Object | | +| cflow.cs:304:7:304:18 | enter LambdaGetter | cflow.cs:304:7:304:18 | this access | | | cflow.cs:304:7:304:18 | exit LambdaGetter (normal) | cflow.cs:304:7:304:18 | exit LambdaGetter | | +| cflow.cs:304:7:304:18 | this access | cflow.cs:304:7:304:18 | call to method | | | cflow.cs:304:7:304:18 | {...} | cflow.cs:304:7:304:18 | exit LambdaGetter (normal) | | | cflow.cs:306:60:310:5 | (...) => ... | cflow.cs:306:60:310:5 | exit get__getter (normal) | | | cflow.cs:306:60:310:5 | enter (...) => ... | cflow.cs:307:5:310:5 | {...} | | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected b/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected index 26e8d074b191..aff874814619 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected @@ -1,4 +1,4 @@ -| AccessorCalls.cs:1:7:1:19 | AccessorCalls | AccessorCalls.cs:1:7:1:19 | call to constructor Object | +| AccessorCalls.cs:1:7:1:19 | AccessorCalls | AccessorCalls.cs:1:7:1:19 | this access | | AccessorCalls.cs:5:23:5:25 | get_Item | AccessorCalls.cs:5:30:5:30 | access to parameter i | | AccessorCalls.cs:5:33:5:35 | set_Item | AccessorCalls.cs:5:37:5:39 | {...} | | AccessorCalls.cs:7:32:7:34 | add_Event | AccessorCalls.cs:7:36:7:38 | {...} | @@ -12,12 +12,12 @@ | AccessorCalls.cs:56:10:56:11 | M7 | AccessorCalls.cs:57:5:59:5 | {...} | | AccessorCalls.cs:61:10:61:11 | M8 | AccessorCalls.cs:62:5:64:5 | {...} | | AccessorCalls.cs:66:10:66:11 | M9 | AccessorCalls.cs:67:5:74:5 | {...} | -| ArrayCreation.cs:1:7:1:19 | ArrayCreation | ArrayCreation.cs:1:7:1:19 | call to constructor Object | +| ArrayCreation.cs:1:7:1:19 | ArrayCreation | ArrayCreation.cs:1:7:1:19 | this access | | ArrayCreation.cs:3:11:3:12 | M1 | ArrayCreation.cs:3:27:3:27 | 0 | | ArrayCreation.cs:5:12:5:13 | M2 | ArrayCreation.cs:5:28:5:28 | 0 | | ArrayCreation.cs:7:11:7:12 | M3 | ArrayCreation.cs:7:19:7:36 | 2 | | ArrayCreation.cs:9:12:9:13 | M4 | ArrayCreation.cs:9:20:9:52 | 2 | -| Assert.cs:5:7:5:17 | AssertTests | Assert.cs:5:7:5:17 | call to constructor Object | +| Assert.cs:5:7:5:17 | AssertTests | Assert.cs:5:7:5:17 | this access | | Assert.cs:7:10:7:11 | M1 | Assert.cs:8:5:12:5 | {...} | | Assert.cs:14:10:14:11 | M2 | Assert.cs:15:5:19:5 | {...} | | Assert.cs:21:10:21:11 | M3 | Assert.cs:22:5:26:5 | {...} | @@ -32,23 +32,23 @@ | Assert.cs:84:10:84:12 | M12 | Assert.cs:85:5:129:5 | {...} | | Assert.cs:131:18:131:32 | AssertTrueFalse | Assert.cs:135:5:136:5 | {...} | | Assert.cs:138:10:138:12 | M13 | Assert.cs:139:5:142:5 | {...} | -| Assignments.cs:1:7:1:17 | Assignments | Assignments.cs:1:7:1:17 | call to constructor Object | +| Assignments.cs:1:7:1:17 | Assignments | Assignments.cs:1:7:1:17 | this access | | Assignments.cs:3:10:3:10 | M | Assignments.cs:4:5:15:5 | {...} | | Assignments.cs:14:18:14:35 | (...) => ... | Assignments.cs:14:33:14:35 | {...} | | Assignments.cs:17:40:17:40 | + | Assignments.cs:18:5:20:5 | {...} | -| BreakInTry.cs:1:7:1:16 | BreakInTry | BreakInTry.cs:1:7:1:16 | call to constructor Object | +| BreakInTry.cs:1:7:1:16 | BreakInTry | BreakInTry.cs:1:7:1:16 | this access | | BreakInTry.cs:3:10:3:11 | M1 | BreakInTry.cs:4:5:18:5 | {...} | | BreakInTry.cs:20:10:20:11 | M2 | BreakInTry.cs:21:5:36:5 | {...} | | BreakInTry.cs:38:10:38:11 | M3 | BreakInTry.cs:39:5:54:5 | {...} | | BreakInTry.cs:56:10:56:11 | M4 | BreakInTry.cs:57:5:71:5 | {...} | -| CompileTimeOperators.cs:3:7:3:26 | CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | +| CompileTimeOperators.cs:3:7:3:26 | CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | this access | | CompileTimeOperators.cs:5:9:5:15 | Default | CompileTimeOperators.cs:6:5:8:5 | {...} | | CompileTimeOperators.cs:10:9:10:14 | Sizeof | CompileTimeOperators.cs:11:5:13:5 | {...} | | CompileTimeOperators.cs:15:10:15:15 | Typeof | CompileTimeOperators.cs:16:5:18:5 | {...} | | CompileTimeOperators.cs:20:12:20:17 | Nameof | CompileTimeOperators.cs:21:5:23:5 | {...} | -| CompileTimeOperators.cs:26:7:26:22 | GotoInTryFinally | CompileTimeOperators.cs:26:7:26:22 | call to constructor Object | +| CompileTimeOperators.cs:26:7:26:22 | GotoInTryFinally | CompileTimeOperators.cs:26:7:26:22 | this access | | CompileTimeOperators.cs:28:10:28:10 | M | CompileTimeOperators.cs:29:5:41:5 | {...} | -| ConditionalAccess.cs:1:7:1:23 | ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | call to constructor Object | +| ConditionalAccess.cs:1:7:1:23 | ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | this access | | ConditionalAccess.cs:3:12:3:13 | M1 | ConditionalAccess.cs:3:26:3:26 | access to parameter i | | ConditionalAccess.cs:5:10:5:11 | M2 | ConditionalAccess.cs:5:26:5:26 | access to parameter s | | ConditionalAccess.cs:7:10:7:11 | M3 | ConditionalAccess.cs:7:39:7:40 | access to parameter s1 | @@ -59,7 +59,7 @@ | ConditionalAccess.cs:30:10:30:12 | Out | ConditionalAccess.cs:30:32:30:32 | 0 | | ConditionalAccess.cs:32:10:32:11 | M8 | ConditionalAccess.cs:33:5:36:5 | {...} | | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | -| Conditions.cs:1:7:1:16 | Conditions | Conditions.cs:1:7:1:16 | call to constructor Object | +| Conditions.cs:1:7:1:16 | Conditions | Conditions.cs:1:7:1:16 | this access | | Conditions.cs:3:10:3:19 | IncrOrDecr | Conditions.cs:4:5:9:5 | {...} | | Conditions.cs:11:9:11:10 | M1 | Conditions.cs:12:5:20:5 | {...} | | Conditions.cs:22:9:22:10 | M2 | Conditions.cs:23:5:31:5 | {...} | @@ -72,7 +72,7 @@ | Conditions.cs:113:10:113:11 | M9 | Conditions.cs:114:5:124:5 | {...} | | Conditions.cs:129:10:129:12 | M10 | Conditions.cs:130:5:141:5 | {...} | | Conditions.cs:143:10:143:12 | M11 | Conditions.cs:144:5:150:5 | {...} | -| ExitMethods.cs:6:7:6:17 | ExitMethods | ExitMethods.cs:6:7:6:17 | call to constructor Object | +| ExitMethods.cs:6:7:6:17 | ExitMethods | ExitMethods.cs:6:7:6:17 | this access | | ExitMethods.cs:8:10:8:11 | M1 | ExitMethods.cs:9:5:12:5 | {...} | | ExitMethods.cs:14:10:14:11 | M2 | ExitMethods.cs:15:5:18:5 | {...} | | ExitMethods.cs:20:10:20:11 | M3 | ExitMethods.cs:21:5:24:5 | {...} | @@ -99,7 +99,7 @@ | Extensions.cs:10:24:10:29 | ToBool | Extensions.cs:11:5:13:5 | {...} | | Extensions.cs:15:23:15:33 | CallToInt32 | Extensions.cs:15:48:15:50 | "0" | | Extensions.cs:20:17:20:20 | Main | Extensions.cs:21:5:26:5 | {...} | -| Finally.cs:3:14:3:20 | Finally | Finally.cs:3:14:3:20 | call to constructor Object | +| Finally.cs:3:14:3:20 | Finally | Finally.cs:3:14:3:20 | this access | | Finally.cs:7:10:7:11 | M1 | Finally.cs:8:5:17:5 | {...} | | Finally.cs:19:10:19:11 | M2 | Finally.cs:20:5:52:5 | {...} | | Finally.cs:54:10:54:11 | M3 | Finally.cs:55:5:72:5 | {...} | @@ -108,33 +108,36 @@ | Finally.cs:121:10:121:11 | M6 | Finally.cs:122:5:131:5 | {...} | | Finally.cs:133:10:133:11 | M7 | Finally.cs:134:5:145:5 | {...} | | Finally.cs:147:10:147:11 | M8 | Finally.cs:148:5:170:5 | {...} | -| Finally.cs:172:11:172:20 | ExceptionA | Finally.cs:172:11:172:20 | call to constructor Exception | -| Finally.cs:173:11:173:20 | ExceptionB | Finally.cs:173:11:173:20 | call to constructor Exception | -| Finally.cs:174:11:174:20 | ExceptionC | Finally.cs:174:11:174:20 | call to constructor Exception | +| Finally.cs:172:11:172:20 | ExceptionA | Finally.cs:172:11:172:20 | this access | +| Finally.cs:173:11:173:20 | ExceptionB | Finally.cs:173:11:173:20 | this access | +| Finally.cs:174:11:174:20 | ExceptionC | Finally.cs:174:11:174:20 | this access | | Finally.cs:176:10:176:11 | M9 | Finally.cs:177:5:193:5 | {...} | | Finally.cs:195:10:195:12 | M10 | Finally.cs:196:5:214:5 | {...} | | Finally.cs:216:10:216:12 | M11 | Finally.cs:217:5:231:5 | {...} | | Finally.cs:233:10:233:12 | M12 | Finally.cs:234:5:261:5 | {...} | | Finally.cs:263:10:263:12 | M13 | Finally.cs:264:5:274:5 | {...} | -| Foreach.cs:4:7:4:13 | Foreach | Foreach.cs:4:7:4:13 | call to constructor Object | +| Foreach.cs:4:7:4:13 | Foreach | Foreach.cs:4:7:4:13 | this access | | Foreach.cs:6:10:6:11 | M1 | Foreach.cs:7:5:10:5 | {...} | | Foreach.cs:12:10:12:11 | M2 | Foreach.cs:13:5:16:5 | {...} | | Foreach.cs:18:10:18:11 | M3 | Foreach.cs:19:5:22:5 | {...} | | Foreach.cs:24:10:24:11 | M4 | Foreach.cs:25:5:28:5 | {...} | | Foreach.cs:30:10:30:11 | M5 | Foreach.cs:31:5:34:5 | {...} | | Foreach.cs:36:10:36:11 | M6 | Foreach.cs:37:5:40:5 | {...} | +| Initializers.cs:3:7:3:18 | | Initializers.cs:5:9:5:9 | this access | | Initializers.cs:3:7:3:18 | Initializers | Initializers.cs:3:7:3:18 | {...} | -| Initializers.cs:8:5:8:16 | Initializers | Initializers.cs:8:5:8:16 | call to constructor Object | -| Initializers.cs:10:5:10:16 | Initializers | Initializers.cs:10:5:10:16 | call to constructor Object | +| Initializers.cs:8:5:8:16 | Initializers | Initializers.cs:8:5:8:16 | this access | +| Initializers.cs:10:5:10:16 | Initializers | Initializers.cs:10:5:10:16 | this access | | Initializers.cs:12:10:12:10 | M | Initializers.cs:13:5:16:5 | {...} | -| Initializers.cs:20:11:20:23 | NoConstructor | Initializers.cs:20:11:20:23 | call to constructor Object | -| Initializers.cs:31:9:31:11 | Sub | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | +| Initializers.cs:20:11:20:23 | | Initializers.cs:22:23:22:23 | this access | +| Initializers.cs:20:11:20:23 | NoConstructor | Initializers.cs:20:11:20:23 | this access | +| Initializers.cs:26:11:26:13 | | Initializers.cs:28:13:28:13 | this access | +| Initializers.cs:31:9:31:11 | Sub | Initializers.cs:31:9:31:11 | this access | | Initializers.cs:33:9:33:11 | Sub | Initializers.cs:33:22:33:25 | call to constructor Sub | -| Initializers.cs:35:9:35:11 | Sub | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | -| Initializers.cs:39:7:39:23 | IndexInitializers | Initializers.cs:39:7:39:23 | call to constructor Object | -| Initializers.cs:41:11:41:18 | Compound | Initializers.cs:41:11:41:18 | call to constructor Object | +| Initializers.cs:35:9:35:11 | Sub | Initializers.cs:35:9:35:11 | this access | +| Initializers.cs:39:7:39:23 | IndexInitializers | Initializers.cs:39:7:39:23 | this access | +| Initializers.cs:41:11:41:18 | Compound | Initializers.cs:41:11:41:18 | this access | | Initializers.cs:51:10:51:13 | Test | Initializers.cs:52:5:66:5 | {...} | -| LoopUnrolling.cs:5:7:5:19 | LoopUnrolling | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | +| LoopUnrolling.cs:5:7:5:19 | LoopUnrolling | LoopUnrolling.cs:5:7:5:19 | this access | | LoopUnrolling.cs:7:10:7:11 | M1 | LoopUnrolling.cs:8:5:13:5 | {...} | | LoopUnrolling.cs:15:10:15:11 | M2 | LoopUnrolling.cs:16:5:20:5 | {...} | | LoopUnrolling.cs:22:10:22:11 | M3 | LoopUnrolling.cs:23:5:27:5 | {...} | @@ -146,8 +149,8 @@ | LoopUnrolling.cs:76:10:76:11 | M9 | LoopUnrolling.cs:77:5:83:5 | {...} | | LoopUnrolling.cs:85:10:85:12 | M10 | LoopUnrolling.cs:86:5:92:5 | {...} | | LoopUnrolling.cs:94:10:94:12 | M11 | LoopUnrolling.cs:95:5:101:5 | {...} | -| MultiImplementationA.cs:4:7:4:8 | C1 | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | -| MultiImplementationA.cs:4:7:4:8 | C1 | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | +| MultiImplementationA.cs:4:7:4:8 | C1 | MultiImplementationA.cs:4:7:4:8 | this access | +| MultiImplementationA.cs:4:7:4:8 | C1 | MultiImplementationB.cs:1:7:1:8 | this access | | MultiImplementationA.cs:6:22:6:31 | get_P1 | MultiImplementationA.cs:6:28:6:31 | null | | MultiImplementationA.cs:6:22:6:31 | get_P1 | MultiImplementationB.cs:3:22:3:22 | 0 | | MultiImplementationA.cs:7:21:7:23 | get_P2 | MultiImplementationA.cs:7:25:7:39 | {...} | @@ -156,6 +159,8 @@ | MultiImplementationA.cs:7:41:7:43 | set_P2 | MultiImplementationB.cs:4:43:4:45 | {...} | | MultiImplementationA.cs:8:16:8:16 | M | MultiImplementationA.cs:8:29:8:32 | null | | MultiImplementationA.cs:8:16:8:16 | M | MultiImplementationB.cs:5:23:5:23 | 2 | +| MultiImplementationA.cs:11:7:11:8 | | MultiImplementationA.cs:13:16:13:16 | this access | +| MultiImplementationA.cs:11:7:11:8 | | MultiImplementationB.cs:11:16:11:16 | this access | | MultiImplementationA.cs:14:31:14:31 | get_Item | MultiImplementationA.cs:14:31:14:31 | access to parameter i | | MultiImplementationA.cs:14:31:14:31 | get_Item | MultiImplementationB.cs:12:37:12:40 | null | | MultiImplementationA.cs:15:36:15:38 | get_Item | MultiImplementationA.cs:15:40:15:52 | {...} | @@ -165,33 +170,34 @@ | MultiImplementationA.cs:16:17:16:18 | M1 | MultiImplementationA.cs:17:5:19:5 | {...} | | MultiImplementationA.cs:16:17:16:18 | M1 | MultiImplementationB.cs:15:5:17:5 | {...} | | MultiImplementationA.cs:18:9:18:22 | M2 | MultiImplementationA.cs:18:21:18:21 | 0 | -| MultiImplementationA.cs:20:12:20:13 | C2 | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | -| MultiImplementationA.cs:20:12:20:13 | C2 | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | +| MultiImplementationA.cs:20:12:20:13 | C2 | MultiImplementationA.cs:20:12:20:13 | this access | +| MultiImplementationA.cs:20:12:20:13 | C2 | MultiImplementationB.cs:18:12:18:13 | this access | | MultiImplementationA.cs:21:12:21:13 | C2 | MultiImplementationA.cs:21:24:21:24 | 0 | | MultiImplementationA.cs:21:12:21:13 | C2 | MultiImplementationB.cs:19:24:19:24 | 1 | | MultiImplementationA.cs:22:6:22:7 | ~C2 | MultiImplementationA.cs:22:11:22:13 | {...} | | MultiImplementationA.cs:22:6:22:7 | ~C2 | MultiImplementationB.cs:20:11:20:25 | {...} | | MultiImplementationA.cs:23:28:23:35 | implicit conversion | MultiImplementationA.cs:23:50:23:53 | null | | MultiImplementationA.cs:23:28:23:35 | implicit conversion | MultiImplementationB.cs:21:56:21:59 | null | -| MultiImplementationA.cs:28:7:28:8 | C3 | MultiImplementationA.cs:28:7:28:8 | call to constructor Object | -| MultiImplementationA.cs:28:7:28:8 | C3 | MultiImplementationB.cs:25:7:25:8 | call to constructor Object | +| MultiImplementationA.cs:28:7:28:8 | C3 | MultiImplementationA.cs:28:7:28:8 | this access | +| MultiImplementationA.cs:28:7:28:8 | C3 | MultiImplementationB.cs:25:7:25:8 | this access | | MultiImplementationA.cs:30:21:30:23 | get_P3 | MultiImplementationA.cs:30:34:30:37 | null | -| MultiImplementationA.cs:34:15:34:16 | C4 | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | -| MultiImplementationA.cs:34:15:34:16 | C4 | MultiImplementationB.cs:30:15:30:16 | call to constructor Object | +| MultiImplementationA.cs:34:15:34:16 | C4 | MultiImplementationA.cs:34:15:34:16 | this access | +| MultiImplementationA.cs:34:15:34:16 | C4 | MultiImplementationB.cs:30:15:30:16 | this access | | MultiImplementationA.cs:36:9:36:10 | M1 | MultiImplementationA.cs:36:14:36:28 | {...} | | MultiImplementationA.cs:36:9:36:10 | M1 | MultiImplementationB.cs:32:17:32:17 | 0 | | MultiImplementationA.cs:37:9:37:10 | M2 | MultiImplementationA.cs:37:14:37:28 | {...} | | MultiImplementationB.cs:16:9:16:31 | M2 | MultiImplementationB.cs:16:27:16:30 | null | -| NullCoalescing.cs:1:7:1:20 | NullCoalescing | NullCoalescing.cs:1:7:1:20 | call to constructor Object | +| NullCoalescing.cs:1:7:1:20 | NullCoalescing | NullCoalescing.cs:1:7:1:20 | this access | | NullCoalescing.cs:3:9:3:10 | M1 | NullCoalescing.cs:3:23:3:23 | access to parameter i | | NullCoalescing.cs:5:9:5:10 | M2 | NullCoalescing.cs:5:25:5:25 | access to parameter b | | NullCoalescing.cs:7:12:7:13 | M3 | NullCoalescing.cs:7:40:7:41 | access to parameter s1 | | NullCoalescing.cs:9:12:9:13 | M4 | NullCoalescing.cs:9:37:9:37 | access to parameter b | | NullCoalescing.cs:11:9:11:10 | M5 | NullCoalescing.cs:11:44:11:45 | access to parameter b1 | | NullCoalescing.cs:13:10:13:11 | M6 | NullCoalescing.cs:14:5:18:5 | {...} | -| PartialImplementationA.cs:3:12:3:18 | Partial | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | -| PartialImplementationB.cs:4:12:4:18 | Partial | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | -| Patterns.cs:3:7:3:14 | Patterns | Patterns.cs:3:7:3:14 | call to constructor Object | +| PartialImplementationA.cs:1:15:1:21 | | PartialImplementationB.cs:3:16:3:16 | this access | +| PartialImplementationA.cs:3:12:3:18 | Partial | PartialImplementationA.cs:3:12:3:18 | this access | +| PartialImplementationB.cs:4:12:4:18 | Partial | PartialImplementationB.cs:4:12:4:18 | this access | +| Patterns.cs:3:7:3:14 | Patterns | Patterns.cs:3:7:3:14 | this access | | Patterns.cs:5:10:5:11 | M1 | Patterns.cs:6:5:43:5 | {...} | | Patterns.cs:47:24:47:25 | M2 | Patterns.cs:48:9:48:9 | access to parameter c | | Patterns.cs:50:24:50:25 | M3 | Patterns.cs:51:9:51:9 | access to parameter c | @@ -202,15 +208,15 @@ | Patterns.cs:85:26:85:27 | M8 | Patterns.cs:85:39:85:39 | access to parameter i | | Patterns.cs:87:26:87:27 | M9 | Patterns.cs:87:39:87:39 | access to parameter i | | Patterns.cs:93:17:93:19 | M10 | Patterns.cs:94:5:99:5 | {...} | -| PostDominance.cs:3:7:3:19 | PostDominance | PostDominance.cs:3:7:3:19 | call to constructor Object | +| PostDominance.cs:3:7:3:19 | PostDominance | PostDominance.cs:3:7:3:19 | this access | | PostDominance.cs:5:10:5:11 | M1 | PostDominance.cs:6:5:8:5 | {...} | | PostDominance.cs:10:10:10:11 | M2 | PostDominance.cs:11:5:15:5 | {...} | | PostDominance.cs:17:10:17:11 | M3 | PostDominance.cs:18:5:22:5 | {...} | -| Qualifiers.cs:1:7:1:16 | Qualifiers | Qualifiers.cs:1:7:1:16 | call to constructor Object | +| Qualifiers.cs:1:7:1:16 | Qualifiers | Qualifiers.cs:1:7:1:16 | this access | | Qualifiers.cs:7:16:7:21 | Method | Qualifiers.cs:7:28:7:31 | null | | Qualifiers.cs:8:23:8:34 | StaticMethod | Qualifiers.cs:8:41:8:44 | null | | Qualifiers.cs:10:10:10:10 | M | Qualifiers.cs:11:5:31:5 | {...} | -| Switch.cs:3:7:3:12 | Switch | Switch.cs:3:7:3:12 | call to constructor Object | +| Switch.cs:3:7:3:12 | Switch | Switch.cs:3:7:3:12 | this access | | Switch.cs:5:10:5:11 | M1 | Switch.cs:6:5:8:5 | {...} | | Switch.cs:10:10:10:11 | M2 | Switch.cs:11:5:33:5 | {...} | | Switch.cs:35:10:35:11 | M3 | Switch.cs:36:5:42:5 | {...} | @@ -228,13 +234,13 @@ | Switch.cs:144:9:144:11 | M14 | Switch.cs:145:5:152:5 | {...} | | Switch.cs:154:10:154:12 | M15 | Switch.cs:155:5:161:5 | {...} | | Switch.cs:163:10:163:12 | M16 | Switch.cs:164:5:178:5 | {...} | -| TypeAccesses.cs:1:7:1:18 | TypeAccesses | TypeAccesses.cs:1:7:1:18 | call to constructor Object | +| TypeAccesses.cs:1:7:1:18 | TypeAccesses | TypeAccesses.cs:1:7:1:18 | this access | | TypeAccesses.cs:3:10:3:10 | M | TypeAccesses.cs:4:5:9:5 | {...} | -| VarDecls.cs:3:7:3:14 | VarDecls | VarDecls.cs:3:7:3:14 | call to constructor Object | +| VarDecls.cs:3:7:3:14 | VarDecls | VarDecls.cs:3:7:3:14 | this access | | VarDecls.cs:5:18:5:19 | M1 | VarDecls.cs:6:5:11:5 | {...} | | VarDecls.cs:13:12:13:13 | M2 | VarDecls.cs:14:5:17:5 | {...} | | VarDecls.cs:19:7:19:8 | M3 | VarDecls.cs:20:5:26:5 | {...} | -| VarDecls.cs:28:11:28:11 | C | VarDecls.cs:28:11:28:11 | call to constructor Object | +| VarDecls.cs:28:11:28:11 | C | VarDecls.cs:28:11:28:11 | this access | | VarDecls.cs:28:41:28:47 | Dispose | VarDecls.cs:28:51:28:53 | {...} | | cflow.cs:5:17:5:20 | Main | cflow.cs:6:5:35:5 | {...} | | cflow.cs:37:17:37:22 | Switch | cflow.cs:38:5:68:5 | {...} | @@ -245,7 +251,7 @@ | cflow.cs:119:20:119:21 | M5 | cflow.cs:120:5:124:5 | {...} | | cflow.cs:127:19:127:21 | get_Prop | cflow.cs:127:23:127:60 | {...} | | cflow.cs:127:62:127:64 | set_Prop | cflow.cs:127:66:127:83 | {...} | -| cflow.cs:129:5:129:15 | ControlFlow | cflow.cs:129:5:129:15 | call to constructor Object | +| cflow.cs:129:5:129:15 | ControlFlow | cflow.cs:129:5:129:15 | this access | | cflow.cs:134:5:134:15 | ControlFlow | cflow.cs:134:31:134:31 | access to parameter i | | cflow.cs:136:12:136:22 | ControlFlow | cflow.cs:136:33:136:33 | 0 | | cflow.cs:138:40:138:40 | + | cflow.cs:139:5:142:5 | {...} | @@ -261,13 +267,13 @@ | cflow.cs:224:10:224:16 | Foreach | cflow.cs:225:5:238:5 | {...} | | cflow.cs:240:10:240:13 | Goto | cflow.cs:241:5:259:5 | {...} | | cflow.cs:261:49:261:53 | Yield | cflow.cs:262:5:277:5 | {...} | -| cflow.cs:282:5:282:18 | ControlFlowSub | cflow.cs:282:24:282:27 | call to constructor ControlFlow | +| cflow.cs:282:5:282:18 | ControlFlowSub | cflow.cs:282:5:282:18 | this access | | cflow.cs:284:5:284:18 | ControlFlowSub | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub | | cflow.cs:286:5:286:18 | ControlFlowSub | cflow.cs:286:34:286:34 | access to parameter i | -| cflow.cs:289:7:289:18 | DelegateCall | cflow.cs:289:7:289:18 | call to constructor Object | +| cflow.cs:289:7:289:18 | DelegateCall | cflow.cs:289:7:289:18 | this access | | cflow.cs:291:12:291:12 | M | cflow.cs:291:38:291:38 | access to parameter f | -| cflow.cs:296:5:296:25 | NegationInConstructor | cflow.cs:296:5:296:25 | call to constructor Object | +| cflow.cs:296:5:296:25 | NegationInConstructor | cflow.cs:296:5:296:25 | this access | | cflow.cs:298:10:298:10 | M | cflow.cs:299:5:301:5 | {...} | -| cflow.cs:304:7:304:18 | LambdaGetter | cflow.cs:304:7:304:18 | call to constructor Object | +| cflow.cs:304:7:304:18 | LambdaGetter | cflow.cs:304:7:304:18 | this access | | cflow.cs:306:60:310:5 | (...) => ... | cflow.cs:307:5:310:5 | {...} | | cflow.cs:306:60:310:5 | get__getter | cflow.cs:306:60:310:5 | (...) => ... | diff --git a/csharp/ql/test/library-tests/controlflow/guards/AbstractValue.expected b/csharp/ql/test/library-tests/controlflow/guards/AbstractValue.expected index a930349e930c..712e379e3313 100644 --- a/csharp/ql/test/library-tests/controlflow/guards/AbstractValue.expected +++ b/csharp/ql/test/library-tests/controlflow/guards/AbstractValue.expected @@ -117,6 +117,8 @@ | not | Guards.cs:162:24:162:24 | access to parameter o | | not | Guards.cs:285:17:285:17 | access to parameter o | | not | Guards.cs:287:17:287:17 | access to parameter o | +| not null | Assert.cs:5:7:5:17 | call to method | +| not null | Assert.cs:5:7:5:17 | this access | | not null | Assert.cs:9:20:9:20 | access to parameter b | | not null | Assert.cs:9:31:9:32 | "" | | not null | Assert.cs:10:9:10:13 | access to type Debug | @@ -228,6 +230,8 @@ | not null | Assert.cs:94:16:94:24 | ... && ... | | not null | Assert.cs:94:22:94:24 | !... | | not null | Assert.cs:94:23:94:24 | access to parameter b2 | +| not null | Collections.cs:7:14:7:24 | call to method | +| not null | Collections.cs:7:14:7:24 | this access | | not null | Collections.cs:11:13:11:13 | access to local variable b | | not null | Collections.cs:11:13:11:32 | Boolean b = ... | | not null | Collections.cs:11:17:11:20 | access to parameter args | @@ -496,6 +500,8 @@ | not null | Collections.cs:102:9:102:15 | access to type Console | | not null | Collections.cs:102:9:102:31 | call to method WriteLine | | not null | Collections.cs:102:27:102:30 | access to parameter args | +| not null | Guards.cs:3:14:3:19 | call to method | +| not null | Guards.cs:3:14:3:19 | this access | | not null | Guards.cs:10:13:10:25 | !... | | not null | Guards.cs:10:14:10:25 | !... | | not null | Guards.cs:10:16:10:24 | ... == ... | diff --git a/csharp/ql/test/library-tests/conversion/operator/PrintAst.expected b/csharp/ql/test/library-tests/conversion/operator/PrintAst.expected index 47f1db09efe8..89a12e9a1707 100644 --- a/csharp/ql/test/library-tests/conversion/operator/PrintAst.expected +++ b/csharp/ql/test/library-tests/conversion/operator/PrintAst.expected @@ -1,6 +1,6 @@ Operator.cs: # 3| [Class] C -# 5| 5: [ImplicitConversionOperator] implicit conversion +# 5| 6: [ImplicitConversionOperator] implicit conversion # 5| -1: [TypeMention] C #-----| 2: (Parameters) # 5| 0: [Parameter] i @@ -8,11 +8,11 @@ Operator.cs: # 5| 4: [BlockStmt] {...} # 5| 0: [ReturnStmt] return ...; # 5| 0: [NullLiteral] null -# 7| 6: [Field] x1 +# 7| 7: [Field] x1 # 7| -1: [TypeMention] int -# 8| 7: [Field] x2 +# 8| 8: [Field] x2 # 8| -1: [TypeMention] C -# 11| 8: [Method] M +# 11| 9: [Method] M # 11| -1: [TypeMention] Void # 12| 4: [BlockStmt] {...} # 13| 0: [ExprStmt] ...; diff --git a/csharp/ql/test/library-tests/csharp10/fileScopedNamespace.expected b/csharp/ql/test/library-tests/csharp10/fileScopedNamespace.expected index 34f517f59bb6..5db33c2a421c 100644 --- a/csharp/ql/test/library-tests/csharp10/fileScopedNamespace.expected +++ b/csharp/ql/test/library-tests/csharp10/fileScopedNamespace.expected @@ -1,4 +1,5 @@ fileScopedNamespace +| FileScopedNamespace.cs:1:11:1:31 | MyFileScopedNamespace | FileScopedNamespace.cs:3:14:3:39 | | | FileScopedNamespace.cs:1:11:1:31 | MyFileScopedNamespace | FileScopedNamespace.cs:3:14:3:39 | MyFileScopedNamespaceClass | | FileScopedNamespace.cs:1:11:1:31 | MyFileScopedNamespace | FileScopedNamespace.cs:5:29:5:35 | myField | | FileScopedNamespace.cs:1:11:1:31 | MyFileScopedNamespace | FileScopedNamespace.cs:6:19:6:24 | MyProp | diff --git a/csharp/ql/test/library-tests/csharp11/PrintAst.expected b/csharp/ql/test/library-tests/csharp11/PrintAst.expected index 1de7ff429284..391c41540ece 100644 --- a/csharp/ql/test/library-tests/csharp11/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp11/PrintAst.expected @@ -1,10 +1,10 @@ CheckedOperators.cs: # 1| [NamespaceDeclaration] namespace ... { ... } # 3| 1: [Class] Number -# 5| 4: [Property] Value +# 5| 5: [Property] Value # 5| -1: [TypeMention] int # 5| 3: [Getter] get_Value -# 7| 5: [InstanceConstructor] Number +# 7| 6: [InstanceConstructor] Number #-----| 2: (Parameters) # 7| 0: [Parameter] n # 7| -1: [TypeMention] int @@ -12,7 +12,7 @@ CheckedOperators.cs: # 7| 0: [PropertyCall] access to property Value # 7| -1: [ThisAccess] this access # 7| 1: [ParameterAccess] access to parameter n -# 9| 6: [CheckedAddOperator] checked + +# 9| 7: [CheckedAddOperator] checked + # 9| -1: [TypeMention] Number #-----| 2: (Parameters) # 9| 0: [Parameter] n1 @@ -27,7 +27,7 @@ CheckedOperators.cs: # 10| -1: [ParameterAccess] access to parameter n1 # 10| 1: [PropertyCall] access to property Value # 10| -1: [ParameterAccess] access to parameter n2 -# 12| 7: [AddOperator] + +# 12| 8: [AddOperator] + # 12| -1: [TypeMention] Number #-----| 2: (Parameters) # 12| 0: [Parameter] n1 @@ -41,7 +41,7 @@ CheckedOperators.cs: # 13| -1: [ParameterAccess] access to parameter n1 # 13| 1: [PropertyCall] access to property Value # 13| -1: [ParameterAccess] access to parameter n2 -# 15| 8: [CheckedSubOperator] checked - +# 15| 9: [CheckedSubOperator] checked - # 15| -1: [TypeMention] Number #-----| 2: (Parameters) # 15| 0: [Parameter] n1 @@ -56,7 +56,7 @@ CheckedOperators.cs: # 16| -1: [ParameterAccess] access to parameter n1 # 16| 1: [PropertyCall] access to property Value # 16| -1: [ParameterAccess] access to parameter n2 -# 18| 9: [SubOperator] - +# 18| 10: [SubOperator] - # 18| -1: [TypeMention] Number #-----| 2: (Parameters) # 18| 0: [Parameter] n1 @@ -70,7 +70,7 @@ CheckedOperators.cs: # 19| -1: [ParameterAccess] access to parameter n1 # 19| 1: [PropertyCall] access to property Value # 19| -1: [ParameterAccess] access to parameter n2 -# 21| 10: [CheckedMulOperator] checked * +# 21| 11: [CheckedMulOperator] checked * # 21| -1: [TypeMention] Number #-----| 2: (Parameters) # 21| 0: [Parameter] n1 @@ -85,7 +85,7 @@ CheckedOperators.cs: # 22| -1: [ParameterAccess] access to parameter n1 # 22| 1: [PropertyCall] access to property Value # 22| -1: [ParameterAccess] access to parameter n2 -# 24| 11: [MulOperator] * +# 24| 12: [MulOperator] * # 24| -1: [TypeMention] Number #-----| 2: (Parameters) # 24| 0: [Parameter] n1 @@ -99,7 +99,7 @@ CheckedOperators.cs: # 25| -1: [ParameterAccess] access to parameter n1 # 25| 1: [PropertyCall] access to property Value # 25| -1: [ParameterAccess] access to parameter n2 -# 27| 12: [CheckedDivOperator] checked / +# 27| 13: [CheckedDivOperator] checked / # 27| -1: [TypeMention] Number #-----| 2: (Parameters) # 27| 0: [Parameter] n1 @@ -114,7 +114,7 @@ CheckedOperators.cs: # 28| -1: [ParameterAccess] access to parameter n1 # 28| 1: [PropertyCall] access to property Value # 28| -1: [ParameterAccess] access to parameter n2 -# 30| 13: [DivOperator] / +# 30| 14: [DivOperator] / # 30| -1: [TypeMention] Number #-----| 2: (Parameters) # 30| 0: [Parameter] n1 @@ -128,7 +128,7 @@ CheckedOperators.cs: # 31| -1: [ParameterAccess] access to parameter n1 # 31| 1: [PropertyCall] access to property Value # 31| -1: [ParameterAccess] access to parameter n2 -# 33| 14: [CheckedMinusOperator] checked - +# 33| 15: [CheckedMinusOperator] checked - # 33| -1: [TypeMention] Number #-----| 2: (Parameters) # 33| 0: [Parameter] n @@ -139,7 +139,7 @@ CheckedOperators.cs: # 34| 0: [UnaryMinusExpr] -... # 34| 0: [PropertyCall] access to property Value # 34| -1: [ParameterAccess] access to parameter n -# 36| 15: [MinusOperator] - +# 36| 16: [MinusOperator] - # 36| -1: [TypeMention] Number #-----| 2: (Parameters) # 36| 0: [Parameter] n @@ -149,7 +149,7 @@ CheckedOperators.cs: # 37| 0: [UnaryMinusExpr] -... # 37| 0: [PropertyCall] access to property Value # 37| -1: [ParameterAccess] access to parameter n -# 39| 16: [CheckedIncrementOperator] checked ++ +# 39| 17: [CheckedIncrementOperator] checked ++ # 39| -1: [TypeMention] Number #-----| 2: (Parameters) # 39| 0: [Parameter] n @@ -161,7 +161,7 @@ CheckedOperators.cs: # 40| 0: [PropertyCall] access to property Value # 40| -1: [ParameterAccess] access to parameter n # 40| 1: [IntLiteral] 1 -# 42| 17: [IncrementOperator] ++ +# 42| 18: [IncrementOperator] ++ # 42| -1: [TypeMention] Number #-----| 2: (Parameters) # 42| 0: [Parameter] n @@ -172,7 +172,7 @@ CheckedOperators.cs: # 43| 0: [PropertyCall] access to property Value # 43| -1: [ParameterAccess] access to parameter n # 43| 1: [IntLiteral] 1 -# 45| 18: [CheckedDecrementOperator] checked -- +# 45| 19: [CheckedDecrementOperator] checked -- # 45| -1: [TypeMention] Number #-----| 2: (Parameters) # 45| 0: [Parameter] n @@ -184,7 +184,7 @@ CheckedOperators.cs: # 46| 0: [PropertyCall] access to property Value # 46| -1: [ParameterAccess] access to parameter n # 46| 1: [IntLiteral] 1 -# 48| 19: [DecrementOperator] -- +# 48| 20: [DecrementOperator] -- # 48| -1: [TypeMention] Number #-----| 2: (Parameters) # 48| 0: [Parameter] n @@ -195,7 +195,7 @@ CheckedOperators.cs: # 49| 0: [PropertyCall] access to property Value # 49| -1: [ParameterAccess] access to parameter n # 49| 1: [IntLiteral] 1 -# 51| 20: [ExplicitConversionOperator] explicit conversion +# 51| 21: [ExplicitConversionOperator] explicit conversion # 51| -1: [TypeMention] short #-----| 2: (Parameters) # 51| 0: [Parameter] n @@ -205,7 +205,7 @@ CheckedOperators.cs: # 52| 0: [TypeMention] short # 52| 1: [PropertyCall] access to property Value # 52| -1: [ParameterAccess] access to parameter n -# 54| 21: [CheckedExplicitConversionOperator] checked explicit conversion +# 54| 22: [CheckedExplicitConversionOperator] checked explicit conversion # 54| -1: [TypeMention] short #-----| 2: (Parameters) # 54| 0: [Parameter] n @@ -240,22 +240,22 @@ FileScoped1.cs: # 19| [Enum] E1 # 21| [DelegateType] D1 # 23| [RecordClass] R1 -# 23| 12: [NEOperator] != +# 23| 13: [NEOperator] != #-----| 2: (Parameters) # 23| 0: [Parameter] left # 23| 1: [Parameter] right -# 23| 13: [EQOperator] == +# 23| 14: [EQOperator] == #-----| 2: (Parameters) # 23| 0: [Parameter] left # 23| 1: [Parameter] right -# 23| 14: [Property] EqualityContract +# 23| 15: [Property] EqualityContract # 23| 3: [Getter] get_EqualityContract # 25| [RecordStruct] RS1 -# 25| 10: [NEOperator] != +# 25| 11: [NEOperator] != #-----| 2: (Parameters) # 25| 0: [Parameter] left # 25| 1: [Parameter] right -# 25| 11: [EQOperator] == +# 25| 12: [EQOperator] == #-----| 2: (Parameters) # 25| 0: [Parameter] left # 25| 1: [Parameter] right @@ -280,22 +280,22 @@ FileScoped2.cs: # 17| [Enum] E1 # 19| [DelegateType] D1 # 21| [RecordClass] R1 -# 21| 12: [NEOperator] != +# 21| 13: [NEOperator] != #-----| 2: (Parameters) # 21| 0: [Parameter] left # 21| 1: [Parameter] right -# 21| 13: [EQOperator] == +# 21| 14: [EQOperator] == #-----| 2: (Parameters) # 21| 0: [Parameter] left # 21| 1: [Parameter] right -# 21| 14: [Property] EqualityContract +# 21| 15: [Property] EqualityContract # 21| 3: [Getter] get_EqualityContract # 23| [RecordStruct] RS1 -# 23| 10: [NEOperator] != +# 23| 11: [NEOperator] != #-----| 2: (Parameters) # 23| 0: [Parameter] left # 23| 1: [Parameter] right -# 23| 11: [EQOperator] == +# 23| 12: [EQOperator] == #-----| 2: (Parameters) # 23| 0: [Parameter] left # 23| 1: [Parameter] right @@ -333,21 +333,21 @@ GenericAttribute.cs: #-----| 3: (Base types) # 7| 0: [TypeMention] Attribute # 9| [Class] TestGenericAttribute -# 13| 5: [Method] M1 +# 13| 6: [Method] M1 # 13| -1: [TypeMention] Void #-----| 0: (Attributes) # 12| 1: [GenericDefaultAttribute] [MyGeneric(...)] # 12| 0: [TypeMention] MyGenericAttribute # 12| 1: [TypeMention] int # 13| 4: [BlockStmt] {...} -# 16| 6: [Method] M2 +# 16| 7: [Method] M2 # 16| -1: [TypeMention] Void #-----| 0: (Attributes) # 15| 1: [GenericDefaultAttribute] [MyGeneric(...)] # 15| 0: [TypeMention] MyGenericAttribute # 15| 1: [TypeMention] string # 16| 4: [BlockStmt] {...} -# 19| 7: [Method] M3 +# 19| 8: [Method] M3 # 19| -1: [TypeMention] Void #-----| 0: (Attributes) # 18| 1: [GenericDefaultAttribute] [MyGeneric2(...)] @@ -355,7 +355,7 @@ GenericAttribute.cs: # 18| 1: [TypeMention] int # 18| 2: [TypeMention] string # 19| 4: [BlockStmt] {...} -# 22| 8: [Method] M4 +# 22| 9: [Method] M4 # 22| -1: [TypeMention] int #-----| 0: (Attributes) # 21| 1: [GenericReturnAttribute] [return: MyGeneric(...)] @@ -366,7 +366,7 @@ GenericAttribute.cs: # 22| 0: [IntLiteral] 0 ListPattern.cs: # 3| [Class] ListPattern -# 5| 5: [Method] M1 +# 5| 6: [Method] M1 # 5| -1: [TypeMention] Void #-----| 2: (Parameters) # 5| 0: [Parameter] x @@ -430,7 +430,7 @@ ListPattern.cs: # 13| 1: [ConstantPatternExpr,IntLiteral] 5 # 13| 2: [ConstantPatternExpr,IntLiteral] 2 # 13| 1: [BlockStmt] {...} -# 16| 6: [Method] M2 +# 16| 7: [Method] M2 # 16| -1: [TypeMention] Void #-----| 2: (Parameters) # 16| 0: [Parameter] x @@ -482,19 +482,19 @@ ListPattern.cs: # 35| 15: [BreakStmt] break; NameofScope.cs: # 3| [Class] MyAttributeTestClass -# 5| 5: [Class] MyAttribute +# 5| 6: [Class] MyAttribute #-----| 3: (Base types) # 5| 0: [TypeMention] Attribute -# 7| 4: [Field] S +# 7| 5: [Field] S # 7| -1: [TypeMention] string -# 8| 5: [InstanceConstructor] MyAttribute +# 8| 6: [InstanceConstructor] MyAttribute #-----| 2: (Parameters) # 8| 0: [Parameter] s # 8| -1: [TypeMention] string # 8| 4: [AssignExpr] ... = ... # 8| 0: [FieldAccess] access to field S # 8| 1: [ParameterAccess] access to parameter s -# 12| 6: [Method] M1`1 +# 12| 7: [Method] M1`1 # 12| -1: [TypeMention] Void #-----| 0: (Attributes) # 11| 1: [DefaultAttribute] [My(...)] @@ -508,7 +508,7 @@ NameofScope.cs: # 12| 0: [Parameter] x # 12| -1: [TypeMention] string # 12| 4: [BlockStmt] {...} -# 15| 7: [Method] M2 +# 15| 8: [Method] M2 # 15| -1: [TypeMention] string #-----| 0: (Attributes) # 14| 1: [ReturnAttribute] [return: My(...)] @@ -519,7 +519,7 @@ NameofScope.cs: # 15| 0: [Parameter] y # 15| -1: [TypeMention] string # 15| 4: [ParameterAccess] access to parameter y -# 17| 8: [Method] M3 +# 17| 9: [Method] M3 # 17| -1: [TypeMention] object #-----| 2: (Parameters) # 17| 0: [Parameter] z @@ -530,7 +530,7 @@ NameofScope.cs: # 17| 0: [NameOfExpr] nameof(...) # 17| 0: [ParameterAccess] access to parameter z # 17| 4: [ParameterAccess] access to parameter z -# 19| 9: [Method] M4`1 +# 19| 10: [Method] M4`1 # 19| -1: [TypeMention] object #-----| 1: (Type parameters) # 19| 0: [TypeParameter] S @@ -546,7 +546,7 @@ NameofScope.cs: # 19| 4: [ParameterAccess] access to parameter z NativeInt.cs: # 1| [Class] NativeInt -# 3| 5: [Method] M1 +# 3| 6: [Method] M1 # 3| -1: [TypeMention] Void # 4| 4: [BlockStmt] {...} # 5| 0: [LocalVariableDeclStmt] ... ...; @@ -579,7 +579,7 @@ NativeInt.cs: # 9| 1: [IntLiteral] 0 Operators.cs: # 2| [Class] MyClass -# 4| 5: [Method] M1 +# 4| 6: [Method] M1 # 4| -1: [TypeMention] Void # 5| 4: [BlockStmt] {...} # 6| 0: [LocalVariableDeclStmt] ... ...; @@ -618,7 +618,7 @@ Operators.cs: # 13| 0: [LocalVariableAccess] access to local variable z # 13| 1: [IntLiteral] 5 # 17| [Class] MyOperatorClass -# 19| 5: [UnsignedRightShiftOperator] >>> +# 19| 6: [UnsignedRightShiftOperator] >>> # 19| -1: [TypeMention] MyOperatorClass #-----| 2: (Parameters) # 19| 0: [Parameter] a @@ -630,7 +630,7 @@ Operators.cs: # 19| 0: [NullLiteral] null PatternMatchSpan.cs: # 3| [Class] PatternMatchSpan -# 6| 5: [Method] M1 +# 6| 6: [Method] M1 # 6| -1: [TypeMention] Void #-----| 2: (Parameters) # 6| 0: [Parameter] x1 @@ -642,7 +642,7 @@ PatternMatchSpan.cs: # 8| 0: [ParameterAccess] access to parameter x1 # 8| 1: [ConstantPatternExpr,StringLiteralUtf16] "ABC" # 8| 1: [BlockStmt] {...} -# 11| 6: [Method] M2 +# 11| 7: [Method] M2 # 11| -1: [TypeMention] Void #-----| 2: (Parameters) # 11| 0: [Parameter] x2 @@ -687,7 +687,7 @@ RelaxedShift.cs: # 7| -1: [TypeMention] TOther # 10| [Class] Number #-----| 3: (Base types) -# 12| 5: [LeftShiftOperator] << +# 12| 6: [LeftShiftOperator] << # 12| -1: [TypeMention] Number #-----| 2: (Parameters) # 12| 0: [Parameter] value @@ -695,7 +695,7 @@ RelaxedShift.cs: # 12| 1: [Parameter] shiftAmount # 12| -1: [TypeMention] string # 12| 4: [ParameterAccess] access to parameter value -# 14| 6: [RightShiftOperator] >> +# 14| 7: [RightShiftOperator] >> # 14| -1: [TypeMention] Number #-----| 2: (Parameters) # 14| 0: [Parameter] value @@ -703,7 +703,7 @@ RelaxedShift.cs: # 14| 1: [Parameter] shiftAmount # 14| -1: [TypeMention] string # 14| 4: [ParameterAccess] access to parameter value -# 16| 7: [UnsignedRightShiftOperator] >>> +# 16| 8: [UnsignedRightShiftOperator] >>> # 16| -1: [TypeMention] Number #-----| 2: (Parameters) # 16| 0: [Parameter] value @@ -712,7 +712,7 @@ RelaxedShift.cs: # 16| -1: [TypeMention] string # 16| 4: [ParameterAccess] access to parameter value # 19| [Class] TestRelaxedShift -# 21| 5: [Method] M1 +# 21| 6: [Method] M1 # 21| -1: [TypeMention] Void # 22| 4: [BlockStmt] {...} # 23| 0: [LocalVariableDeclStmt] ... ...; @@ -756,23 +756,23 @@ RelaxedShift.cs: # 30| 1: [StringLiteralUtf16] "3" RequiredMembers.cs: # 4| [Class] ClassRequiredMembers -# 6| 4: [Field] RequiredField +# 6| 5: [Field] RequiredField # 6| -1: [TypeMention] object -# 7| 5: [Property] RequiredProperty +# 7| 6: [Property] RequiredProperty # 7| -1: [TypeMention] string # 7| 3: [Getter] get_RequiredProperty # 7| 4: [Setter] set_RequiredProperty #-----| 2: (Parameters) # 7| 0: [Parameter] value -# 8| 6: [Property] VirtualProperty +# 8| 7: [Property] VirtualProperty # 8| -1: [TypeMention] object # 8| 3: [Getter] get_VirtualProperty # 8| 4: [Setter] set_VirtualProperty #-----| 2: (Parameters) # 8| 0: [Parameter] value -# 10| 7: [InstanceConstructor] ClassRequiredMembers +# 10| 8: [InstanceConstructor] ClassRequiredMembers # 10| 4: [BlockStmt] {...} -# 13| 8: [InstanceConstructor] ClassRequiredMembers +# 13| 9: [InstanceConstructor] ClassRequiredMembers #-----| 0: (Attributes) # 12| 1: [DefaultAttribute] [SetsRequiredMembers(...)] # 12| 0: [TypeMention] SetsRequiredMembersAttribute @@ -793,16 +793,16 @@ RequiredMembers.cs: # 20| [Class] ClassRequiredMembersSub #-----| 3: (Base types) # 20| 0: [TypeMention] ClassRequiredMembers -# 22| 4: [Property] VirtualProperty +# 22| 5: [Property] VirtualProperty # 22| -1: [TypeMention] object # 22| 3: [Getter] get_VirtualProperty # 22| 4: [Setter] set_VirtualProperty #-----| 2: (Parameters) # 22| 0: [Parameter] value -# 24| 5: [InstanceConstructor] ClassRequiredMembersSub +# 24| 6: [InstanceConstructor] ClassRequiredMembersSub # 24| 3: [ConstructorInitializer] call to constructor ClassRequiredMembers # 24| 4: [BlockStmt] {...} -# 27| 6: [InstanceConstructor] ClassRequiredMembersSub +# 27| 7: [InstanceConstructor] ClassRequiredMembersSub #-----| 0: (Attributes) # 26| 1: [DefaultAttribute] [SetsRequiredMembers(...)] # 26| 0: [TypeMention] SetsRequiredMembersAttribute @@ -822,24 +822,24 @@ RequiredMembers.cs: # 29| 0: [PropertyCall] access to property VirtualProperty # 29| 1: [ParameterAccess] access to parameter virtualProperty # 33| [RecordClass] RecordRequiredMembers -# 33| 12: [NEOperator] != +# 33| 13: [NEOperator] != #-----| 2: (Parameters) # 33| 0: [Parameter] left # 33| 1: [Parameter] right -# 33| 13: [EQOperator] == +# 33| 14: [EQOperator] == #-----| 2: (Parameters) # 33| 0: [Parameter] left # 33| 1: [Parameter] right -# 33| 14: [Property] EqualityContract +# 33| 15: [Property] EqualityContract # 33| 3: [Getter] get_EqualityContract -# 35| 15: [Property] X +# 35| 16: [Property] X # 35| -1: [TypeMention] object # 35| 3: [Getter] get_X # 35| 4: [Setter] set_X #-----| 2: (Parameters) # 35| 0: [Parameter] value # 38| [Struct] StructRequiredMembers -# 40| 5: [Property] Y +# 40| 6: [Property] Y # 40| -1: [TypeMention] string # 40| 3: [Getter] get_Y # 40| 4: [Setter] set_Y @@ -849,7 +849,7 @@ Scoped.cs: # 1| [Struct] S1 # 2| [RefStruct] S2 # 7| [Class] ScopedModifierTest -# 9| 5: [Method] M1 +# 9| 6: [Method] M1 # 9| -1: [TypeMention] int #-----| 2: (Parameters) # 9| 0: [Parameter] x1 @@ -860,7 +860,7 @@ Scoped.cs: # 13| 0: [ReturnStmt] return ...; # 13| 0: [RefExpr] ref ... # 13| 0: [ParameterAccess] access to parameter y1 -# 16| 6: [Method] M2 +# 16| 7: [Method] M2 # 16| -1: [TypeMention] int #-----| 2: (Parameters) # 16| 0: [Parameter] x2 @@ -875,7 +875,7 @@ Scoped.cs: # 21| 1: [ReturnStmt] return ...; # 21| 0: [RefExpr] ref ... # 21| 0: [ParameterAccess] access to parameter y2 -# 24| 7: [Method] M3 +# 24| 8: [Method] M3 # 24| -1: [TypeMention] int #-----| 2: (Parameters) # 24| 0: [Parameter] x3 @@ -883,7 +883,7 @@ Scoped.cs: # 25| 4: [BlockStmt] {...} # 27| 0: [ReturnStmt] return ...; # 27| 0: [ParameterAccess] access to parameter x3 -# 30| 8: [Method] M4 +# 30| 9: [Method] M4 # 30| -1: [TypeMention] S1 #-----| 2: (Parameters) # 30| 0: [Parameter] x4 @@ -891,7 +891,7 @@ Scoped.cs: # 31| 4: [BlockStmt] {...} # 33| 0: [ReturnStmt] return ...; # 33| 0: [ParameterAccess] access to parameter x4 -# 36| 9: [Method] M5 +# 36| 10: [Method] M5 # 36| -1: [TypeMention] S2 #-----| 2: (Parameters) # 36| 0: [Parameter] x5 @@ -900,7 +900,7 @@ Scoped.cs: # 40| 0: [ReturnStmt] return ...; # 40| 0: [ObjectCreation] object creation of type S2 # 40| 0: [TypeMention] S2 -# 43| 10: [Method] M6 +# 43| 11: [Method] M6 # 43| -1: [TypeMention] S2 #-----| 2: (Parameters) # 43| 0: [Parameter] x6 @@ -909,7 +909,7 @@ Scoped.cs: # 47| 0: [ReturnStmt] return ...; # 47| 0: [ObjectCreation] object creation of type S2 # 47| 0: [TypeMention] S2 -# 50| 11: [Method] Locals +# 50| 12: [Method] Locals # 50| -1: [TypeMention] S2 # 51| 4: [BlockStmt] {...} # 52| 0: [LocalVariableDeclStmt] ... ...; @@ -928,7 +928,7 @@ Scoped.cs: # 56| 0: [LocalVariableAccess] access to local variable y7 SignAnalysis.cs: # 1| [Class] MySignAnalysis -# 4| 5: [Method] UnsignedRightShiftSign +# 4| 6: [Method] UnsignedRightShiftSign # 4| -1: [TypeMention] Void #-----| 2: (Parameters) # 4| 0: [Parameter] x @@ -1109,27 +1109,27 @@ StaticInterfaceMembers.cs: # 23| 0: [TypeMention] T # 26| [Class] Complex #-----| 3: (Base types) -# 28| 4: [Property] Real +# 28| 5: [Property] Real # 28| -1: [TypeMention] double # 28| 2: [DoubleLiteral] 0 # 28| 3: [Getter] get_Real # 28| 4: [Setter] set_Real #-----| 2: (Parameters) # 28| 0: [Parameter] value -# 29| 5: [Property] Imaginary +# 29| 6: [Property] Imaginary # 29| -1: [TypeMention] double # 29| 2: [DoubleLiteral] 0 # 29| 3: [Getter] get_Imaginary # 29| 4: [Setter] set_Imaginary #-----| 2: (Parameters) # 29| 0: [Parameter] value -# 31| 6: [InstanceConstructor] Complex +# 31| 7: [InstanceConstructor] Complex # 31| 4: [BlockStmt] {...} -# 33| 7: [Method] Zero +# 33| 8: [Method] Zero # 33| -1: [TypeMention] Complex # 33| 4: [ObjectCreation] object creation of type Complex # 33| 0: [TypeMention] Complex -# 35| 8: [IncrementOperator] ++ +# 35| 9: [IncrementOperator] ++ # 35| -1: [TypeMention] Complex #-----| 2: (Parameters) # 35| 0: [Parameter] other @@ -1147,7 +1147,7 @@ StaticInterfaceMembers.cs: # 36| 0: [PropertyCall] access to property Imaginary # 36| 1: [PropertyCall] access to property Imaginary # 36| -1: [ParameterAccess] access to parameter other -# 38| 9: [DecrementOperator] -- +# 38| 10: [DecrementOperator] -- # 38| -1: [TypeMention] Complex #-----| 2: (Parameters) # 38| 0: [Parameter] other @@ -1165,7 +1165,7 @@ StaticInterfaceMembers.cs: # 39| 0: [PropertyCall] access to property Imaginary # 39| 1: [PropertyCall] access to property Imaginary # 39| -1: [ParameterAccess] access to parameter other -# 41| 10: [AddOperator] + +# 41| 11: [AddOperator] + # 41| -1: [TypeMention] Complex #-----| 2: (Parameters) # 41| 0: [Parameter] left @@ -1189,7 +1189,7 @@ StaticInterfaceMembers.cs: # 42| -1: [ParameterAccess] access to parameter left # 42| 1: [PropertyCall] access to property Imaginary # 42| -1: [ParameterAccess] access to parameter right -# 44| 11: [SubOperator] - +# 44| 12: [SubOperator] - # 44| -1: [TypeMention] Complex #-----| 2: (Parameters) # 44| 0: [Parameter] left @@ -1213,7 +1213,7 @@ StaticInterfaceMembers.cs: # 45| -1: [ParameterAccess] access to parameter left # 45| 1: [PropertyCall] access to property Imaginary # 45| -1: [ParameterAccess] access to parameter right -# 47| 12: [ExplicitConversionOperator] explicit conversion +# 47| 13: [ExplicitConversionOperator] explicit conversion # 47| -1: [TypeMention] int #-----| 2: (Parameters) # 47| 0: [Parameter] n @@ -1223,7 +1223,7 @@ StaticInterfaceMembers.cs: # 47| 0: [TypeMention] int # 47| 1: [PropertyCall] access to property Real # 47| -1: [ParameterAccess] access to parameter n -# 49| 13: [ExplicitConversionOperator] explicit conversion +# 49| 14: [ExplicitConversionOperator] explicit conversion # 49| -1: [TypeMention] short #-----| 2: (Parameters) # 49| 0: [Parameter] n @@ -1233,7 +1233,7 @@ StaticInterfaceMembers.cs: # 49| 0: [TypeMention] short # 49| 1: [PropertyCall] access to property Real # 49| -1: [ParameterAccess] access to parameter n -# 51| 14: [Method] Inc +# 51| 15: [Method] Inc # 51| -1: [TypeMention] INumber # 51| 1: [TypeMention] Complex # 51| -1: [TypeMention] Complex @@ -1253,7 +1253,7 @@ StaticInterfaceMembers.cs: # 52| 0: [PropertyCall] access to property Imaginary # 52| 1: [PropertyCall] access to property Imaginary # 52| -1: [ParameterAccess] access to parameter other -# 54| 15: [Method] Dec +# 54| 16: [Method] Dec # 54| -1: [TypeMention] INumber # 54| 1: [TypeMention] Complex # 54| -1: [TypeMention] Complex @@ -1273,7 +1273,7 @@ StaticInterfaceMembers.cs: # 55| 0: [PropertyCall] access to property Imaginary # 55| 1: [PropertyCall] access to property Imaginary # 55| -1: [ParameterAccess] access to parameter other -# 57| 16: [Method] Add +# 57| 17: [Method] Add # 57| -1: [TypeMention] Complex #-----| 2: (Parameters) # 57| 0: [Parameter] left @@ -1297,7 +1297,7 @@ StaticInterfaceMembers.cs: # 58| -1: [ParameterAccess] access to parameter left # 58| 1: [PropertyCall] access to property Imaginary # 58| -1: [ParameterAccess] access to parameter right -# 60| 17: [Method] Subtract +# 60| 18: [Method] Subtract # 60| -1: [TypeMention] Complex #-----| 2: (Parameters) # 60| 0: [Parameter] left @@ -1323,7 +1323,7 @@ StaticInterfaceMembers.cs: # 61| -1: [ParameterAccess] access to parameter right Strings.cs: # 3| [Class] MyTestClass -# 5| 5: [Method] M1 +# 5| 6: [Method] M1 # 5| -1: [TypeMention] string #-----| 2: (Parameters) # 5| 0: [Parameter] x @@ -1342,7 +1342,7 @@ Strings.cs: # 11| 0: [DiscardPatternExpr] _ # 11| 2: [StringLiteralUtf16] "something else" # 12| 2: [StringLiteralUtf16] "." -# 15| 6: [Method] M2 +# 15| 7: [Method] M2 # 15| -1: [TypeMention] Void # 16| 4: [BlockStmt] {...} # 18| 0: [LocalVariableDeclStmt] ... ...; @@ -1377,7 +1377,7 @@ Strings.cs: # 35| 3: [InterpolatedStringInsertExpr] {...} # 35| 0: [LocalVariableAccess] access to local variable message2 # 35| 4: [StringLiteralUtf16] "}" -# 40| 7: [Method] M3 +# 40| 8: [Method] M3 # 40| -1: [TypeMention] Void # 41| 4: [BlockStmt] {...} # 43| 0: [LocalVariableDeclStmt] ... ...; @@ -1407,30 +1407,30 @@ Struct.cs: # 1| [NamespaceDeclaration] namespace ... { ... } # 3| 1: [Class] MyEmptyClass # 5| 2: [RefStruct] RefStruct -# 7| 5: [Field] MyInt +# 7| 6: [Field] MyInt # 7| -1: [TypeMention] int -# 8| 6: [Field] MyByte +# 8| 7: [Field] MyByte # 8| -1: [TypeMention] byte -# 9| 7: [Field] MyObject +# 9| 8: [Field] MyObject # 9| -1: [TypeMention] object -# 10| 8: [Field] MyEmptyClass +# 10| 9: [Field] MyEmptyClass # 10| -1: [TypeMention] MyEmptyClass -# 11| 9: [Field] MyReadonlyByte +# 11| 10: [Field] MyReadonlyByte # 11| -1: [TypeMention] byte -# 12| 10: [Field] MyReadonlyObject +# 12| 11: [Field] MyReadonlyObject # 12| -1: [TypeMention] object -# 13| 11: [Field] MyReadonlyString +# 13| 12: [Field] MyReadonlyString # 13| -1: [TypeMention] string StructDefault.cs: # 1| [Class] MyEmptyClass # 2| [Struct] StructDefaultValue -# 4| 5: [Field] X +# 4| 6: [Field] X # 4| -1: [TypeMention] int -# 5| 6: [Field] Y +# 5| 7: [Field] Y # 5| -1: [TypeMention] int -# 6| 7: [Field] Z +# 6| 8: [Field] Z # 6| -1: [TypeMention] MyEmptyClass -# 8| 8: [InstanceConstructor] StructDefaultValue +# 8| 9: [InstanceConstructor] StructDefaultValue #-----| 2: (Parameters) # 8| 0: [Parameter] x # 8| -1: [TypeMention] int diff --git a/csharp/ql/test/library-tests/csharp6/MemberAccess.expected b/csharp/ql/test/library-tests/csharp6/MemberAccess.expected index 1eda117fadd2..d54af10ffc3e 100644 --- a/csharp/ql/test/library-tests/csharp6/MemberAccess.expected +++ b/csharp/ql/test/library-tests/csharp6/MemberAccess.expected @@ -4,7 +4,10 @@ memberAccess | csharp6.cs:32:38:32:70 | access to indexer | csharp6.cs:32:38:32:66 | object creation of type Dictionary | Conditional | | csharp6.cs:32:38:32:73 | access to indexer | csharp6.cs:32:38:32:70 | access to indexer | Unconditional | methodCall +| csharp6.cs:10:7:10:17 | call to method | csharp6.cs:10:7:10:17 | this access | Unconditional | | csharp6.cs:30:31:30:44 | call to method ToUpper | csharp6.cs:30:31:30:33 | access to local variable foo | Conditional | +| csharp6.cs:53:7:53:23 | call to method | csharp6.cs:53:7:53:23 | this access | Unconditional | +| csharp6.cs:55:11:55:18 | call to method | csharp6.cs:55:11:55:18 | this access | Unconditional | extensionMethodCall | csharp6.cs:29:35:29:44 | call to method Any | csharp6.cs:29:35:29:37 | access to local variable bar | Conditional | | csharp6.cs:30:31:30:66 | call to method Select | csharp6.cs:30:31:30:44 | call to method ToUpper | Unconditional | diff --git a/csharp/ql/test/library-tests/csharp6/PrintAst.expected b/csharp/ql/test/library-tests/csharp6/PrintAst.expected index 424a18bcb023..78747650190e 100644 --- a/csharp/ql/test/library-tests/csharp6/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp6/PrintAst.expected @@ -1,17 +1,17 @@ csharp6.cs: # 10| [Class] TestCSharp6 -# 12| 6: [Property] Value +# 12| 7: [Property] Value # 12| -1: [TypeMention] int # 15| 2: [IntLiteral] 20 # 14| 3: [Getter] get_Value -# 17| 7: [Method] Fn +# 17| 8: [Method] Fn # 17| -1: [TypeMention] Void #-----| 2: (Parameters) # 17| 0: [Parameter] x # 17| -1: [TypeMention] string # 17| 4: [MethodCall] call to method WriteLine # 17| 0: [ParameterAccess] access to parameter x -# 19| 8: [Method] Main +# 19| 9: [Method] Main # 19| -1: [TypeMention] Void # 20| 4: [BlockStmt] {...} # 21| 0: [TryStmt] try {...} ... @@ -112,7 +112,7 @@ csharp6.cs: # 37| 1: [IntLiteral] 30 # 40| 3: [GeneralCatchClause] catch {...} # 41| 1: [BlockStmt] {...} -# 45| 9: [EQOperator] == +# 45| 10: [EQOperator] == # 45| -1: [TypeMention] bool #-----| 2: (Parameters) # 45| 0: [Parameter] t1 @@ -120,7 +120,7 @@ csharp6.cs: # 45| 1: [Parameter] t2 # 45| -1: [TypeMention] TestCSharp6 # 45| 4: [BoolLiteral] true -# 46| 10: [NEOperator] != +# 46| 11: [NEOperator] != # 46| -1: [TypeMention] bool #-----| 2: (Parameters) # 46| 0: [Parameter] t1 @@ -128,11 +128,11 @@ csharp6.cs: # 46| 1: [Parameter] t2 # 46| -1: [TypeMention] TestCSharp6 # 46| 4: [BoolLiteral] false -# 48| 11: [Property] ExprProperty +# 48| 12: [Property] ExprProperty # 48| -1: [TypeMention] int # 48| 3: [Getter] get_ExprProperty # 48| 4: [IntLiteral] 3 -# 50| 12: [Indexer] Item +# 50| 13: [Indexer] Item # 50| -1: [TypeMention] int #-----| 1: (Parameters) # 50| 0: [Parameter] i @@ -142,12 +142,12 @@ csharp6.cs: # 50| 0: [Parameter] i # 50| 4: [ParameterAccess] access to parameter i # 53| [Class] IndexInitializers -# 55| 5: [Class] Compound -# 57| 5: [Field] DictionaryField +# 55| 6: [Class] Compound +# 57| 6: [Field] DictionaryField # 57| -1: [TypeMention] Dictionary # 57| 1: [TypeMention] int # 57| 2: [TypeMention] string -# 58| 6: [Property] DictionaryProperty +# 58| 7: [Property] DictionaryProperty # 58| -1: [TypeMention] Dictionary # 58| 1: [TypeMention] int # 58| 2: [TypeMention] string @@ -155,27 +155,27 @@ csharp6.cs: # 58| 4: [Setter] set_DictionaryProperty #-----| 2: (Parameters) # 58| 0: [Parameter] value -# 59| 7: [Field] ArrayField +# 59| 8: [Field] ArrayField # 59| -1: [TypeMention] String[] # 59| 1: [TypeMention] string -# 60| 8: [Property] ArrayProperty +# 60| 9: [Property] ArrayProperty # 60| -1: [TypeMention] String[] # 60| 1: [TypeMention] string # 60| 3: [Getter] get_ArrayProperty # 60| 4: [Setter] set_ArrayProperty #-----| 2: (Parameters) # 60| 0: [Parameter] value -# 61| 9: [Field] ArrayField2 +# 61| 10: [Field] ArrayField2 # 61| -1: [TypeMention] String[,] # 61| 1: [TypeMention] string -# 62| 10: [Property] ArrayProperty2 +# 62| 11: [Property] ArrayProperty2 # 62| -1: [TypeMention] String[,] # 62| 1: [TypeMention] string # 62| 3: [Getter] get_ArrayProperty2 # 62| 4: [Setter] set_ArrayProperty2 #-----| 2: (Parameters) # 62| 0: [Parameter] value -# 65| 6: [Method] Test +# 65| 7: [Method] Test # 65| -1: [TypeMention] Void # 66| 4: [BlockStmt] {...} # 68| 0: [LocalVariableDeclStmt] ... ...; diff --git a/csharp/ql/test/library-tests/csharp7.1/PrintAst.expected b/csharp/ql/test/library-tests/csharp7.1/PrintAst.expected index 7f4e14672181..b33c09db0ecb 100644 --- a/csharp/ql/test/library-tests/csharp7.1/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp7.1/PrintAst.expected @@ -1,6 +1,6 @@ csharp71.cs: # 1| [Class] DefaultLiterals -# 3| 5: [Method] f +# 3| 6: [Method] f # 3| -1: [TypeMention] Void # 4| 4: [BlockStmt] {...} # 5| 0: [LocalVariableDeclStmt] ... ...; @@ -50,7 +50,7 @@ csharp71.cs: # 15| 1: [CastExpr] (...) ... # 15| 1: [DefaultValueExpr] default # 19| [Class] IsConstants -# 21| 5: [Method] f +# 21| 6: [Method] f # 21| -1: [TypeMention] Void # 22| 4: [BlockStmt] {...} # 23| 0: [LocalVariableDeclStmt] ... ...; diff --git a/csharp/ql/test/library-tests/csharp7.2/PrintAst.expected b/csharp/ql/test/library-tests/csharp7.2/PrintAst.expected index 834b03b44715..bbfb098c3af4 100644 --- a/csharp/ql/test/library-tests/csharp7.2/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp7.2/PrintAst.expected @@ -1,13 +1,13 @@ csharp72.cs: # 3| [Class] InModifiers -# 5| 5: [Struct] S -# 9| 6: [Method] F +# 5| 6: [Struct] S +# 9| 7: [Method] F # 9| -1: [TypeMention] Void #-----| 2: (Parameters) # 9| 0: [Parameter] s # 9| -1: [TypeMention] S # 10| 4: [BlockStmt] {...} -# 13| 7: [Method] CallF +# 13| 8: [Method] CallF # 13| -1: [TypeMention] Void # 14| 4: [BlockStmt] {...} # 15| 0: [LocalVariableDeclStmt] ... ...; @@ -20,26 +20,26 @@ csharp72.cs: # 16| 0: [MethodCall] call to method F # 16| 0: [LocalVariableAccess] access to local variable s # 20| [Class] RefReadonlyReturns -# 22| 5: [Field] s +# 22| 6: [Field] s # 22| -1: [TypeMention] int -# 24| 6: [Method] F +# 24| 7: [Method] F # 24| -1: [TypeMention] int # 25| 4: [BlockStmt] {...} # 26| 0: [ReturnStmt] return ...; # 26| 0: [RefExpr] ref ... # 26| 0: [FieldAccess] access to field s -# 29| 7: [DelegateType] Del +# 29| 8: [DelegateType] Del # 32| [Struct] ReadonlyStruct # 36| [RefStruct] RefStruct # 40| [RefStruct] ReadonlyRefStruct # 44| [Class] NumericLiterals -# 46| 5: [Field] binaryValue +# 46| 6: [Field] binaryValue # 46| -1: [TypeMention] int # 46| 1: [IntLiteral] 85 # 49| [Class] PrivateProtected -# 51| 5: [Field] X +# 51| 6: [Field] X # 51| -1: [TypeMention] int # 51| 1: [IntLiteral] 1 -# 53| 6: [Method] F +# 53| 7: [Method] F # 53| -1: [TypeMention] Void # 53| 4: [BlockStmt] {...} diff --git a/csharp/ql/test/library-tests/csharp7.3/PrintAst.expected b/csharp/ql/test/library-tests/csharp7.3/PrintAst.expected index 70bfee85c04b..b3fa3781436c 100644 --- a/csharp/ql/test/library-tests/csharp7.3/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp7.3/PrintAst.expected @@ -1,6 +1,6 @@ csharp73.cs: # 3| [Class] StackAllocs -# 5| 5: [Method] Fn +# 5| 6: [Method] Fn # 5| -1: [TypeMention] Void # 6| 4: [BlockStmt] {...} # 7| 0: [LocalVariableDeclStmt] ... ...; @@ -58,7 +58,7 @@ csharp73.cs: # 12| 1: [IntLiteral] 2 # 12| 2: [IntLiteral] 3 # 16| [Class] PinnedReference -# 18| 5: [Method] F +# 18| 6: [Method] F # 18| -1: [TypeMention] Void # 19| 4: [BlockStmt] {...} # 20| 0: [LocalVariableDeclStmt] ... ...; @@ -75,8 +75,8 @@ csharp73.cs: # 22| -1: [TypeMention] Span # 22| 1: [TypeMention] int # 22| 0: [LocalVariableAccess] access to local variable t -# 22| 1: [OperatorCall] call to operator implicit conversion -# 22| 0: [ArrayCreation] array creation of type Int32[] +# 22| 1: [CastExpr] (...) ... +# 22| 1: [ArrayCreation] array creation of type Int32[] # 22| -1: [TypeMention] Int32[] # 22| 1: [TypeMention] int # 22| 0: [IntLiteral] 10 @@ -91,7 +91,7 @@ csharp73.cs: #-----| 1: (Type parameters) # 38| 0: [TypeParameter] T # 42| [Class] ExpressionVariables -# 44| 4: [InstanceConstructor] ExpressionVariables +# 44| 5: [InstanceConstructor] ExpressionVariables #-----| 2: (Parameters) # 44| 0: [Parameter] x # 44| -1: [TypeMention] int @@ -100,7 +100,7 @@ csharp73.cs: # 46| 0: [AssignExpr] ... = ... # 46| 0: [ParameterAccess] access to parameter x # 46| 1: [IntLiteral] 5 -# 49| 5: [InstanceConstructor] ExpressionVariables +# 49| 6: [InstanceConstructor] ExpressionVariables # 49| 3: [ConstructorInitializer] call to constructor ExpressionVariables # 49| 0: [LocalVariableAccess,LocalVariableDeclExpr] Int32 x # 50| 4: [BlockStmt] {...} diff --git a/csharp/ql/test/library-tests/csharp7/CSharp7.cs b/csharp/ql/test/library-tests/csharp7/CSharp7.cs index c17b4164120d..d067dc66a4de 100644 --- a/csharp/ql/test/library-tests/csharp7/CSharp7.cs +++ b/csharp/ql/test/library-tests/csharp7/CSharp7.cs @@ -11,13 +11,13 @@ class Literals class ExpressionBodiedMembers { - int field = 0; - int Foo() => field; + int @field = 0; + int Foo() => @field; int P => 5; int Q { get => Foo(); - set => field = value; + set => @field = value; } ExpressionBodiedMembers() : this(1) { } ExpressionBodiedMembers(int x) => Foo(); diff --git a/csharp/ql/test/library-tests/csharp7/DefUse.expected b/csharp/ql/test/library-tests/csharp7/DefUse.expected index fb55afb5e514..ac466f9e8654 100644 --- a/csharp/ql/test/library-tests/csharp7/DefUse.expected +++ b/csharp/ql/test/library-tests/csharp7/DefUse.expected @@ -1,4 +1,4 @@ -| CSharp7.cs:20:9:20:11 | value | CSharp7.cs:20:24:20:28 | access to parameter value | +| CSharp7.cs:20:9:20:11 | value | CSharp7.cs:20:25:20:29 | access to parameter value | | CSharp7.cs:29:19:29:19 | i | CSharp7.cs:31:16:31:16 | access to parameter i | | CSharp7.cs:29:19:29:19 | i | CSharp7.cs:31:24:31:24 | access to parameter i | | CSharp7.cs:42:19:42:19 | x | CSharp7.cs:44:13:44:13 | access to parameter x | diff --git a/csharp/ql/test/library-tests/csharp7/ExpressionBodies.expected b/csharp/ql/test/library-tests/csharp7/ExpressionBodies.expected index fcba5499d77c..c2575373d518 100644 --- a/csharp/ql/test/library-tests/csharp7/ExpressionBodies.expected +++ b/csharp/ql/test/library-tests/csharp7/ExpressionBodies.expected @@ -1,7 +1,7 @@ -| CSharp7.cs:15:9:15:11 | Foo | CSharp7.cs:15:18:15:22 | access to field field | +| CSharp7.cs:15:9:15:11 | Foo | CSharp7.cs:15:18:15:23 | access to field field | | CSharp7.cs:16:14:16:14 | get_P | CSharp7.cs:16:14:16:14 | 5 | | CSharp7.cs:19:9:19:11 | get_Q | CSharp7.cs:19:16:19:20 | call to method Foo | -| CSharp7.cs:20:9:20:11 | set_Q | CSharp7.cs:20:16:20:28 | ... = ... | +| CSharp7.cs:20:9:20:11 | set_Q | CSharp7.cs:20:16:20:29 | ... = ... | | CSharp7.cs:23:5:23:27 | ExpressionBodiedMembers | CSharp7.cs:23:39:23:43 | call to method Foo | | CSharp7.cs:24:6:24:28 | ~ExpressionBodiedMembers | CSharp7.cs:24:35:24:39 | call to method Foo | | CSharp7.cs:135:9:135:22 | f3 | CSharp7.cs:135:21:135:21 | 2 | diff --git a/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected b/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected index 0a5266ed359d..ebe04faf7258 100644 --- a/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected +++ b/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected @@ -1,3 +1,4 @@ +| CSharp7.cs:5:7:5:14 | this | CSharp7.cs:5:7:5:14 | this access | | CSharp7.cs:5:7:5:14 | this | CSharp7.cs:7:9:7:9 | this access | | CSharp7.cs:7:9:7:9 | [post] this access | CSharp7.cs:8:9:8:9 | this access | | CSharp7.cs:7:9:7:9 | this access | CSharp7.cs:8:9:8:9 | this access | @@ -6,23 +7,26 @@ | CSharp7.cs:8:9:8:9 | this access | CSharp7.cs:9:9:9:9 | this access | | CSharp7.cs:8:13:8:19 | 123456 | CSharp7.cs:8:9:8:9 | access to field y | | CSharp7.cs:9:13:9:23 | 128 | CSharp7.cs:9:9:9:9 | access to field z | -| CSharp7.cs:14:9:14:13 | [post] this access | CSharp7.cs:23:39:23:43 | this access | -| CSharp7.cs:14:9:14:13 | this access | CSharp7.cs:23:39:23:43 | this access | -| CSharp7.cs:14:17:14:17 | 0 | CSharp7.cs:14:9:14:13 | access to field field | -| CSharp7.cs:15:9:15:11 | SSA entry def(this.field) | CSharp7.cs:15:18:15:22 | access to field field | -| CSharp7.cs:15:9:15:11 | this | CSharp7.cs:15:18:15:22 | this access | +| CSharp7.cs:12:7:12:29 | this | CSharp7.cs:14:9:14:14 | this access | +| CSharp7.cs:14:18:14:18 | 0 | CSharp7.cs:14:9:14:14 | access to field field | +| CSharp7.cs:15:9:15:11 | SSA entry def(this.field) | CSharp7.cs:15:18:15:23 | access to field field | +| CSharp7.cs:15:9:15:11 | this | CSharp7.cs:15:18:15:23 | this access | | CSharp7.cs:19:9:19:11 | this | CSharp7.cs:19:16:19:20 | this access | -| CSharp7.cs:20:9:20:11 | SSA param(value) | CSharp7.cs:20:24:20:28 | access to parameter value | -| CSharp7.cs:20:9:20:11 | this | CSharp7.cs:20:16:20:20 | this access | +| CSharp7.cs:20:9:20:11 | SSA param(value) | CSharp7.cs:20:25:20:29 | access to parameter value | +| CSharp7.cs:20:9:20:11 | this | CSharp7.cs:20:16:20:21 | this access | | CSharp7.cs:20:9:20:11 | value | CSharp7.cs:20:9:20:11 | SSA param(value) | -| CSharp7.cs:20:24:20:28 | access to parameter value | CSharp7.cs:20:16:20:20 | access to field field | -| CSharp7.cs:23:5:23:27 | this | CSharp7.cs:14:9:14:13 | this access | +| CSharp7.cs:20:25:20:29 | access to parameter value | CSharp7.cs:20:16:20:21 | access to field field | +| CSharp7.cs:23:5:23:27 | [post] this access | CSharp7.cs:23:39:23:43 | this access | +| CSharp7.cs:23:5:23:27 | this | CSharp7.cs:23:5:23:27 | this access | +| CSharp7.cs:23:5:23:27 | this access | CSharp7.cs:23:39:23:43 | this access | | CSharp7.cs:24:6:24:28 | this | CSharp7.cs:24:35:24:39 | this access | +| CSharp7.cs:27:7:27:15 | this | CSharp7.cs:27:7:27:15 | this access | | CSharp7.cs:29:19:29:19 | SSA param(i) | CSharp7.cs:31:16:31:16 | access to parameter i | | CSharp7.cs:29:19:29:19 | i | CSharp7.cs:29:19:29:19 | SSA param(i) | | CSharp7.cs:31:16:31:16 | access to parameter i | CSharp7.cs:31:16:31:20 | ... > ... | | CSharp7.cs:31:16:31:16 | access to parameter i | CSharp7.cs:31:24:31:24 | access to parameter i | | CSharp7.cs:31:24:31:24 | access to parameter i | CSharp7.cs:31:16:31:59 | ... ? ... : ... | +| CSharp7.cs:35:7:35:18 | this | CSharp7.cs:35:7:35:18 | this access | | CSharp7.cs:39:9:39:9 | access to parameter x | CSharp7.cs:39:9:39:21 | SSA def(x) | | CSharp7.cs:39:13:39:21 | "tainted" | CSharp7.cs:39:9:39:9 | access to parameter x | | CSharp7.cs:42:19:42:19 | SSA param(x) | CSharp7.cs:44:13:44:13 | access to parameter x | @@ -48,6 +52,7 @@ | CSharp7.cs:55:30:55:31 | SSA def(t4) | CSharp7.cs:56:18:56:19 | access to local variable t4 | | CSharp7.cs:55:30:55:31 | String t4 | CSharp7.cs:55:30:55:31 | SSA def(t4) | | CSharp7.cs:56:18:56:19 | access to local variable t4 | CSharp7.cs:56:13:56:14 | access to local variable t5 | +| CSharp7.cs:60:7:60:12 | this | CSharp7.cs:60:7:60:12 | this access | | CSharp7.cs:67:10:67:20 | this | CSharp7.cs:69:26:69:28 | this access | | CSharp7.cs:69:26:69:28 | [post] this access | CSharp7.cs:70:17:70:19 | this access | | CSharp7.cs:69:26:69:28 | call to method F | CSharp7.cs:69:9:69:22 | (..., ...) | @@ -136,6 +141,7 @@ | CSharp7.cs:121:22:121:36 | ... = ... | CSharp7.cs:121:16:121:18 | access to local variable m13 | | CSharp7.cs:121:28:121:36 | "DefUse3" | CSharp7.cs:121:22:121:24 | access to local variable m12 | | CSharp7.cs:121:28:121:36 | "DefUse3" | CSharp7.cs:121:22:121:36 | ... = ... | +| CSharp7.cs:125:7:125:20 | this | CSharp7.cs:125:7:125:20 | this access | | CSharp7.cs:127:9:127:12 | this | CSharp7.cs:133:24:133:25 | this access | | CSharp7.cs:129:20:129:20 | SSA param(x) | CSharp7.cs:129:32:129:32 | access to parameter x | | CSharp7.cs:129:20:129:20 | x | CSharp7.cs:129:20:129:20 | SSA param(x) | @@ -191,6 +197,7 @@ | CSharp7.cs:181:23:181:25 | [post] access to local variable src | CSharp7.cs:182:23:182:25 | access to local variable src | | CSharp7.cs:181:23:181:25 | access to local variable src | CSharp7.cs:182:23:182:25 | access to local variable src | | CSharp7.cs:182:21:182:26 | call to local function h | CSharp7.cs:182:13:182:17 | access to local variable sink3 | +| CSharp7.cs:186:7:186:10 | this | CSharp7.cs:186:7:186:10 | this access | | CSharp7.cs:188:10:188:11 | this | CSharp7.cs:197:14:197:23 | this access | | CSharp7.cs:190:13:190:14 | access to local variable v1 | CSharp7.cs:190:13:190:18 | SSA def(v1) | | CSharp7.cs:190:13:190:18 | SSA def(v1) | CSharp7.cs:191:26:191:27 | access to local variable v1 | @@ -224,6 +231,7 @@ | CSharp7.cs:202:24:202:24 | p | CSharp7.cs:202:24:202:24 | SSA param(p) | | CSharp7.cs:204:28:204:28 | SSA param(q) | CSharp7.cs:204:44:204:44 | access to parameter q | | CSharp7.cs:204:28:204:28 | q | CSharp7.cs:204:28:204:28 | SSA param(q) | +| CSharp7.cs:211:7:211:14 | this | CSharp7.cs:211:7:211:14 | this access | | CSharp7.cs:215:9:215:9 | access to parameter x | CSharp7.cs:215:9:215:17 | SSA def(x) | | CSharp7.cs:215:13:215:17 | false | CSharp7.cs:215:9:215:9 | access to parameter x | | CSharp7.cs:219:10:219:13 | this | CSharp7.cs:221:13:221:20 | this access | @@ -237,6 +245,7 @@ | CSharp7.cs:223:22:223:29 | call to method f | CSharp7.cs:223:9:223:18 | (..., ...) | | CSharp7.cs:223:22:223:29 | this access | CSharp7.cs:224:22:224:33 | this access | | CSharp7.cs:224:22:224:33 | call to method f | CSharp7.cs:224:9:224:18 | (..., ...) | +| CSharp7.cs:228:7:228:14 | this | CSharp7.cs:228:7:228:14 | this access | | CSharp7.cs:232:16:232:16 | access to local variable o | CSharp7.cs:232:16:232:23 | SSA def(o) | | CSharp7.cs:232:16:232:23 | SSA def(o) | CSharp7.cs:233:13:233:13 | access to local variable o | | CSharp7.cs:232:20:232:23 | null | CSharp7.cs:232:16:232:16 | access to local variable o | @@ -303,6 +312,7 @@ | CSharp7.cs:264:37:264:43 | "string " | CSharp7.cs:264:35:264:48 | $"..." | | CSharp7.cs:264:44:264:47 | {...} | CSharp7.cs:264:35:264:48 | $"..." | | CSharp7.cs:264:45:264:46 | access to local variable s2 | CSharp7.cs:264:44:264:47 | {...} | +| CSharp7.cs:278:7:278:23 | this | CSharp7.cs:278:7:278:23 | this access | | CSharp7.cs:282:13:282:16 | access to local variable dict | CSharp7.cs:282:13:282:48 | SSA def(dict) | | CSharp7.cs:282:13:282:48 | SSA def(dict) | CSharp7.cs:283:20:283:23 | access to local variable dict | | CSharp7.cs:282:20:282:48 | object creation of type Dictionary | CSharp7.cs:282:13:282:16 | access to local variable dict | @@ -316,6 +326,7 @@ | CSharp7.cs:283:51:283:54 | access to parameter item | CSharp7.cs:283:51:283:60 | access to property Value | | CSharp7.cs:285:39:285:42 | access to local variable list | CSharp7.cs:287:36:287:39 | access to local variable list | | CSharp7.cs:287:36:287:39 | access to local variable list | CSharp7.cs:289:32:289:35 | access to local variable list | +| CSharp7.cs:293:7:293:14 | this | CSharp7.cs:293:7:293:14 | this access | | CSharp7.cs:297:18:297:18 | access to local variable x | CSharp7.cs:297:18:297:22 | SSA def(x) | | CSharp7.cs:297:18:297:22 | SSA def(x) | CSharp7.cs:297:25:297:25 | access to local variable x | | CSharp7.cs:297:22:297:22 | 0 | CSharp7.cs:297:18:297:18 | access to local variable x | diff --git a/csharp/ql/test/library-tests/csharp7/PrintAst.expected b/csharp/ql/test/library-tests/csharp7/PrintAst.expected index bf0b07abbeb8..47ab207bb556 100644 --- a/csharp/ql/test/library-tests/csharp7/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp7/PrintAst.expected @@ -1,26 +1,26 @@ CSharp7.cs: # 5| [Class] Literals -# 7| 5: [Field] x +# 7| 6: [Field] x # 7| -1: [TypeMention] int # 7| 1: [IntLiteral] 11 -# 8| 6: [Field] y +# 8| 7: [Field] y # 8| -1: [TypeMention] int # 8| 1: [IntLiteral] 123456 -# 9| 7: [Field] z +# 9| 8: [Field] z # 9| -1: [TypeMention] int # 9| 1: [IntLiteral] 128 # 12| [Class] ExpressionBodiedMembers -# 14| 4: [Field] field +# 14| 5: [Field] field # 14| -1: [TypeMention] int # 14| 1: [IntLiteral] 0 -# 15| 5: [Method] Foo +# 15| 6: [Method] Foo # 15| -1: [TypeMention] int # 15| 4: [FieldAccess] access to field field -# 16| 6: [Property] P +# 16| 7: [Property] P # 16| -1: [TypeMention] int # 16| 3: [Getter] get_P # 16| 4: [IntLiteral] 5 -# 17| 7: [Property] Q +# 17| 8: [Property] Q # 17| -1: [TypeMention] int # 19| 3: [Getter] get_Q # 19| 4: [MethodCall] call to method Foo @@ -30,19 +30,19 @@ CSharp7.cs: # 20| 4: [AssignExpr] ... = ... # 20| 0: [FieldAccess] access to field field # 20| 1: [ParameterAccess] access to parameter value -# 22| 8: [InstanceConstructor] ExpressionBodiedMembers +# 22| 9: [InstanceConstructor] ExpressionBodiedMembers # 22| 3: [ConstructorInitializer] call to constructor ExpressionBodiedMembers # 22| 0: [IntLiteral] 1 # 22| 4: [BlockStmt] {...} -# 23| 9: [InstanceConstructor] ExpressionBodiedMembers +# 23| 10: [InstanceConstructor] ExpressionBodiedMembers #-----| 2: (Parameters) # 23| 0: [Parameter] x # 23| -1: [TypeMention] int # 23| 4: [MethodCall] call to method Foo -# 24| 10: [Destructor] ~ExpressionBodiedMembers +# 24| 11: [Destructor] ~ExpressionBodiedMembers # 24| 4: [MethodCall] call to method Foo # 27| [Class] ThrowExpr -# 29| 5: [Method] Throw +# 29| 6: [Method] Throw # 29| -1: [TypeMention] int #-----| 2: (Parameters) # 29| 0: [Parameter] i @@ -59,7 +59,7 @@ CSharp7.cs: # 31| -1: [TypeMention] ArgumentException # 31| 0: [StringLiteralUtf16] "i" # 35| [Class] OutVariables -# 37| 5: [Method] F +# 37| 6: [Method] F # 37| -1: [TypeMention] Void #-----| 2: (Parameters) # 37| 0: [Parameter] x @@ -69,7 +69,7 @@ CSharp7.cs: # 39| 0: [AssignExpr] ... = ... # 39| 0: [ParameterAccess] access to parameter x # 39| 1: [StringLiteralUtf16] "tainted" -# 42| 6: [Method] G +# 42| 7: [Method] G # 42| -1: [TypeMention] Void #-----| 2: (Parameters) # 42| 0: [Parameter] x @@ -81,7 +81,7 @@ CSharp7.cs: # 44| 0: [AssignExpr] ... = ... # 44| 0: [ParameterAccess] access to parameter y # 44| 1: [ParameterAccess] access to parameter x -# 47| 7: [Method] G +# 47| 8: [Method] G # 47| -1: [TypeMention] Void # 48| 4: [BlockStmt] {...} # 49| 0: [ExprStmt] ...; @@ -116,7 +116,7 @@ CSharp7.cs: # 56| 0: [LocalVariableAccess] access to local variable t5 # 56| 1: [LocalVariableAccess] access to local variable t4 # 60| [Class] Tuples -# 62| 5: [Method] F +# 62| 6: [Method] F # 62| -1: [TypeMention] (int, int) # 62| 1: [TypeMention] int # 62| 2: [TypeMention] int @@ -125,7 +125,7 @@ CSharp7.cs: # 64| 0: [TupleExpr] (..., ...) # 64| 0: [IntLiteral] 1 # 64| 1: [IntLiteral] 2 -# 67| 6: [Method] Expressions +# 67| 7: [Method] Expressions # 67| -1: [TypeMention] Void # 68| 4: [BlockStmt] {...} # 69| 0: [ExprStmt] ...; @@ -203,7 +203,7 @@ CSharp7.cs: # 77| 1: [TupleExpr] (..., ...) # 77| 0: [StringLiteralUtf16] "" # 77| 1: [LocalVariableAccess] access to local variable x -# 80| 7: [Method] I +# 80| 8: [Method] I # 80| -1: [TypeMention] string #-----| 2: (Parameters) # 80| 0: [Parameter] x @@ -214,7 +214,7 @@ CSharp7.cs: # 82| -1: [TupleExpr] (..., ...) # 82| 0: [ParameterAccess] access to parameter x # 82| 1: [IntLiteral] 2 -# 85| 8: [Method] TaintFlow +# 85| 9: [Method] TaintFlow # 85| -1: [TypeMention] Void # 86| 4: [BlockStmt] {...} # 87| 0: [LocalVariableDeclStmt] ... ...; @@ -242,7 +242,7 @@ CSharp7.cs: # 90| 1: [MethodCall] call to method I # 90| 0: [FieldAccess] access to field Item1 # 90| -1: [LocalVariableAccess] access to local variable t1 -# 93| 9: [Method] TupleExprNode +# 93| 10: [Method] TupleExprNode # 93| -1: [TypeMention] Void # 94| 4: [BlockStmt] {...} # 95| 0: [LocalVariableDeclStmt] ... ...; @@ -261,7 +261,7 @@ CSharp7.cs: # 96| 1: [TupleExpr] (..., ...) # 96| 0: [StringLiteralUtf16] "TupleExprNode2" # 96| 1: [IntLiteral] 2 -# 99| 10: [Method] TupleMemberAccess +# 99| 11: [Method] TupleMemberAccess # 99| -1: [TypeMention] Void # 100| 4: [BlockStmt] {...} # 101| 0: [LocalVariableDeclStmt] ... ...; @@ -282,7 +282,7 @@ CSharp7.cs: # 102| 1: [TupleExpr] (..., ...) # 102| 0: [StringLiteralUtf16] "TupleMemberAccess2" # 102| 1: [IntLiteral] 1 -# 105| 11: [Method] DefUse +# 105| 12: [Method] DefUse # 105| -1: [TypeMention] Void # 106| 4: [BlockStmt] {...} # 107| 0: [ExprStmt] ...; @@ -361,7 +361,7 @@ CSharp7.cs: # 121| 0: [LocalVariableAccess] access to local variable m12 # 121| 1: [StringLiteralUtf16] "DefUse3" # 125| [Class] LocalFunctions -# 127| 5: [Method] Main +# 127| 6: [Method] Main # 127| -1: [TypeMention] int # 128| 4: [BlockStmt] {...} # 129| 0: [LocalFunctionStmt] f1(...) @@ -462,7 +462,7 @@ CSharp7.cs: # 154| 0: [LocalFunctionCall] call to local function f1 # 154| -1: [LocalFunctionAccess] access to local function f1 # 154| 0: [IntLiteral] 2 -# 157| 6: [Method] Generics +# 157| 7: [Method] Generics # 157| -1: [TypeMention] Void # 158| 4: [BlockStmt] {...} # 159| 0: [LocalFunctionStmt] f(...) @@ -517,7 +517,7 @@ CSharp7.cs: # 170| -1: [LocalFunctionAccess] access to local function h # 170| 0: [StringLiteralUtf16] "" # 170| 1: [BoolLiteral] true -# 173| 7: [Method] GlobalFlow +# 173| 8: [Method] GlobalFlow # 173| -1: [TypeMention] Void # 174| 4: [BlockStmt] {...} # 175| 0: [LocalVariableDeclStmt] ... ...; @@ -571,7 +571,7 @@ CSharp7.cs: # 182| -1: [LocalFunctionAccess] access to local function h # 182| 0: [LocalVariableAccess] access to local variable src # 186| [Class] Refs -# 188| 5: [Method] F1 +# 188| 6: [Method] F1 # 188| -1: [TypeMention] Void # 189| 4: [BlockStmt] {...} # 190| 0: [LocalVariableDeclStmt] ... ...; @@ -634,7 +634,7 @@ CSharp7.cs: # 199| 0: [MethodCall] call to method F2 # 199| 0: [LocalVariableAccess] access to local variable r1 # 199| 1: [IntLiteral] 3 -# 202| 6: [Method] F2 +# 202| 7: [Method] F2 # 202| -1: [TypeMention] int #-----| 2: (Parameters) # 202| 0: [Parameter] p @@ -652,12 +652,12 @@ CSharp7.cs: # 205| 1: [ReturnStmt] return ...; # 205| 0: [RefExpr] ref ... # 205| 0: [ParameterAccess] access to parameter p -# 208| 7: [DelegateType] RefFn +# 208| 8: [DelegateType] RefFn #-----| 2: (Parameters) # 208| 0: [Parameter] p # 208| -1: [TypeMention] int # 211| [Class] Discards -# 213| 5: [Method] f +# 213| 6: [Method] f # 213| -1: [TypeMention] (int, double) # 213| 1: [TypeMention] int # 213| 2: [TypeMention] double @@ -673,7 +673,7 @@ CSharp7.cs: # 216| 0: [TupleExpr] (..., ...) # 216| 0: [IntLiteral] 0 # 216| 1: [DoubleLiteral] 0 -# 219| 6: [Method] Test +# 219| 7: [Method] Test # 219| -1: [TypeMention] Void # 220| 4: [BlockStmt] {...} # 221| 0: [ExprStmt] ...; @@ -703,7 +703,7 @@ CSharp7.cs: # 224| 1: [MethodCall] call to method f # 224| 0: [LocalVariableAccess,LocalVariableDeclExpr] Boolean z # 228| [Class] Patterns -# 230| 5: [Method] Test +# 230| 6: [Method] Test # 230| -1: [TypeMention] Void # 231| 4: [BlockStmt] {...} # 232| 0: [LocalVariableDeclStmt] ... ...; @@ -839,7 +839,7 @@ CSharp7.cs: # 272| 0: [StringLiteralUtf16] "Something else" # 273| 23: [BreakStmt] break; # 278| [Class] ForeachStatements -# 280| 5: [Method] Test +# 280| 6: [Method] Test # 280| -1: [TypeMention] Void # 281| 4: [BlockStmt] {...} # 282| 0: [LocalVariableDeclStmt] ... ...; @@ -883,7 +883,7 @@ CSharp7.cs: # 289| 1: [LocalVariableAccess] access to local variable list # 289| 2: [BlockStmt] {...} # 293| [Class] ForLoops -# 295| 5: [Method] Test +# 295| 6: [Method] Test # 295| -1: [TypeMention] Void # 296| 4: [BlockStmt] {...} # 297| 0: [ForStmt] for (...;...;...) ... diff --git a/csharp/ql/test/library-tests/csharp8/NullableRefTypes.expected b/csharp/ql/test/library-tests/csharp8/NullableRefTypes.expected index 6ad47e73d01a..fb2ca2f17591 100644 --- a/csharp/ql/test/library-tests/csharp8/NullableRefTypes.expected +++ b/csharp/ql/test/library-tests/csharp8/NullableRefTypes.expected @@ -153,6 +153,7 @@ arrayElements | NullableRefTypes.cs:150:27:150:27 | k | NullableRefTypes.cs:6:7:6:13 | MyClass[,,,][][,][,,] | NullableRefTypes.cs:6:7:6:13 | MyClass[][,][,,] | | NullableRefTypes.cs:151:29:151:29 | l | NullableRefTypes.cs:6:7:6:13 | MyClass?[,,,][][,]?[,,] | NullableRefTypes.cs:6:7:6:13 | MyClass?[,,,][][,]? | returnTypes +| NullableRefTypes.cs:6:7:6:13 | | Void | | NullableRefTypes.cs:6:7:6:13 | MyClass | Void! | | NullableRefTypes.cs:13:19:13:22 | get_C | MyClass? | | NullableRefTypes.cs:14:18:14:21 | get_D | MyClass! | @@ -179,14 +180,18 @@ returnTypes | NullableRefTypes.cs:51:12:51:15 | Q | object! | | NullableRefTypes.cs:51:12:51:15 | Q`1 | object! | | NullableRefTypes.cs:54:11:54:17 | Generic | Void! | +| NullableRefTypes.cs:54:11:54:33 | | Void | | NullableRefTypes.cs:58:11:58:18 | Generic2 | Void! | +| NullableRefTypes.cs:58:11:58:26 | | Void | | NullableRefTypes.cs:67:10:67:21 | GenericFn | Void | | NullableRefTypes.cs:67:10:67:21 | GenericFn | Void! | | NullableRefTypes.cs:67:10:67:21 | GenericFn`1 | Void! | | NullableRefTypes.cs:71:14:71:18 | CallF | MyStruct! | +| NullableRefTypes.cs:80:7:80:22 | | Void | | NullableRefTypes.cs:80:7:80:22 | NullableRefTypes | Void! | | NullableRefTypes.cs:82:10:82:40 | TestSuppressNullableWarningExpr | Void! | | NullableRefTypes.cs:91:10:91:34 | FunctionInNullableContext | Void! | +| NullableRefTypes.cs:100:7:100:14 | | Void | | NullableRefTypes.cs:100:7:100:14 | RefTypes | Void! | | NullableRefTypes.cs:103:18:103:28 | ReturnsRef1 | ref MyClass? | | NullableRefTypes.cs:104:17:104:27 | ReturnsRef2 | ref MyClass! | @@ -196,12 +201,17 @@ returnTypes | NullableRefTypes.cs:108:26:108:36 | ReturnsRef6 | readonly MyClass! | | NullableRefTypes.cs:110:10:110:20 | Parameters1 | Void! | | NullableRefTypes.cs:113:32:113:44 | get_RefProperty | MyClass! | +| NullableRefTypes.cs:116:7:116:23 | | Void | | NullableRefTypes.cs:116:7:116:23 | ToStringWithTypes | Void! | +| NullableRefTypes.cs:136:7:136:24 | | Void | | NullableRefTypes.cs:136:7:136:24 | ToStringWithTypes2 | Void! | +| NullableRefTypes.cs:154:7:154:25 | | Void | | NullableRefTypes.cs:154:7:154:25 | DisabledNullability | Void! | | NullableRefTypes.cs:157:18:157:30 | get_P | MyClass | | NullableRefTypes.cs:158:13:158:14 | Fn | MyClass | +| NullableRefTypes.cs:165:8:165:15 | | Void | | NullableRefTypes.cs:165:8:165:15 | MyStruct | Void! | +| NullableRefTypes.cs:171:16:171:37 | | Void | | NullableRefTypes.cs:171:16:171:37 | TestNullableFlowStates | Void! | | NullableRefTypes.cs:173:29:173:37 | MaybeNull | string? | | NullableRefTypes.cs:175:26:175:30 | Check | Void! | @@ -245,6 +255,8 @@ annotatedTypeConstraints typeNotAnnotated expressionTypes | NullableRefTypes.cs:6:7:6:13 | call to constructor Object | object | +| NullableRefTypes.cs:6:7:6:13 | call to method | Void | +| NullableRefTypes.cs:6:7:6:13 | this access | MyClass | | NullableRefTypes.cs:13:19:13:22 | null | null | | NullableRefTypes.cs:14:18:14:21 | this access | MyClass! | | NullableRefTypes.cs:17:29:17:32 | null | null | @@ -272,7 +284,11 @@ expressionTypes | NullableRefTypes.cs:40:30:40:30 | access to local variable b | MyClass? | | NullableRefTypes.cs:51:44:51:47 | null | null | | NullableRefTypes.cs:54:11:54:17 | call to constructor Object | object | +| NullableRefTypes.cs:54:11:54:17 | call to method | Void | +| NullableRefTypes.cs:54:11:54:17 | this access | Generic | | NullableRefTypes.cs:58:11:58:18 | call to constructor Object | object | +| NullableRefTypes.cs:58:11:58:18 | call to method | Void | +| NullableRefTypes.cs:58:11:58:18 | this access | Generic2 | | NullableRefTypes.cs:73:18:73:18 | access to local variable x | MyClass! | | NullableRefTypes.cs:73:18:73:25 | MyClass x = ... | MyClass! | | NullableRefTypes.cs:73:22:73:25 | null | null | @@ -285,6 +301,8 @@ expressionTypes | NullableRefTypes.cs:76:16:76:32 | default(...) | MyStruct! | | NullableRefTypes.cs:76:24:76:31 | access to type MyStruct | MyStruct | | NullableRefTypes.cs:80:7:80:22 | call to constructor Object | object | +| NullableRefTypes.cs:80:7:80:22 | call to method | Void | +| NullableRefTypes.cs:80:7:80:22 | this access | NullableRefTypes | | NullableRefTypes.cs:84:17:84:17 | access to local variable x | string! | | NullableRefTypes.cs:84:17:84:28 | String x = ... | string! | | NullableRefTypes.cs:84:21:84:28 | "source" | string! | @@ -318,6 +336,8 @@ expressionTypes | NullableRefTypes.cs:96:9:96:28 | call to method WriteLine | Void! | | NullableRefTypes.cs:96:27:96:27 | access to local variable x | string? | | NullableRefTypes.cs:100:7:100:14 | call to constructor Object | object | +| NullableRefTypes.cs:100:7:100:14 | call to method | Void | +| NullableRefTypes.cs:100:7:100:14 | this access | RefTypes | | NullableRefTypes.cs:103:48:103:52 | ref ... | MyClass | | NullableRefTypes.cs:103:52:103:52 | access to parameter r | MyClass! | | NullableRefTypes.cs:104:48:104:52 | ref ... | MyClass | @@ -337,15 +357,25 @@ expressionTypes | NullableRefTypes.cs:113:36:113:43 | this access | RefTypes | | NullableRefTypes.cs:113:36:113:44 | ...! | MyClass? | | NullableRefTypes.cs:116:7:116:23 | call to constructor Object | object | +| NullableRefTypes.cs:116:7:116:23 | call to method | Void | +| NullableRefTypes.cs:116:7:116:23 | this access | ToStringWithTypes | | NullableRefTypes.cs:136:7:136:24 | call to constructor Object | object | +| NullableRefTypes.cs:136:7:136:24 | call to method | Void | +| NullableRefTypes.cs:136:7:136:24 | this access | ToStringWithTypes2 | | NullableRefTypes.cs:154:7:154:25 | call to constructor Object | object | +| NullableRefTypes.cs:154:7:154:25 | call to method | Void | +| NullableRefTypes.cs:154:7:154:25 | this access | DisabledNullability | | NullableRefTypes.cs:157:18:157:30 | object creation of type MyClass | MyClass | | NullableRefTypes.cs:160:17:160:17 | access to local variable a | MyClass | | NullableRefTypes.cs:160:17:160:21 | MyClass a = ... | MyClass | | NullableRefTypes.cs:160:21:160:21 | access to parameter p | MyClass | | NullableRefTypes.cs:161:16:161:16 | access to local variable a | MyClass | | NullableRefTypes.cs:165:8:165:15 | call to constructor ValueType | ValueType | +| NullableRefTypes.cs:165:8:165:15 | call to method | Void | +| NullableRefTypes.cs:165:8:165:15 | this access | MyStruct | | NullableRefTypes.cs:171:16:171:37 | call to constructor Object | object | +| NullableRefTypes.cs:171:16:171:37 | call to method | Void | +| NullableRefTypes.cs:171:16:171:37 | this access | TestNullableFlowStates | | NullableRefTypes.cs:181:17:181:17 | access to local variable x | string! | | NullableRefTypes.cs:181:17:181:31 | String x = ... | string! | | NullableRefTypes.cs:181:21:181:31 | call to method MaybeNull | string? | diff --git a/csharp/ql/test/library-tests/csharp8/PrintAst.expected b/csharp/ql/test/library-tests/csharp8/PrintAst.expected index 4ec30c915b3a..f5eb7caab572 100644 --- a/csharp/ql/test/library-tests/csharp8/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp8/PrintAst.expected @@ -1,12 +1,12 @@ AlternateInterpolatedStrings.cs: # 3| [Class] AlternateInterpolatedStrings -# 5| 5: [Field] s1 +# 5| 6: [Field] s1 # 5| -1: [TypeMention] string # 5| 1: [InterpolatedStringExpr] $"..." # 5| 0: [StringLiteralUtf16] "C:" # 5| 1: [InterpolatedStringInsertExpr] {...} # 5| 0: [IntLiteral] 12 -# 6| 6: [Field] s2 +# 6| 7: [Field] s2 # 6| -1: [TypeMention] string # 6| 1: [InterpolatedStringExpr] $"..." # 6| 0: [StringLiteralUtf16] "C:" @@ -14,7 +14,7 @@ AlternateInterpolatedStrings.cs: # 6| 0: [IntLiteral] 12 AsyncStreams.cs: # 6| [Class] AsyncStreams -# 8| 5: [Method] Items +# 8| 6: [Method] Items # 8| -1: [TypeMention] IAsyncEnumerable # 8| 1: [TypeMention] int # 8| 4: [BlockStmt] {...} @@ -30,7 +30,7 @@ AsyncStreams.cs: # 11| 0: [IntLiteral] 1000 # 12| 3: [YieldReturnStmt] yield return ...; # 12| 0: [IntLiteral] 3 -# 15| 6: [Method] F +# 15| 7: [Method] F # 15| -1: [TypeMention] Void # 16| 4: [BlockStmt] {...} # 17| 0: [ForeachStmt] foreach (... ... in ...) ... @@ -103,11 +103,11 @@ DefaultInterfaceMethods.cs: # 20| [Class] Person #-----| 3: (Base types) # 20| 1: [TypeMention] IPerson -# 22| 5: [Property] Name +# 22| 6: [Property] Name # 22| -1: [TypeMention] string # 22| 3: [Getter] get_Name # 22| 4: [StringLiteralUtf16] "Petra" -# 24| 6: [Property] Greeting +# 24| 7: [Property] Greeting # 24| -1: [TypeMention] IPerson # 24| -1: [TypeMention] string # 24| 3: [Getter] get_Greeting @@ -116,14 +116,14 @@ DefaultInterfaceMethods.cs: #-----| 2: (Parameters) # 24| 0: [Parameter] value # 24| 4: [BlockStmt] {...} -# 26| 7: [Method] Greet +# 26| 8: [Method] Greet # 26| -1: [TypeMention] Void # 26| 4: [BlockStmt] {...} NameResolutionSuppressNullable.cs: # 5| [Class] MyClass2 -# 7| 5: [Field] s_signalMethod +# 7| 6: [Field] s_signalMethod # 7| -1: [TypeMention] WaitCallback -# 8| 6: [Property] SignalMethod +# 8| 7: [Property] SignalMethod # 8| -1: [TypeMention] WaitCallback # 8| 3: [Getter] get_SignalMethod # 8| 4: [MethodCall] call to method EnsureInitialized @@ -133,7 +133,7 @@ NameResolutionSuppressNullable.cs: # 8| -1: [TypeMention] WaitCallback # 8| 0: [SuppressNullableWarningExpr] ...! # 8| 0: [MethodAccess] access to method M1 -# 10| 8: [Method] EnsureInitialized`1 +# 10| 9: [Method] EnsureInitialized`1 # 10| -1: [TypeMention] T #-----| 1: (Type parameters) # 10| 0: [TypeParameter] T @@ -149,7 +149,7 @@ NameResolutionSuppressNullable.cs: # 10| 0: [ParameterAccess] access to parameter target # 10| 1: [DelegateCall] delegate call # 10| -1: [ParameterAccess] access to parameter valueFactory -# 12| 9: [Method] M1 +# 12| 10: [Method] M1 # 12| -1: [TypeMention] Void #-----| 2: (Parameters) # 12| 0: [Parameter] state @@ -157,7 +157,7 @@ NameResolutionSuppressNullable.cs: # 13| 4: [BlockStmt] {...} NullCoalescingAssignment.cs: # 3| [Class] NullCoalescingAssignment -# 5| 5: [Method] NullCoalescing +# 5| 6: [Method] NullCoalescing # 5| -1: [TypeMention] Void # 6| 4: [BlockStmt] {...} # 7| 0: [LocalVariableDeclStmt] ... ...; @@ -171,19 +171,19 @@ NullCoalescingAssignment.cs: # 8| 1: [ThisAccess] this access NullableRefTypes.cs: # 6| [Class] MyClass -# 9| 5: [Field] A +# 9| 6: [Field] A # 9| -1: [TypeMention] MyClass -# 10| 6: [Field] B +# 10| 7: [Field] B # 10| -1: [TypeMention] MyClass -# 13| 7: [Property] C +# 13| 8: [Property] C # 13| -1: [TypeMention] MyClass # 13| 3: [Getter] get_C # 13| 4: [NullLiteral] null -# 14| 8: [Property] D +# 14| 9: [Property] D # 14| -1: [TypeMention] MyClass # 14| 3: [Getter] get_D # 14| 4: [ThisAccess] this access -# 17| 9: [Indexer] Item +# 17| 10: [Indexer] Item # 17| -1: [TypeMention] MyClass #-----| 1: (Parameters) # 17| 0: [Parameter] i @@ -192,7 +192,7 @@ NullableRefTypes.cs: #-----| 2: (Parameters) # 17| 0: [Parameter] i # 17| 4: [NullLiteral] null -# 18| 10: [Indexer] Item +# 18| 11: [Indexer] Item # 18| -1: [TypeMention] MyClass #-----| 1: (Parameters) # 18| 0: [Parameter] i @@ -201,7 +201,7 @@ NullableRefTypes.cs: #-----| 2: (Parameters) # 18| 0: [Parameter] i # 18| 4: [ThisAccess] this access -# 19| 11: [Indexer] Item +# 19| 12: [Indexer] Item # 19| -1: [TypeMention] MyClass #-----| 1: (Parameters) # 19| 0: [Parameter] i @@ -210,19 +210,19 @@ NullableRefTypes.cs: #-----| 2: (Parameters) # 19| 0: [Parameter] i # 19| 4: [ThisAccess] this access -# 22| 12: [Field] G1 +# 22| 13: [Field] G1 # 22| -1: [TypeMention] MyClass[] # 22| 1: [TypeMention] MyClass -# 23| 13: [Field] G2 +# 23| 14: [Field] G2 # 23| -1: [TypeMention] MyClass[] # 23| 1: [TypeMention] MyClass -# 24| 14: [Field] G3 +# 24| 15: [Field] G3 # 24| -1: [TypeMention] MyClass[] # 24| 1: [TypeMention] MyClass -# 25| 15: [Field] H +# 25| 16: [Field] H # 25| -1: [TypeMention] MyClass[][] # 25| 1: [TypeMention] MyClass -# 26| 16: [Method] ArrayFn1 +# 26| 17: [Method] ArrayFn1 # 26| -1: [TypeMention] MyClass[] # 26| 1: [TypeMention] MyClass #-----| 2: (Parameters) @@ -231,7 +231,7 @@ NullableRefTypes.cs: # 26| 1: [TypeMention] MyClass # 26| 4: [ThrowExpr] throw ... # 26| 0: [NullLiteral] null -# 27| 17: [Method] ArrayFn2 +# 27| 18: [Method] ArrayFn2 # 27| -1: [TypeMention] MyClass[] # 27| 1: [TypeMention] MyClass #-----| 2: (Parameters) @@ -240,13 +240,13 @@ NullableRefTypes.cs: # 27| 1: [TypeMention] MyClass # 27| 4: [ThrowExpr] throw ... # 27| 0: [NullLiteral] null -# 30| 18: [Method] M +# 30| 19: [Method] M # 30| -1: [TypeMention] MyClass # 30| 4: [NullLiteral] null -# 31| 19: [Method] N +# 31| 20: [Method] N # 31| -1: [TypeMention] MyClass # 31| 4: [ThisAccess] this access -# 32| 20: [Method] O +# 32| 21: [Method] O # 32| -1: [TypeMention] Void #-----| 2: (Parameters) # 32| 0: [Parameter] a @@ -254,7 +254,7 @@ NullableRefTypes.cs: # 32| 1: [Parameter] b # 32| -1: [TypeMention] MyClass # 32| 4: [BlockStmt] {...} -# 35| 21: [Method] Locals +# 35| 22: [Method] Locals # 35| -1: [TypeMention] Void # 36| 4: [BlockStmt] {...} # 37| 0: [LocalVariableDeclStmt] ... ...; @@ -280,12 +280,12 @@ NullableRefTypes.cs: # 40| 0: [LocalVariableAccess] access to local variable d # 40| 1: [RefExpr] ref ... # 40| 0: [LocalVariableAccess] access to local variable b -# 44| 22: [DelegateType] Del1 -# 47| 23: [DelegateType] Del +# 44| 23: [DelegateType] Del1 +# 47| 24: [DelegateType] Del #-----| 2: (Parameters) # 47| 0: [Parameter] x # 47| -1: [TypeMention] MyClass -# 48| 24: [Event] P +# 48| 25: [Event] P # 48| -1: [TypeMention] Del # 48| 3: [AddEventAccessor] add_P #-----| 2: (Parameters) @@ -293,7 +293,7 @@ NullableRefTypes.cs: # 48| 4: [RemoveEventAccessor] remove_P #-----| 2: (Parameters) # 48| 0: [Parameter] value -# 51| 26: [Method] Q`1 +# 51| 27: [Method] Q`1 # 51| -1: [TypeMention] object #-----| 1: (Type parameters) # 51| 0: [TypeParameter] T @@ -301,23 +301,23 @@ NullableRefTypes.cs: # 51| 0: [Parameter] t # 51| -1: [TypeMention] T # 51| 4: [NullLiteral] null -# 54| 29: [Class] Generic`4 +# 54| 30: [Class] Generic`4 #-----| 1: (Type parameters) # 54| 0: [TypeParameter] T1 # 54| 1: [TypeParameter] T2 # 54| 2: [TypeParameter] T3 # 54| 3: [TypeParameter] T4 -# 58| 30: [Class] Generic2`2 +# 58| 31: [Class] Generic2`2 #-----| 1: (Type parameters) # 58| 0: [TypeParameter] T1 # 58| 1: [TypeParameter] T2 -# 65| 31: [Field] items2 +# 65| 32: [Field] items2 # 65| -1: [TypeMention] Generic # 65| 1: [TypeMention] MyClass # 65| 2: [TypeMention] MyClass # 65| 3: [TypeMention] IDisposable # 65| 4: [TypeMention] MyClass -# 67| 33: [Method] GenericFn`1 +# 67| 34: [Method] GenericFn`1 # 67| -1: [TypeMention] Void #-----| 1: (Type parameters) # 67| 0: [TypeParameter] T @@ -325,7 +325,7 @@ NullableRefTypes.cs: # 67| 0: [Parameter] x # 67| -1: [TypeMention] T # 68| 4: [BlockStmt] {...} -# 71| 34: [Method] CallF +# 71| 35: [Method] CallF # 71| -1: [TypeMention] MyStruct # 72| 4: [BlockStmt] {...} # 73| 0: [LocalVariableDeclStmt] ... ...; @@ -344,7 +344,7 @@ NullableRefTypes.cs: # 76| 0: [TypeAccess] access to type MyStruct # 76| 0: [TypeMention] MyStruct # 80| [Class] NullableRefTypes -# 82| 5: [Method] TestSuppressNullableWarningExpr +# 82| 6: [Method] TestSuppressNullableWarningExpr # 82| -1: [TypeMention] Void # 83| 4: [BlockStmt] {...} # 84| 0: [LocalVariableDeclStmt] ... ...; @@ -372,7 +372,7 @@ NullableRefTypes.cs: # 88| 0: [LocalVariableAccess] access to local variable y # 88| 1: [SuppressNullableWarningExpr] ...! # 88| 0: [LocalVariableAccess] access to local variable x -# 91| 6: [Method] FunctionInNullableContext +# 91| 7: [Method] FunctionInNullableContext # 91| -1: [TypeMention] Void # 92| 4: [BlockStmt] {...} # 93| 0: [LocalVariableDeclStmt] ... ...; @@ -398,49 +398,49 @@ NullableRefTypes.cs: # 96| 0: [TypeMention] Console # 96| 0: [LocalVariableAccess] access to local variable x # 100| [Class] RefTypes -# 103| 5: [Method] ReturnsRef1 +# 103| 6: [Method] ReturnsRef1 # 103| -1: [TypeMention] MyClass #-----| 2: (Parameters) # 103| 0: [Parameter] r # 103| -1: [TypeMention] MyClass # 103| 4: [RefExpr] ref ... # 103| 0: [ParameterAccess] access to parameter r -# 104| 6: [Method] ReturnsRef2 +# 104| 7: [Method] ReturnsRef2 # 104| -1: [TypeMention] MyClass #-----| 2: (Parameters) # 104| 0: [Parameter] r # 104| -1: [TypeMention] MyClass # 104| 4: [RefExpr] ref ... # 104| 0: [ParameterAccess] access to parameter r -# 105| 7: [Method] ReturnsRef3 +# 105| 8: [Method] ReturnsRef3 # 105| -1: [TypeMention] MyClass #-----| 2: (Parameters) # 105| 0: [Parameter] r # 105| -1: [TypeMention] MyClass # 105| 4: [RefExpr] ref ... # 105| 0: [ParameterAccess] access to parameter r -# 106| 8: [Method] ReturnsRef4 +# 106| 9: [Method] ReturnsRef4 # 106| -1: [TypeMention] MyClass #-----| 2: (Parameters) # 106| 0: [Parameter] r # 106| -1: [TypeMention] MyClass # 106| 4: [RefExpr] ref ... # 106| 0: [ParameterAccess] access to parameter r -# 107| 9: [Method] ReturnsRef5 +# 107| 10: [Method] ReturnsRef5 # 107| -1: [TypeMention] MyClass #-----| 2: (Parameters) # 107| 0: [Parameter] r # 107| -1: [TypeMention] MyClass # 107| 4: [RefExpr] ref ... # 107| 0: [ParameterAccess] access to parameter r -# 108| 10: [Method] ReturnsRef6 +# 108| 11: [Method] ReturnsRef6 # 108| -1: [TypeMention] MyClass #-----| 2: (Parameters) # 108| 0: [Parameter] r # 108| -1: [TypeMention] MyClass # 108| 4: [RefExpr] ref ... # 108| 0: [ParameterAccess] access to parameter r -# 110| 11: [Method] Parameters1 +# 110| 12: [Method] Parameters1 # 110| -1: [TypeMention] Void #-----| 2: (Parameters) # 110| 0: [Parameter] p1 @@ -449,99 +449,99 @@ NullableRefTypes.cs: # 110| -1: [TypeMention] MyClass # 110| 4: [ThrowExpr] throw ... # 110| 0: [NullLiteral] null -# 112| 12: [Field] Property +# 112| 13: [Field] Property # 112| -1: [TypeMention] MyClass -# 113| 13: [Property] RefProperty +# 113| 14: [Property] RefProperty # 113| -1: [TypeMention] MyClass # 113| 3: [Getter] get_RefProperty # 113| 4: [RefExpr] ref ... # 113| 0: [SuppressNullableWarningExpr] ...! # 113| 0: [FieldAccess] access to field Property # 116| [Class] ToStringWithTypes -# 118| 5: [Field] a +# 118| 6: [Field] a # 118| -1: [TypeMention] MyStruct? # 118| 1: [TypeMention] MyStruct -# 119| 6: [Field] b +# 119| 7: [Field] b # 119| -1: [TypeMention] MyStruct[] # 119| 1: [TypeMention] MyStruct -# 120| 7: [Field] c +# 120| 8: [Field] c # 120| -1: [TypeMention] Nullable[] # 120| 1: [TypeMention] MyStruct? # 120| 1: [TypeMention] MyStruct -# 121| 8: [Field] d +# 121| 9: [Field] d # 121| -1: [TypeMention] Nullable[] # 121| 1: [TypeMention] MyStruct? # 121| 1: [TypeMention] MyStruct -# 123| 9: [Field] e +# 123| 10: [Field] e # 123| -1: [TypeMention] MyClass -# 124| 10: [Field] f +# 124| 11: [Field] f # 124| -1: [TypeMention] MyClass[] # 124| 1: [TypeMention] MyClass -# 125| 11: [Field] g +# 125| 12: [Field] g # 125| -1: [TypeMention] MyClass[] # 125| 1: [TypeMention] MyClass -# 126| 12: [Field] h +# 126| 13: [Field] h # 126| -1: [TypeMention] MyClass[] # 126| 1: [TypeMention] MyClass -# 128| 13: [Field] i +# 128| 14: [Field] i # 128| -1: [TypeMention] MyClass[,][][,,] # 128| 1: [TypeMention] MyClass -# 129| 14: [Field] j +# 129| 15: [Field] j # 129| -1: [TypeMention] MyClass[,,][,][] # 129| 1: [TypeMention] MyClass -# 130| 15: [Field] k +# 130| 16: [Field] k # 130| -1: [TypeMention] MyClass[,,,][][,][,,] # 130| 1: [TypeMention] MyClass -# 131| 16: [Field] l +# 131| 17: [Field] l # 131| -1: [TypeMention] MyClass[,,][,,,][][,] # 131| 1: [TypeMention] MyClass # 136| [Class] ToStringWithTypes2 -# 138| 5: [Field] a +# 138| 6: [Field] a # 138| -1: [TypeMention] MyStruct? # 138| 1: [TypeMention] MyStruct -# 139| 6: [Field] b +# 139| 7: [Field] b # 139| -1: [TypeMention] MyStruct[] # 139| 1: [TypeMention] MyStruct -# 140| 7: [Field] c +# 140| 8: [Field] c # 140| -1: [TypeMention] Nullable[] # 140| 1: [TypeMention] MyStruct? # 140| 1: [TypeMention] MyStruct -# 141| 8: [Field] d +# 141| 9: [Field] d # 141| -1: [TypeMention] Nullable[] # 141| 1: [TypeMention] MyStruct? # 141| 1: [TypeMention] MyStruct -# 143| 9: [Field] e +# 143| 10: [Field] e # 143| -1: [TypeMention] MyClass -# 144| 10: [Field] f +# 144| 11: [Field] f # 144| -1: [TypeMention] MyClass[] # 144| 1: [TypeMention] MyClass -# 145| 11: [Field] g +# 145| 12: [Field] g # 145| -1: [TypeMention] MyClass[] # 145| 1: [TypeMention] MyClass -# 146| 12: [Field] h +# 146| 13: [Field] h # 146| -1: [TypeMention] MyClass[] # 146| 1: [TypeMention] MyClass -# 148| 13: [Field] i +# 148| 14: [Field] i # 148| -1: [TypeMention] MyClass[,][][,,] # 148| 1: [TypeMention] MyClass -# 149| 14: [Field] j +# 149| 15: [Field] j # 149| -1: [TypeMention] MyClass[,,][,][] # 149| 1: [TypeMention] MyClass -# 150| 15: [Field] k +# 150| 16: [Field] k # 150| -1: [TypeMention] MyClass[,,,][][,][,,] # 150| 1: [TypeMention] MyClass -# 151| 16: [Field] l +# 151| 17: [Field] l # 151| -1: [TypeMention] MyClass[,,][,,,][][,] # 151| 1: [TypeMention] MyClass # 154| [Class] DisabledNullability -# 156| 5: [Field] f1 +# 156| 6: [Field] f1 # 156| -1: [TypeMention] MyClass -# 157| 6: [Property] P +# 157| 7: [Property] P # 157| -1: [TypeMention] MyClass # 157| 3: [Getter] get_P # 157| 4: [ObjectCreation] object creation of type MyClass # 157| 0: [TypeMention] MyClass -# 158| 7: [Method] Fn +# 158| 8: [Method] Fn # 158| -1: [TypeMention] MyClass #-----| 2: (Parameters) # 158| 0: [Parameter] p @@ -556,16 +556,16 @@ NullableRefTypes.cs: # 161| 0: [LocalVariableAccess] access to local variable a # 165| [Struct] MyStruct # 171| [Class] TestNullableFlowStates -# 173| 5: [Method] MaybeNull +# 173| 6: [Method] MaybeNull # 173| -1: [TypeMention] string -# 175| 6: [Method] Check +# 175| 7: [Method] Check # 175| -1: [TypeMention] Void #-----| 2: (Parameters) # 175| 0: [Parameter] isNull # 175| -1: [TypeMention] string -# 177| 7: [Method] Count +# 177| 8: [Method] Count # 177| -1: [TypeMention] int -# 179| 8: [Method] LoopUnrolling +# 179| 9: [Method] LoopUnrolling # 179| -1: [TypeMention] Void # 180| 4: [BlockStmt] {...} # 181| 0: [LocalVariableDeclStmt] ... ...; @@ -594,7 +594,7 @@ NullableRefTypes.cs: # 190| 3: [ExprStmt] ...; # 190| 0: [MethodCall] call to method Check # 190| 0: [LocalVariableAccess] access to local variable x -# 193| 9: [Method] ExceptionFlow +# 193| 10: [Method] ExceptionFlow # 193| -1: [TypeMention] Void # 194| 4: [BlockStmt] {...} # 195| 0: [LocalVariableDeclStmt] ... ...; @@ -615,7 +615,7 @@ NullableRefTypes.cs: # 206| 2: [ExprStmt] ...; # 206| 0: [MethodCall] call to method Check # 206| 0: [LocalVariableAccess] access to local variable y -# 209| 10: [Method] InvocationTest +# 209| 11: [Method] InvocationTest # 209| -1: [TypeMention] string #-----| 2: (Parameters) # 209| 0: [Parameter] o @@ -630,7 +630,7 @@ NullableRefTypes.cs: # 212| 1: [ReturnStmt] return ...; # 212| 0: [MethodCall] call to method ToString # 212| -1: [LocalVariableAccess] access to local variable t -# 215| 11: [Method] ElementTest +# 215| 12: [Method] ElementTest # 215| -1: [TypeMention] Void #-----| 2: (Parameters) # 215| 0: [Parameter] list @@ -663,13 +663,13 @@ NullableRefTypes.cs: # 220| 0: [LocalVariableAccess] access to local variable d # 220| 1: [FieldAccess] access to field Field # 220| -1: [MethodCall] call to method GetSelf -# 223| 12: [Method] GetSelf +# 223| 13: [Method] GetSelf # 223| -1: [TypeMention] TestNullableFlowStates -# 225| 13: [Field] Field +# 225| 14: [Field] Field # 225| -1: [TypeMention] string StaticLocalFunctions.cs: # 3| [Class] StaticLocalFunctions -# 5| 5: [Method] Fn +# 5| 6: [Method] Fn # 5| -1: [TypeMention] int #-----| 2: (Parameters) # 5| 0: [Parameter] x @@ -702,15 +702,15 @@ UnmanagedGenericStructs.cs: #-----| 1: (Type parameters) # 3| 0: [TypeParameter] T # 3| 1: [TypeParameter] U -# 5| 5: [Field] id +# 5| 6: [Field] id # 5| -1: [TypeMention] int -# 6| 6: [Field] value1 +# 6| 7: [Field] value1 # 6| -1: [TypeMention] T -# 7| 7: [Field] value2 +# 7| 8: [Field] value2 # 7| -1: [TypeMention] U UsingDeclarations.cs: # 4| [Class] UsingDeclarations -# 6| 5: [Method] TestUsingDeclarations +# 6| 6: [Method] TestUsingDeclarations # 6| -1: [TypeMention] Void # 7| 4: [BlockStmt] {...} # 8| 0: [UsingDeclStmt] using ... ...; @@ -762,7 +762,7 @@ UsingDeclarations.cs: # 15| 1: [EmptyStmt] ; patterns.cs: # 3| [Class] Patterns -# 5| 5: [Method] IsPatterns +# 5| 6: [Method] IsPatterns # 5| -1: [TypeMention] Void # 6| 4: [BlockStmt] {...} # 7| 0: [LocalVariableDeclStmt] ... ...; @@ -836,7 +836,7 @@ patterns.cs: # 27| 3: [PropertyPatternExpr] { ... } # 27| 0: [DiscardPatternExpr,LabeledPatternExpr] _ # 28| 1: [BlockStmt] {...} -# 32| 6: [Method] SwitchStatements +# 32| 7: [Method] SwitchStatements # 32| -1: [TypeMention] Void # 33| 4: [BlockStmt] {...} # 34| 0: [LocalVariableDeclStmt] ... ...; @@ -1019,7 +1019,7 @@ patterns.cs: # 94| 0: [ConstantPatternExpr,IntLiteral] 2 # 94| 1: [DiscardPatternExpr] _ # 94| 3: [BreakStmt] break; -# 98| 7: [Method] Expressions +# 98| 8: [Method] Expressions # 98| -1: [TypeMention] Void #-----| 2: (Parameters) # 98| 0: [Parameter] x @@ -1108,7 +1108,7 @@ patterns.cs: # 119| 2: [TupleExpr] (..., ...) # 119| 0: [IntLiteral] 0 # 119| 1: [IntLiteral] 0 -# 123| 8: [Method] Expressions2 +# 123| 9: [Method] Expressions2 # 123| -1: [TypeMention] Void #-----| 2: (Parameters) # 123| 0: [Parameter] o @@ -1203,18 +1203,18 @@ patterns.cs: # 147| -1: [TypeAccess] access to type Console # 147| 0: [TypeMention] Console # 147| 0: [StringLiteralUtf16] "Invalid operation" -# 151| 9: [Struct] MyStruct -# 153| 5: [Field] X +# 151| 10: [Struct] MyStruct +# 153| 6: [Field] X # 153| -1: [TypeMention] int -# 154| 6: [Property] Y +# 154| 7: [Property] Y # 154| -1: [TypeMention] int # 154| 3: [Getter] get_Y # 154| 4: [IntLiteral] 10 -# 156| 7: [Property] S +# 156| 8: [Property] S # 156| -1: [TypeMention] MyStruct # 156| 3: [Getter] get_S # 156| 4: [ThisAccess] this access -# 158| 8: [Method] Deconstruct +# 158| 9: [Method] Deconstruct # 158| -1: [TypeMention] Void #-----| 2: (Parameters) # 158| 0: [Parameter] x @@ -1230,12 +1230,12 @@ patterns.cs: # 161| 0: [AssignExpr] ... = ... # 161| 0: [ParameterAccess] access to parameter y # 161| 1: [PropertyCall] access to property Y -# 164| 9: [Method] Deconstruct +# 164| 10: [Method] Deconstruct # 164| -1: [TypeMention] Void # 165| 4: [BlockStmt] {...} ranges.cs: # 3| [Class] Ranges -# 5| 5: [Method] F +# 5| 6: [Method] F # 5| -1: [TypeMention] Void # 6| 4: [BlockStmt] {...} # 7| 0: [LocalVariableDeclStmt] ... ...; diff --git a/csharp/ql/test/library-tests/csharp9-standalone/globalStmt.expected b/csharp/ql/test/library-tests/csharp9-standalone/globalStmt.expected index eaa01512c18d..a8db6605f8d8 100644 --- a/csharp/ql/test/library-tests/csharp9-standalone/globalStmt.expected +++ b/csharp/ql/test/library-tests/csharp9-standalone/globalStmt.expected @@ -7,4 +7,6 @@ globalBlock | GlobalStmt.cs:5:1:24:0 | {...} | GlobalStmt.cs:5:1:24:0 |
$ | GlobalStmt.cs:1:1:1:0 | args | GlobalStmt.cs:5:1:24:0 | Program | methods | GlobalStmt.cs:5:1:24:0 |
$ | entry | +| GlobalStmt.cs:5:1:24:0 | | non-entry | +| GlobalStmt.cs:17:14:17:17 | | non-entry | | GlobalStmt.cs:19:8:19:9 | M1 | non-entry | diff --git a/csharp/ql/test/library-tests/csharp9/FunctionPointer.expected b/csharp/ql/test/library-tests/csharp9/FunctionPointer.expected index 1bf279341ce8..6d7e7ca40ef0 100644 --- a/csharp/ql/test/library-tests/csharp9/FunctionPointer.expected +++ b/csharp/ql/test/library-tests/csharp9/FunctionPointer.expected @@ -10,6 +10,7 @@ type | file://:0:0:0:0 | delegate* stdcall | Void | StdCallCallingConvention | | file://:0:0:0:0 | delegate* unmanaged | int | UnmanagedCallingConvention | | file://:0:0:0:0 | delegate* unmanaged | Void | UnmanagedCallingConvention | +| file://:0:0:0:0 | delegate* unmanaged | Void | UnmanagedCallingConvention | | file://:0:0:0:0 | delegate* unmanaged | Void | UnmanagedCallingConvention | unmanagedCallingConvention parameter @@ -28,6 +29,7 @@ parameter | file://:0:0:0:0 | delegate* stdcall | 2 | file://:0:0:0:0 | `2 | T | | file://:0:0:0:0 | delegate* unmanaged | 0 | file://:0:0:0:0 | | IntPtr! | | file://:0:0:0:0 | delegate* unmanaged | 0 | file://:0:0:0:0 | | IntPtr! | +| file://:0:0:0:0 | delegate* unmanaged | 0 | file://:0:0:0:0 | | MarkCrossReferencesArgs*! | invocation | FunctionPointer.cs:17:21:17:43 | function pointer call | | FunctionPointer.cs:23:13:23:44 | function pointer call | diff --git a/csharp/ql/test/library-tests/csharp9/PrintAst.expected b/csharp/ql/test/library-tests/csharp9/PrintAst.expected index e3b89de20096..459349fb9fc8 100644 --- a/csharp/ql/test/library-tests/csharp9/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp9/PrintAst.expected @@ -1,17 +1,17 @@ AnonymousObjectCreation.cs: # 5| [Class] AnonObj -# 7| 5: [Field] l +# 7| 6: [Field] l # 7| -1: [TypeMention] List # 7| 1: [TypeMention] AnonObj # 7| 1: [CastExpr] (...) ... # 7| 1: [ObjectCreation] object creation of type List -# 9| 6: [Property] Prop1 +# 9| 7: [Property] Prop1 # 9| -1: [TypeMention] int # 9| 3: [Getter] get_Prop1 # 9| 4: [Setter] set_Prop1 #-----| 2: (Parameters) # 9| 0: [Parameter] value -# 11| 7: [Method] M1 +# 11| 8: [Method] M1 # 11| -1: [TypeMention] AnonObj #-----| 2: (Parameters) # 11| 0: [Parameter] t @@ -29,17 +29,17 @@ AnonymousObjectCreation.cs: # 14| 1: [ReturnStmt] return ...; # 14| 0: [CastExpr] (...) ... # 14| 1: [ObjectCreation] object creation of type AnonObj -# 17| 8: [DelegateType] D +# 17| 9: [DelegateType] D #-----| 2: (Parameters) # 17| 0: [Parameter] x # 17| -1: [TypeMention] int -# 19| 9: [Method] M2 +# 19| 10: [Method] M2 # 19| -1: [TypeMention] Void #-----| 2: (Parameters) # 19| 0: [Parameter] x # 19| -1: [TypeMention] int # 19| 4: [BlockStmt] {...} -# 21| 10: [Method] GetM +# 21| 11: [Method] GetM # 21| -1: [TypeMention] D # 21| 4: [BlockStmt] {...} # 21| 0: [ReturnStmt] return ...; @@ -47,7 +47,7 @@ AnonymousObjectCreation.cs: # 21| 1: [ExplicitDelegateCreation] delegate creation of type D # 21| 0: [ImplicitDelegateCreation] delegate creation of type D # 21| 0: [MethodAccess] access to method M2 -# 23| 11: [Method] MethodAdd +# 23| 12: [Method] MethodAdd # 23| -1: [TypeMention] Void # 24| 4: [BlockStmt] {...} # 25| 0: [LocalVariableDeclStmt] ... ...; @@ -59,13 +59,13 @@ AnonymousObjectCreation.cs: # 25| 1: [ObjectCreation] object creation of type List BinaryPattern.cs: # 3| [Class] BinaryPattern -# 5| 5: [Property] P1 +# 5| 6: [Property] P1 # 5| -1: [TypeMention] int # 5| 3: [Getter] get_P1 # 5| 4: [Setter] set_P1 #-----| 2: (Parameters) # 5| 0: [Parameter] value -# 7| 6: [Method] M1 +# 7| 7: [Method] M1 # 7| -1: [TypeMention] bool #-----| 2: (Parameters) # 7| 0: [Parameter] c @@ -75,7 +75,7 @@ BinaryPattern.cs: # 8| 1: [OrPatternExpr] ... or ... # 8| 0: [CharLiteral,ConstantPatternExpr] a # 8| 1: [CharLiteral,ConstantPatternExpr] b -# 9| 7: [Method] M2 +# 9| 8: [Method] M2 # 9| -1: [TypeMention] bool #-----| 2: (Parameters) # 9| 0: [Parameter] c @@ -91,7 +91,7 @@ BinaryPattern.cs: # 10| 0: [TypeMention] BinaryPattern # 10| 3: [PropertyPatternExpr] { ... } # 10| 0: [ConstantPatternExpr,IntLiteral,LabeledPatternExpr] 1 -# 11| 8: [Method] M3 +# 11| 9: [Method] M3 # 11| -1: [TypeMention] bool #-----| 2: (Parameters) # 11| 0: [Parameter] c @@ -103,7 +103,7 @@ BinaryPattern.cs: # 12| 0: [TypeMention] object # 12| 1: [VariablePatternExpr] BinaryPattern u # 12| 0: [TypeMention] BinaryPattern -# 14| 9: [Method] M4 +# 14| 10: [Method] M4 # 14| -1: [TypeMention] string #-----| 2: (Parameters) # 14| 0: [Parameter] i @@ -122,7 +122,7 @@ BinaryPattern.cs: # 19| 2: [StringLiteralUtf16] "other" CovariantReturn.cs: # 1| [Class] A -# 3| 5: [Method] M1 +# 3| 6: [Method] M1 # 3| -1: [TypeMention] A # 3| 4: [BlockStmt] {...} # 3| 0: [ThrowStmt] throw ...; @@ -130,14 +130,14 @@ CovariantReturn.cs: # 6| [Class] B #-----| 3: (Base types) # 6| 0: [TypeMention] A -# 8| 5: [Method] M1 +# 8| 6: [Method] M1 # 8| -1: [TypeMention] B # 8| 4: [BlockStmt] {...} # 8| 0: [ThrowStmt] throw ...; # 8| 0: [NullLiteral] null Discard.cs: # 3| [Class] Discard -# 5| 5: [Method] M1 +# 5| 6: [Method] M1 # 5| -1: [TypeMention] Void # 6| 4: [BlockStmt] {...} # 7| 0: [LocalVariableDeclStmt] ... ...; @@ -227,7 +227,7 @@ ForeachExtension.cs: # 14| 0: [YieldReturnStmt] yield return ...; # 14| 0: [LocalVariableAccess] access to local variable i # 19| [Class] Program -# 21| 5: [Method] Main +# 21| 6: [Method] Main # 21| -1: [TypeMention] Task # 22| 4: [BlockStmt] {...} # 23| 0: [LocalVariableDeclStmt] ... ...; @@ -273,7 +273,7 @@ ForeachExtension.cs: # 37| 1: [IntLiteral] 2 # 37| 2: [IntLiteral] 3 # 38| 2: [BlockStmt] {...} -# 42| 6: [Method] GetAsyncEnumerator +# 42| 7: [Method] GetAsyncEnumerator # 42| -1: [TypeMention] IAsyncEnumerator # 42| 1: [TypeMention] int # 43| 4: [BlockStmt] {...} @@ -289,7 +289,7 @@ ForeachExtension.cs: # 46| 0: [IntLiteral] 1 FunctionPointer.cs: # 3| [Class] FnPointer -# 5| 5: [Class] Program +# 5| 6: [Class] Program # 7| 5: [Field] pointer # 7| -1: [TypeMention] delegate* default # 7| 1: [AddressOfExpr] &... @@ -407,7 +407,7 @@ FunctionPointer.cs: # 48| 0: [TypeMention] A InitOnlyProperty.cs: # 3| [Class] Base -# 5| 5: [Property] Prop0 +# 5| 6: [Property] Prop0 # 5| -1: [TypeMention] int # 5| 3: [Getter] get_Prop0 # 5| 4: [BlockStmt] {...} @@ -421,13 +421,13 @@ InitOnlyProperty.cs: # 5| 0: [AssignExpr] ... = ... # 5| 0: [PropertyCall] access to property Prop1 # 5| 1: [ParameterAccess] access to parameter value -# 6| 6: [Property] Prop1 +# 6| 7: [Property] Prop1 # 6| -1: [TypeMention] int # 6| 3: [Getter] get_Prop1 # 6| 4: [Setter] set_Prop1 #-----| 2: (Parameters) # 6| 0: [Parameter] value -# 7| 7: [Property] Prop2 +# 7| 8: [Property] Prop2 # 7| -1: [TypeMention] int # 7| 3: [Getter] get_Prop2 # 7| 4: [Setter] set_Prop2 @@ -436,13 +436,13 @@ InitOnlyProperty.cs: # 11| [Class] Derived #-----| 3: (Base types) # 11| 0: [TypeMention] Base -# 13| 5: [Property] Prop1 +# 13| 6: [Property] Prop1 # 13| -1: [TypeMention] int # 13| 3: [Getter] get_Prop1 # 13| 4: [Setter] set_Prop1 #-----| 2: (Parameters) # 13| 0: [Parameter] value -# 14| 6: [Property] Prop2 +# 14| 7: [Property] Prop2 # 14| -1: [TypeMention] int # 16| 3: [Getter] get_Prop2 # 16| 4: [BlockStmt] {...} @@ -466,7 +466,7 @@ InitOnlyProperty.cs: # 21| 0: [PropertyCall] access to property Prop0 # 21| 1: [ParameterAccess] access to parameter value # 26| [Class] C1 -# 28| 5: [Method] M1 +# 28| 6: [Method] M1 # 28| -1: [TypeMention] Void # 29| 4: [BlockStmt] {...} # 30| 0: [LocalVariableDeclStmt] ... ...; @@ -490,7 +490,7 @@ IsExternalInit.cs: # 6| 1: [Class] IsExternalInit LambdaModifier.cs: # 4| [Class] Class1 -# 6| 5: [Method] M1 +# 6| 6: [Method] M1 # 6| -1: [TypeMention] Task # 7| 4: [BlockStmt] {...} # 8| 0: [LocalFunctionStmt] m(...) @@ -550,7 +550,7 @@ LambdaModifier.cs: # 15| 0: [TypeMention] Task LocalFunction.cs: # 4| [Class] LocalFunction -# 6| 5: [Method] M1 +# 6| 6: [Method] M1 # 6| -1: [TypeMention] Task # 7| 4: [BlockStmt] {...} # 8| 0: [LocalVariableDeclStmt] ... ...; @@ -578,7 +578,7 @@ LocalFunction.cs: # 14| 0: [IntLiteral] 2 # 16| 3: [LocalFunctionStmt] localExtern(...) # 16| 0: [LocalFunction] localExtern -# 19| 6: [Method] M2 +# 19| 7: [Method] M2 # 19| -1: [TypeMention] Void # 20| 4: [BlockStmt] {...} # 21| 0: [LocalFunctionStmt] dup(...) @@ -610,7 +610,7 @@ LocalFunction.cs: # 27| 1: [IntLiteral] 42 NativeInt.cs: # 3| [Class] NativeInt -# 5| 5: [Method] M1 +# 5| 6: [Method] M1 # 5| -1: [TypeMention] Void #-----| 2: (Parameters) # 5| 0: [Parameter] j @@ -654,7 +654,7 @@ NativeInt.cs: # 12| 0: [TypeAccess] access to type IntPtr # 12| 0: [TypeMention] IntPtr # 12| 1: [IntLiteral] 42 -# 15| 6: [Method] M2 +# 15| 7: [Method] M2 # 15| -1: [TypeMention] Void # 16| 4: [BlockStmt] {...} # 17| 0: [LocalVariableDeclStmt] ... ...; @@ -718,7 +718,7 @@ NativeInt.cs: ParenthesizedPattern.cs: # 3| [Class] T # 5| [Class] ParenthesizedPattern -# 7| 5: [Method] M1 +# 7| 6: [Method] M1 # 7| -1: [TypeMention] Void #-----| 2: (Parameters) # 7| 0: [Parameter] o @@ -738,7 +738,7 @@ ParenthesizedPattern.cs: # 13| 0: [VariablePatternExpr] Object p2 # 13| 3: [PropertyPatternExpr] { ... } # 14| 1: [BlockStmt] {...} -# 18| 6: [Method] M2 +# 18| 7: [Method] M2 # 18| -1: [TypeMention] Void #-----| 2: (Parameters) # 18| 0: [Parameter] o @@ -778,23 +778,23 @@ ParenthesizedPattern.cs: # 26| 2: [IntLiteral] 5 Record.cs: # 4| [RecordClass] Person -# 4| 11: [NEOperator] != +# 4| 12: [NEOperator] != #-----| 2: (Parameters) # 4| 0: [Parameter] left # 4| 1: [Parameter] right -# 4| 12: [EQOperator] == +# 4| 13: [EQOperator] == #-----| 2: (Parameters) # 4| 0: [Parameter] left # 4| 1: [Parameter] right -# 4| 13: [Property] EqualityContract +# 4| 14: [Property] EqualityContract # 4| 3: [Getter] get_EqualityContract -# 6| 14: [Property] LastName +# 6| 15: [Property] LastName # 6| -1: [TypeMention] string # 6| 3: [Getter] get_LastName -# 7| 15: [Property] FirstName +# 7| 16: [Property] FirstName # 7| -1: [TypeMention] string # 7| 3: [Getter] get_FirstName -# 9| 16: [InstanceConstructor] Person +# 9| 17: [InstanceConstructor] Person #-----| 2: (Parameters) # 9| 0: [Parameter] first # 9| -1: [TypeMention] string @@ -808,20 +808,20 @@ Record.cs: # 9| 0: [ParameterAccess] access to parameter first # 9| 1: [ParameterAccess] access to parameter last # 12| [RecordClass] Teacher -# 12| 12: [NEOperator] != +# 12| 13: [NEOperator] != #-----| 2: (Parameters) # 12| 0: [Parameter] left # 12| 1: [Parameter] right -# 12| 13: [EQOperator] == +# 12| 14: [EQOperator] == #-----| 2: (Parameters) # 12| 0: [Parameter] left # 12| 1: [Parameter] right -# 12| 14: [Property] EqualityContract +# 12| 15: [Property] EqualityContract # 12| 3: [Getter] get_EqualityContract -# 14| 15: [Property] Subject +# 14| 16: [Property] Subject # 14| -1: [TypeMention] string # 14| 3: [Getter] get_Subject -# 16| 16: [InstanceConstructor] Teacher +# 16| 17: [InstanceConstructor] Teacher #-----| 2: (Parameters) # 16| 0: [Parameter] first # 16| -1: [TypeMention] string @@ -836,20 +836,20 @@ Record.cs: # 17| 0: [PropertyCall] access to property Subject # 17| 1: [ParameterAccess] access to parameter sub # 20| [RecordClass] Student -# 20| 12: [NEOperator] != +# 20| 13: [NEOperator] != #-----| 2: (Parameters) # 20| 0: [Parameter] left # 20| 1: [Parameter] right -# 20| 13: [EQOperator] == +# 20| 14: [EQOperator] == #-----| 2: (Parameters) # 20| 0: [Parameter] left # 20| 1: [Parameter] right -# 20| 14: [Property] EqualityContract +# 20| 15: [Property] EqualityContract # 20| 3: [Getter] get_EqualityContract -# 22| 15: [Property] Level +# 22| 16: [Property] Level # 22| -1: [TypeMention] int # 22| 3: [Getter] get_Level -# 24| 16: [InstanceConstructor] Student +# 24| 17: [InstanceConstructor] Student #-----| 2: (Parameters) # 24| 0: [Parameter] first # 24| -1: [TypeMention] string @@ -864,44 +864,44 @@ Record.cs: # 24| 0: [PropertyCall] access to property Level # 24| 1: [ParameterAccess] access to parameter level # 27| [RecordClass] Person1 -# 27| 12: [NEOperator] != +# 27| 13: [NEOperator] != #-----| 2: (Parameters) # 27| 0: [Parameter] left # 27| 1: [Parameter] right -# 27| 13: [EQOperator] == +# 27| 14: [EQOperator] == #-----| 2: (Parameters) # 27| 0: [Parameter] left # 27| 1: [Parameter] right -# 27| 14: [Property] EqualityContract +# 27| 15: [Property] EqualityContract # 27| 3: [Getter] get_EqualityContract -# 27| 15: [InstanceConstructor,PrimaryConstructor] Person1 +# 27| 16: [InstanceConstructor,PrimaryConstructor] Person1 #-----| 2: (Parameters) # 27| 0: [Parameter] FirstName # 27| -1: [TypeMention] string # 27| 1: [Parameter] LastName # 27| -1: [TypeMention] string -# 27| 16: [Property] FirstName +# 27| 17: [Property] FirstName # 27| 3: [Getter] get_FirstName # 27| 4: [Setter] set_FirstName #-----| 2: (Parameters) # 27| 0: [Parameter] value -# 27| 17: [Property] LastName +# 27| 18: [Property] LastName # 27| 3: [Getter] get_LastName # 27| 4: [Setter] set_LastName #-----| 2: (Parameters) # 27| 0: [Parameter] value # 29| [RecordClass] Teacher1 -# 29| 13: [NEOperator] != +# 29| 14: [NEOperator] != #-----| 2: (Parameters) # 29| 0: [Parameter] left # 29| 1: [Parameter] right -# 29| 14: [EQOperator] == +# 29| 15: [EQOperator] == #-----| 2: (Parameters) # 29| 0: [Parameter] left # 29| 1: [Parameter] right -# 29| 15: [Property] EqualityContract +# 29| 16: [Property] EqualityContract # 29| 3: [Getter] get_EqualityContract -# 29| 16: [InstanceConstructor,PrimaryConstructor] Teacher1 +# 29| 17: [InstanceConstructor,PrimaryConstructor] Teacher1 #-----| 2: (Parameters) # 29| 0: [Parameter] FirstName # 29| -1: [TypeMention] string @@ -912,23 +912,23 @@ Record.cs: # 30| 3: [ConstructorInitializer] call to constructor Person1 # 30| 0: [ParameterAccess] access to parameter FirstName # 30| 1: [ParameterAccess] access to parameter LastName -# 29| 17: [Property] Subject +# 29| 18: [Property] Subject # 29| 3: [Getter] get_Subject # 29| 4: [Setter] set_Subject #-----| 2: (Parameters) # 29| 0: [Parameter] value # 32| [RecordClass] Student1 -# 32| 13: [NEOperator] != +# 32| 14: [NEOperator] != #-----| 2: (Parameters) # 32| 0: [Parameter] left # 32| 1: [Parameter] right -# 32| 14: [EQOperator] == +# 32| 15: [EQOperator] == #-----| 2: (Parameters) # 32| 0: [Parameter] left # 32| 1: [Parameter] right -# 32| 15: [Property] EqualityContract +# 32| 16: [Property] EqualityContract # 32| 3: [Getter] get_EqualityContract -# 32| 16: [InstanceConstructor,PrimaryConstructor] Student1 +# 32| 17: [InstanceConstructor,PrimaryConstructor] Student1 #-----| 2: (Parameters) # 32| 0: [Parameter] FirstName # 32| -1: [TypeMention] string @@ -939,61 +939,61 @@ Record.cs: # 33| 3: [ConstructorInitializer] call to constructor Person1 # 33| 0: [ParameterAccess] access to parameter FirstName # 33| 1: [ParameterAccess] access to parameter LastName -# 32| 17: [Property] Level +# 32| 18: [Property] Level # 32| 3: [Getter] get_Level # 32| 4: [Setter] set_Level #-----| 2: (Parameters) # 32| 0: [Parameter] value # 35| [RecordClass] Pet -# 35| 12: [NEOperator] != +# 35| 13: [NEOperator] != #-----| 2: (Parameters) # 35| 0: [Parameter] left # 35| 1: [Parameter] right -# 35| 13: [EQOperator] == +# 35| 14: [EQOperator] == #-----| 2: (Parameters) # 35| 0: [Parameter] left # 35| 1: [Parameter] right -# 35| 14: [Property] EqualityContract +# 35| 15: [Property] EqualityContract # 35| 3: [Getter] get_EqualityContract -# 35| 15: [InstanceConstructor,PrimaryConstructor] Pet +# 35| 16: [InstanceConstructor,PrimaryConstructor] Pet #-----| 2: (Parameters) # 35| 0: [Parameter] Name # 35| -1: [TypeMention] string -# 35| 16: [Property] Name +# 35| 17: [Property] Name # 35| 3: [Getter] get_Name # 35| 4: [Setter] set_Name #-----| 2: (Parameters) # 35| 0: [Parameter] value -# 37| 17: [Method] ShredTheFurniture +# 37| 18: [Method] ShredTheFurniture # 37| -1: [TypeMention] Void # 38| 4: [MethodCall] call to method WriteLine # 38| -1: [TypeAccess] access to type Console # 38| 0: [TypeMention] Console # 38| 0: [StringLiteralUtf16] "Shredding furniture" # 41| [RecordClass] Dog -# 41| 12: [NEOperator] != +# 41| 13: [NEOperator] != #-----| 2: (Parameters) # 41| 0: [Parameter] left # 41| 1: [Parameter] right -# 41| 13: [EQOperator] == +# 41| 14: [EQOperator] == #-----| 2: (Parameters) # 41| 0: [Parameter] left # 41| 1: [Parameter] right -# 41| 14: [InstanceConstructor,PrimaryConstructor] Dog +# 41| 15: [InstanceConstructor,PrimaryConstructor] Dog #-----| 2: (Parameters) # 41| 0: [Parameter] Name # 41| -1: [TypeMention] string # 41| 3: [ConstructorInitializer] call to constructor Pet # 41| 0: [ParameterAccess] access to parameter Name -# 41| 15: [Property] EqualityContract +# 41| 16: [Property] EqualityContract # 41| 3: [Getter] get_EqualityContract -# 43| 16: [Method] WagTail +# 43| 17: [Method] WagTail # 43| -1: [TypeMention] Void # 44| 4: [MethodCall] call to method WriteLine # 44| -1: [TypeAccess] access to type Console # 44| 0: [TypeMention] Console # 44| 0: [StringLiteralUtf16] "It's tail wagging time" -# 46| 17: [Method] ToString +# 46| 18: [Method] ToString # 46| -1: [TypeMention] string # 47| 4: [BlockStmt] {...} # 48| 0: [LocalVariableDeclStmt] ... ...; @@ -1013,37 +1013,37 @@ Record.cs: # 50| -1: [LocalVariableAccess] access to local variable s # 50| 1: [StringLiteralUtf16] " is a dog" # 54| [RecordClass] R1 -# 54| 12: [NEOperator] != +# 54| 13: [NEOperator] != #-----| 2: (Parameters) # 54| 0: [Parameter] left # 54| 1: [Parameter] right -# 54| 13: [EQOperator] == +# 54| 14: [EQOperator] == #-----| 2: (Parameters) # 54| 0: [Parameter] left # 54| 1: [Parameter] right -# 54| 14: [Property] EqualityContract +# 54| 15: [Property] EqualityContract # 54| 3: [Getter] get_EqualityContract -# 54| 15: [InstanceConstructor,PrimaryConstructor] R1 +# 54| 16: [InstanceConstructor,PrimaryConstructor] R1 #-----| 2: (Parameters) # 54| 0: [Parameter] A # 54| -1: [TypeMention] string -# 54| 16: [Property] A +# 54| 17: [Property] A # 54| 3: [Getter] get_A # 54| 4: [Setter] set_A #-----| 2: (Parameters) # 54| 0: [Parameter] value # 56| [RecordClass] R2 -# 56| 13: [NEOperator] != +# 56| 14: [NEOperator] != #-----| 2: (Parameters) # 56| 0: [Parameter] left # 56| 1: [Parameter] right -# 56| 14: [EQOperator] == +# 56| 15: [EQOperator] == #-----| 2: (Parameters) # 56| 0: [Parameter] left # 56| 1: [Parameter] right -# 56| 15: [Property] EqualityContract +# 56| 16: [Property] EqualityContract # 56| 3: [Getter] get_EqualityContract -# 56| 16: [InstanceConstructor,PrimaryConstructor] R2 +# 56| 17: [InstanceConstructor,PrimaryConstructor] R2 #-----| 2: (Parameters) # 56| 0: [Parameter] A # 56| -1: [TypeMention] string @@ -1051,13 +1051,13 @@ Record.cs: # 56| -1: [TypeMention] string # 56| 3: [ConstructorInitializer] call to constructor R1 # 56| 0: [ParameterAccess] access to parameter A -# 56| 17: [Property] B +# 56| 18: [Property] B # 56| 3: [Getter] get_B # 56| 4: [Setter] set_B #-----| 2: (Parameters) # 56| 0: [Parameter] value # 58| [Class] Record1 -# 60| 5: [Method] M1 +# 60| 6: [Method] M1 # 60| -1: [TypeMention] Void # 61| 4: [BlockStmt] {...} # 62| 0: [LocalVariableDeclStmt] ... ...; @@ -1084,7 +1084,7 @@ Record.cs: # 65| 0: [OperatorCall] call to operator == # 65| 0: [LocalVariableAccess] access to local variable student # 65| 1: [LocalVariableAccess] access to local variable person -# 68| 6: [Method] M2 +# 68| 7: [Method] M2 # 68| -1: [TypeMention] Void # 69| 4: [BlockStmt] {...} # 70| 0: [LocalVariableDeclStmt] ... ...; @@ -1140,7 +1140,7 @@ Record.cs: # 77| 1: [WithExpr] ... with { ... } # 77| 0: [LocalVariableAccess] access to local variable p1 # 77| 1: [ObjectInitializer] { ..., ... } -# 80| 7: [Method] M3 +# 80| 8: [Method] M3 # 80| -1: [TypeMention] Void # 81| 4: [BlockStmt] {...} # 82| 0: [LocalVariableDeclStmt] ... ...; @@ -1168,7 +1168,7 @@ Record.cs: # 84| 1: [StringLiteralUtf16] "C" RelationalPattern.cs: # 3| [Class] RelationalPattern -# 5| 5: [Method] M1 +# 5| 6: [Method] M1 # 5| -1: [TypeMention] bool #-----| 2: (Parameters) # 5| 0: [Parameter] c @@ -1177,7 +1177,7 @@ RelationalPattern.cs: # 6| 0: [ParameterAccess] access to parameter c # 6| 1: [GEPattern] >= ... # 6| 0: [CharLiteral] a -# 7| 6: [Method] M2 +# 7| 7: [Method] M2 # 7| -1: [TypeMention] bool #-----| 2: (Parameters) # 7| 0: [Parameter] c @@ -1186,7 +1186,7 @@ RelationalPattern.cs: # 8| 0: [ParameterAccess] access to parameter c # 8| 1: [GTPattern] > ... # 8| 0: [CharLiteral] a -# 9| 7: [Method] M3 +# 9| 8: [Method] M3 # 9| -1: [TypeMention] bool #-----| 2: (Parameters) # 9| 0: [Parameter] c @@ -1195,7 +1195,7 @@ RelationalPattern.cs: # 10| 0: [ParameterAccess] access to parameter c # 10| 1: [LEPattern] <= ... # 10| 0: [CharLiteral] a -# 11| 8: [Method] M4 +# 11| 9: [Method] M4 # 11| -1: [TypeMention] bool #-----| 2: (Parameters) # 11| 0: [Parameter] c @@ -1204,7 +1204,7 @@ RelationalPattern.cs: # 12| 0: [ParameterAccess] access to parameter c # 12| 1: [LTPattern] < ... # 12| 0: [CharLiteral] a -# 14| 9: [Method] M5 +# 14| 10: [Method] M5 # 14| -1: [TypeMention] string #-----| 2: (Parameters) # 14| 0: [Parameter] i @@ -1225,7 +1225,7 @@ RelationalPattern.cs: # 20| 2: [StringLiteralUtf16] "other" TargetType.cs: # 5| [Class] TargetType -# 7| 5: [Method] M2 +# 7| 6: [Method] M2 # 7| -1: [TypeMention] Void # 8| 4: [BlockStmt] {...} # 9| 0: [LocalVariableDeclStmt] ... ...; @@ -1356,7 +1356,7 @@ TargetType.cs: # 36| 0: [ObjectCreation] object creation of type TargetType # 36| 0: [TypeMention] TargetType # 37| 2: [IntLiteral] 12 -# 40| 6: [ImplicitConversionOperator] implicit conversion +# 40| 7: [ImplicitConversionOperator] implicit conversion # 40| -1: [TypeMention] int #-----| 2: (Parameters) # 40| 0: [Parameter] d @@ -1365,14 +1365,14 @@ TargetType.cs: TypeParameterNullability.cs: # 1| [Interface] I1 # 3| [Class] A2 -# 5| 5: [Method] F1`1 +# 5| 6: [Method] F1`1 # 5| -1: [TypeMention] Void #-----| 1: (Type parameters) # 5| 0: [TypeParameter] T #-----| 2: (Parameters) # 5| 0: [Parameter] t # 5| 4: [BlockStmt] {...} -# 6| 6: [Method] F2`1 +# 6| 7: [Method] F2`1 # 6| -1: [TypeMention] Void #-----| 1: (Type parameters) # 6| 0: [TypeParameter] T @@ -1381,28 +1381,28 @@ TypeParameterNullability.cs: # 6| -1: [TypeMention] T? # 6| 1: [TypeMention] T # 6| 4: [BlockStmt] {...} -# 7| 7: [Method] F3`1 +# 7| 8: [Method] F3`1 # 7| -1: [TypeMention] Void #-----| 1: (Type parameters) # 7| 0: [TypeParameter] T #-----| 2: (Parameters) # 7| 0: [Parameter] t # 7| 4: [BlockStmt] {...} -# 8| 8: [Method] F4`1 +# 8| 9: [Method] F4`1 # 8| -1: [TypeMention] Void #-----| 1: (Type parameters) # 8| 0: [TypeParameter] T #-----| 2: (Parameters) # 8| 0: [Parameter] t # 8| 4: [BlockStmt] {...} -# 9| 9: [Method] F5`1 +# 9| 10: [Method] F5`1 # 9| -1: [TypeMention] Void #-----| 1: (Type parameters) # 9| 0: [TypeParameter] T #-----| 2: (Parameters) # 9| 0: [Parameter] t # 9| 4: [BlockStmt] {...} -# 10| 10: [Method] F6`1 +# 10| 11: [Method] F6`1 # 10| -1: [TypeMention] Void #-----| 1: (Type parameters) # 10| 0: [TypeParameter] T @@ -1414,14 +1414,14 @@ TypeParameterNullability.cs: # 13| [Class] B2 #-----| 3: (Base types) # 13| 0: [TypeMention] A2 -# 15| 5: [Method] F1`1 +# 15| 6: [Method] F1`1 # 15| -1: [TypeMention] Void #-----| 1: (Type parameters) # 15| 0: [TypeParameter] T #-----| 2: (Parameters) # 15| 0: [Parameter] t # 15| 4: [BlockStmt] {...} -# 16| 6: [Method] F2`1 +# 16| 7: [Method] F2`1 # 16| -1: [TypeMention] Void #-----| 1: (Type parameters) # 16| 0: [TypeParameter] T @@ -1430,21 +1430,21 @@ TypeParameterNullability.cs: # 16| -1: [TypeMention] T? # 16| 1: [TypeMention] T # 16| 4: [BlockStmt] {...} -# 17| 7: [Method] F3`1 +# 17| 8: [Method] F3`1 # 17| -1: [TypeMention] Void #-----| 1: (Type parameters) # 17| 0: [TypeParameter] T #-----| 2: (Parameters) # 17| 0: [Parameter] t # 17| 4: [BlockStmt] {...} -# 18| 8: [Method] F4`1 +# 18| 9: [Method] F4`1 # 18| -1: [TypeMention] Void #-----| 1: (Type parameters) # 18| 0: [TypeParameter] T #-----| 2: (Parameters) # 18| 0: [Parameter] t # 18| 4: [BlockStmt] {...} -# 19| 9: [Method] F6`1 +# 19| 10: [Method] F6`1 # 19| -1: [TypeMention] Void #-----| 1: (Type parameters) # 19| 0: [TypeParameter] T @@ -1456,7 +1456,7 @@ TypeParameterNullability.cs: # 22| [Class] B3 #-----| 3: (Base types) # 22| 0: [TypeMention] A2 -# 24| 5: [Method] F2`1 +# 24| 6: [Method] F2`1 # 24| -1: [TypeMention] Void #-----| 1: (Type parameters) # 24| 0: [TypeParameter] T @@ -1467,7 +1467,7 @@ TypeParameterNullability.cs: # 24| 4: [BlockStmt] {...} TypePattern.cs: # 3| [Class] TypePattern -# 5| 5: [Method] M1 +# 5| 6: [Method] M1 # 5| -1: [TypeMention] object #-----| 2: (Parameters) # 5| 0: [Parameter] o1 @@ -1516,13 +1516,13 @@ TypePattern.cs: # 14| 2: [LocalVariableAccess] access to local variable o UnaryPattern.cs: # 3| [Class] UnaryPattern -# 5| 5: [Property] P1 +# 5| 6: [Property] P1 # 5| -1: [TypeMention] int # 5| 3: [Getter] get_P1 # 5| 4: [Setter] set_P1 #-----| 2: (Parameters) # 5| 0: [Parameter] value -# 7| 6: [Method] M1 +# 7| 7: [Method] M1 # 7| -1: [TypeMention] bool #-----| 2: (Parameters) # 7| 0: [Parameter] c @@ -1531,7 +1531,7 @@ UnaryPattern.cs: # 8| 0: [ParameterAccess] access to parameter c # 8| 1: [NotPatternExpr] not ... # 8| 0: [CharLiteral,ConstantPatternExpr] a -# 9| 7: [Method] M2 +# 9| 8: [Method] M2 # 9| -1: [TypeMention] bool #-----| 2: (Parameters) # 9| 0: [Parameter] c @@ -1540,7 +1540,7 @@ UnaryPattern.cs: # 10| 0: [ParameterAccess] access to parameter c # 10| 1: [NotPatternExpr] not ... # 10| 0: [ConstantPatternExpr,NullLiteral] null -# 11| 8: [Method] M3 +# 11| 9: [Method] M3 # 11| -1: [TypeMention] bool #-----| 2: (Parameters) # 11| 0: [Parameter] c @@ -1554,7 +1554,7 @@ UnaryPattern.cs: # 12| 0: [TypeMention] UnaryPattern # 12| 3: [PropertyPatternExpr] { ... } # 12| 0: [ConstantPatternExpr,IntLiteral,LabeledPatternExpr] 1 -# 14| 9: [Method] M4 +# 14| 10: [Method] M4 # 14| -1: [TypeMention] string #-----| 2: (Parameters) # 14| 0: [Parameter] i diff --git a/csharp/ql/test/library-tests/csharp9/nativeInt.expected b/csharp/ql/test/library-tests/csharp9/nativeInt.expected index 2c63241e1fe5..7809e4f94871 100644 --- a/csharp/ql/test/library-tests/csharp9/nativeInt.expected +++ b/csharp/ql/test/library-tests/csharp9/nativeInt.expected @@ -1,4 +1,6 @@ | NativeInt.cs:3:14:3:22 | call to constructor Object | Object | +| NativeInt.cs:3:14:3:22 | call to method | Void | +| NativeInt.cs:3:14:3:22 | this access | NativeInt | | NativeInt.cs:7:14:7:14 | access to local variable x | IntPtr | | NativeInt.cs:7:14:7:18 | IntPtr x = ... | IntPtr | | NativeInt.cs:7:18:7:18 | (...) ... | IntPtr | diff --git a/csharp/ql/test/library-tests/csharp9/record.expected b/csharp/ql/test/library-tests/csharp9/record.expected index 9b6b5c005710..b34815c4f1a1 100644 --- a/csharp/ql/test/library-tests/csharp9/record.expected +++ b/csharp/ql/test/library-tests/csharp9/record.expected @@ -12,6 +12,7 @@ records members | Record.cs:4:1:10:1 | Person | Person.!=(Person, Person) | Record.cs:4:15:4:20 | | Record.cs:4:1:10:1 | Person | Person.$() | no location | +| Record.cs:4:1:10:1 | Person | Person.() | no location | | Record.cs:4:1:10:1 | Person | Person.==(Person, Person) | Record.cs:4:15:4:20 | | Record.cs:4:1:10:1 | Person | Person.EqualityContract | Record.cs:4:15:4:20 | | Record.cs:4:1:10:1 | Person | Person.Equals(Person) | no location | @@ -30,6 +31,7 @@ members | Record.cs:4:1:10:1 | Person | System.Object.ReferenceEquals(object, object) | no location | | Record.cs:4:1:10:1 | Person | System.Object.~Object() | no location | | Record.cs:12:1:18:1 | Teacher | Person.!=(Person, Person) | Record.cs:4:15:4:20 | +| Record.cs:12:1:18:1 | Teacher | Person.() | no location | | Record.cs:12:1:18:1 | Teacher | Person.==(Person, Person) | Record.cs:4:15:4:20 | | Record.cs:12:1:18:1 | Teacher | Person.FirstName | Record.cs:7:19:7:27 | | Record.cs:12:1:18:1 | Teacher | Person.LastName | Record.cs:6:19:6:26 | @@ -43,6 +45,7 @@ members | Record.cs:12:1:18:1 | Teacher | System.Object.~Object() | no location | | Record.cs:12:1:18:1 | Teacher | Teacher.!=(Teacher, Teacher) | Record.cs:12:15:12:21 | | Record.cs:12:1:18:1 | Teacher | Teacher.$() | no location | +| Record.cs:12:1:18:1 | Teacher | Teacher.() | no location | | Record.cs:12:1:18:1 | Teacher | Teacher.==(Teacher, Teacher) | Record.cs:12:15:12:21 | | Record.cs:12:1:18:1 | Teacher | Teacher.EqualityContract | Record.cs:12:15:12:21 | | Record.cs:12:1:18:1 | Teacher | Teacher.Equals(Person) | no location | @@ -55,6 +58,7 @@ members | Record.cs:12:1:18:1 | Teacher | Teacher.Teacher(string, string, string) | Record.cs:16:12:16:18 | | Record.cs:12:1:18:1 | Teacher | Teacher.ToString() | no location | | Record.cs:20:1:25:1 | Student | Person.!=(Person, Person) | Record.cs:4:15:4:20 | +| Record.cs:20:1:25:1 | Student | Person.() | no location | | Record.cs:20:1:25:1 | Student | Person.==(Person, Person) | Record.cs:4:15:4:20 | | Record.cs:20:1:25:1 | Student | Person.FirstName | Record.cs:7:19:7:27 | | Record.cs:20:1:25:1 | Student | Person.LastName | Record.cs:6:19:6:26 | @@ -62,6 +66,7 @@ members | Record.cs:20:1:25:1 | Student | Person.Person(string, string) | Record.cs:9:12:9:17 | | Record.cs:20:1:25:1 | Student | Student.!=(Student, Student) | Record.cs:20:22:20:28 | | Record.cs:20:1:25:1 | Student | Student.$() | no location | +| Record.cs:20:1:25:1 | Student | Student.() | no location | | Record.cs:20:1:25:1 | Student | Student.==(Student, Student) | Record.cs:20:22:20:28 | | Record.cs:20:1:25:1 | Student | Student.EqualityContract | Record.cs:20:22:20:28 | | Record.cs:20:1:25:1 | Student | Student.Equals(Person) | no location | @@ -81,6 +86,7 @@ members | Record.cs:20:1:25:1 | Student | System.Object.~Object() | no location | | Record.cs:27:1:27:57 | Person1 | Person1.!=(Person1, Person1) | Record.cs:27:15:27:21 | | Record.cs:27:1:27:57 | Person1 | Person1.$() | no location | +| Record.cs:27:1:27:57 | Person1 | Person1.() | no location | | Record.cs:27:1:27:57 | Person1 | Person1.==(Person1, Person1) | Record.cs:27:15:27:21 | | Record.cs:27:1:27:57 | Person1 | Person1.Deconstruct(out string, out string) | no location | | Record.cs:27:1:27:57 | Person1 | Person1.EqualityContract | Record.cs:27:15:27:21 | @@ -100,6 +106,7 @@ members | Record.cs:27:1:27:57 | Person1 | System.Object.ReferenceEquals(object, object) | no location | | Record.cs:27:1:27:57 | Person1 | System.Object.~Object() | no location | | Record.cs:29:1:30:35 | Teacher1 | Person1.!=(Person1, Person1) | Record.cs:27:15:27:21 | +| Record.cs:29:1:30:35 | Teacher1 | Person1.() | no location | | Record.cs:29:1:30:35 | Teacher1 | Person1.==(Person1, Person1) | Record.cs:27:15:27:21 | | Record.cs:29:1:30:35 | Teacher1 | Person1.Deconstruct(out string, out string) | no location | | Record.cs:29:1:30:35 | Teacher1 | Person1.FirstName | Record.cs:27:30:27:38 | @@ -114,6 +121,7 @@ members | Record.cs:29:1:30:35 | Teacher1 | System.Object.~Object() | no location | | Record.cs:29:1:30:35 | Teacher1 | Teacher1.!=(Teacher1, Teacher1) | Record.cs:29:15:29:22 | | Record.cs:29:1:30:35 | Teacher1 | Teacher1.$() | no location | +| Record.cs:29:1:30:35 | Teacher1 | Teacher1.() | no location | | Record.cs:29:1:30:35 | Teacher1 | Teacher1.==(Teacher1, Teacher1) | Record.cs:29:15:29:22 | | Record.cs:29:1:30:35 | Teacher1 | Teacher1.Deconstruct(out string, out string, out string) | no location | | Record.cs:29:1:30:35 | Teacher1 | Teacher1.EqualityContract | Record.cs:29:15:29:22 | @@ -127,6 +135,7 @@ members | Record.cs:29:1:30:35 | Teacher1 | Teacher1.Teacher1(string, string, string) | Record.cs:29:15:29:22 | | Record.cs:29:1:30:35 | Teacher1 | Teacher1.ToString() | no location | | Record.cs:32:1:33:35 | Student1 | Person1.!=(Person1, Person1) | Record.cs:27:15:27:21 | +| Record.cs:32:1:33:35 | Student1 | Person1.() | no location | | Record.cs:32:1:33:35 | Student1 | Person1.==(Person1, Person1) | Record.cs:27:15:27:21 | | Record.cs:32:1:33:35 | Student1 | Person1.Deconstruct(out string, out string) | no location | | Record.cs:32:1:33:35 | Student1 | Person1.FirstName | Record.cs:27:30:27:38 | @@ -135,6 +144,7 @@ members | Record.cs:32:1:33:35 | Student1 | Person1.Person1(string, string) | Record.cs:27:15:27:21 | | Record.cs:32:1:33:35 | Student1 | Student1.!=(Student1, Student1) | Record.cs:32:22:32:29 | | Record.cs:32:1:33:35 | Student1 | Student1.$() | no location | +| Record.cs:32:1:33:35 | Student1 | Student1.() | no location | | Record.cs:32:1:33:35 | Student1 | Student1.==(Student1, Student1) | Record.cs:32:22:32:29 | | Record.cs:32:1:33:35 | Student1 | Student1.Deconstruct(out string, out string, out int) | no location | | Record.cs:32:1:33:35 | Student1 | Student1.EqualityContract | Record.cs:32:22:32:29 | @@ -155,6 +165,7 @@ members | Record.cs:32:1:33:35 | Student1 | System.Object.~Object() | no location | | Record.cs:35:1:39:1 | Pet | Pet.!=(Pet, Pet) | Record.cs:35:15:35:17 | | Record.cs:35:1:39:1 | Pet | Pet.$() | no location | +| Record.cs:35:1:39:1 | Pet | Pet.() | no location | | Record.cs:35:1:39:1 | Pet | Pet.==(Pet, Pet) | Record.cs:35:15:35:17 | | Record.cs:35:1:39:1 | Pet | Pet.Deconstruct(out string) | no location | | Record.cs:35:1:39:1 | Pet | Pet.EqualityContract | Record.cs:35:15:35:17 | @@ -175,6 +186,7 @@ members | Record.cs:35:1:39:1 | Pet | System.Object.~Object() | no location | | Record.cs:41:1:52:1 | Dog | Dog.!=(Dog, Dog) | Record.cs:41:15:41:17 | | Record.cs:41:1:52:1 | Dog | Dog.$() | no location | +| Record.cs:41:1:52:1 | Dog | Dog.() | no location | | Record.cs:41:1:52:1 | Dog | Dog.==(Dog, Dog) | Record.cs:41:15:41:17 | | Record.cs:41:1:52:1 | Dog | Dog.Deconstruct(out string) | no location | | Record.cs:41:1:52:1 | Dog | Dog.Dog(Dog) | no location | @@ -188,6 +200,7 @@ members | Record.cs:41:1:52:1 | Dog | Dog.ToString() | Record.cs:46:28:46:35 | | Record.cs:41:1:52:1 | Dog | Dog.WagTail() | Record.cs:43:17:43:23 | | Record.cs:41:1:52:1 | Dog | Pet.!=(Pet, Pet) | Record.cs:35:15:35:17 | +| Record.cs:41:1:52:1 | Dog | Pet.() | no location | | Record.cs:41:1:52:1 | Dog | Pet.==(Pet, Pet) | Record.cs:35:15:35:17 | | Record.cs:41:1:52:1 | Dog | Pet.Deconstruct(out string) | no location | | Record.cs:41:1:52:1 | Dog | Pet.Name | Record.cs:35:26:35:29 | @@ -202,6 +215,7 @@ members | Record.cs:41:1:52:1 | Dog | System.Object.~Object() | no location | | Record.cs:54:1:54:39 | R1 | R1.!=(R1, R1) | Record.cs:54:24:54:25 | | Record.cs:54:1:54:39 | R1 | R1.$() | no location | +| Record.cs:54:1:54:39 | R1 | R1.() | no location | | Record.cs:54:1:54:39 | R1 | R1.==(R1, R1) | Record.cs:54:24:54:25 | | Record.cs:54:1:54:39 | R1 | R1.A | Record.cs:54:34:54:34 | | Record.cs:54:1:54:39 | R1 | R1.Deconstruct(out string) | no location | @@ -220,6 +234,7 @@ members | Record.cs:54:1:54:39 | R1 | System.Object.ReferenceEquals(object, object) | no location | | Record.cs:54:1:54:39 | R1 | System.Object.~Object() | no location | | Record.cs:56:1:56:48 | R2 | R1.!=(R1, R1) | Record.cs:54:24:54:25 | +| Record.cs:56:1:56:48 | R2 | R1.() | no location | | Record.cs:56:1:56:48 | R2 | R1.==(R1, R1) | Record.cs:54:24:54:25 | | Record.cs:56:1:56:48 | R2 | R1.A | Record.cs:54:34:54:34 | | Record.cs:56:1:56:48 | R2 | R1.Deconstruct(out string) | no location | @@ -227,6 +242,7 @@ members | Record.cs:56:1:56:48 | R2 | R1.R1(string) | Record.cs:54:24:54:25 | | Record.cs:56:1:56:48 | R2 | R2.!=(R2, R2) | Record.cs:56:15:56:16 | | Record.cs:56:1:56:48 | R2 | R2.$() | no location | +| Record.cs:56:1:56:48 | R2 | R2.() | no location | | Record.cs:56:1:56:48 | R2 | R2.==(R2, R2) | Record.cs:56:15:56:16 | | Record.cs:56:1:56:48 | R2 | R2.B | Record.cs:56:35:56:35 | | Record.cs:56:1:56:48 | R2 | R2.Deconstruct(out string, out string) | no location | diff --git a/csharp/ql/test/library-tests/dataflow/collections/CollectionDataFlow.expected b/csharp/ql/test/library-tests/dataflow/collections/CollectionDataFlow.expected new file mode 100644 index 000000000000..373e8938b91a --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/collections/CollectionDataFlow.expected @@ -0,0 +1,840 @@ +models +| 1 | Summary: System.Collections.Generic; Dictionary; false; get_Keys; (); ; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key]; ReturnValue.Element; value; manual | +| 2 | Summary: System.Collections.Generic; Dictionary; false; get_Values; (); ; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value]; ReturnValue.Element; value; manual | +| 3 | Summary: System.Collections.Generic; ICollection; true; Add; (T); ; Argument[0]; Argument[this].Element; value; manual | +| 4 | Summary: System.Collections.Generic; IDictionary; true; Add; (TKey,TValue); ; Argument[0]; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key]; value; manual | +| 5 | Summary: System.Collections.Generic; IDictionary; true; Add; (TKey,TValue); ; Argument[1]; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value]; value; manual | +| 6 | Summary: System.Collections.Generic; IDictionary; true; get_Item; (TKey); ; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value]; ReturnValue; value; manual | +| 7 | Summary: System.Collections.Generic; IDictionary; true; get_Keys; (); ; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key]; ReturnValue.Element; value; manual | +| 8 | Summary: System.Collections.Generic; IDictionary; true; get_Values; (); ; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value]; ReturnValue.Element; value; manual | +| 9 | Summary: System.Collections.Generic; IDictionary; true; set_Item; (TKey,TValue); ; Argument[0]; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key]; value; manual | +| 10 | Summary: System.Collections.Generic; IDictionary; true; set_Item; (TKey,TValue); ; Argument[1]; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value]; value; manual | +| 11 | Summary: System.Collections.Generic; IList; true; get_Item; (System.Int32); ; Argument[this].Element; ReturnValue; value; manual | +| 12 | Summary: System.Collections.Generic; IList; true; set_Item; (System.Int32,T); ; Argument[1]; Argument[this].Element; value; manual | +| 13 | Summary: System.Collections.Generic; KeyValuePair; false; KeyValuePair; (TKey,TValue); ; Argument[0]; Argument[this].Property[System.Collections.Generic.KeyValuePair`2.Key]; value; manual | +| 14 | Summary: System.Collections.Generic; List+Enumerator; false; get_Current; (); ; Argument[this].Property[System.Collections.Generic.List`1+Enumerator.Current]; ReturnValue; value; dfc-generated | +| 15 | Summary: System.Collections.Generic; List; false; GetEnumerator; (); ; Argument[this].Element; ReturnValue.Property[System.Collections.Generic.List`1+Enumerator.Current]; value; manual | +| 16 | Summary: System.Collections; IEnumerable; true; GetEnumerator; (); ; Argument[this].Element; ReturnValue.Property[System.Collections.IEnumerator.Current]; value; manual | +| 17 | Summary: System.Linq; Enumerable; false; First; (System.Collections.Generic.IEnumerable); ; Argument[0].Element; ReturnValue; value; manual | +| 18 | Summary: System.Linq; Enumerable; false; Select; (System.Collections.Generic.IEnumerable,System.Func); ; Argument[0].Element; Argument[1].Parameter[0]; value; manual | +| 19 | Summary: System; ReadOnlySpan; false; ReadOnlySpan; (T[]); ; Argument[0].Element; Argument[this].Element; value; manual | +| 20 | Summary: System; ReadOnlySpan; false; get_Item; (System.Int32); ; Argument[this].Element; ReturnValue; value; manual | +| 21 | Summary: System; Span; false; CopyTo; (System.Span); ; Argument[this].Element; Argument[0].Element; value; manual | +| 22 | Summary: System; Span; false; Fill; (T); ; Argument[0]; Argument[this].Element; value; manual | +| 23 | Summary: System; Span; false; Span; (T); ; Argument[0]; Argument[this].Element; value; manual | +| 24 | Summary: System; Span; false; Span; (T[]); ; Argument[0].Element; Argument[this].Element; value; manual | +| 25 | Summary: System; Span; false; ToArray; (); ; Argument[this].Element; ReturnValue.Element; value; manual | +| 26 | Summary: System; Span; false; get_Item; (System.Int32); ; Argument[this].Element; ReturnValue; value; manual | +edges +| CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | CollectionFlow.cs:14:52:14:53 | access to parameter ts : A[] [element] : A | provenance | | +| 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: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: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: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: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: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: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 | diff --git a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.ql b/csharp/ql/test/library-tests/dataflow/collections/CollectionDataFlow.ql similarity index 50% rename from csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.ql rename to csharp/ql/test/library-tests/dataflow/collections/CollectionDataFlow.ql index 67553b5cbc9f..d167fcdb6384 100644 --- a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.ql +++ b/csharp/ql/test/library-tests/dataflow/collections/CollectionDataFlow.ql @@ -2,20 +2,9 @@ * @kind path-problem */ -import csharp +import CollectionFlowCommon import utils.test.ProvenancePathGraph::ShowProvenance -module ArrayFlowConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node src) { src.asExpr() instanceof ObjectCreation } - - predicate isSink(DataFlow::Node sink) { - exists(MethodCall mc | - mc.getTarget().hasUndecoratedName("Sink") and - mc.getAnArgument() = sink.asExpr() - ) - } -} - module ArrayFlow = DataFlow::Global; from ArrayFlow::PathNode source, ArrayFlow::PathNode sink diff --git a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.cs b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.cs index c0a7900461fe..c95ab58bdb82 100644 --- a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.cs +++ b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.cs @@ -550,4 +550,10 @@ public void ReadOnlySpanConstructorFlow() ReadOnlySpan span = new ReadOnlySpan(new[] { a }); Sink(span[0]); // flow } + + public void ImplicitMapValueRead(Dictionary dict) { + var a = new A(); + dict[0] = a; + Sink(dict); // taint flow + } } diff --git a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlowCommon.qll b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlowCommon.qll new file mode 100644 index 000000000000..bfbd22773e12 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlowCommon.qll @@ -0,0 +1,12 @@ +import csharp + +module ArrayFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node src) { src.asExpr() instanceof ObjectCreation } + + predicate isSink(DataFlow::Node sink) { + exists(MethodCall mc | + mc.getTarget().hasUndecoratedName("Sink") and + mc.getAnArgument() = sink.asExpr() + ) + } +} diff --git a/csharp/ql/test/library-tests/dataflow/collections/CollectionTaintFlow.expected b/csharp/ql/test/library-tests/dataflow/collections/CollectionTaintFlow.expected new file mode 100644 index 000000000000..c54b7f84e6aa --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/collections/CollectionTaintFlow.expected @@ -0,0 +1,1384 @@ +models +| 1 | Summary: System.Collections.Generic; Dictionary; false; get_Keys; (); ; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key]; ReturnValue.Element; value; manual | +| 2 | Summary: System.Collections.Generic; Dictionary; false; get_Values; (); ; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value]; ReturnValue.Element; value; manual | +| 3 | Summary: System.Collections.Generic; ICollection; true; Add; (T); ; Argument[0]; Argument[this].Element; value; manual | +| 4 | Summary: System.Collections.Generic; ICollection; true; Clear; (); ; Argument[this].WithoutElement; Argument[this]; value; manual | +| 5 | Summary: System.Collections.Generic; IDictionary; true; Add; (TKey,TValue); ; Argument[0]; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key]; value; manual | +| 6 | Summary: System.Collections.Generic; IDictionary; true; Add; (TKey,TValue); ; Argument[1]; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value]; value; manual | +| 7 | Summary: System.Collections.Generic; IDictionary; true; get_Item; (TKey); ; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value]; ReturnValue; value; manual | +| 8 | Summary: System.Collections.Generic; IDictionary; true; get_Keys; (); ; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key]; ReturnValue.Element; value; manual | +| 9 | Summary: System.Collections.Generic; IDictionary; true; get_Values; (); ; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value]; ReturnValue.Element; value; manual | +| 10 | Summary: System.Collections.Generic; IDictionary; true; set_Item; (TKey,TValue); ; Argument[0]; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key]; value; manual | +| 11 | Summary: System.Collections.Generic; IDictionary; true; set_Item; (TKey,TValue); ; Argument[1]; Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value]; value; manual | +| 12 | Summary: System.Collections.Generic; IList; true; get_Item; (System.Int32); ; Argument[this].Element; ReturnValue; value; manual | +| 13 | Summary: System.Collections.Generic; IList; true; set_Item; (System.Int32,T); ; Argument[1]; Argument[this].Element; value; manual | +| 14 | Summary: System.Collections.Generic; KeyValuePair; false; KeyValuePair; (TKey,TValue); ; Argument[0]; Argument[this].Property[System.Collections.Generic.KeyValuePair`2.Key]; value; manual | +| 15 | Summary: System.Collections.Generic; KeyValuePair; false; get_Key; (); ; Argument[this]; ReturnValue; taint; df-generated | +| 16 | Summary: System.Collections.Generic; KeyValuePair; false; get_Value; (); ; Argument[this]; ReturnValue; taint; df-generated | +| 17 | Summary: System.Collections.Generic; List+Enumerator; false; get_Current; (); ; Argument[this].Property[System.Collections.Generic.List`1+Enumerator.Current]; ReturnValue; value; dfc-generated | +| 18 | Summary: System.Collections.Generic; List; false; GetEnumerator; (); ; Argument[this].Element; ReturnValue.Property[System.Collections.Generic.List`1+Enumerator.Current]; value; manual | +| 19 | Summary: System.Collections; IEnumerable; true; GetEnumerator; (); ; Argument[this].Element; ReturnValue.Property[System.Collections.IEnumerator.Current]; value; manual | +| 20 | Summary: System.Collections; IList; true; Clear; (); ; Argument[this].WithoutElement; Argument[this]; value; manual | +| 21 | Summary: System.Linq; Enumerable; false; First; (System.Collections.Generic.IEnumerable); ; Argument[0].Element; ReturnValue; value; manual | +| 22 | Summary: System.Linq; Enumerable; false; Select; (System.Collections.Generic.IEnumerable,System.Func); ; Argument[0].Element; Argument[1].Parameter[0]; value; manual | +| 23 | Summary: System; ReadOnlySpan; false; ReadOnlySpan; (T[]); ; Argument[0].Element; Argument[this].Element; value; manual | +| 24 | Summary: System; ReadOnlySpan; false; get_Item; (System.Int32); ; Argument[this].Element; ReturnValue; value; manual | +| 25 | Summary: System; Span; false; CopyTo; (System.Span); ; Argument[this].Element; Argument[0].Element; value; manual | +| 26 | Summary: System; Span; false; Fill; (T); ; Argument[0]; Argument[this].Element; value; manual | +| 27 | Summary: System; Span; false; Span; (T); ; Argument[0]; Argument[this].Element; value; manual | +| 28 | Summary: System; Span; false; Span; (T[]); ; Argument[0].Element; Argument[this].Element; value; manual | +| 29 | Summary: System; Span; false; ToArray; (); ; Argument[this].Element; ReturnValue.Element; value; manual | +| 30 | Summary: System; Span; false; get_Item; (System.Int32); ; Argument[this].Element; ReturnValue; value; manual | +edges +| CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | CollectionFlow.cs:14:52:14:53 | access to parameter ts : A[] [element] : A | provenance | | +| 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: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 | CollectionFlow.cs:18:63:18:66 | access to parameter list : List | provenance | | +| CollectionFlow.cs:18:49:18:52 | list : List | CollectionFlow.cs:18:63:18:69 | access to indexer | 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 | CollectionFlow.cs:18:63:18:69 | access to indexer | provenance | MaD:12 | +| CollectionFlow.cs:18:63:18:66 | access to parameter list : List [element] : A | CollectionFlow.cs:18:63:18:69 | access to indexer | provenance | MaD:12 | +| CollectionFlow.cs:20:61:20:64 | dict : Dictionary | CollectionFlow.cs:20:75:20:81 | access to indexer | provenance | | +| 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:7 | +| 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:8 | +| 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:21 | +| 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 | CollectionFlow.cs:28:52:28:55 | access to parameter list : List | provenance | | +| CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : T | 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 | CollectionFlow.cs:28:52:28:58 | access to indexer : Object | provenance | MaD:12 | +| 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:12 | +| CollectionFlow.cs:30:58:30:61 | dict : Dictionary | CollectionFlow.cs:30:67:30:73 | access to indexer : T | provenance | | +| 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:7 | +| CollectionFlow.cs:32:59:32:62 | dict : Dictionary | CollectionFlow.cs:32:68:32:71 | access to parameter dict : Dictionary | provenance | | +| 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 | CollectionFlow.cs:32:68:32:79 | call to method First> : KeyValuePair | provenance | MaD:21 | +| 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:21 | +| CollectionFlow.cs:32:68:32:79 | call to method First> : KeyValuePair | CollectionFlow.cs:32:68:32:85 | access to property Value : T | provenance | MaD:16 | +| 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:9 | +| 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:21 | +| 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:8 | +| 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:21 | +| CollectionFlow.cs:38:57:38:60 | dict : Dictionary | CollectionFlow.cs:38:66:38:69 | access to parameter dict : Dictionary | provenance | | +| 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 | CollectionFlow.cs:38:66:38:77 | call to method First> : KeyValuePair | provenance | MaD:21 | +| 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:21 | +| CollectionFlow.cs:38:66:38:77 | call to method First> : KeyValuePair | CollectionFlow.cs:38:66:38:81 | access to property Key : T | provenance | MaD:15 | +| 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:21 | +| 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:122:13:122:16 | access to local variable list : List | CollectionFlow.cs:124:14:124:17 | access to local variable list : List | provenance | | +| CollectionFlow.cs:122:13:122:16 | access to local variable list : List | CollectionFlow.cs:124:14:124:20 | access to indexer | provenance | | +| CollectionFlow.cs:122:13:122:16 | access to local variable list : List | CollectionFlow.cs:125:22:125:25 | access to local variable list : List | provenance | | +| CollectionFlow.cs:122:13:122:16 | access to local variable list : List | CollectionFlow.cs:126:24:126:27 | access to local variable list : List | provenance | | +| CollectionFlow.cs:122:20:122:32 | object creation of type List : List | CollectionFlow.cs:122:13:122:16 | access to local variable list : List | 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:13 | +| CollectionFlow.cs:124:14:124:17 | access to local variable list : List | CollectionFlow.cs:124:14:124:20 | access to indexer | 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:12 | +| CollectionFlow.cs:125:22:125:25 | access to local variable list : List | CollectionFlow.cs:18:49:18:52 | list : List | provenance | | +| 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 | CollectionFlow.cs:28:43:28:46 | list : List | provenance | | +| CollectionFlow.cs:126:24:126:27 | access to local variable list : List | CollectionFlow.cs:126:14:126:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:126:24:126:27 | access to local variable list : List | CollectionFlow.cs:126:14:126:28 | call to method ListFirst | provenance | MaD:12 | +| 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:12 | +| CollectionFlow.cs:131:13:131:16 | access to local variable list : List | CollectionFlow.cs:133:14:133:17 | access to local variable list : List | provenance | | +| CollectionFlow.cs:131:13:131:16 | access to local variable list : List | CollectionFlow.cs:133:14:133:20 | access to indexer | provenance | | +| CollectionFlow.cs:131:13:131:16 | access to local variable list : List | CollectionFlow.cs:134:22:134:25 | access to local variable list : List | provenance | | +| CollectionFlow.cs:131:13:131:16 | access to local variable list : List | CollectionFlow.cs:135:24:135:27 | access to local variable list : List | provenance | | +| CollectionFlow.cs:131:20:131:32 | object creation of type List : List | CollectionFlow.cs:131:13:131:16 | access to local variable list : List | provenance | | +| CollectionFlow.cs:133:14:133:17 | access to local variable list : List | CollectionFlow.cs:133:14:133:20 | access to indexer | provenance | MaD:12 | +| CollectionFlow.cs:134:22:134:25 | access to local variable list : List | CollectionFlow.cs:18:49:18:52 | list : List | provenance | | +| CollectionFlow.cs:135:24:135:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | provenance | | +| CollectionFlow.cs:135:24:135:27 | access to local variable list : List | CollectionFlow.cs:135:14:135:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:135:24:135:27 | access to local variable list : List | CollectionFlow.cs:135:14:135:28 | call to method ListFirst | provenance | MaD:12 | +| 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 | CollectionFlow.cs:142:14:142:17 | access to local variable list : List | provenance | | +| CollectionFlow.cs:141:13:141:16 | access to local variable list : List | CollectionFlow.cs:142:14:142:20 | access to indexer | provenance | | +| CollectionFlow.cs:141:13:141:16 | access to local variable list : List | CollectionFlow.cs:143:22:143:25 | access to local variable list : List | provenance | | +| CollectionFlow.cs:141:13:141:16 | access to local variable list : List | CollectionFlow.cs:144:24:144:27 | access to local variable list : List | 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 | CollectionFlow.cs:141:13:141:16 | access to local variable list : List | 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 | CollectionFlow.cs:142:14:142:20 | access to indexer | provenance | MaD:12 | +| 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:12 | +| CollectionFlow.cs:143:22:143:25 | access to local variable list : List | CollectionFlow.cs:18:49:18:52 | list : List | provenance | | +| 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 | CollectionFlow.cs:28:43:28:46 | list : List | provenance | | +| CollectionFlow.cs:144:24:144:27 | access to local variable list : List | CollectionFlow.cs:144:14:144:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:144:24:144:27 | access to local variable list : List | CollectionFlow.cs:144:14:144:28 | call to method ListFirst | provenance | MaD:12 | +| 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:12 | +| CollectionFlow.cs:149:13:149:16 | access to local variable list : List | CollectionFlow.cs:150:14:150:17 | access to local variable list : List | provenance | | +| CollectionFlow.cs:149:13:149:16 | access to local variable list : List | CollectionFlow.cs:150:14:150:20 | access to indexer | provenance | | +| CollectionFlow.cs:149:13:149:16 | access to local variable list : List | CollectionFlow.cs:151:22:151:25 | access to local variable list : List | provenance | | +| CollectionFlow.cs:149:13:149:16 | access to local variable list : List | CollectionFlow.cs:152:24:152:27 | access to local variable list : List | provenance | | +| CollectionFlow.cs:149:20:149:42 | object creation of type List : List | CollectionFlow.cs:149:13:149:16 | access to local variable list : List | provenance | | +| CollectionFlow.cs:150:14:150:17 | access to local variable list : List | CollectionFlow.cs:150:14:150:20 | access to indexer | provenance | MaD:12 | +| CollectionFlow.cs:151:22:151:25 | access to local variable list : List | CollectionFlow.cs:18:49:18:52 | list : List | provenance | | +| CollectionFlow.cs:152:24:152:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | provenance | | +| CollectionFlow.cs:152:24:152:27 | access to local variable list : List | CollectionFlow.cs:152:14:152:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:152:24:152:27 | access to local variable list : List | CollectionFlow.cs:152:14:152:28 | call to method ListFirst | provenance | MaD:12 | +| 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:158:13:158:16 | access to local variable list : List | CollectionFlow.cs:160:14:160:17 | access to local variable list : List | provenance | | +| CollectionFlow.cs:158:13:158:16 | access to local variable list : List | CollectionFlow.cs:160:14:160:20 | access to indexer | provenance | | +| CollectionFlow.cs:158:13:158:16 | access to local variable list : List | CollectionFlow.cs:161:22:161:25 | access to local variable list : List | provenance | | +| CollectionFlow.cs:158:13:158:16 | access to local variable list : List | CollectionFlow.cs:162:24:162:27 | access to local variable list : List | provenance | | +| CollectionFlow.cs:158:20:158:32 | object creation of type List : List | CollectionFlow.cs:158:13:158:16 | access to local variable list : List | 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 | CollectionFlow.cs:160:14:160:20 | access to indexer | provenance | MaD:12 | +| 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:12 | +| CollectionFlow.cs:161:22:161:25 | access to local variable list : List | CollectionFlow.cs:18:49:18:52 | list : List | provenance | | +| 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 | CollectionFlow.cs:28:43:28:46 | list : List | provenance | | +| CollectionFlow.cs:162:24:162:27 | access to local variable list : List | CollectionFlow.cs:162:14:162:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:162:24:162:27 | access to local variable list : List | CollectionFlow.cs:162:14:162:28 | call to method ListFirst | provenance | MaD:12 | +| 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:12 | +| CollectionFlow.cs:167:13:167:16 | access to local variable list : List | CollectionFlow.cs:169:14:169:17 | access to local variable list : List | provenance | | +| CollectionFlow.cs:167:13:167:16 | access to local variable list : List | CollectionFlow.cs:169:14:169:20 | access to indexer | provenance | | +| CollectionFlow.cs:167:13:167:16 | access to local variable list : List | CollectionFlow.cs:170:22:170:25 | access to local variable list : List | provenance | | +| CollectionFlow.cs:167:13:167:16 | access to local variable list : List | CollectionFlow.cs:171:24:171:27 | access to local variable list : List | provenance | | +| CollectionFlow.cs:167:20:167:32 | object creation of type List : List | CollectionFlow.cs:167:13:167:16 | access to local variable list : List | provenance | | +| CollectionFlow.cs:169:14:169:17 | access to local variable list : List | CollectionFlow.cs:169:14:169:20 | access to indexer | provenance | MaD:12 | +| CollectionFlow.cs:170:22:170:25 | access to local variable list : List | CollectionFlow.cs:18:49:18:52 | list : List | provenance | | +| CollectionFlow.cs:171:24:171:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | provenance | | +| CollectionFlow.cs:171:24:171:27 | access to local variable list : List | CollectionFlow.cs:171:14:171:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:171:24:171:27 | access to local variable list : List | CollectionFlow.cs:171:14:171:28 | call to method ListFirst | provenance | MaD:12 | +| 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 | CollectionFlow.cs:179:14:179:20 | access to indexer | provenance | | +| CollectionFlow.cs:177:13:177:16 | access to local variable dict : Dictionary | CollectionFlow.cs:180:23:180:26 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:177:13:177:16 | access to local variable dict : Dictionary | CollectionFlow.cs:181:28:181:31 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:177:13:177:16 | access to local variable dict : Dictionary | CollectionFlow.cs:182:29:182:32 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:177:20:177:43 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:177:13:177:16 | access to local variable dict : Dictionary | provenance | | +| 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:11 | +| 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:7 | +| CollectionFlow.cs:180:23:180:26 | access to local variable dict : Dictionary | CollectionFlow.cs:20:61:20:64 | dict : Dictionary | provenance | | +| 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 | CollectionFlow.cs:30:58:30:61 | dict : Dictionary | provenance | | +| CollectionFlow.cs:181:28:181:31 | access to local variable dict : Dictionary | CollectionFlow.cs:181:14:181:32 | call to method DictIndexZero | 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:7 | +| CollectionFlow.cs:182:29:182:32 | access to local variable dict : Dictionary | CollectionFlow.cs:32:59:32:62 | dict : Dictionary | provenance | | +| CollectionFlow.cs:182:29:182:32 | access to local variable dict : Dictionary | CollectionFlow.cs:182:14:182:33 | call to method DictFirstValue | provenance | MaD:21 | +| 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:21 | +| 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:9 | +| CollectionFlow.cs:188:13:188:16 | access to local variable dict : Dictionary | CollectionFlow.cs:190:14:190:20 | access to indexer | provenance | | +| CollectionFlow.cs:188:13:188:16 | access to local variable dict : Dictionary | CollectionFlow.cs:191:23:191:26 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:188:13:188:16 | access to local variable dict : Dictionary | CollectionFlow.cs:192:28:192:31 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:188:13:188:16 | access to local variable dict : Dictionary | CollectionFlow.cs:193:29:193:32 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:188:20:188:43 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:188:13:188:16 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:191:23:191:26 | access to local variable dict : Dictionary | CollectionFlow.cs:20:61:20:64 | dict : Dictionary | provenance | | +| CollectionFlow.cs:192:28:192:31 | access to local variable dict : Dictionary | CollectionFlow.cs:30:58:30:61 | dict : Dictionary | provenance | | +| CollectionFlow.cs:192:28:192:31 | access to local variable dict : Dictionary | CollectionFlow.cs:192:14:192:32 | call to method DictIndexZero | provenance | | +| CollectionFlow.cs:193:29:193:32 | access to local variable dict : Dictionary | CollectionFlow.cs:32:59:32:62 | dict : Dictionary | provenance | | +| CollectionFlow.cs:193:29:193:32 | access to local variable dict : Dictionary | CollectionFlow.cs:193:14:193:33 | call to method DictFirstValue | provenance | MaD:21 | +| 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 | CollectionFlow.cs:201:14:201:20 | access to indexer | provenance | | +| CollectionFlow.cs:200:13:200:16 | access to local variable dict : Dictionary | CollectionFlow.cs:202:23:202:26 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:200:13:200:16 | access to local variable dict : Dictionary | CollectionFlow.cs:203:28:203:31 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:200:13:200:16 | access to local variable dict : Dictionary | CollectionFlow.cs:204:29:204:32 | access to local variable dict : Dictionary | 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 | CollectionFlow.cs:200:13:200:16 | access to local variable dict : Dictionary | 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:6 | +| 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:7 | +| CollectionFlow.cs:202:23:202:26 | access to local variable dict : Dictionary | CollectionFlow.cs:20:61:20:64 | dict : Dictionary | provenance | | +| 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 | CollectionFlow.cs:30:58:30:61 | dict : Dictionary | provenance | | +| CollectionFlow.cs:203:28:203:31 | access to local variable dict : Dictionary | CollectionFlow.cs:203:14:203:32 | call to method DictIndexZero | 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:7 | +| CollectionFlow.cs:204:29:204:32 | access to local variable dict : Dictionary | CollectionFlow.cs:32:59:32:62 | dict : Dictionary | provenance | | +| CollectionFlow.cs:204:29:204:32 | access to local variable dict : Dictionary | CollectionFlow.cs:204:14:204:33 | call to method DictFirstValue | provenance | MaD:21 | +| 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:21 | +| 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:9 | +| CollectionFlow.cs:210:13:210:16 | access to local variable dict : Dictionary | CollectionFlow.cs:211:14:211:20 | access to indexer | provenance | | +| CollectionFlow.cs:210:13:210:16 | access to local variable dict : Dictionary | CollectionFlow.cs:212:23:212:26 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:210:13:210:16 | access to local variable dict : Dictionary | CollectionFlow.cs:213:28:213:31 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:210:13:210:16 | access to local variable dict : Dictionary | CollectionFlow.cs:214:29:214:32 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:210:20:210:60 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:210:13:210:16 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:212:23:212:26 | access to local variable dict : Dictionary | CollectionFlow.cs:20:61:20:64 | dict : Dictionary | provenance | | +| CollectionFlow.cs:213:28:213:31 | access to local variable dict : Dictionary | CollectionFlow.cs:30:58:30:61 | dict : Dictionary | provenance | | +| CollectionFlow.cs:213:28:213:31 | access to local variable dict : Dictionary | CollectionFlow.cs:213:14:213:32 | call to method DictIndexZero | provenance | | +| CollectionFlow.cs:214:29:214:32 | access to local variable dict : Dictionary | CollectionFlow.cs:32:59:32:62 | dict : Dictionary | provenance | | +| CollectionFlow.cs:214:29:214:32 | access to local variable dict : Dictionary | CollectionFlow.cs:214:14:214:33 | call to method DictFirstValue | provenance | MaD:21 | +| 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 | CollectionFlow.cs:222:14:222:20 | access to indexer | provenance | | +| CollectionFlow.cs:221:13:221:16 | access to local variable dict : Dictionary | CollectionFlow.cs:223:23:223:26 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:221:13:221:16 | access to local variable dict : Dictionary | CollectionFlow.cs:224:28:224:31 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:221:13:221:16 | access to local variable dict : Dictionary | CollectionFlow.cs:225:29:225:32 | access to local variable dict : Dictionary | 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 | CollectionFlow.cs:221:13:221:16 | access to local variable dict : Dictionary | 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:11 | +| 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:7 | +| CollectionFlow.cs:223:23:223:26 | access to local variable dict : Dictionary | CollectionFlow.cs:20:61:20:64 | dict : Dictionary | provenance | | +| 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 | CollectionFlow.cs:30:58:30:61 | dict : Dictionary | provenance | | +| CollectionFlow.cs:224:28:224:31 | access to local variable dict : Dictionary | CollectionFlow.cs:224:14:224:32 | call to method DictIndexZero | 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:7 | +| CollectionFlow.cs:225:29:225:32 | access to local variable dict : Dictionary | CollectionFlow.cs:32:59:32:62 | dict : Dictionary | provenance | | +| CollectionFlow.cs:225:29:225:32 | access to local variable dict : Dictionary | CollectionFlow.cs:225:14:225:33 | call to method DictFirstValue | provenance | MaD:21 | +| 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:21 | +| 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:9 | +| CollectionFlow.cs:232:13:232:16 | access to local variable dict : Dictionary | CollectionFlow.cs:233:14:233:20 | access to indexer | provenance | | +| CollectionFlow.cs:232:13:232:16 | access to local variable dict : Dictionary | CollectionFlow.cs:234:23:234:26 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:232:13:232:16 | access to local variable dict : Dictionary | CollectionFlow.cs:235:28:235:31 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:232:13:232:16 | access to local variable dict : Dictionary | CollectionFlow.cs:236:29:236:32 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:232:20:232:59 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:232:13:232:16 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:234:23:234:26 | access to local variable dict : Dictionary | CollectionFlow.cs:20:61:20:64 | dict : Dictionary | provenance | | +| CollectionFlow.cs:235:28:235:31 | access to local variable dict : Dictionary | CollectionFlow.cs:30:58:30:61 | dict : Dictionary | provenance | | +| CollectionFlow.cs:235:28:235:31 | access to local variable dict : Dictionary | CollectionFlow.cs:235:14:235:32 | call to method DictIndexZero | provenance | | +| CollectionFlow.cs:236:29:236:32 | access to local variable dict : Dictionary | CollectionFlow.cs:32:59:32:62 | dict : Dictionary | provenance | | +| CollectionFlow.cs:236:29:236:32 | access to local variable dict : Dictionary | CollectionFlow.cs:236:14:236:33 | call to method DictFirstValue | provenance | MaD:21 | +| 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 | CollectionFlow.cs:247:27:247:30 | access to local variable dict : Dictionary | 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 | CollectionFlow.cs:243:13:243:16 | access to local variable dict : Dictionary | 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:5 | +| 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:21 | +| 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:8 | +| CollectionFlow.cs:247:27:247:30 | access to local variable dict : Dictionary | CollectionFlow.cs:38:57:38:60 | dict : Dictionary | provenance | | +| CollectionFlow.cs:247:27:247:30 | access to local variable dict : Dictionary | CollectionFlow.cs:247:14:247:31 | call to method DictFirstKey | provenance | MaD:21 | +| 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:21 | +| CollectionFlow.cs:252:13:252:16 | access to local variable dict : Dictionary | CollectionFlow.cs:256:27:256:30 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:252:20:252:60 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:252:13:252:16 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:256:27:256:30 | access to local variable dict : Dictionary | CollectionFlow.cs:38:57:38:60 | dict : Dictionary | provenance | | +| CollectionFlow.cs:256:27:256:30 | access to local variable dict : Dictionary | CollectionFlow.cs:256:14:256:31 | call to method DictFirstKey | provenance | MaD:21 | +| 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 | CollectionFlow.cs:266:27:266:30 | access to local variable dict : Dictionary | 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 | CollectionFlow.cs:262:13:262:16 | access to local variable dict : Dictionary | 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:10 | +| 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:21 | +| 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:8 | +| CollectionFlow.cs:266:27:266:30 | access to local variable dict : Dictionary | CollectionFlow.cs:38:57:38:60 | dict : Dictionary | provenance | | +| CollectionFlow.cs:266:27:266:30 | access to local variable dict : Dictionary | CollectionFlow.cs:266:14:266:31 | call to method DictFirstKey | provenance | MaD:21 | +| 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:21 | +| CollectionFlow.cs:271:13:271:16 | access to local variable dict : Dictionary | CollectionFlow.cs:275:27:275:30 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:271:20:271:59 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:271:13:271:16 | access to local variable dict : Dictionary | provenance | | +| CollectionFlow.cs:275:27:275:30 | access to local variable dict : Dictionary | CollectionFlow.cs:38:57:38:60 | dict : Dictionary | provenance | | +| CollectionFlow.cs:275:27:275:30 | access to local variable dict : Dictionary | CollectionFlow.cs:275:14:275:31 | call to method DictFirstKey | provenance | MaD:21 | +| 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:19 | +| 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:313:13:313:16 | access to local variable list : List | CollectionFlow.cs:315:26:315:29 | access to local variable list : List | provenance | | +| CollectionFlow.cs:313:20:313:32 | object creation of type List : List | CollectionFlow.cs:313:13:313:16 | access to local variable list : List | 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:13:315:22 | access to local variable enumerator : List.Enumerator [property Current] : Object | CollectionFlow.cs:317:18:317:27 | access to local variable enumerator : List.Enumerator [property Current] : Object | provenance | | +| CollectionFlow.cs:315:13:315:22 | access to local variable enumerator : List.Enumerator [property Current] : Object | CollectionFlow.cs:317:18:317:27 | access to local variable enumerator : List.Enumerator [property Current] : Object | provenance | | +| CollectionFlow.cs:315:26:315:29 | access to local variable list : List | CollectionFlow.cs:315:26:315:45 | call to method GetEnumerator : List.Enumerator [property Current] : Object | provenance | MaD:18 | +| CollectionFlow.cs:315:26:315:29 | access to local variable list : List | CollectionFlow.cs:315:26:315:45 | call to method GetEnumerator : List.Enumerator [property Current] : Object | provenance | MaD:18 | +| 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:18 | +| 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:18 | +| 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:315:26:315:45 | call to method GetEnumerator : List.Enumerator [property Current] : Object | CollectionFlow.cs:315:13:315:22 | access to local variable enumerator : List.Enumerator [property Current] : Object | provenance | | +| CollectionFlow.cs:315:26:315:45 | call to method GetEnumerator : List.Enumerator [property Current] : Object | CollectionFlow.cs:315:13:315:22 | access to local variable enumerator : List.Enumerator [property Current] : Object | 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:17 | +| 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:17 | +| CollectionFlow.cs:317:18:317:27 | access to local variable enumerator : List.Enumerator [property Current] : Object | 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] : Object | CollectionFlow.cs:317:18:317:35 | access to property Current | provenance | MaD:17 | +| CollectionFlow.cs:317:18:317:27 | access to local variable enumerator : List.Enumerator [property Current] : Object | CollectionFlow.cs:317:18:317:35 | access to property Current | provenance | MaD:17 | +| CollectionFlow.cs:322:13:322:16 | access to local variable list : List | CollectionFlow.cs:324:26:324:29 | access to local variable list : List | provenance | | +| CollectionFlow.cs:322:20:322:32 | object creation of type List : List | CollectionFlow.cs:322:13:322:16 | access to local variable list : List | provenance | | +| CollectionFlow.cs:324:13:324:22 | access to local variable enumerator : List.Enumerator [property Current] : Object | CollectionFlow.cs:326:18:326:27 | access to local variable enumerator : List.Enumerator [property Current] : Object | provenance | | +| CollectionFlow.cs:324:13:324:22 | access to local variable enumerator : List.Enumerator [property Current] : Object | CollectionFlow.cs:326:18:326:27 | access to local variable enumerator : List.Enumerator [property Current] : Object | provenance | | +| CollectionFlow.cs:324:26:324:29 | access to local variable list : List | CollectionFlow.cs:324:26:324:45 | call to method GetEnumerator : List.Enumerator [property Current] : Object | provenance | MaD:18 | +| CollectionFlow.cs:324:26:324:29 | access to local variable list : List | CollectionFlow.cs:324:26:324:45 | call to method GetEnumerator : List.Enumerator [property Current] : Object | provenance | MaD:18 | +| CollectionFlow.cs:324:26:324:45 | call to method GetEnumerator : List.Enumerator [property Current] : Object | CollectionFlow.cs:324:13:324:22 | access to local variable enumerator : List.Enumerator [property Current] : Object | provenance | | +| CollectionFlow.cs:324:26:324:45 | call to method GetEnumerator : List.Enumerator [property Current] : Object | CollectionFlow.cs:324:13:324:22 | access to local variable enumerator : List.Enumerator [property Current] : Object | provenance | | +| CollectionFlow.cs:326:18:326:27 | access to local variable enumerator : List.Enumerator [property Current] : Object | CollectionFlow.cs:326:18:326:35 | access to property Current | provenance | | +| CollectionFlow.cs:326:18:326:27 | access to local variable enumerator : List.Enumerator [property Current] : Object | CollectionFlow.cs:326:18:326:35 | access to property Current | provenance | MaD:17 | +| CollectionFlow.cs:326:18:326:27 | access to local variable enumerator : List.Enumerator [property Current] : Object | CollectionFlow.cs:326:18:326:35 | access to property Current | provenance | MaD:17 | +| 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:332:13:332:16 | access to local variable list : List> | CollectionFlow.cs:334:9:334:12 | access to local variable list : List> | provenance | | +| CollectionFlow.cs:332:20:332:51 | object creation of type List> : List> | CollectionFlow.cs:332:13:332:16 | access to local variable list : List> | 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:9:333:12 | [post] access to local variable list : List [element] : KeyValuePair | CollectionFlow.cs:334:9:334:12 | access to local variable list : List [element] : KeyValuePair | provenance | | +| CollectionFlow.cs:333:18:333:47 | object creation of type KeyValuePair : KeyValuePair | CollectionFlow.cs:333:9:333:12 | [post] access to local variable list : List [element] : KeyValuePair | provenance | MaD:3 | +| 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:14 | +| CollectionFlow.cs:334:9:334:12 | access to local variable list : List> | CollectionFlow.cs:334:21:334:23 | kvp : KeyValuePair | provenance | MaD:22 | +| 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:22 | +| CollectionFlow.cs:334:9:334:12 | access to local variable list : List [element] : KeyValuePair | CollectionFlow.cs:334:21:334:23 | kvp : KeyValuePair | provenance | MaD:22 | +| CollectionFlow.cs:334:21:334:23 | kvp : KeyValuePair | CollectionFlow.cs:336:18:336:20 | access to parameter kvp : KeyValuePair | provenance | | +| 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 | CollectionFlow.cs:336:18:336:24 | access to property Key | provenance | MaD:15 | +| 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:344:13:344:16 | access to local variable list : List> | CollectionFlow.cs:346:9:346:12 | access to local variable list : List> | provenance | | +| CollectionFlow.cs:344:20:344:51 | object creation of type List> : List> | CollectionFlow.cs:344:13:344:16 | access to local variable list : List> | provenance | | +| CollectionFlow.cs:345:9:345:12 | [post] access to local variable list : List [element] : KeyValuePair | CollectionFlow.cs:346:9:346:12 | access to local variable list : List [element] : KeyValuePair | provenance | | +| CollectionFlow.cs:345:18:345:47 | object creation of type KeyValuePair : KeyValuePair | CollectionFlow.cs:345:9:345:12 | [post] access to local variable list : List [element] : KeyValuePair | provenance | MaD:3 | +| CollectionFlow.cs:346:9:346:12 | access to local variable list : List> | CollectionFlow.cs:346:21:346:23 | kvp : KeyValuePair | provenance | MaD:22 | +| CollectionFlow.cs:346:9:346:12 | access to local variable list : List [element] : KeyValuePair | CollectionFlow.cs:346:21:346:23 | kvp : KeyValuePair | provenance | MaD:22 | +| CollectionFlow.cs:346:21:346:23 | kvp : KeyValuePair | CollectionFlow.cs:348:18:348:20 | access to parameter kvp : KeyValuePair | provenance | | +| CollectionFlow.cs:348:18:348:20 | access to parameter kvp : KeyValuePair | CollectionFlow.cs:348:18:348:26 | access to property Value | provenance | MaD:16 | +| 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:380:13:380:16 | access to local variable list : List | CollectionFlow.cs:382:14:382:17 | access to local variable list : List | provenance | | +| CollectionFlow.cs:380:13:380:16 | access to local variable list : List | CollectionFlow.cs:382:14:382:20 | access to indexer | provenance | | +| CollectionFlow.cs:380:13:380:16 | access to local variable list : List | CollectionFlow.cs:383:22:383:25 | access to local variable list : List | provenance | | +| CollectionFlow.cs:380:13:380:16 | access to local variable list : List | CollectionFlow.cs:384:24:384:27 | access to local variable list : List | provenance | | +| CollectionFlow.cs:380:20:380:32 | object creation of type List : List | CollectionFlow.cs:380:13:380:16 | access to local variable list : List | 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 | CollectionFlow.cs:382:14:382:20 | access to indexer | provenance | MaD:12 | +| 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:12 | +| CollectionFlow.cs:383:22:383:25 | access to local variable list : List | CollectionFlow.cs:18:49:18:52 | list : List | provenance | | +| 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 | CollectionFlow.cs:28:43:28:46 | list : List | provenance | | +| CollectionFlow.cs:384:24:384:27 | access to local variable list : List | CollectionFlow.cs:384:14:384:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:384:24:384:27 | access to local variable list : List | CollectionFlow.cs:384:14:384:28 | call to method ListFirst | provenance | MaD:12 | +| 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:12 | +| CollectionFlow.cs:389:13:389:16 | access to local variable list : List | CollectionFlow.cs:391:14:391:17 | access to local variable list : List | provenance | | +| CollectionFlow.cs:389:13:389:16 | access to local variable list : List | CollectionFlow.cs:391:14:391:20 | access to indexer | provenance | | +| CollectionFlow.cs:389:13:389:16 | access to local variable list : List | CollectionFlow.cs:392:22:392:25 | access to local variable list : List | provenance | | +| CollectionFlow.cs:389:13:389:16 | access to local variable list : List | CollectionFlow.cs:393:24:393:27 | access to local variable list : List | provenance | | +| CollectionFlow.cs:389:20:389:32 | object creation of type List : List | CollectionFlow.cs:389:13:389:16 | access to local variable list : List | provenance | | +| CollectionFlow.cs:391:14:391:17 | access to local variable list : List | CollectionFlow.cs:391:14:391:20 | access to indexer | provenance | MaD:12 | +| CollectionFlow.cs:392:22:392:25 | access to local variable list : List | CollectionFlow.cs:18:49:18:52 | list : List | provenance | | +| CollectionFlow.cs:393:24:393:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | provenance | | +| CollectionFlow.cs:393:24:393:27 | access to local variable list : List | CollectionFlow.cs:393:14:393:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:393:24:393:27 | access to local variable list : List | CollectionFlow.cs:393:14:393:28 | call to method ListFirst | provenance | MaD:12 | +| 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:423:13:423:16 | access to local variable list : List | CollectionFlow.cs:425:9:425:12 | access to local variable list : List | provenance | | +| CollectionFlow.cs:423:20:423:32 | object creation of type List : List | CollectionFlow.cs:423:13:423:16 | access to local variable list : List | provenance | | +| CollectionFlow.cs:425:9:425:12 | [post] access to local variable list : List | CollectionFlow.cs:426:14:426:17 | access to local variable list : List | provenance | | +| CollectionFlow.cs:425:9:425:12 | [post] access to local variable list : List | CollectionFlow.cs:426:14:426:20 | access to indexer | provenance | | +| CollectionFlow.cs:425:9:425:12 | [post] access to local variable list : List | CollectionFlow.cs:427:22:427:25 | access to local variable list : List | provenance | | +| CollectionFlow.cs:425:9:425:12 | [post] access to local variable list : List | CollectionFlow.cs:428:24:428:27 | access to local variable list : List | provenance | | +| CollectionFlow.cs:425:9:425:12 | access to local variable list : List | CollectionFlow.cs:425:9:425:12 | [post] access to local variable list : List | provenance | MaD:4 | +| CollectionFlow.cs:425:9:425:12 | access to local variable list : List | CollectionFlow.cs:425:9:425:12 | [post] access to local variable list : List | provenance | MaD:20 | +| CollectionFlow.cs:426:14:426:17 | access to local variable list : List | CollectionFlow.cs:426:14:426:20 | access to indexer | provenance | MaD:12 | +| CollectionFlow.cs:427:22:427:25 | access to local variable list : List | CollectionFlow.cs:18:49:18:52 | list : List | provenance | | +| CollectionFlow.cs:428:24:428:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | provenance | | +| CollectionFlow.cs:428:24:428:27 | access to local variable list : List | CollectionFlow.cs:428:14:428:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:428:24:428:27 | access to local variable list : List | CollectionFlow.cs:428:14:428:28 | call to method ListFirst | provenance | MaD:12 | +| 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:440:13:440:17 | access to local variable array : MyInlineArray | CollectionFlow.cs:442:14:442:21 | access to array element | provenance | | +| CollectionFlow.cs:440:21:440:39 | object creation of type MyInlineArray : MyInlineArray | CollectionFlow.cs:440:13:440:17 | access to local variable array : MyInlineArray | 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:447:13:447:17 | access to local variable array : MyInlineArray | CollectionFlow.cs:449:14:449:21 | access to array element | provenance | | +| CollectionFlow.cs:447:21:447:39 | object creation of type MyInlineArray : MyInlineArray | CollectionFlow.cs:447:13:447:17 | access to local variable array : MyInlineArray | 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:12 | +| 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 | CollectionFlow.cs:522:14:522:17 | access to local variable span : Span | provenance | | +| CollectionFlow.cs:521:17:521:20 | access to local variable span : Span | CollectionFlow.cs:522:14:522:20 | access to indexer | 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 | CollectionFlow.cs:521:17:521:20 | access to local variable span : Span | 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:27 | +| CollectionFlow.cs:522:14:522:17 | access to local variable span : Span | CollectionFlow.cs:522:14:522:20 | access to indexer | provenance | MaD:30 | +| 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:30 | +| 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 | CollectionFlow.cs:529:19:529:22 | access to local variable span : Span | 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 | CollectionFlow.cs:528:17:528:20 | access to local variable span : Span | 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:27 | +| 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:13:529:15 | access to local variable arr : T[] [element] : Object | CollectionFlow.cs:530:14:530:16 | access to local variable arr : T[] [element] : Object | provenance | | +| CollectionFlow.cs:529:19:529:22 | access to local variable span : Span | CollectionFlow.cs:529:19:529:32 | call to method ToArray : T[] [element] : Object | provenance | MaD:29 | +| 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:29 | +| 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:529:19:529:32 | call to method ToArray : T[] [element] : Object | CollectionFlow.cs:529:13:529:15 | access to local variable arr : T[] [element] : Object | 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:530:14:530:16 | access to local variable arr : T[] [element] : Object | 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:26 | +| CollectionFlow.cs:537:14:537:19 | access to parameter target : Span [element] : A | CollectionFlow.cs:537:14:537:22 | access to indexer | provenance | MaD:30 | +| CollectionFlow.cs:542:13:542:18 | access to local variable source : Span | CollectionFlow.cs:543:9:543:14 | access to local variable source : Span | provenance | | +| 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 | CollectionFlow.cs:542:13:542:18 | access to local variable source : Span | 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:28 | +| 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 | CollectionFlow.cs:543:23:543:28 | [post] access to parameter target : Span [element] : Object | provenance | MaD:25 | +| 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:25 | +| 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:543:23:543:28 | [post] access to parameter target : Span [element] : Object | CollectionFlow.cs:544:14:544:19 | access to parameter target : Span [element] : Object | 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:30 | +| CollectionFlow.cs:544:14:544:19 | access to parameter target : Span [element] : Object | CollectionFlow.cs:544:14:544:22 | access to indexer | provenance | MaD:30 | +| 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 | CollectionFlow.cs:551:14:551:17 | access to local variable span : ReadOnlySpan | provenance | | +| CollectionFlow.cs:550:25:550:28 | access to local variable span : ReadOnlySpan | CollectionFlow.cs:551:14:551:20 | access to indexer | 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 | CollectionFlow.cs:550:25:550:28 | access to local variable span : ReadOnlySpan | 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:23 | +| 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 | CollectionFlow.cs:551:14:551:20 | access to indexer | provenance | MaD:24 | +| 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:24 | +| CollectionFlow.cs:555:13:555:13 | access to local variable a : A | CollectionFlow.cs:556:19:556:19 | access to local variable a : A | provenance | | +| CollectionFlow.cs:555:17:555:23 | object creation of type A : A | CollectionFlow.cs:555:13:555:13 | access to local variable a : A | provenance | | +| CollectionFlow.cs:556:9:556:12 | [post] access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:557:14:557:17 | access to parameter dict | provenance | | +| CollectionFlow.cs:556:19:556:19 | access to local variable a : A | CollectionFlow.cs:556:9:556:12 | [post] access to parameter dict : Dictionary [element, property Value] : A | provenance | MaD:11 | +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: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 | semmle.label | list : List | +| 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 | semmle.label | access to parameter list : List | +| 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 | semmle.label | dict : Dictionary | +| 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 | semmle.label | list : List | +| 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 | semmle.label | access to parameter list : List | +| 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:28:52:28:58 | access to indexer : Object | semmle.label | access to indexer : Object | +| CollectionFlow.cs:28:52:28:58 | access to indexer : T | semmle.label | access to indexer : T | +| CollectionFlow.cs:30:58:30:61 | dict : Dictionary | semmle.label | dict : Dictionary | +| 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:30:67:30:73 | access to indexer : T | semmle.label | access to indexer : T | +| CollectionFlow.cs:32:59:32:62 | dict : Dictionary | semmle.label | dict : Dictionary | +| 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 | semmle.label | access to parameter dict : Dictionary | +| 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 | semmle.label | call to method First> : KeyValuePair | +| 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:32:68:32:85 | access to property Value : T | semmle.label | access to property Value : T | +| 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 | semmle.label | dict : Dictionary | +| 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 | semmle.label | access to parameter dict : Dictionary | +| 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 | semmle.label | call to method First> : KeyValuePair | +| 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:38:66:38:81 | access to property Key : T | semmle.label | access to property Key : T | +| 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:122:13:122:16 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:122:20:122:32 | object creation of type List : List | semmle.label | object creation of type List : List | +| 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 | semmle.label | access to local variable list : List | +| 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 | semmle.label | access to local variable list : List | +| 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 | semmle.label | access to local variable list : List | +| 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:131:13:131:16 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:131:20:131:32 | object creation of type List : List | semmle.label | object creation of type List : List | +| CollectionFlow.cs:133:14:133:17 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:133:14:133:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:134:22:134:25 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:135:14:135:28 | call to method ListFirst | semmle.label | call to method ListFirst | +| CollectionFlow.cs:135:24:135:27 | access to local variable list : List | semmle.label | access to local variable list : List | +| 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 | semmle.label | access to local variable list : List | +| 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 | semmle.label | object creation of type List : List | +| 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 | semmle.label | access to local variable list : List | +| 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 | semmle.label | access to local variable list : List | +| 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 | semmle.label | access to local variable list : List | +| 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:149:13:149:16 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:149:20:149:42 | object creation of type List : List | semmle.label | object creation of type List : List | +| CollectionFlow.cs:150:14:150:17 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:150:14:150:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:151:22:151:25 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:152:14:152:28 | call to method ListFirst | semmle.label | call to method ListFirst | +| CollectionFlow.cs:152:24:152:27 | access to local variable list : List | semmle.label | access to local variable list : List | +| 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:158:13:158:16 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:158:20:158:32 | object creation of type List : List | semmle.label | object creation of type List : List | +| 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 | semmle.label | access to local variable list : List | +| 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 | semmle.label | access to local variable list : List | +| 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 | semmle.label | access to local variable list : List | +| 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:167:13:167:16 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:167:20:167:32 | object creation of type List : List | semmle.label | object creation of type List : List | +| CollectionFlow.cs:169:14:169:17 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:169:14:169:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:170:22:170:25 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:171:14:171:28 | call to method ListFirst | semmle.label | call to method ListFirst | +| CollectionFlow.cs:171:24:171:27 | access to local variable list : List | semmle.label | access to local variable list : List | +| 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 | semmle.label | access to local variable dict : Dictionary | +| CollectionFlow.cs:177:20:177:43 | object creation of type Dictionary : Dictionary | semmle.label | object creation of type Dictionary : Dictionary | +| 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 | semmle.label | access to local variable dict : Dictionary | +| 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 | semmle.label | access to local variable dict : Dictionary | +| 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 | semmle.label | access to local variable dict : Dictionary | +| 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:188:13:188:16 | access to local variable dict : Dictionary | semmle.label | access to local variable dict : Dictionary | +| CollectionFlow.cs:188:20:188:43 | object creation of type Dictionary : Dictionary | semmle.label | object creation of type Dictionary : Dictionary | +| CollectionFlow.cs:190:14:190:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:191:23:191:26 | access to local variable dict : Dictionary | semmle.label | access to local variable dict : Dictionary | +| CollectionFlow.cs:192:14:192:32 | call to method DictIndexZero | semmle.label | call to method DictIndexZero | +| CollectionFlow.cs:192:28:192:31 | access to local variable dict : Dictionary | semmle.label | access to local variable dict : Dictionary | +| CollectionFlow.cs:193:14:193:33 | call to method DictFirstValue | semmle.label | call to method DictFirstValue | +| CollectionFlow.cs:193:29:193:32 | access to local variable dict : Dictionary | semmle.label | access to local variable dict : Dictionary | +| 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 | semmle.label | access to local variable dict : Dictionary | +| 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 | semmle.label | object creation of type Dictionary : Dictionary | +| 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 | semmle.label | access to local variable dict : Dictionary | +| 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 | semmle.label | access to local variable dict : Dictionary | +| 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 | semmle.label | access to local variable dict : Dictionary | +| 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:210:13:210:16 | access to local variable dict : Dictionary | semmle.label | access to local variable dict : Dictionary | +| CollectionFlow.cs:210:20:210:60 | object creation of type Dictionary : Dictionary | semmle.label | object creation of type Dictionary : Dictionary | +| CollectionFlow.cs:211:14:211:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:212:23:212:26 | access to local variable dict : Dictionary | semmle.label | access to local variable dict : Dictionary | +| CollectionFlow.cs:213:14:213:32 | call to method DictIndexZero | semmle.label | call to method DictIndexZero | +| CollectionFlow.cs:213:28:213:31 | access to local variable dict : Dictionary | semmle.label | access to local variable dict : Dictionary | +| CollectionFlow.cs:214:14:214:33 | call to method DictFirstValue | semmle.label | call to method DictFirstValue | +| CollectionFlow.cs:214:29:214:32 | access to local variable dict : Dictionary | semmle.label | access to local variable dict : Dictionary | +| 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 | semmle.label | access to local variable dict : Dictionary | +| 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 | semmle.label | object creation of type Dictionary : Dictionary | +| 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 | semmle.label | access to local variable dict : Dictionary | +| 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 | semmle.label | access to local variable dict : Dictionary | +| 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 | semmle.label | access to local variable dict : Dictionary | +| 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:232:13:232:16 | access to local variable dict : Dictionary | semmle.label | access to local variable dict : Dictionary | +| CollectionFlow.cs:232:20:232:59 | object creation of type Dictionary : Dictionary | semmle.label | object creation of type Dictionary : Dictionary | +| CollectionFlow.cs:233:14:233:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:234:23:234:26 | access to local variable dict : Dictionary | semmle.label | access to local variable dict : Dictionary | +| CollectionFlow.cs:235:14:235:32 | call to method DictIndexZero | semmle.label | call to method DictIndexZero | +| CollectionFlow.cs:235:28:235:31 | access to local variable dict : Dictionary | semmle.label | access to local variable dict : Dictionary | +| CollectionFlow.cs:236:14:236:33 | call to method DictFirstValue | semmle.label | call to method DictFirstValue | +| CollectionFlow.cs:236:29:236:32 | access to local variable dict : Dictionary | semmle.label | access to local variable dict : Dictionary | +| 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 | semmle.label | access to local variable dict : Dictionary | +| 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 | semmle.label | object creation of type Dictionary : Dictionary | +| 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 | semmle.label | access to local variable dict : Dictionary | +| 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:252:13:252:16 | access to local variable dict : Dictionary | semmle.label | access to local variable dict : Dictionary | +| CollectionFlow.cs:252:20:252:60 | object creation of type Dictionary : Dictionary | semmle.label | object creation of type Dictionary : Dictionary | +| CollectionFlow.cs:256:14:256:31 | call to method DictFirstKey | semmle.label | call to method DictFirstKey | +| CollectionFlow.cs:256:27:256:30 | access to local variable dict : Dictionary | semmle.label | access to local variable dict : Dictionary | +| 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 | semmle.label | access to local variable dict : Dictionary | +| 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 | semmle.label | object creation of type Dictionary : Dictionary | +| 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 | semmle.label | access to local variable dict : Dictionary | +| 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:271:13:271:16 | access to local variable dict : Dictionary | semmle.label | access to local variable dict : Dictionary | +| CollectionFlow.cs:271:20:271:59 | object creation of type Dictionary : Dictionary | semmle.label | object creation of type Dictionary : Dictionary | +| CollectionFlow.cs:275:14:275:31 | call to method DictFirstKey | semmle.label | call to method DictFirstKey | +| CollectionFlow.cs:275:27:275:30 | access to local variable dict : Dictionary | semmle.label | access to local variable dict : Dictionary | +| 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:313:13:313:16 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:313:20:313:32 | object creation of type List : List | semmle.label | object creation of type List : List | +| 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:13:315:22 | access to local variable enumerator : List.Enumerator [property Current] : Object | semmle.label | access to local variable enumerator : List.Enumerator [property Current] : Object | +| CollectionFlow.cs:315:13:315:22 | access to local variable enumerator : List.Enumerator [property Current] : Object | semmle.label | access to local variable enumerator : List.Enumerator [property Current] : Object | +| CollectionFlow.cs:315:26:315:29 | access to local variable list : List | semmle.label | access to local variable list : List | +| 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:315:26:315:45 | call to method GetEnumerator : List.Enumerator [property Current] : Object | semmle.label | call to method GetEnumerator : List.Enumerator [property Current] : Object | +| CollectionFlow.cs:315:26:315:45 | call to method GetEnumerator : List.Enumerator [property Current] : Object | semmle.label | call to method GetEnumerator : List.Enumerator [property Current] : Object | +| 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:27 | access to local variable enumerator : List.Enumerator [property Current] : Object | semmle.label | access to local variable enumerator : List.Enumerator [property Current] : Object | +| CollectionFlow.cs:317:18:317:27 | access to local variable enumerator : List.Enumerator [property Current] : Object | semmle.label | access to local variable enumerator : List.Enumerator [property Current] : Object | +| CollectionFlow.cs:317:18:317:35 | access to property Current | semmle.label | access to property Current | +| CollectionFlow.cs:322:13:322:16 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:322:20:322:32 | object creation of type List : List | semmle.label | object creation of type List : List | +| CollectionFlow.cs:324:13:324:22 | access to local variable enumerator : List.Enumerator [property Current] : Object | semmle.label | access to local variable enumerator : List.Enumerator [property Current] : Object | +| CollectionFlow.cs:324:13:324:22 | access to local variable enumerator : List.Enumerator [property Current] : Object | semmle.label | access to local variable enumerator : List.Enumerator [property Current] : Object | +| CollectionFlow.cs:324:26:324:29 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:324:26:324:45 | call to method GetEnumerator : List.Enumerator [property Current] : Object | semmle.label | call to method GetEnumerator : List.Enumerator [property Current] : Object | +| CollectionFlow.cs:324:26:324:45 | call to method GetEnumerator : List.Enumerator [property Current] : Object | semmle.label | call to method GetEnumerator : List.Enumerator [property Current] : Object | +| CollectionFlow.cs:326:18:326:27 | access to local variable enumerator : List.Enumerator [property Current] : Object | semmle.label | access to local variable enumerator : List.Enumerator [property Current] : Object | +| CollectionFlow.cs:326:18:326:27 | access to local variable enumerator : List.Enumerator [property Current] : Object | semmle.label | access to local variable enumerator : List.Enumerator [property Current] : Object | +| CollectionFlow.cs:326:18:326: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:332:13:332:16 | access to local variable list : List> | semmle.label | access to local variable list : List> | +| CollectionFlow.cs:332:20:332:51 | object creation of type List> : List> | semmle.label | object creation of type List> : List> | +| 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:9:333:12 | [post] access to local variable list : List [element] : KeyValuePair | semmle.label | [post] access to local variable list : List [element] : KeyValuePair | +| CollectionFlow.cs:333:18:333:47 | object creation of type KeyValuePair : KeyValuePair | semmle.label | object creation of type KeyValuePair : KeyValuePair | +| 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> | semmle.label | access to local variable list : List> | +| 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:9:334:12 | access to local variable list : List [element] : KeyValuePair | semmle.label | access to local variable list : List [element] : KeyValuePair | +| CollectionFlow.cs:334:21:334:23 | kvp : KeyValuePair | semmle.label | kvp : KeyValuePair | +| 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 | semmle.label | access to parameter kvp : KeyValuePair | +| 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:344:13:344:16 | access to local variable list : List> | semmle.label | access to local variable list : List> | +| CollectionFlow.cs:344:20:344:51 | object creation of type List> : List> | semmle.label | object creation of type List> : List> | +| CollectionFlow.cs:345:9:345:12 | [post] access to local variable list : List [element] : KeyValuePair | semmle.label | [post] access to local variable list : List [element] : KeyValuePair | +| CollectionFlow.cs:345:18:345:47 | object creation of type KeyValuePair : KeyValuePair | semmle.label | object creation of type KeyValuePair : KeyValuePair | +| CollectionFlow.cs:346:9:346:12 | access to local variable list : List> | semmle.label | access to local variable list : List> | +| CollectionFlow.cs:346:9:346:12 | access to local variable list : List [element] : KeyValuePair | semmle.label | access to local variable list : List [element] : KeyValuePair | +| CollectionFlow.cs:346:21:346:23 | kvp : KeyValuePair | semmle.label | kvp : KeyValuePair | +| CollectionFlow.cs:348:18:348:20 | access to parameter kvp : KeyValuePair | semmle.label | access to parameter kvp : KeyValuePair | +| CollectionFlow.cs:348:18:348:26 | access to property Value | semmle.label | access to property Value | +| 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:380:13:380:16 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:380:20:380:32 | object creation of type List : List | semmle.label | object creation of type List : List | +| 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 | semmle.label | access to local variable list : List | +| 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 | semmle.label | access to local variable list : List | +| 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 | semmle.label | access to local variable list : List | +| 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:389:13:389:16 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:389:20:389:32 | object creation of type List : List | semmle.label | object creation of type List : List | +| CollectionFlow.cs:391:14:391:17 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:391:14:391:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:392:22:392:25 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:393:14:393:28 | call to method ListFirst | semmle.label | call to method ListFirst | +| CollectionFlow.cs:393:24:393:27 | access to local variable list : List | semmle.label | access to local variable list : List | +| 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:423:13:423:16 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:423:20:423:32 | object creation of type List : List | semmle.label | object creation of type List : List | +| CollectionFlow.cs:425:9:425:12 | [post] access to local variable list : List | semmle.label | [post] access to local variable list : List | +| CollectionFlow.cs:425:9:425:12 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:426:14:426:17 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:426:14:426:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:427:22:427:25 | access to local variable list : List | semmle.label | access to local variable list : List | +| CollectionFlow.cs:428:14:428:28 | call to method ListFirst | semmle.label | call to method ListFirst | +| CollectionFlow.cs:428:24:428:27 | access to local variable list : List | semmle.label | access to local variable list : List | +| 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:440:13:440:17 | access to local variable array : MyInlineArray | semmle.label | access to local variable array : MyInlineArray | +| CollectionFlow.cs:440:21:440:39 | object creation of type MyInlineArray : MyInlineArray | semmle.label | object creation of type MyInlineArray : MyInlineArray | +| 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:447:13:447:17 | access to local variable array : MyInlineArray | semmle.label | access to local variable array : MyInlineArray | +| CollectionFlow.cs:447:21:447:39 | object creation of type MyInlineArray : MyInlineArray | semmle.label | object creation of type MyInlineArray : MyInlineArray | +| CollectionFlow.cs:449:14:449: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 | semmle.label | access to local variable span : Span | +| 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 | semmle.label | object creation of type Span : Span | +| 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 | semmle.label | access to local variable span : Span | +| 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 | semmle.label | access to local variable span : Span | +| 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 | semmle.label | object creation of type Span : Span | +| 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:13:529:15 | access to local variable arr : T[] [element] : Object | semmle.label | access to local variable arr : T[] [element] : Object | +| CollectionFlow.cs:529:19:529:22 | access to local variable span : Span | semmle.label | access to local variable span : Span | +| 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:529:19:529:32 | call to method ToArray : T[] [element] : Object | semmle.label | call to method ToArray : T[] [element] : Object | +| 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:16 | access to local variable arr : T[] [element] : Object | semmle.label | access to local variable arr : T[] [element] : Object | +| 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 | semmle.label | access to local variable source : Span | +| 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 | semmle.label | object creation of type Span : Span | +| 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 | semmle.label | access to local variable source : Span | +| 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:543:23:543:28 | [post] access to parameter target : Span [element] : Object | semmle.label | [post] access to parameter target : Span [element] : Object | +| 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:19 | access to parameter target : Span [element] : Object | semmle.label | access to parameter target : Span [element] : Object | +| 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 | semmle.label | access to local variable span : ReadOnlySpan | +| 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 | semmle.label | object creation of type ReadOnlySpan : ReadOnlySpan | +| 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 | semmle.label | access to local variable span : ReadOnlySpan | +| 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 | +| CollectionFlow.cs:555:13:555:13 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:555:17:555:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:556:9:556:12 | [post] access to parameter dict : Dictionary [element, property Value] : A | semmle.label | [post] access to parameter dict : Dictionary [element, property Value] : A | +| CollectionFlow.cs:556:19:556:19 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:557:14:557:17 | access to parameter dict | semmle.label | access to parameter dict | +subpaths +| 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 | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : Object | CollectionFlow.cs:126:14:126:28 | call to method ListFirst | +| CollectionFlow.cs:126:24:126:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : T | CollectionFlow.cs:126:14:126:28 | call to method ListFirst | +| 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:135:24:135:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : Object | CollectionFlow.cs:135:14:135:28 | call to method ListFirst | +| CollectionFlow.cs:135:24:135:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : T | CollectionFlow.cs:135:14:135:28 | call to method ListFirst | +| CollectionFlow.cs:144:24:144:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : Object | CollectionFlow.cs:144:14:144:28 | call to method ListFirst | +| CollectionFlow.cs:144:24:144:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : T | CollectionFlow.cs:144:14:144: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:152:24:152:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : Object | CollectionFlow.cs:152:14:152:28 | call to method ListFirst | +| CollectionFlow.cs:152:24:152:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : T | CollectionFlow.cs:152:14:152:28 | call to method ListFirst | +| CollectionFlow.cs:162:24:162:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : Object | CollectionFlow.cs:162:14:162:28 | call to method ListFirst | +| CollectionFlow.cs:162:24:162:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : T | CollectionFlow.cs:162:14:162: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:171:24:171:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : Object | CollectionFlow.cs:171:14:171:28 | call to method ListFirst | +| CollectionFlow.cs:171:24:171:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : T | CollectionFlow.cs:171:14:171:28 | call to method ListFirst | +| CollectionFlow.cs:181:28:181:31 | access to local variable dict : Dictionary | CollectionFlow.cs:30:58:30:61 | dict : Dictionary | CollectionFlow.cs:30:67:30:73 | access to indexer : T | CollectionFlow.cs:181:14:181:32 | call to method DictIndexZero | +| 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 | CollectionFlow.cs:32:59:32:62 | dict : Dictionary | CollectionFlow.cs:32:68:32:85 | access to property Value : T | CollectionFlow.cs:182:14:182:33 | call to method DictFirstValue | +| 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:192:28:192:31 | access to local variable dict : Dictionary | CollectionFlow.cs:30:58:30:61 | dict : Dictionary | CollectionFlow.cs:30:67:30:73 | access to indexer : T | CollectionFlow.cs:192:14:192:32 | call to method DictIndexZero | +| CollectionFlow.cs:193:29:193:32 | access to local variable dict : Dictionary | CollectionFlow.cs:32:59:32:62 | dict : Dictionary | CollectionFlow.cs:32:68:32:85 | access to property Value : T | CollectionFlow.cs:193:14:193:33 | call to method DictFirstValue | +| CollectionFlow.cs:203:28:203:31 | access to local variable dict : Dictionary | CollectionFlow.cs:30:58:30:61 | dict : Dictionary | CollectionFlow.cs:30:67:30:73 | access to indexer : T | CollectionFlow.cs:203:14:203:32 | call to method DictIndexZero | +| 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 | CollectionFlow.cs:32:59:32:62 | dict : Dictionary | CollectionFlow.cs:32:68:32:85 | access to property Value : T | CollectionFlow.cs:204:14:204:33 | call to method DictFirstValue | +| 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:213:28:213:31 | access to local variable dict : Dictionary | CollectionFlow.cs:30:58:30:61 | dict : Dictionary | CollectionFlow.cs:30:67:30:73 | access to indexer : T | CollectionFlow.cs:213:14:213:32 | call to method DictIndexZero | +| CollectionFlow.cs:214:29:214:32 | access to local variable dict : Dictionary | CollectionFlow.cs:32:59:32:62 | dict : Dictionary | CollectionFlow.cs:32:68:32:85 | access to property Value : T | CollectionFlow.cs:214:14:214:33 | call to method DictFirstValue | +| CollectionFlow.cs:224:28:224:31 | access to local variable dict : Dictionary | CollectionFlow.cs:30:58:30:61 | dict : Dictionary | CollectionFlow.cs:30:67:30:73 | access to indexer : T | CollectionFlow.cs:224:14:224:32 | call to method DictIndexZero | +| 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 | CollectionFlow.cs:32:59:32:62 | dict : Dictionary | CollectionFlow.cs:32:68:32:85 | access to property Value : T | CollectionFlow.cs:225:14:225:33 | call to method DictFirstValue | +| 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:235:28:235:31 | access to local variable dict : Dictionary | CollectionFlow.cs:30:58:30:61 | dict : Dictionary | CollectionFlow.cs:30:67:30:73 | access to indexer : T | CollectionFlow.cs:235:14:235:32 | call to method DictIndexZero | +| CollectionFlow.cs:236:29:236:32 | access to local variable dict : Dictionary | CollectionFlow.cs:32:59:32:62 | dict : Dictionary | CollectionFlow.cs:32:68:32:85 | access to property Value : T | CollectionFlow.cs:236:14:236:33 | call to method DictFirstValue | +| 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 | CollectionFlow.cs:38:57:38:60 | dict : Dictionary | CollectionFlow.cs:38:66:38:81 | access to property Key : T | CollectionFlow.cs:247:14:247:31 | call to method DictFirstKey | +| 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:256:27:256:30 | access to local variable dict : Dictionary | CollectionFlow.cs:38:57:38:60 | dict : Dictionary | CollectionFlow.cs:38:66:38:81 | access to property Key : T | CollectionFlow.cs:256:14:256: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 | CollectionFlow.cs:38:57:38:60 | dict : Dictionary | CollectionFlow.cs:38:66:38:81 | access to property Key : T | CollectionFlow.cs:266:14:266:31 | call to method DictFirstKey | +| 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:275:27:275:30 | access to local variable dict : Dictionary | CollectionFlow.cs:38:57:38:60 | dict : Dictionary | CollectionFlow.cs:38:66:38:81 | access to property Key : T | CollectionFlow.cs:275:14:275: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 | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : Object | CollectionFlow.cs:384:14:384:28 | call to method ListFirst | +| CollectionFlow.cs:384:24:384:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : T | CollectionFlow.cs:384:14:384:28 | call to method ListFirst | +| 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 | +| CollectionFlow.cs:393:24:393:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : Object | CollectionFlow.cs:393:14:393:28 | call to method ListFirst | +| CollectionFlow.cs:393:24:393:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : T | CollectionFlow.cs:393:14:393:28 | call to method ListFirst | +| CollectionFlow.cs:428:24:428:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : Object | CollectionFlow.cs:428:14:428:28 | call to method ListFirst | +| CollectionFlow.cs:428:24:428:27 | access to local variable list : List | CollectionFlow.cs:28:43:28:46 | list : List | CollectionFlow.cs:28:52:28:58 | access to indexer : T | CollectionFlow.cs:428:14:428:28 | call to method ListFirst | +#select +| 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:122:20:122:32 | object creation of type List : List | CollectionFlow.cs:122:20:122:32 | object creation of type List : List | CollectionFlow.cs:18:63:18:69 | access to indexer | $@ | CollectionFlow.cs:18:63:18:69 | access to indexer | access to indexer | +| CollectionFlow.cs:122:20:122:32 | object creation of type List : List | CollectionFlow.cs:122:20:122:32 | object creation of type List : List | CollectionFlow.cs:124:14:124:20 | access to indexer | $@ | CollectionFlow.cs:124:14:124:20 | access to indexer | access to indexer | +| CollectionFlow.cs:122:20:122:32 | object creation of type List : List | CollectionFlow.cs:122:20:122:32 | object creation of type List : List | 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:131:20:131:32 | object creation of type List : List | CollectionFlow.cs:131:20:131:32 | object creation of type List : List | CollectionFlow.cs:18:63:18:69 | access to indexer | $@ | CollectionFlow.cs:18:63:18:69 | access to indexer | access to indexer | +| CollectionFlow.cs:131:20:131:32 | object creation of type List : List | CollectionFlow.cs:131:20:131:32 | object creation of type List : List | CollectionFlow.cs:133:14:133:20 | access to indexer | $@ | CollectionFlow.cs:133:14:133:20 | access to indexer | access to indexer | +| CollectionFlow.cs:131:20:131:32 | object creation of type List : List | CollectionFlow.cs:131:20:131:32 | object creation of type List : List | CollectionFlow.cs:135:14:135:28 | call to method ListFirst | $@ | CollectionFlow.cs:135:14:135: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:141:20:141:38 | object creation of type List : List | CollectionFlow.cs:141:20:141:38 | object creation of type List : List | CollectionFlow.cs:18:63:18:69 | access to indexer | $@ | CollectionFlow.cs:18:63:18:69 | access to indexer | access to indexer | +| CollectionFlow.cs:141:20:141:38 | object creation of type List : List | CollectionFlow.cs:141:20:141:38 | object creation of type List : List | CollectionFlow.cs:142:14:142:20 | access to indexer | $@ | CollectionFlow.cs:142:14:142:20 | access to indexer | access to indexer | +| CollectionFlow.cs:141:20:141:38 | object creation of type List : List | CollectionFlow.cs:141:20:141:38 | object creation of type List : List | 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:149:20:149:42 | object creation of type List : List | CollectionFlow.cs:149:20:149:42 | object creation of type List : List | CollectionFlow.cs:18:63:18:69 | access to indexer | $@ | CollectionFlow.cs:18:63:18:69 | access to indexer | access to indexer | +| CollectionFlow.cs:149:20:149:42 | object creation of type List : List | CollectionFlow.cs:149:20:149:42 | object creation of type List : List | CollectionFlow.cs:150:14:150:20 | access to indexer | $@ | CollectionFlow.cs:150:14:150:20 | access to indexer | access to indexer | +| CollectionFlow.cs:149:20:149:42 | object creation of type List : List | CollectionFlow.cs:149:20:149:42 | object creation of type List : List | CollectionFlow.cs:152:14:152:28 | call to method ListFirst | $@ | CollectionFlow.cs:152:14:152: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:158:20:158:32 | object creation of type List : List | CollectionFlow.cs:158:20:158:32 | object creation of type List : List | CollectionFlow.cs:18:63:18:69 | access to indexer | $@ | CollectionFlow.cs:18:63:18:69 | access to indexer | access to indexer | +| CollectionFlow.cs:158:20:158:32 | object creation of type List : List | CollectionFlow.cs:158:20:158:32 | object creation of type List : List | CollectionFlow.cs:160:14:160:20 | access to indexer | $@ | CollectionFlow.cs:160:14:160:20 | access to indexer | access to indexer | +| CollectionFlow.cs:158:20:158:32 | object creation of type List : List | CollectionFlow.cs:158:20:158:32 | object creation of type List : List | 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:167:20:167:32 | object creation of type List : List | CollectionFlow.cs:167:20:167:32 | object creation of type List : List | CollectionFlow.cs:18:63:18:69 | access to indexer | $@ | CollectionFlow.cs:18:63:18:69 | access to indexer | access to indexer | +| CollectionFlow.cs:167:20:167:32 | object creation of type List : List | CollectionFlow.cs:167:20:167:32 | object creation of type List : List | CollectionFlow.cs:169:14:169:20 | access to indexer | $@ | CollectionFlow.cs:169:14:169:20 | access to indexer | access to indexer | +| CollectionFlow.cs:167:20:167:32 | object creation of type List : List | CollectionFlow.cs:167:20:167:32 | object creation of type List : List | CollectionFlow.cs:171:14:171:28 | call to method ListFirst | $@ | CollectionFlow.cs:171:14:171: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:177:20:177:43 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:177:20:177:43 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:20:75:20:81 | access to indexer | $@ | CollectionFlow.cs:20:75:20:81 | access to indexer | access to indexer | +| CollectionFlow.cs:177:20:177:43 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:177:20:177:43 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:179:14:179:20 | access to indexer | $@ | CollectionFlow.cs:179:14:179:20 | access to indexer | access to indexer | +| CollectionFlow.cs:177:20:177:43 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:177:20:177:43 | object creation of type Dictionary : Dictionary | 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:177:20:177:43 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:177:20:177:43 | object creation of type Dictionary : Dictionary | 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:188:20:188:43 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:188:20:188:43 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:20:75:20:81 | access to indexer | $@ | CollectionFlow.cs:20:75:20:81 | access to indexer | access to indexer | +| CollectionFlow.cs:188:20:188:43 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:188:20:188:43 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:190:14:190:20 | access to indexer | $@ | CollectionFlow.cs:190:14:190:20 | access to indexer | access to indexer | +| CollectionFlow.cs:188:20:188:43 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:188:20:188:43 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:192:14:192:32 | call to method DictIndexZero | $@ | CollectionFlow.cs:192:14:192:32 | call to method DictIndexZero | call to method DictIndexZero | +| CollectionFlow.cs:188:20:188:43 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:188:20:188:43 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:193:14:193:33 | call to method DictFirstValue | $@ | CollectionFlow.cs:193:14:193: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: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:200:20:200:56 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:200:20:200:56 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:20:75:20:81 | access to indexer | $@ | CollectionFlow.cs:20:75:20:81 | access to indexer | access to indexer | +| CollectionFlow.cs:200:20:200:56 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:200:20:200:56 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:201:14:201:20 | access to indexer | $@ | CollectionFlow.cs:201:14:201:20 | access to indexer | access to indexer | +| CollectionFlow.cs:200:20:200:56 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:200:20:200:56 | object creation of type Dictionary : Dictionary | 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:200:20:200:56 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:200:20:200:56 | object creation of type Dictionary : Dictionary | 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:210:20:210:60 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:210:20:210:60 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:20:75:20:81 | access to indexer | $@ | CollectionFlow.cs:20:75:20:81 | access to indexer | access to indexer | +| CollectionFlow.cs:210:20:210:60 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:210:20:210:60 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:211:14:211:20 | access to indexer | $@ | CollectionFlow.cs:211:14:211:20 | access to indexer | access to indexer | +| CollectionFlow.cs:210:20:210:60 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:210:20:210:60 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:213:14:213:32 | call to method DictIndexZero | $@ | CollectionFlow.cs:213:14:213:32 | call to method DictIndexZero | call to method DictIndexZero | +| CollectionFlow.cs:210:20:210:60 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:210:20:210:60 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:214:14:214:33 | call to method DictFirstValue | $@ | CollectionFlow.cs:214:14:214: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: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:221:20:221:55 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:221:20:221:55 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:20:75:20:81 | access to indexer | $@ | CollectionFlow.cs:20:75:20:81 | access to indexer | access to indexer | +| CollectionFlow.cs:221:20:221:55 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:221:20:221:55 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:222:14:222:20 | access to indexer | $@ | CollectionFlow.cs:222:14:222:20 | access to indexer | access to indexer | +| CollectionFlow.cs:221:20:221:55 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:221:20:221:55 | object creation of type Dictionary : Dictionary | 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:221:20:221:55 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:221:20:221:55 | object creation of type Dictionary : Dictionary | 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:232:20:232:59 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:232:20:232:59 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:20:75:20:81 | access to indexer | $@ | CollectionFlow.cs:20:75:20:81 | access to indexer | access to indexer | +| CollectionFlow.cs:232:20:232:59 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:232:20:232:59 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:233:14:233:20 | access to indexer | $@ | CollectionFlow.cs:233:14:233:20 | access to indexer | access to indexer | +| CollectionFlow.cs:232:20:232:59 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:232:20:232:59 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:235:14:235:32 | call to method DictIndexZero | $@ | CollectionFlow.cs:235:14:235:32 | call to method DictIndexZero | call to method DictIndexZero | +| CollectionFlow.cs:232:20:232:59 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:232:20:232:59 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:236:14:236:33 | call to method DictFirstValue | $@ | CollectionFlow.cs:236:14:236:33 | call to method DictFirstValue | call to method DictFirstValue | +| 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:243:20:243:56 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:243:20:243:56 | object creation of type Dictionary : Dictionary | 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:252:20:252:60 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:252:20:252:60 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:256:14:256:31 | call to method DictFirstKey | $@ | CollectionFlow.cs:256:14:256: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:262:20:262:55 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:262:20:262:55 | object creation of type Dictionary : Dictionary | 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:271:20:271:59 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:271:20:271:59 | object creation of type Dictionary : Dictionary | CollectionFlow.cs:275:14:275:31 | call to method DictFirstKey | $@ | CollectionFlow.cs:275:14:275: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:313:20:313:32 | object creation of type List : List | CollectionFlow.cs:313:20:313:32 | object creation of type List : List | 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:322:20:322:32 | object creation of type List : List | CollectionFlow.cs:322:20:322:32 | object creation of type List : List | CollectionFlow.cs:326:18:326:35 | access to property Current | $@ | CollectionFlow.cs:326:18:326: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:332:20:332:51 | object creation of type List> : List> | CollectionFlow.cs:332:20:332:51 | object creation of type List> : List> | 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:333:18:333:47 | object creation of type KeyValuePair : KeyValuePair | CollectionFlow.cs:333:18:333:47 | object creation of type KeyValuePair : KeyValuePair | 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:344:20:344:51 | object creation of type List> : List> | CollectionFlow.cs:344:20:344:51 | object creation of type List> : List> | CollectionFlow.cs:348:18:348:26 | access to property Value | $@ | CollectionFlow.cs:348:18:348:26 | access to property Value | access to property Value | +| CollectionFlow.cs:345:18:345:47 | object creation of type KeyValuePair : KeyValuePair | CollectionFlow.cs:345:18:345:47 | object creation of type KeyValuePair : KeyValuePair | CollectionFlow.cs:348:18:348:26 | access to property Value | $@ | CollectionFlow.cs:348:18:348:26 | access to property Value | access to property Value | +| 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:380:20:380:32 | object creation of type List : List | CollectionFlow.cs:380:20:380:32 | object creation of type List : List | CollectionFlow.cs:18:63:18:69 | access to indexer | $@ | CollectionFlow.cs:18:63:18:69 | access to indexer | access to indexer | +| CollectionFlow.cs:380:20:380:32 | object creation of type List : List | CollectionFlow.cs:380:20:380:32 | object creation of type List : List | CollectionFlow.cs:382:14:382:20 | access to indexer | $@ | CollectionFlow.cs:382:14:382:20 | access to indexer | access to indexer | +| CollectionFlow.cs:380:20:380:32 | object creation of type List : List | CollectionFlow.cs:380:20:380:32 | object creation of type List : List | 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:389:20:389:32 | object creation of type List : List | CollectionFlow.cs:389:20:389:32 | object creation of type List : List | CollectionFlow.cs:18:63:18:69 | access to indexer | $@ | CollectionFlow.cs:18:63:18:69 | access to indexer | access to indexer | +| CollectionFlow.cs:389:20:389:32 | object creation of type List : List | CollectionFlow.cs:389:20:389:32 | object creation of type List : List | CollectionFlow.cs:391:14:391:20 | access to indexer | $@ | CollectionFlow.cs:391:14:391:20 | access to indexer | access to indexer | +| CollectionFlow.cs:389:20:389:32 | object creation of type List : List | CollectionFlow.cs:389:20:389:32 | object creation of type List : List | CollectionFlow.cs:393:14:393:28 | call to method ListFirst | $@ | CollectionFlow.cs:393:14:393: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:423:20:423:32 | object creation of type List : List | CollectionFlow.cs:423:20:423:32 | object creation of type List : List | CollectionFlow.cs:18:63:18:69 | access to indexer | $@ | CollectionFlow.cs:18:63:18:69 | access to indexer | access to indexer | +| CollectionFlow.cs:423:20:423:32 | object creation of type List : List | CollectionFlow.cs:423:20:423:32 | object creation of type List : List | CollectionFlow.cs:426:14:426:20 | access to indexer | $@ | CollectionFlow.cs:426:14:426:20 | access to indexer | access to indexer | +| CollectionFlow.cs:423:20:423:32 | object creation of type List : List | CollectionFlow.cs:423:20:423:32 | object creation of type List : List | CollectionFlow.cs:428:14:428:28 | call to method ListFirst | $@ | CollectionFlow.cs:428:14:428:28 | call to method ListFirst | call to method ListFirst | +| 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:440:21:440:39 | object creation of type MyInlineArray : MyInlineArray | CollectionFlow.cs:440:21:440:39 | object creation of type MyInlineArray : MyInlineArray | 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:447:21:447:39 | object creation of type MyInlineArray : MyInlineArray | CollectionFlow.cs:447:21:447:39 | object creation of type MyInlineArray : MyInlineArray | CollectionFlow.cs:449:14:449:21 | access to array element | $@ | CollectionFlow.cs:449:14:449: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:521:24:521:41 | object creation of type Span : Span | CollectionFlow.cs:521:24:521:41 | object creation of type Span : Span | 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:528:24:528:41 | object creation of type Span : Span | CollectionFlow.cs:528:24:528:41 | object creation of type Span : Span | 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:22:542:51 | object creation of type Span : Span | CollectionFlow.cs:542:22:542:51 | object creation of type Span : Span | CollectionFlow.cs:544:14:544:22 | access to indexer | $@ | CollectionFlow.cs:544:14:544: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 | +| CollectionFlow.cs:550:32:550:63 | object creation of type ReadOnlySpan : ReadOnlySpan | CollectionFlow.cs:550:32:550:63 | object creation of type ReadOnlySpan : ReadOnlySpan | CollectionFlow.cs:551:14:551:20 | access to indexer | $@ | CollectionFlow.cs:551:14:551:20 | access to indexer | access to indexer | +| CollectionFlow.cs:555:17:555:23 | object creation of type A : A | CollectionFlow.cs:555:17:555:23 | object creation of type A : A | CollectionFlow.cs:557:14:557:17 | access to parameter dict | $@ | CollectionFlow.cs:557:14:557:17 | access to parameter dict | access to parameter dict | diff --git a/csharp/ql/test/library-tests/dataflow/collections/CollectionTaintFlow.ql b/csharp/ql/test/library-tests/dataflow/collections/CollectionTaintFlow.ql new file mode 100644 index 000000000000..7292e0dd0d6c --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/collections/CollectionTaintFlow.ql @@ -0,0 +1,12 @@ +/** + * @kind path-problem + */ + +import CollectionFlowCommon +import utils.test.ProvenancePathGraph::ShowProvenance + +module ArrayFlow = TaintTracking::Global; + +from ArrayFlow::PathNode source, ArrayFlow::PathNode sink +where ArrayFlow::flowPath(source, sink) +select source, source, sink, "$@", sink, sink.toString() diff --git a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected index 574ef53eae64..678dca279ff0 100644 --- a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected @@ -1,27 +1,30 @@ models edges -| Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | provenance | | +| Constructors.cs:3:18:3:26 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | provenance | | +| Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:3:18:3:26 | [post] this access : C_no_ctor [field s1] : Object | provenance | | | Constructors.cs:5:29:5:45 | call to method Source : Object | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | provenance | | | Constructors.cs:9:23:9:23 | access to local variable c : C_no_ctor [field s1] : Object | Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | provenance | | | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | Constructors.cs:9:23:9:23 | access to local variable c : C_no_ctor [field s1] : Object | provenance | | | Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | Constructors.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | provenance | | | Constructors.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | Constructors.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | provenance | | | Constructors.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | Constructors.cs:15:18:15:19 | access to field s1 | provenance | | -| Constructors.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | Constructors.cs:29:16:29:26 | this [Return] : C_with_ctor [field s1] : Object | provenance | | +| Constructors.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | Constructors.cs:29:16:29:26 | [post] this access : C_with_ctor [field s1] : Object | provenance | | | Constructors.cs:21:29:21:45 | call to method Source : Object | Constructors.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | provenance | | | Constructors.cs:25:25:25:25 | access to local variable c : C_with_ctor [field s1] : Object | Constructors.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | provenance | | | Constructors.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | Constructors.cs:25:25:25:25 | access to local variable c : C_with_ctor [field s1] : Object | provenance | | | Constructors.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | Constructors.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | provenance | | +| Constructors.cs:29:16:29:26 | [post] this access : C_with_ctor [field s1] : Object | Constructors.cs:29:16:29:26 | this [Return] : C_with_ctor [field s1] : Object | provenance | | | Constructors.cs:29:16:29:26 | this [Return] : C_with_ctor [field s1] : Object | Constructors.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | provenance | | | Constructors.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | Constructors.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | provenance | | | Constructors.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | Constructors.cs:33:18:33:19 | access to field s1 | provenance | | | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:38:41:38 | access to parameter o : Object | provenance | | | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | Constructors.cs:41:16:41:17 | this [Return] : C1 [field Obj] : Object | provenance | | | Constructors.cs:41:38:41:38 | access to parameter o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | provenance | | -| Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:46:23:46:27 | this access : C2 [parameter o21param] : Object | provenance | | -| Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:46:31:46:38 | access to parameter o21param : Object | provenance | | +| Constructors.cs:44:18:44:19 | [post] this access : C2 [field Obj21] : Object | Constructors.cs:44:18:44:19 | this [Return] : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:44:18:44:19 | this access : C2 [parameter o21param] : Object | Constructors.cs:44:18:44:19 | [post] this access : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:44:18:44:19 | this access : C2 [parameter o21param] : Object | Constructors.cs:46:23:46:27 | this access : C2 [parameter o21param] : Object | provenance | | +| Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:44:18:44:19 | this access : C2 [parameter o21param] : Object | provenance | | | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:44:18:44:19 | this [Return] : C2 [parameter o22param] : Object | provenance | | -| Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | Constructors.cs:44:18:44:19 | this [Return] : C2 [field Obj21] : Object | provenance | | | Constructors.cs:46:23:46:27 | this access : C2 [parameter o21param] : Object | Constructors.cs:46:31:46:38 | access to parameter o21param : Object | provenance | | | Constructors.cs:46:31:46:38 | access to parameter o21param : Object | Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | provenance | | | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | provenance | | @@ -120,6 +123,7 @@ edges | Constructors.cs:144:14:144:15 | access to local variable r1 : R1 [property Obj1] : Object | Constructors.cs:144:14:144:20 | access to property Obj1 | provenance | | | Constructors.cs:145:14:145:15 | access to local variable r1 : R1 [property Obj2] : Object | Constructors.cs:145:14:145:20 | access to property Obj2 | provenance | | nodes +| Constructors.cs:3:18:3:26 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | | Constructors.cs:5:29:5:45 | call to method Source : Object | semmle.label | call to method Source : Object | | Constructors.cs:9:23:9:23 | access to local variable c : C_no_ctor [field s1] : Object | semmle.label | access to local variable c : C_no_ctor [field s1] : Object | @@ -133,6 +137,7 @@ nodes | Constructors.cs:25:25:25:25 | access to local variable c : C_with_ctor [field s1] : Object | semmle.label | access to local variable c : C_with_ctor [field s1] : Object | | Constructors.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | semmle.label | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | | Constructors.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | semmle.label | access to local variable c : C_with_ctor [field s1] : Object | +| Constructors.cs:29:16:29:26 | [post] this access : C_with_ctor [field s1] : Object | semmle.label | [post] this access : C_with_ctor [field s1] : Object | | Constructors.cs:29:16:29:26 | this [Return] : C_with_ctor [field s1] : Object | semmle.label | this [Return] : C_with_ctor [field s1] : Object | | Constructors.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | semmle.label | this : C_with_ctor [field s1] : Object | | Constructors.cs:33:18:33:19 | access to field s1 | semmle.label | access to field s1 | @@ -141,8 +146,10 @@ nodes | Constructors.cs:41:26:41:26 | o : Object | semmle.label | o : Object | | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | semmle.label | [post] this access : C1 [field Obj] : Object | | Constructors.cs:41:38:41:38 | access to parameter o : Object | semmle.label | access to parameter o : Object | +| Constructors.cs:44:18:44:19 | [post] this access : C2 [field Obj21] : Object | semmle.label | [post] this access : C2 [field Obj21] : Object | | Constructors.cs:44:18:44:19 | this [Return] : C2 [field Obj21] : Object | semmle.label | this [Return] : C2 [field Obj21] : Object | | Constructors.cs:44:18:44:19 | this [Return] : C2 [parameter o22param] : Object | semmle.label | this [Return] : C2 [parameter o22param] : Object | +| Constructors.cs:44:18:44:19 | this access : C2 [parameter o21param] : Object | semmle.label | this access : C2 [parameter o21param] : Object | | Constructors.cs:44:28:44:35 | o21param : Object | semmle.label | o21param : Object | | Constructors.cs:44:45:44:52 | o22param : Object | semmle.label | o22param : Object | | Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | semmle.label | [post] this access : C2 [field Obj21] : Object | @@ -249,6 +256,7 @@ nodes | Constructors.cs:145:14:145:15 | access to local variable r1 : R1 [property Obj2] : Object | semmle.label | access to local variable r1 : R1 [property Obj2] : Object | | Constructors.cs:145:14:145:20 | access to property Obj2 | semmle.label | access to property Obj2 | subpaths +| Constructors.cs:44:18:44:19 | this access : C2 [parameter o21param] : Object | Constructors.cs:46:23:46:27 | this access : C2 [parameter o21param] : Object | Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | Constructors.cs:44:18:44:19 | [post] this access : C2 [field Obj21] : Object | | Constructors.cs:64:37:64:37 | access to parameter o : Object | Constructors.cs:57:54:57:55 | o2 : Object | Constructors.cs:59:13:59:14 | access to parameter o1 : Object | Constructors.cs:64:27:64:34 | access to parameter o22param : Object | | Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:16:41:17 | this [Return] : C1 [field Obj] : Object | Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | | Constructors.cs:79:25:79:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:44:18:44:19 | this [Return] : C2 [field Obj21] : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | diff --git a/csharp/ql/test/library-tests/dataflow/defuse/defUseEquivalence.ql b/csharp/ql/test/library-tests/dataflow/defuse/defUseEquivalence.ql index 0f278c9df1c1..f6aaf07485ea 100644 --- a/csharp/ql/test/library-tests/dataflow/defuse/defUseEquivalence.ql +++ b/csharp/ql/test/library-tests/dataflow/defuse/defUseEquivalence.ql @@ -1,9 +1,9 @@ import csharp -private import semmle.code.csharp.controlflow.internal.PreSsa +private import semmle.code.csharp.dataflow.internal.BaseSSA /** "Naive" def-use implementation. */ predicate defReaches( - AssignableDefinition def, PreSsa::SimpleLocalScopeVariable v, ControlFlow::Node cfn + AssignableDefinition def, BaseSsa::SimpleLocalScopeVariable v, ControlFlow::Node cfn ) { def.getTarget() = v and cfn = def.getExpr().getAControlFlowNode().getASuccessor() or diff --git a/csharp/ql/test/library-tests/dataflow/defuse/parameterUseEquivalence.ql b/csharp/ql/test/library-tests/dataflow/defuse/parameterUseEquivalence.ql index 88b93ceedfd9..87c26e322591 100644 --- a/csharp/ql/test/library-tests/dataflow/defuse/parameterUseEquivalence.ql +++ b/csharp/ql/test/library-tests/dataflow/defuse/parameterUseEquivalence.ql @@ -1,10 +1,10 @@ import csharp -private import semmle.code.csharp.controlflow.internal.PreSsa +private import semmle.code.csharp.dataflow.internal.BaseSSA /** "Naive" parameter-use implementation. */ predicate parameterReaches(Parameter p, ControlFlow::Node cfn) { cfn = p.getCallable().getEntryPoint().getASuccessor() and - p instanceof PreSsa::SimpleLocalScopeVariable + p instanceof BaseSsa::SimpleLocalScopeVariable or exists(ControlFlow::Node mid | parameterReaches(p, mid) | not mid = diff --git a/csharp/ql/test/library-tests/dataflow/defuse/useUseEquivalence.ql b/csharp/ql/test/library-tests/dataflow/defuse/useUseEquivalence.ql index 7952f3adef53..f212e48f1c4f 100644 --- a/csharp/ql/test/library-tests/dataflow/defuse/useUseEquivalence.ql +++ b/csharp/ql/test/library-tests/dataflow/defuse/useUseEquivalence.ql @@ -1,9 +1,9 @@ import csharp -private import semmle.code.csharp.controlflow.internal.PreSsa +private import semmle.code.csharp.dataflow.internal.BaseSSA /** "Naive" use-use implementation. */ predicate useReaches( - LocalScopeVariableRead read, PreSsa::SimpleLocalScopeVariable v, ControlFlow::Node cfn + LocalScopeVariableRead read, BaseSsa::SimpleLocalScopeVariable v, ControlFlow::Node cfn ) { read.getTarget() = v and cfn = read.getAControlFlowNode().getASuccessor() or diff --git a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected index ff9e6ab405e6..4e469e118870 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected @@ -332,18 +332,18 @@ edges | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | provenance | | | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | provenance | | | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | provenance | | -| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:16:13:16:13 | this [Return] : C [field s1] : Elem | provenance | | -| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:16:13:16:13 | this [Return] : C [field s1] : Elem | provenance | | +| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:16:13:16:13 | [post] this access : C [field s1] : Elem | provenance | | +| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:16:13:16:13 | [post] this access : C [field s1] : Elem | provenance | | | C.cs:3:23:3:37 | call to method Source : Elem | C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | provenance | | | C.cs:3:23:3:37 | call to method Source : Elem | C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | provenance | | -| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:16:13:16:13 | this [Return] : C [field s2] : Elem | provenance | | -| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:16:13:16:13 | this [Return] : C [field s2] : Elem | provenance | | +| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:16:13:16:13 | [post] this access : C [field s2] : Elem | provenance | | +| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:16:13:16:13 | [post] this access : C [field s2] : Elem | provenance | | | C.cs:4:32:4:46 | call to method Source : Elem | C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | provenance | | | C.cs:4:32:4:46 | call to method Source : Elem | C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | provenance | | | C.cs:6:30:6:44 | call to method Source : Elem | C.cs:26:14:26:15 | access to field s4 | provenance | | | C.cs:6:30:6:44 | call to method Source : Elem | C.cs:26:14:26:15 | access to field s4 | provenance | | -| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:16:13:16:13 | this [Return] : C [property s5] : Elem | provenance | | -| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:16:13:16:13 | this [Return] : C [property s5] : Elem | provenance | | +| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:16:13:16:13 | [post] this access : C [property s5] : Elem | provenance | | +| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:16:13:16:13 | [post] this access : C [property s5] : Elem | provenance | | | C.cs:7:37:7:51 | call to method Source : Elem | C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | provenance | | | C.cs:7:37:7:51 | call to method Source : Elem | C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | provenance | | | C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | provenance | | @@ -372,6 +372,12 @@ edges | C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | C.cs:21:17:21:18 | this : C [field s3] : Elem | provenance | | | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | C.cs:21:17:21:18 | this : C [property s5] : Elem | provenance | | | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | C.cs:21:17:21:18 | this : C [property s5] : Elem | provenance | | +| C.cs:16:13:16:13 | [post] this access : C [field s1] : Elem | C.cs:16:13:16:13 | this [Return] : C [field s1] : Elem | provenance | | +| C.cs:16:13:16:13 | [post] this access : C [field s1] : Elem | C.cs:16:13:16:13 | this [Return] : C [field s1] : Elem | provenance | | +| C.cs:16:13:16:13 | [post] this access : C [field s2] : Elem | C.cs:16:13:16:13 | this [Return] : C [field s2] : Elem | provenance | | +| C.cs:16:13:16:13 | [post] this access : C [field s2] : Elem | C.cs:16:13:16:13 | this [Return] : C [field s2] : Elem | provenance | | +| C.cs:16:13:16:13 | [post] this access : C [property s5] : Elem | C.cs:16:13:16:13 | this [Return] : C [property s5] : Elem | provenance | | +| C.cs:16:13:16:13 | [post] this access : C [property s5] : Elem | C.cs:16:13:16:13 | this [Return] : C [property s5] : Elem | provenance | | | C.cs:16:13:16:13 | this [Return] : C [field s1] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | provenance | | | C.cs:16:13:16:13 | this [Return] : C [field s1] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | provenance | | | C.cs:16:13:16:13 | this [Return] : C [field s2] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | provenance | | @@ -1627,6 +1633,12 @@ nodes | C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | semmle.label | access to local variable c : C [field s3] : Elem | | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | semmle.label | access to local variable c : C [property s5] : Elem | | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | semmle.label | access to local variable c : C [property s5] : Elem | +| C.cs:16:13:16:13 | [post] this access : C [field s1] : Elem | semmle.label | [post] this access : C [field s1] : Elem | +| C.cs:16:13:16:13 | [post] this access : C [field s1] : Elem | semmle.label | [post] this access : C [field s1] : Elem | +| C.cs:16:13:16:13 | [post] this access : C [field s2] : Elem | semmle.label | [post] this access : C [field s2] : Elem | +| C.cs:16:13:16:13 | [post] this access : C [field s2] : Elem | semmle.label | [post] this access : C [field s2] : Elem | +| C.cs:16:13:16:13 | [post] this access : C [property s5] : Elem | semmle.label | [post] this access : C [property s5] : Elem | +| C.cs:16:13:16:13 | [post] this access : C [property s5] : Elem | semmle.label | [post] this access : C [property s5] : Elem | | C.cs:16:13:16:13 | this [Return] : C [field s1] : Elem | semmle.label | this [Return] : C [field s1] : Elem | | C.cs:16:13:16:13 | this [Return] : C [field s1] : Elem | semmle.label | this [Return] : C [field s1] : Elem | | C.cs:16:13:16:13 | this [Return] : C [field s2] : Elem | semmle.label | this [Return] : C [field s2] : Elem | diff --git a/csharp/ql/test/library-tests/dataflow/implicittostring/PrintAst.expected b/csharp/ql/test/library-tests/dataflow/implicittostring/PrintAst.expected index cd7658f6f5e9..3500820e2505 100644 --- a/csharp/ql/test/library-tests/dataflow/implicittostring/PrintAst.expected +++ b/csharp/ql/test/library-tests/dataflow/implicittostring/PrintAst.expected @@ -1,19 +1,19 @@ implicitToString.cs: # 3| [Class] TestClass -# 5| 5: [Class] MyClass -# 5| 4: [InstanceConstructor,PrimaryConstructor] MyClass -# 7| 5: [Method] ToString +# 5| 6: [Class] MyClass +# 5| 5: [InstanceConstructor,PrimaryConstructor] MyClass +# 7| 6: [Method] ToString # 7| -1: [TypeMention] string # 8| 4: [BlockStmt] {...} # 9| 0: [ReturnStmt] return ...; # 9| 0: [StringLiteralUtf16] "tainted" -# 13| 6: [Method] Sink +# 13| 7: [Method] Sink # 13| -1: [TypeMention] Void #-----| 2: (Parameters) # 13| 0: [Parameter] o # 13| -1: [TypeMention] object # 13| 4: [BlockStmt] {...} -# 15| 7: [Method] M1 +# 15| 8: [Method] M1 # 15| -1: [TypeMention] Void # 16| 4: [BlockStmt] {...} # 17| 0: [LocalVariableDeclStmt] ... ...; @@ -33,7 +33,7 @@ implicitToString.cs: # 19| 2: [ExprStmt] ...; # 19| 0: [MethodCall] call to method Sink # 19| 0: [LocalVariableAccess] access to local variable x2 -# 22| 8: [Method] M2 +# 22| 9: [Method] M2 # 22| -1: [TypeMention] Void # 23| 4: [BlockStmt] {...} # 24| 0: [LocalVariableDeclStmt] ... ...; @@ -53,7 +53,7 @@ implicitToString.cs: # 26| 2: [ExprStmt] ...; # 26| 0: [MethodCall] call to method Sink # 26| 0: [LocalVariableAccess] access to local variable x2 -# 29| 9: [Method] M3 +# 29| 10: [Method] M3 # 29| -1: [TypeMention] Void # 30| 4: [BlockStmt] {...} # 31| 0: [LocalVariableDeclStmt] ... ...; @@ -74,7 +74,7 @@ implicitToString.cs: # 33| 2: [ExprStmt] ...; # 33| 0: [MethodCall] call to method Sink # 33| 0: [LocalVariableAccess] access to local variable x2 -# 36| 10: [Method] M4 +# 36| 11: [Method] M4 # 36| -1: [TypeMention] Void # 37| 4: [BlockStmt] {...} # 38| 0: [LocalVariableDeclStmt] ... ...; diff --git a/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected index 6bf236135a20..861e4c519a82 100644 --- a/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -1,3 +1,4 @@ +| Capture.cs:3:14:3:20 | this | Capture.cs:3:14:3:20 | this access | | Capture.cs:5:17:5:17 | this | Capture.cs:13:9:13:14 | this access | | Capture.cs:7:17:7:17 | 0 | Capture.cs:7:13:7:13 | access to local variable i | | Capture.cs:13:9:13:14 | this access | Capture.cs:23:9:23:14 | this access | @@ -10,6 +11,11 @@ | Capture.cs:51:9:51:15 | this access | Capture.cs:63:9:63:15 | this access | | Capture.cs:58:21:58:21 | 1 | Capture.cs:58:17:58:17 | access to local variable i | | Capture.cs:61:17:61:17 | 1 | Capture.cs:61:13:61:13 | access to local variable i | +| LocalDataFlow.cs:13:25:13:35 | this | LocalDataFlow.cs:13:25:13:35 | this access | +| LocalDataFlow.cs:29:18:29:24 | this | LocalDataFlow.cs:29:18:29:24 | this access | +| LocalDataFlow.cs:37:25:37:45 | this | LocalDataFlow.cs:37:25:37:45 | this access | +| LocalDataFlow.cs:38:25:38:43 | this | LocalDataFlow.cs:38:25:38:43 | this access | +| LocalDataFlow.cs:46:14:46:26 | this | LocalDataFlow.cs:46:14:46:26 | this access | | LocalDataFlow.cs:48:24:48:24 | SSA param(b) | LocalDataFlow.cs:84:21:84:21 | access to parameter b | | LocalDataFlow.cs:48:24:48:24 | b | LocalDataFlow.cs:48:24:48:24 | SSA param(b) | | LocalDataFlow.cs:51:13:51:17 | access to local variable sink0 | LocalDataFlow.cs:51:13:51:34 | SSA def(sink0) | @@ -482,6 +488,7 @@ | LocalDataFlow.cs:314:22:314:26 | access to local variable sink0 | LocalDataFlow.cs:314:22:314:38 | ... ?? ... | | LocalDataFlow.cs:314:22:314:38 | ... ?? ... | LocalDataFlow.cs:314:13:314:18 | access to local variable sink74 | | LocalDataFlow.cs:314:31:314:38 | access to local variable nonSink0 | LocalDataFlow.cs:314:22:314:38 | ... ?? ... | +| LocalDataFlow.cs:328:18:328:29 | this | LocalDataFlow.cs:328:18:328:29 | this access | | LocalDataFlow.cs:334:28:334:30 | SSA entry def(this.anInt) | LocalDataFlow.cs:334:41:334:45 | access to field anInt | | LocalDataFlow.cs:334:28:334:30 | this | LocalDataFlow.cs:334:41:334:45 | this access | | LocalDataFlow.cs:334:50:334:52 | SSA param(value) | LocalDataFlow.cs:334:64:334:68 | access to parameter value | @@ -500,11 +507,11 @@ | LocalDataFlow.cs:353:21:353:21 | access to parameter x | LocalDataFlow.cs:353:16:353:21 | ... = ... | | LocalDataFlow.cs:356:33:356:34 | access to parameter os | LocalDataFlow.cs:356:27:356:29 | access to local variable os2 | | LocalDataFlow.cs:356:33:356:34 | access to parameter os | LocalDataFlow.cs:356:27:356:34 | ... = ... | -| LocalDataFlow.cs:361:41:361:44 | SSA param(args) | LocalDataFlow.cs:363:29:363:32 | access to parameter args | +| LocalDataFlow.cs:361:41:361:44 | SSA param(args) | LocalDataFlow.cs:364:27:364:30 | access to parameter args | | LocalDataFlow.cs:361:41:361:44 | args | LocalDataFlow.cs:361:41:361:44 | SSA param(args) | -| LocalDataFlow.cs:363:29:363:32 | [post] access to parameter args | LocalDataFlow.cs:364:27:364:30 | access to parameter args | -| LocalDataFlow.cs:363:29:363:32 | access to parameter args | LocalDataFlow.cs:364:27:364:30 | access to parameter args | -| LocalDataFlow.cs:363:29:363:32 | call to operator implicit conversion | LocalDataFlow.cs:363:22:363:25 | access to local variable span | +| LocalDataFlow.cs:361:56:361:57 | SSA param(dt) | LocalDataFlow.cs:363:30:363:31 | access to parameter dt | +| LocalDataFlow.cs:361:56:361:57 | dt | LocalDataFlow.cs:361:56:361:57 | SSA param(dt) | +| LocalDataFlow.cs:363:30:363:31 | call to operator implicit conversion | LocalDataFlow.cs:363:24:363:26 | access to local variable dto | | LocalDataFlow.cs:364:27:364:30 | call to operator implicit conversion | LocalDataFlow.cs:364:23:364:23 | access to local variable x | | LocalDataFlow.cs:367:23:367:24 | SSA param(b1) | LocalDataFlow.cs:371:13:371:14 | access to parameter b1 | | LocalDataFlow.cs:367:23:367:24 | b1 | LocalDataFlow.cs:367:23:367:24 | SSA param(b1) | @@ -519,6 +526,7 @@ | LocalDataFlow.cs:381:13:381:13 | access to local variable x | LocalDataFlow.cs:381:13:381:29 | SSA def(x) | | LocalDataFlow.cs:381:13:381:29 | SSA def(x) | LocalDataFlow.cs:382:15:382:15 | access to local variable x | | LocalDataFlow.cs:381:17:381:29 | "not tainted" | LocalDataFlow.cs:381:13:381:13 | access to local variable x | +| SSA.cs:3:14:3:16 | this | SSA.cs:3:14:3:16 | this access | | SSA.cs:5:17:5:17 | SSA entry def(this.S) | SSA.cs:67:9:67:14 | access to field S | | SSA.cs:5:17:5:17 | this | SSA.cs:67:9:67:12 | this access | | SSA.cs:5:26:5:32 | SSA param(tainted) | SSA.cs:8:24:8:30 | access to parameter tainted | @@ -917,6 +925,7 @@ | SSA.cs:176:21:176:28 | access to local variable ssaSink5 | SSA.cs:177:21:177:28 | access to local variable ssaSink5 | | SSA.cs:177:21:177:28 | [post] access to local variable ssaSink5 | SSA.cs:174:20:174:20 | SSA phi read(ssaSink5) | | SSA.cs:177:21:177:28 | access to local variable ssaSink5 | SSA.cs:174:20:174:20 | SSA phi read(ssaSink5) | +| Splitting.cs:1:7:1:15 | this | Splitting.cs:1:7:1:15 | this access | | Splitting.cs:3:18:3:18 | SSA param(b) | Splitting.cs:6:13:6:13 | access to parameter b | | Splitting.cs:3:18:3:18 | b | Splitting.cs:3:18:3:18 | SSA param(b) | | Splitting.cs:3:28:3:34 | SSA param(tainted) | Splitting.cs:5:17:5:23 | access to parameter tainted | @@ -1001,6 +1010,7 @@ | Splitting.cs:57:17:57:17 | access to local variable y | Splitting.cs:58:27:58:27 | access to local variable y | | Splitting.cs:58:22:58:22 | SSA def(s) | Splitting.cs:59:19:59:19 | access to local variable s | | Splitting.cs:58:22:58:22 | String s | Splitting.cs:58:22:58:22 | SSA def(s) | +| UseUseExplosion.cs:1:7:1:7 | this | UseUseExplosion.cs:1:7:1:7 | this access | | UseUseExplosion.cs:21:10:21:10 | SSA entry def(this.Prop) | UseUseExplosion.cs:24:13:24:16 | access to property Prop | | UseUseExplosion.cs:21:10:21:10 | this | UseUseExplosion.cs:24:13:24:16 | this access | | UseUseExplosion.cs:23:13:23:13 | access to local variable x | UseUseExplosion.cs:23:13:23:17 | SSA def(x) | diff --git a/csharp/ql/test/library-tests/dataflow/local/LocalDataFlow.cs b/csharp/ql/test/library-tests/dataflow/local/LocalDataFlow.cs index 900a21617155..53b6165dd754 100644 --- a/csharp/ql/test/library-tests/dataflow/local/LocalDataFlow.cs +++ b/csharp/ql/test/library-tests/dataflow/local/LocalDataFlow.cs @@ -358,9 +358,9 @@ public void AssignmentFlow(IDisposable x, IEnumerable os) public static implicit operator LocalDataFlow(string[] args) => null; - public void ConversionFlow(string[] args) + public void ConversionFlow(string[] args, DateTime dt) { - Span span = args; // flow (library operator) + DateTimeOffset dto = dt; // flow (library operator) LocalDataFlow x = args; // no flow (source code operator) } diff --git a/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected b/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected index 1e9e48f5456d..b2d395d4b836 100644 --- a/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected +++ b/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected @@ -1,3 +1,4 @@ +| Capture.cs:3:14:3:20 | this | Capture.cs:3:14:3:20 | this access | | Capture.cs:5:17:5:17 | this | Capture.cs:13:9:13:14 | this access | | Capture.cs:7:17:7:17 | 0 | Capture.cs:7:13:7:13 | access to local variable i | | Capture.cs:13:9:13:14 | this access | Capture.cs:23:9:23:14 | this access | @@ -10,6 +11,11 @@ | Capture.cs:51:9:51:15 | this access | Capture.cs:63:9:63:15 | this access | | Capture.cs:58:21:58:21 | 1 | Capture.cs:58:17:58:17 | access to local variable i | | Capture.cs:61:17:61:17 | 1 | Capture.cs:61:13:61:13 | access to local variable i | +| LocalDataFlow.cs:13:25:13:35 | this | LocalDataFlow.cs:13:25:13:35 | this access | +| LocalDataFlow.cs:29:18:29:24 | this | LocalDataFlow.cs:29:18:29:24 | this access | +| LocalDataFlow.cs:37:25:37:45 | this | LocalDataFlow.cs:37:25:37:45 | this access | +| LocalDataFlow.cs:38:25:38:43 | this | LocalDataFlow.cs:38:25:38:43 | this access | +| LocalDataFlow.cs:46:14:46:26 | this | LocalDataFlow.cs:46:14:46:26 | this access | | LocalDataFlow.cs:48:24:48:24 | SSA param(b) | LocalDataFlow.cs:84:21:84:21 | access to parameter b | | LocalDataFlow.cs:48:24:48:24 | b | LocalDataFlow.cs:48:24:48:24 | SSA param(b) | | LocalDataFlow.cs:51:13:51:17 | access to local variable sink0 | LocalDataFlow.cs:51:13:51:34 | SSA def(sink0) | @@ -593,6 +599,7 @@ | LocalDataFlow.cs:314:22:314:26 | access to local variable sink0 | LocalDataFlow.cs:314:22:314:38 | ... ?? ... | | LocalDataFlow.cs:314:22:314:38 | ... ?? ... | LocalDataFlow.cs:314:13:314:18 | access to local variable sink74 | | LocalDataFlow.cs:314:31:314:38 | access to local variable nonSink0 | LocalDataFlow.cs:314:22:314:38 | ... ?? ... | +| LocalDataFlow.cs:328:18:328:29 | this | LocalDataFlow.cs:328:18:328:29 | this access | | LocalDataFlow.cs:334:28:334:30 | SSA entry def(this.anInt) | LocalDataFlow.cs:334:41:334:45 | access to field anInt | | LocalDataFlow.cs:334:28:334:30 | this | LocalDataFlow.cs:334:41:334:45 | this access | | LocalDataFlow.cs:334:50:334:52 | SSA param(value) | LocalDataFlow.cs:334:64:334:68 | access to parameter value | @@ -611,12 +618,12 @@ | LocalDataFlow.cs:353:21:353:21 | access to parameter x | LocalDataFlow.cs:353:16:353:21 | ... = ... | | LocalDataFlow.cs:356:33:356:34 | access to parameter os | LocalDataFlow.cs:356:27:356:29 | access to local variable os2 | | LocalDataFlow.cs:356:33:356:34 | access to parameter os | LocalDataFlow.cs:356:27:356:34 | ... = ... | -| LocalDataFlow.cs:361:41:361:44 | SSA param(args) | LocalDataFlow.cs:363:29:363:32 | access to parameter args | +| LocalDataFlow.cs:361:41:361:44 | SSA param(args) | LocalDataFlow.cs:364:27:364:30 | access to parameter args | | LocalDataFlow.cs:361:41:361:44 | args | LocalDataFlow.cs:361:41:361:44 | SSA param(args) | -| LocalDataFlow.cs:363:29:363:32 | [post] access to parameter args | LocalDataFlow.cs:364:27:364:30 | access to parameter args | -| LocalDataFlow.cs:363:29:363:32 | access to parameter args | LocalDataFlow.cs:363:29:363:32 | call to operator implicit conversion | -| LocalDataFlow.cs:363:29:363:32 | access to parameter args | LocalDataFlow.cs:364:27:364:30 | access to parameter args | -| LocalDataFlow.cs:363:29:363:32 | call to operator implicit conversion | LocalDataFlow.cs:363:22:363:25 | access to local variable span | +| LocalDataFlow.cs:361:56:361:57 | SSA param(dt) | LocalDataFlow.cs:363:30:363:31 | access to parameter dt | +| LocalDataFlow.cs:361:56:361:57 | dt | LocalDataFlow.cs:361:56:361:57 | SSA param(dt) | +| LocalDataFlow.cs:363:30:363:31 | access to parameter dt | LocalDataFlow.cs:363:30:363:31 | call to operator implicit conversion | +| LocalDataFlow.cs:363:30:363:31 | call to operator implicit conversion | LocalDataFlow.cs:363:24:363:26 | access to local variable dto | | LocalDataFlow.cs:364:27:364:30 | call to operator implicit conversion | LocalDataFlow.cs:364:23:364:23 | access to local variable x | | LocalDataFlow.cs:367:23:367:24 | SSA param(b1) | LocalDataFlow.cs:371:13:371:14 | access to parameter b1 | | LocalDataFlow.cs:367:23:367:24 | b1 | LocalDataFlow.cs:367:23:367:24 | SSA param(b1) | @@ -631,6 +638,7 @@ | LocalDataFlow.cs:381:13:381:13 | access to local variable x | LocalDataFlow.cs:381:13:381:29 | SSA def(x) | | LocalDataFlow.cs:381:13:381:29 | SSA def(x) | LocalDataFlow.cs:382:15:382:15 | access to local variable x | | LocalDataFlow.cs:381:17:381:29 | "not tainted" | LocalDataFlow.cs:381:13:381:13 | access to local variable x | +| SSA.cs:3:14:3:16 | this | SSA.cs:3:14:3:16 | this access | | SSA.cs:5:17:5:17 | SSA entry def(this.S) | SSA.cs:67:9:67:14 | access to field S | | SSA.cs:5:17:5:17 | this | SSA.cs:67:9:67:12 | this access | | SSA.cs:5:26:5:32 | SSA param(tainted) | SSA.cs:8:24:8:30 | access to parameter tainted | @@ -1047,6 +1055,7 @@ | SSA.cs:176:21:176:28 | access to local variable ssaSink5 | SSA.cs:177:21:177:28 | access to local variable ssaSink5 | | SSA.cs:177:21:177:28 | [post] access to local variable ssaSink5 | SSA.cs:174:20:174:20 | SSA phi read(ssaSink5) | | SSA.cs:177:21:177:28 | access to local variable ssaSink5 | SSA.cs:174:20:174:20 | SSA phi read(ssaSink5) | +| Splitting.cs:1:7:1:15 | this | Splitting.cs:1:7:1:15 | this access | | Splitting.cs:3:18:3:18 | SSA param(b) | Splitting.cs:6:13:6:13 | access to parameter b | | Splitting.cs:3:18:3:18 | b | Splitting.cs:3:18:3:18 | SSA param(b) | | Splitting.cs:3:28:3:34 | SSA param(tainted) | Splitting.cs:5:17:5:23 | access to parameter tainted | @@ -1143,6 +1152,7 @@ | Splitting.cs:58:22:58:22 | SSA def(s) | Splitting.cs:59:19:59:19 | access to local variable s | | Splitting.cs:58:22:58:22 | String s | Splitting.cs:58:22:58:22 | SSA def(s) | | Splitting.cs:58:27:58:27 | access to local variable y | Splitting.cs:58:22:58:22 | SSA def(s) | +| UseUseExplosion.cs:1:7:1:7 | this | UseUseExplosion.cs:1:7:1:7 | this access | | UseUseExplosion.cs:21:10:21:10 | SSA entry def(this.Prop) | UseUseExplosion.cs:24:13:24:16 | access to property Prop | | UseUseExplosion.cs:21:10:21:10 | this | UseUseExplosion.cs:24:13:24:16 | this access | | UseUseExplosion.cs:23:13:23:13 | access to local variable x | UseUseExplosion.cs:23:13:23:17 | SSA def(x) | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/PreSsaConsistency.expected b/csharp/ql/test/library-tests/dataflow/ssa/PreSsaConsistency.expected deleted file mode 100644 index 4fa64b476744..000000000000 --- a/csharp/ql/test/library-tests/dataflow/ssa/PreSsaConsistency.expected +++ /dev/null @@ -1,3 +0,0 @@ -defReadInconsistency -readReadInconsistency -phiInconsistency diff --git a/csharp/ql/test/library-tests/dataflow/ssa/PreSsaConsistency.ql b/csharp/ql/test/library-tests/dataflow/ssa/PreSsaConsistency.ql deleted file mode 100644 index de7357d14b64..000000000000 --- a/csharp/ql/test/library-tests/dataflow/ssa/PreSsaConsistency.ql +++ /dev/null @@ -1,99 +0,0 @@ -import csharp -import semmle.code.csharp.controlflow.internal.PreSsa -import semmle.code.csharp.controlflow.internal.ControlFlowGraphImpl -import semmle.code.csharp.dataflow.internal.SsaImpl as SsaImpl - -class CallableWithSplitting extends Callable { - CallableWithSplitting() { this = any(SplitAstNode n).getEnclosingCallable() } -} - -query predicate defReadInconsistency( - AssignableRead ar, Expr e, PreSsa::SsaInput::SourceVariable v, boolean b -) { - // Exclude definitions in callables with CFG splitting, as SSA definitions may be - // very different from pre-SSA definitions - not ar.getEnclosingCallable() instanceof CallableWithSplitting and - exists(AssignableDefinition def | e = def.getExpr() | - b = true and - exists(PreSsa::Definition ssaDef | ssaDef.getSourceVariable() = v | - ar = ssaDef.getAFirstRead() and - ssaDef.getDefinition() = def and - not exists(Ssa::ExplicitDefinition edef | - edef.getADefinition() = def and - edef.getAFirstRead() = ar - ) - ) - or - b = false and - exists(Ssa::ExplicitDefinition edef | - edef.getADefinition() = def and - edef.getAFirstRead() = ar and - def.getTarget() = v and - not exists(PreSsa::Definition ssaDef | - ar = ssaDef.getAFirstRead() and - ssaDef.getDefinition() = def - ) - ) - ) -} - -query predicate readReadInconsistency( - LocalScopeVariableRead read1, LocalScopeVariableRead read2, PreSsa::SsaInput::SourceVariable v, - boolean b -) { - // Exclude definitions in callables with CFG splitting, as SSA definitions may be - // very different from pre-SSA definitions - not read1.getEnclosingCallable() instanceof CallableWithSplitting and - ( - b = true and - v = read1.getTarget() and - PreSsa::adjacentReadPairSameVar(read1, read2) and - not SsaImpl::adjacentReadPairSameVar(_, read1.getAControlFlowNode(), read2.getAControlFlowNode()) - or - b = false and - v = read1.getTarget() and - SsaImpl::adjacentReadPairSameVar(_, read1.getAControlFlowNode(), read2.getAControlFlowNode()) and - read1.getTarget() instanceof PreSsa::SsaInput::SourceVariable and - not PreSsa::adjacentReadPairSameVar(read1, read2) and - // Exclude split CFG elements because SSA may be more precise than pre-SSA - // in those cases - not read1 instanceof SplitAstNode and - not read2 instanceof SplitAstNode - ) -} - -query predicate phiInconsistency( - ControlFlowElement cfe, Expr e, PreSsa::SsaInput::SourceVariable v, boolean b -) { - // Exclude definitions in callables with CFG splitting, as SSA definitions may be - // very different from pre-SSA definitions - not cfe.getEnclosingCallable() instanceof CallableWithSplitting and - exists(AssignableDefinition adef | e = adef.getExpr() | - b = true and - exists(PreSsa::PhiNode prePhi | v = prePhi.getSourceVariable() | - adef = prePhi.getAnInput+().getDefinition() and - cfe = prePhi.getBasicBlock().getFirstElement() and - not exists(Ssa::PhiNode phi, ControlFlow::BasicBlock bb, Ssa::ExplicitDefinition edef | - edef = phi.getAnUltimateDefinition() - | - edef.getADefinition() = adef and - phi.definesAt(_, bb, _) and - cfe = bb.getFirstNode().getAstNode() - ) - ) - or - b = false and - exists(Ssa::PhiNode phi, ControlFlow::BasicBlock bb, Ssa::ExplicitDefinition edef | - v = phi.getSourceVariable().getAssignable() - | - edef = phi.getAnUltimateDefinition() and - edef.getADefinition() = adef and - phi.definesAt(_, bb, _) and - cfe = bb.getFirstNode().getAstNode() and - not exists(PreSsa::PhiNode prePhi | - adef = prePhi.getAnInput+().getDefinition() and - cfe = prePhi.getBasicBlock().getFirstElement() - ) - ) - ) -} diff --git a/csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected b/csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected index 73b0a757b5a3..583bae92d93f 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected +++ b/csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected @@ -1,3 +1,4 @@ +| Tuples.cs:3:7:3:12 | this | Tuples.cs:3:7:3:12 | this access | | Tuples.cs:7:13:7:14 | access to local variable o1 | Tuples.cs:7:13:7:34 | SSA def(o1) | | Tuples.cs:7:13:7:34 | SSA def(o1) | Tuples.cs:10:21:10:22 | access to local variable o1 | | Tuples.cs:7:18:7:34 | call to method Source | Tuples.cs:7:13:7:14 | access to local variable o1 | @@ -168,9 +169,12 @@ | Tuples.cs:87:30:87:30 | SSA def(r) | Tuples.cs:90:18:90:18 | access to local variable r | | Tuples.cs:87:30:87:30 | String r | Tuples.cs:87:30:87:30 | SSA def(r) | | Tuples.cs:91:18:91:18 | access to local variable q | Tuples.cs:91:18:91:18 | (...) ... | +| Tuples.cs:95:12:95:13 | this | Tuples.cs:95:12:95:13 | this access | | Tuples.cs:95:12:95:13 | this | Tuples.cs:95:22:95:22 | this | | Tuples.cs:95:22:95:22 | [post] this | Tuples.cs:95:29:95:29 | this | | Tuples.cs:95:22:95:22 | this | Tuples.cs:95:29:95:29 | this | +| Tuples.cs:95:29:95:29 | [post] this | Tuples.cs:95:12:95:13 | this access | +| Tuples.cs:95:29:95:29 | this | Tuples.cs:95:12:95:13 | this access | | Tuples.cs:99:13:99:13 | access to local variable o | Tuples.cs:99:13:99:33 | SSA def(o) | | Tuples.cs:99:13:99:33 | SSA def(o) | Tuples.cs:100:24:100:24 | access to local variable o | | Tuples.cs:99:17:99:33 | call to method Source | Tuples.cs:99:13:99:13 | access to local variable o | @@ -225,3 +229,4 @@ | Tuples.cs:133:24:133:29 | (..., ...) | Tuples.cs:133:9:133:20 | (..., ...) | | Tuples.cs:133:25:133:25 | 1 | Tuples.cs:133:9:133:29 | ... = ... | | Tuples.cs:133:28:133:28 | access to local variable o | Tuples.cs:133:18:133:19 | access to local variable y4 | +| Tuples.cs:144:18:144:31 | this | Tuples.cs:144:18:144:31 | this access | diff --git a/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected b/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected index 7cbddb9d3d57..11e14eeb6c59 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected +++ b/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected @@ -1,6 +1,6 @@ Tuples.cs: # 3| [Class] Tuples -# 5| 5: [Method] M1 +# 5| 6: [Method] M1 # 5| -1: [TypeMention] Void # 6| 4: [BlockStmt] {...} # 7| 0: [LocalVariableDeclStmt] ... ...; @@ -99,7 +99,7 @@ Tuples.cs: # 29| 0: [FieldAccess] access to field Item2 # 29| -1: [FieldAccess] access to field Item2 # 29| -1: [LocalVariableAccess] access to local variable x -# 32| 6: [Method] M2 +# 32| 7: [Method] M2 # 32| -1: [TypeMention] Void # 33| 4: [BlockStmt] {...} # 34| 0: [LocalVariableDeclStmt] ... ...; @@ -144,7 +144,7 @@ Tuples.cs: # 40| 0: [MethodCall] call to method Sink # 40| 0: [FieldAccess] access to field Item10 # 40| -1: [LocalVariableAccess] access to local variable x -# 43| 7: [Method] M3 +# 43| 8: [Method] M3 # 43| -1: [TypeMention] Void # 44| 4: [BlockStmt] {...} # 45| 0: [LocalVariableDeclStmt] ... ...; @@ -201,7 +201,7 @@ Tuples.cs: # 52| 0: [CastExpr] (...) ... # 52| 1: [FieldAccess] access to field Item2 # 52| -1: [LocalVariableAccess] access to local variable y -# 55| 8: [Method] M4 +# 55| 9: [Method] M4 # 55| -1: [TypeMention] Void #-----| 2: (Parameters) # 55| 0: [Parameter] s @@ -352,34 +352,34 @@ Tuples.cs: # 91| 0: [MethodCall] call to method Sink # 91| 0: [CastExpr] (...) ... # 91| 1: [LocalVariableAccess] access to local variable q -# 95| 9: [RecordClass] R1 -# 95| 12: [NEOperator] != +# 95| 10: [RecordClass] R1 +# 95| 13: [NEOperator] != #-----| 2: (Parameters) # 95| 0: [Parameter] left # 95| 1: [Parameter] right -# 95| 13: [EQOperator] == +# 95| 14: [EQOperator] == #-----| 2: (Parameters) # 95| 0: [Parameter] left # 95| 1: [Parameter] right -# 95| 14: [Property] EqualityContract +# 95| 15: [Property] EqualityContract # 95| 3: [Getter] get_EqualityContract -# 95| 15: [InstanceConstructor,PrimaryConstructor] R1 +# 95| 16: [InstanceConstructor,PrimaryConstructor] R1 #-----| 2: (Parameters) # 95| 0: [Parameter] i # 95| -1: [TypeMention] string # 95| 1: [Parameter] j # 95| -1: [TypeMention] int -# 95| 16: [Property] i +# 95| 17: [Property] i # 95| 3: [Getter] get_i # 95| 4: [Setter] set_i #-----| 2: (Parameters) # 95| 0: [Parameter] value -# 95| 17: [Property] j +# 95| 18: [Property] j # 95| 3: [Getter] get_j # 95| 4: [Setter] set_j #-----| 2: (Parameters) # 95| 0: [Parameter] value -# 97| 10: [Method] M5 +# 97| 11: [Method] M5 # 97| -1: [TypeMention] Void # 98| 4: [BlockStmt] {...} # 99| 0: [LocalVariableDeclStmt] ... ...; @@ -428,7 +428,7 @@ Tuples.cs: # 111| 0: [CastExpr] (...) ... # 111| 1: [LocalVariableAccess] access to local variable y # 112| 3: [BreakStmt] break; -# 116| 11: [Method] M6 +# 116| 12: [Method] M6 # 116| -1: [TypeMention] Void # 117| 4: [BlockStmt] {...} # 118| 0: [LocalVariableDeclStmt] ... ...; @@ -504,13 +504,13 @@ Tuples.cs: # 134| 12: [ExprStmt] ...; # 134| 0: [MethodCall] call to method Sink # 134| 0: [LocalVariableAccess] access to local variable y4 -# 137| 12: [Method] Sink +# 137| 13: [Method] Sink # 137| -1: [TypeMention] Void #-----| 2: (Parameters) # 137| 0: [Parameter] o # 137| -1: [TypeMention] object # 137| 4: [BlockStmt] {...} -# 139| 15: [Method] Source`1 +# 139| 16: [Method] Source`1 # 139| -1: [TypeMention] T #-----| 1: (Type parameters) # 139| 0: [TypeParameter] T diff --git a/csharp/ql/test/library-tests/definitions/PrintAst.expected b/csharp/ql/test/library-tests/definitions/PrintAst.expected index 9b5606d30f59..28196c75a857 100644 --- a/csharp/ql/test/library-tests/definitions/PrintAst.expected +++ b/csharp/ql/test/library-tests/definitions/PrintAst.expected @@ -17,15 +17,15 @@ definitions.cs: # 15| 1: [IntLiteral] 2 # 15| 7: [Field] e3 # 18| 3: [Class] C1 -# 20| 4: [InstanceConstructor] C1 +# 20| 5: [InstanceConstructor] C1 #-----| 2: (Parameters) # 20| 0: [Parameter] args # 20| -1: [TypeMention] Int32[] # 20| 1: [TypeMention] int # 20| 4: [BlockStmt] {...} -# 22| 5: [Field] field1 +# 22| 6: [Field] field1 # 22| -1: [TypeMention] int -# 24| 6: [Property] property1 +# 24| 7: [Property] property1 # 24| -1: [TypeMention] int # 26| 3: [Getter] get_property1 # 26| 4: [BlockStmt] {...} @@ -39,7 +39,7 @@ definitions.cs: # 27| 0: [AssignExpr] ... = ... # 27| 0: [FieldAccess] access to field field1 # 27| 1: [ParameterAccess] access to parameter value -# 30| 7: [Method] f1 +# 30| 8: [Method] f1 # 30| -1: [TypeMention] Void #-----| 2: (Parameters) # 30| 0: [Parameter] args @@ -157,7 +157,7 @@ definitions.cs: # 67| 0: [LocalVariableAccess] access to local variable m1 # 67| 1: [ImplicitDelegateCreation] delegate creation of type Action # 67| 0: [MethodAccess] access to method GenericFn -# 70| 8: [Method] VariableTypeUse +# 70| 9: [Method] VariableTypeUse # 70| -1: [TypeMention] Void #-----| 2: (Parameters) # 70| 0: [Parameter] c1 @@ -168,7 +168,7 @@ definitions.cs: # 72| -1: [TypeMention] C1 # 72| 0: [LocalVariableAccess] access to local variable c2 # 72| 1: [NullLiteral] null -# 75| 10: [Method] GenericFn`1 +# 75| 11: [Method] GenericFn`1 # 75| -1: [TypeMention] Void #-----| 1: (Type parameters) # 75| 0: [TypeParameter] T @@ -177,7 +177,7 @@ definitions.cs: # 75| -1: [TypeMention] T # 75| 4: [BlockStmt] {...} # 78| 4: [Struct] S1 -# 80| 5: [Method] M +# 80| 6: [Method] M # 80| -1: [TypeMention] S1 #-----| 2: (Parameters) # 80| 0: [Parameter] ss @@ -216,8 +216,8 @@ definitions.cs: # 93| 0: [ObjectCreation] object creation of type S1 # 93| 0: [TypeMention] S1 # 97| 5: [Class] A -# 99| 5: [DelegateType] EventHandler -# 101| 6: [Event] Click +# 99| 6: [DelegateType] EventHandler +# 101| 7: [Event] Click # 101| -1: [TypeMention] EventHandler # 101| 3: [AddEventAccessor] add_Click #-----| 2: (Parameters) @@ -225,7 +225,7 @@ definitions.cs: # 101| 4: [RemoveEventAccessor] remove_Click #-----| 2: (Parameters) # 101| 0: [Parameter] value -# 103| 7: [Method] M +# 103| 8: [Method] M # 103| -1: [TypeMention] Void # 104| 4: [BlockStmt] {...} # 105| 0: [ExprStmt] ...; @@ -265,24 +265,24 @@ definitions.cs: # 121| 1: [TypeMention] I1 # 121| 2: [TypeMention] I2 # 121| 1: [TypeMention] A -# 123| 5: [Method] M +# 123| 6: [Method] M # 123| -1: [TypeMention] Void # 124| 4: [BlockStmt] {...} # 125| 0: [ExprStmt] ...; # 125| 0: [MethodCall] call to method M # 125| -1: [BaseAccess] base access -# 128| 6: [Method] M2`1 +# 128| 7: [Method] M2`1 # 128| -1: [TypeMention] I1 # 128| -1: [TypeMention] Void #-----| 1: (Type parameters) # 128| 0: [TypeParameter] T # 128| 4: [BlockStmt] {...} -# 130| 7: [Struct] S`1 +# 130| 8: [Struct] S`1 #-----| 1: (Type parameters) # 130| 0: [TypeParameter] T2 #-----| 3: (Base types) # 130| 1: [TypeMention] I3 -# 132| 8: [Method] Tuple +# 132| 9: [Method] Tuple # 132| -1: [TypeMention] (I1, B) # 132| 1: [TypeMention] I1 # 132| 2: [TypeMention] B @@ -290,7 +290,7 @@ definitions.cs: # 132| 4: [ThrowExpr] throw ... # 132| 0: [ObjectCreation] object creation of type Exception # 132| 0: [TypeMention] Exception -# 134| 9: [Indexer] Item +# 134| 10: [Indexer] Item # 134| -1: [TypeMention] B # 134| 1: [TypeMention] A #-----| 1: (Parameters) @@ -306,8 +306,8 @@ definitions.cs: # 134| 0: [TypeMention] B # 134| 1: [TypeMention] A # 137| 10: [Class] C -# 139| 5: [Enum] E -# 140| 6: [Method] Pointer +# 139| 6: [Enum] E +# 140| 7: [Method] Pointer # 140| -1: [TypeMention] E* # 140| 1: [TypeMention] E # 140| 4: [ThrowExpr] throw ... @@ -345,7 +345,7 @@ definitions.cs: # 151| 12: [Class] C4 #-----| 3: (Base types) # 151| 1: [TypeMention] I4 -# 153| 5: [Event] EH +# 153| 6: [Event] EH # 153| -1: [TypeMention] I4 # 153| 3: [AddEventAccessor] add_EH #-----| 2: (Parameters) @@ -355,20 +355,20 @@ definitions.cs: #-----| 2: (Parameters) # 153| 0: [Parameter] value # 153| 4: [BlockStmt] {...} -# 154| 6: [Method] M +# 154| 7: [Method] M # 154| -1: [TypeMention] I4 # 154| -1: [TypeMention] A # 154| 4: [ThrowExpr] throw ... # 154| 0: [ObjectCreation] object creation of type Exception # 154| 0: [TypeMention] Exception -# 155| 7: [Property] P +# 155| 8: [Property] P # 155| -1: [TypeMention] I4 # 155| -1: [TypeMention] I3 # 155| 3: [Getter] get_P # 155| 4: [ThrowExpr] throw ... # 155| 0: [ObjectCreation] object creation of type Exception # 155| 0: [TypeMention] Exception -# 156| 8: [Indexer] Item +# 156| 9: [Indexer] Item # 156| -1: [TypeMention] I4 # 156| -1: [TypeMention] S1 #-----| 1: (Parameters) @@ -385,10 +385,10 @@ definitions.cs: # 156| 0: [TypeMention] S1 # 156| 1: [ObjectCreation] object creation of type S1 # 156| 0: [TypeMention] S1 -# 158| 10: [Class] Nested`1 +# 158| 11: [Class] Nested`1 #-----| 1: (Type parameters) # 158| 0: [TypeParameter] T -# 160| 5: [Method] Create +# 160| 6: [Method] Create # 160| -1: [TypeMention] Nested # 160| 1: [TypeMention] T # 160| 4: [BlockStmt] {...} @@ -397,7 +397,7 @@ definitions.cs: # 160| 0: [TypeMention] Nested # 160| 1: [TypeMention] T # 164| 13: [Class] C5 -# 166| 5: [Field] f +# 166| 6: [Field] f # 166| -1: [TypeMention] Nested # 166| 1: [TypeMention] C4 # 166| 2: [TypeMention] I4 @@ -407,9 +407,9 @@ definitions.cs: # 166| 1: [TypeMention] I4 # 166| -1: [TypeAccess] access to type C4 # 166| 0: [TypeMention] C4 -# 167| 6: [Field] c1 +# 167| 7: [Field] c1 # 167| -1: [TypeMention] C1 -# 169| 7: [Method] M +# 169| 8: [Method] M # 169| -1: [TypeMention] Void # 170| 4: [BlockStmt] {...} # 171| 0: [LocalVariableDeclStmt] ... ...; @@ -450,7 +450,7 @@ definitions.cs: # 175| 1: [TypeMention] C4 # 175| 2: [TypeMention] I4 # 179| 14: [Class] C6 -# 181| 5: [ExplicitConversionOperator] explicit conversion +# 181| 6: [ExplicitConversionOperator] explicit conversion # 181| -1: [TypeMention] C5 #-----| 2: (Parameters) # 181| 0: [Parameter] c @@ -461,14 +461,14 @@ definitions.cs: # 182| 4: [BlockStmt] {...} # 183| 0: [ReturnStmt] return ...; # 183| 0: [NullLiteral] null -# 186| 6: [Method] M +# 186| 7: [Method] M # 186| -1: [TypeMention] C5 # 187| 4: [BlockStmt] {...} # 188| 0: [ReturnStmt] return ...; # 188| 0: [OperatorCall] call to operator explicit conversion # 188| -1: [TypeMention] C5 # 188| 0: [ThisAccess] this access -# 191| 7: [AddOperator] + +# 191| 8: [AddOperator] + # 191| -1: [TypeMention] C6 #-----| 2: (Parameters) # 191| 0: [Parameter] x @@ -480,10 +480,10 @@ definitions.cs: #-----| 3: (Base types) # 194| 0: [TypeMention] Attribute # 196| 16: [Class] C7 -# 198| 5: [Method] M +# 198| 6: [Method] M # 198| -1: [TypeMention] Void # 198| 4: [BlockStmt] {...} -# 200| 6: [Method] M2 +# 200| 7: [Method] M2 # 200| -1: [TypeMention] Void # 201| 4: [BlockStmt] {...} # 202| 0: [ExprStmt] ...; @@ -491,7 +491,7 @@ definitions.cs: # 202| -1: [TypeAccess] access to type C7 # 202| 0: [TypeMention] C7 # 206| 17: [Class] C8 -# 208| 5: [Method] F +# 208| 6: [Method] F # 208| -1: [TypeMention] Void # 209| 4: [BlockStmt] {...} # 210| 0: [LocalVariableDeclStmt] ... ...; diff --git a/csharp/ql/test/library-tests/delegates/PrintAst.expected b/csharp/ql/test/library-tests/delegates/PrintAst.expected index fee97ca9daf4..86a5f9c241e9 100644 --- a/csharp/ql/test/library-tests/delegates/PrintAst.expected +++ b/csharp/ql/test/library-tests/delegates/PrintAst.expected @@ -16,7 +16,7 @@ delegates.cs: # 9| 1: [Parameter] d # 9| -1: [TypeMention] double # 11| 3: [Class] A -# 14| 5: [Method] M1 +# 14| 6: [Method] M1 # 14| -1: [TypeMention] int #-----| 2: (Parameters) # 14| 0: [Parameter] a @@ -33,13 +33,13 @@ delegates.cs: # 14| 1: [ParameterAccess] access to parameter a # 14| 1: [ParameterAccess] access to parameter b # 18| 4: [Class] B -# 21| 5: [DelegateType] D2 +# 21| 6: [DelegateType] D2 #-----| 2: (Parameters) # 21| 0: [Parameter] c # 21| -1: [TypeMention] int # 21| 1: [Parameter] d # 21| -1: [TypeMention] double -# 23| 6: [Method] M1 +# 23| 7: [Method] M1 # 23| -1: [TypeMention] int #-----| 2: (Parameters) # 23| 0: [Parameter] f @@ -54,7 +54,7 @@ delegates.cs: # 23| 0: [TypeAccess] access to type Int32 # 23| 0: [TypeMention] int # 23| 1: [ParameterAccess] access to parameter g -# 25| 7: [Method] M2 +# 25| 8: [Method] M2 # 25| -1: [TypeMention] Void #-----| 2: (Parameters) # 25| 0: [Parameter] k @@ -62,7 +62,7 @@ delegates.cs: # 25| 1: [Parameter] l # 25| -1: [TypeMention] double # 25| 4: [BlockStmt] {...} -# 27| 8: [Method] M3 +# 27| 9: [Method] M3 # 27| -1: [TypeMention] int #-----| 2: (Parameters) # 27| 0: [Parameter] g @@ -74,7 +74,7 @@ delegates.cs: # 27| 0: [ParameterAccess] access to parameter g # 27| 1: [UnaryPlusExpr] +... # 27| 0: [ParameterAccess] access to parameter g -# 29| 9: [Method] M4 +# 29| 10: [Method] M4 # 29| -1: [TypeMention] Void #-----| 2: (Parameters) # 29| 0: [Parameter] g @@ -87,7 +87,7 @@ delegates.cs: # 33| 0: [Parameter] value # 33| -1: [TypeMention] T # 35| 6: [Class] X -# 38| 5: [Method] F +# 38| 6: [Method] F # 38| -1: [TypeMention] bool #-----| 2: (Parameters) # 38| 0: [Parameter] i @@ -97,7 +97,7 @@ delegates.cs: # 38| 0: [LTExpr] ... < ... # 38| 0: [ParameterAccess] access to parameter i # 38| 1: [IntLiteral] 2 -# 40| 6: [Method] G +# 40| 7: [Method] G # 40| -1: [TypeMention] bool #-----| 2: (Parameters) # 40| 0: [Parameter] s @@ -110,26 +110,26 @@ delegates.cs: # 44| 0: [Parameter] x # 44| -1: [TypeMention] int # 46| 8: [Class] C -# 49| 5: [Method] M1 +# 49| 6: [Method] M1 # 49| -1: [TypeMention] Void #-----| 2: (Parameters) # 49| 0: [Parameter] i # 49| -1: [TypeMention] int # 49| 4: [BlockStmt] {...} -# 50| 6: [Method] M2 +# 50| 7: [Method] M2 # 50| -1: [TypeMention] Void #-----| 2: (Parameters) # 50| 0: [Parameter] i # 50| -1: [TypeMention] int # 50| 4: [BlockStmt] {...} -# 51| 7: [Method] M3 +# 51| 8: [Method] M3 # 51| -1: [TypeMention] Void #-----| 2: (Parameters) # 51| 0: [Parameter] i # 51| -1: [TypeMention] int # 51| 4: [BlockStmt] {...} # 55| 9: [Class] Test -# 58| 5: [Method] Main +# 58| 6: [Method] Main # 58| -1: [TypeMention] Void # 59| 4: [BlockStmt] {...} # 60| 0: [LocalVariableDeclStmt] ... ...; @@ -250,25 +250,25 @@ delegates.cs: # 81| 0: [LocalVariableDeclExpr] ContextCallback d # 81| 0: [TypeMention] ContextCallback # 86| 10: [Class] E -# 88| 5: [Field] Field +# 88| 6: [Field] Field # 88| -1: [TypeMention] Action # 88| 1: [TypeMention] int -# 89| 6: [Property] Property +# 89| 7: [Property] Property # 89| -1: [TypeMention] Action # 89| 1: [TypeMention] int # 89| 3: [Getter] get_Property # 89| 4: [Setter] set_Property #-----| 2: (Parameters) # 89| 0: [Parameter] value -# 90| 7: [Field] FieldPtr +# 90| 8: [Field] FieldPtr # 90| -1: [TypeMention] delegate* default -# 91| 8: [Property] PropertyPtr +# 91| 9: [Property] PropertyPtr # 91| -1: [TypeMention] delegate* default # 91| 3: [Getter] get_PropertyPtr # 91| 4: [Setter] set_PropertyPtr #-----| 2: (Parameters) # 91| 0: [Parameter] value -# 93| 9: [Method] M +# 93| 10: [Method] M # 93| -1: [TypeMention] Void # 94| 4: [BlockStmt] {...} # 95| 0: [ExprStmt] ...; diff --git a/csharp/ql/test/library-tests/dynamic/PrintAst.expected b/csharp/ql/test/library-tests/dynamic/PrintAst.expected index 160242e47f7e..3bde4d42d862 100644 --- a/csharp/ql/test/library-tests/dynamic/PrintAst.expected +++ b/csharp/ql/test/library-tests/dynamic/PrintAst.expected @@ -1,11 +1,11 @@ dynamic.cs: # 4| [Class] DynamicTest -# 6| 4: [InstanceConstructor] DynamicTest +# 6| 5: [InstanceConstructor] DynamicTest #-----| 2: (Parameters) # 6| 0: [Parameter] x # 6| -1: [TypeMention] int # 6| 4: [BlockStmt] {...} -# 8| 5: [Method] Main +# 8| 6: [Method] Main # 8| -1: [TypeMention] Void #-----| 2: (Parameters) # 8| 0: [Parameter] args @@ -235,25 +235,25 @@ dynamic.cs: # 75| 0: [DelegateCall] delegate call # 75| -1: [LocalVariableAccess] access to local variable d # 75| 0: [IntLiteral] 42 -# 78| 6: [Method] Foo +# 78| 7: [Method] Foo # 78| -1: [TypeMention] Void #-----| 2: (Parameters) # 78| 0: [Parameter] x # 78| -1: [TypeMention] int # 78| 4: [BlockStmt] {...} -# 79| 7: [Method] Foo +# 79| 8: [Method] Foo # 79| -1: [TypeMention] Void #-----| 2: (Parameters) # 79| 0: [Parameter] x # 79| -1: [TypeMention] string # 79| 4: [BlockStmt] {...} -# 81| 8: [Method] Bar +# 81| 9: [Method] Bar # 81| -1: [TypeMention] Void #-----| 2: (Parameters) # 81| 0: [Parameter] x # 81| -1: [TypeMention] string # 81| 4: [BlockStmt] {...} -# 83| 9: [IncrementOperator] ++ +# 83| 10: [IncrementOperator] ++ # 83| -1: [TypeMention] DynamicTest #-----| 2: (Parameters) # 83| 0: [Parameter] dt @@ -261,15 +261,15 @@ dynamic.cs: # 84| 4: [BlockStmt] {...} # 85| 0: [ReturnStmt] return ...; # 85| 0: [ParameterAccess] access to parameter dt -# 88| 10: [Field] Field +# 88| 11: [Field] Field # 88| -1: [TypeMention] int -# 90| 11: [Property] Prop +# 90| 12: [Property] Prop # 90| -1: [TypeMention] int # 90| 3: [Getter] get_Prop # 90| 4: [Setter] set_Prop #-----| 2: (Parameters) # 90| 0: [Parameter] value -# 92| 12: [Indexer] Item +# 92| 13: [Indexer] Item # 92| -1: [TypeMention] int #-----| 1: (Parameters) # 92| 0: [Parameter] x diff --git a/csharp/ql/test/library-tests/enums/PrintAst.expected b/csharp/ql/test/library-tests/enums/PrintAst.expected index bb9e5a3a9c9b..3495c43a4939 100644 --- a/csharp/ql/test/library-tests/enums/PrintAst.expected +++ b/csharp/ql/test/library-tests/enums/PrintAst.expected @@ -31,7 +31,7 @@ enums.cs: # 40| 1: [CastExpr] (...) ... # 40| 1: [MemberConstantAccess] access to constant Red # 44| 6: [Class] Test -# 47| 5: [Method] Main +# 47| 6: [Method] Main # 47| -1: [TypeMention] Void # 48| 4: [BlockStmt] {...} # 49| 0: [ExprStmt] ...; @@ -58,7 +58,7 @@ enums.cs: # 51| 0: [MemberConstantAccess] access to constant Blue # 51| -1: [TypeAccess] access to type SparseColor # 51| 0: [TypeMention] SparseColor -# 54| 6: [Method] StringFromColor +# 54| 7: [Method] StringFromColor # 54| -1: [TypeMention] string #-----| 2: (Parameters) # 54| 0: [Parameter] c diff --git a/csharp/ql/test/library-tests/events/PrintAst.expected b/csharp/ql/test/library-tests/events/PrintAst.expected index 84825067e429..4767ea990843 100644 --- a/csharp/ql/test/library-tests/events/PrintAst.expected +++ b/csharp/ql/test/library-tests/events/PrintAst.expected @@ -7,7 +7,7 @@ events.cs: # 7| 1: [Parameter] e # 7| -1: [TypeMention] object # 9| 2: [Class] Button -# 12| 5: [Event] Click +# 12| 6: [Event] Click # 12| -1: [TypeMention] EventHandler # 12| 3: [AddEventAccessor] add_Click #-----| 2: (Parameters) @@ -15,7 +15,7 @@ events.cs: # 12| 4: [RemoveEventAccessor] remove_Click #-----| 2: (Parameters) # 12| 0: [Parameter] value -# 14| 6: [Method] OnClick +# 14| 7: [Method] OnClick # 14| -1: [TypeMention] Void #-----| 2: (Parameters) # 14| 0: [Parameter] e @@ -30,7 +30,7 @@ events.cs: # 17| -1: [EventAccess,EventCall] access to event Click # 17| 0: [ThisAccess] this access # 17| 1: [ParameterAccess] access to parameter e -# 20| 7: [Method] Reset +# 20| 8: [Method] Reset # 20| -1: [TypeMention] Void # 21| 4: [BlockStmt] {...} # 22| 0: [ExprStmt] ...; @@ -38,11 +38,11 @@ events.cs: # 22| 0: [EventAccess,EventCall] access to event Click # 22| 1: [NullLiteral] null # 26| 3: [Class] LoginDialog -# 29| 4: [Field] OkButton +# 29| 5: [Field] OkButton # 29| -1: [TypeMention] Button -# 30| 5: [Field] CancelButton +# 30| 6: [Field] CancelButton # 30| -1: [TypeMention] Button -# 32| 6: [InstanceConstructor] LoginDialog +# 32| 7: [InstanceConstructor] LoginDialog # 33| 4: [BlockStmt] {...} # 34| 0: [ExprStmt] ...; # 34| 0: [AssignExpr] ... = ... @@ -68,7 +68,7 @@ events.cs: # 37| 1: [ExplicitDelegateCreation] delegate creation of type EventHandler # 37| -1: [TypeMention] EventHandler # 37| 0: [MethodAccess] access to method CancelButtonClick -# 40| 7: [Method] OkButtonClick +# 40| 8: [Method] OkButtonClick # 40| -1: [TypeMention] Void #-----| 2: (Parameters) # 40| 0: [Parameter] sender @@ -76,7 +76,7 @@ events.cs: # 40| 1: [Parameter] e # 40| -1: [TypeMention] object # 41| 4: [BlockStmt] {...} -# 44| 8: [Method] CancelButtonClick +# 44| 9: [Method] CancelButtonClick # 44| -1: [TypeMention] Void #-----| 2: (Parameters) # 44| 0: [Parameter] sender @@ -85,15 +85,15 @@ events.cs: # 44| -1: [TypeMention] object # 45| 4: [BlockStmt] {...} # 50| 4: [Class] Control -# 53| 6: [Field] mouseDownEventKey +# 53| 7: [Field] mouseDownEventKey # 53| -1: [TypeMention] object # 53| 1: [ObjectCreation] object creation of type Object # 53| 0: [TypeMention] object -# 54| 7: [Field] mouseUpEventKey +# 54| 8: [Field] mouseUpEventKey # 54| -1: [TypeMention] object # 54| 1: [ObjectCreation] object creation of type Object # 54| 0: [TypeMention] object -# 57| 8: [Method] GetEventHandler +# 57| 9: [Method] GetEventHandler # 57| -1: [TypeMention] Delegate #-----| 2: (Parameters) # 57| 0: [Parameter] key @@ -101,7 +101,7 @@ events.cs: # 57| 4: [BlockStmt] {...} # 57| 0: [ReturnStmt] return ...; # 57| 0: [NullLiteral] null -# 60| 9: [Method] AddEventHandler +# 60| 10: [Method] AddEventHandler # 60| -1: [TypeMention] Void #-----| 2: (Parameters) # 60| 0: [Parameter] key @@ -109,7 +109,7 @@ events.cs: # 60| 1: [Parameter] handler # 60| -1: [TypeMention] Delegate # 60| 4: [BlockStmt] {...} -# 63| 10: [Method] RemoveEventHandler +# 63| 11: [Method] RemoveEventHandler # 63| -1: [TypeMention] Void #-----| 2: (Parameters) # 63| 0: [Parameter] key @@ -117,7 +117,7 @@ events.cs: # 63| 1: [Parameter] handler # 63| -1: [TypeMention] Delegate # 63| 4: [BlockStmt] {...} -# 66| 11: [Event] MouseDown +# 66| 12: [Event] MouseDown # 68| 3: [AddEventAccessor] add_MouseDown #-----| 2: (Parameters) # 68| 0: [Parameter] value @@ -134,7 +134,7 @@ events.cs: # 69| 0: [MethodCall] call to method RemoveEventHandler # 69| 0: [FieldAccess] access to field mouseDownEventKey # 69| 1: [ParameterAccess] access to parameter value -# 73| 12: [Event] MouseUp +# 73| 13: [Event] MouseUp # 75| 3: [AddEventAccessor] add_MouseUp #-----| 2: (Parameters) # 75| 0: [Parameter] value @@ -151,7 +151,7 @@ events.cs: # 76| 0: [MethodCall] call to method RemoveEventHandler # 76| 0: [FieldAccess] access to field mouseUpEventKey # 76| 1: [ParameterAccess] access to parameter value -# 80| 13: [Method] OnMouseUp +# 80| 14: [Method] OnMouseUp # 80| -1: [TypeMention] Void #-----| 2: (Parameters) # 80| 0: [Parameter] args diff --git a/csharp/ql/test/library-tests/exceptions/PrintAst.expected b/csharp/ql/test/library-tests/exceptions/PrintAst.expected index bbe09076bc61..bdc7ecb36881 100644 --- a/csharp/ql/test/library-tests/exceptions/PrintAst.expected +++ b/csharp/ql/test/library-tests/exceptions/PrintAst.expected @@ -1,11 +1,11 @@ exceptions.cs: # 3| [Class] Class1 -# 5| 5: [Method] G +# 5| 6: [Method] G # 5| -1: [TypeMention] Void # 6| 4: [BlockStmt] {...} -# 9| 6: [Field] p +# 9| 7: [Field] p # 9| -1: [TypeMention] int -# 11| 7: [Method] TestNoThrow +# 11| 8: [Method] TestNoThrow # 11| -1: [TypeMention] Void # 12| 4: [BlockStmt] {...} # 13| 0: [TryStmt] try {...} ... @@ -38,7 +38,7 @@ exceptions.cs: # 33| 0: [TypeMention] Exception # 34| 1: [BlockStmt] {...} # 35| 0: [EmptyStmt] ; -# 43| 8: [Method] TestCall +# 43| 9: [Method] TestCall # 43| -1: [TypeMention] Void # 44| 4: [BlockStmt] {...} # 45| 0: [TryStmt] try {...} ... @@ -69,7 +69,7 @@ exceptions.cs: # 66| 5: [GeneralCatchClause] catch {...} # 67| 1: [BlockStmt] {...} # 68| 0: [EmptyStmt] ; -# 72| 9: [Method] TestCreation +# 72| 10: [Method] TestCreation # 72| -1: [TypeMention] Void # 73| 4: [BlockStmt] {...} # 74| 0: [TryStmt] try {...} ... @@ -106,7 +106,7 @@ exceptions.cs: # 95| 0: [TypeMention] Exception # 96| 1: [BlockStmt] {...} # 97| 0: [EmptyStmt] ; -# 101| 10: [Method] TestIntAdd +# 101| 11: [Method] TestIntAdd # 101| -1: [TypeMention] Void # 102| 4: [BlockStmt] {...} # 103| 0: [TryStmt] try {...} ... @@ -144,7 +144,7 @@ exceptions.cs: # 124| 0: [TypeMention] Exception # 125| 1: [BlockStmt] {...} # 126| 0: [EmptyStmt] ; -# 130| 11: [Method] TestIntSub +# 130| 12: [Method] TestIntSub # 130| -1: [TypeMention] Void # 131| 4: [BlockStmt] {...} # 132| 0: [TryStmt] try {...} ... @@ -182,7 +182,7 @@ exceptions.cs: # 153| 0: [TypeMention] Exception # 154| 1: [BlockStmt] {...} # 155| 0: [EmptyStmt] ; -# 159| 12: [Method] TestIntMul +# 159| 13: [Method] TestIntMul # 159| -1: [TypeMention] Void # 160| 4: [BlockStmt] {...} # 161| 0: [TryStmt] try {...} ... @@ -220,7 +220,7 @@ exceptions.cs: # 182| 0: [TypeMention] Exception # 183| 1: [BlockStmt] {...} # 184| 0: [EmptyStmt] ; -# 188| 13: [Method] TestStringLiteral +# 188| 14: [Method] TestStringLiteral # 188| -1: [TypeMention] Void # 189| 4: [BlockStmt] {...} # 190| 0: [TryStmt] try {...} ... @@ -256,7 +256,7 @@ exceptions.cs: # 211| 0: [TypeMention] Exception # 212| 1: [BlockStmt] {...} # 213| 0: [EmptyStmt] ; -# 217| 14: [Method] TestStringAdd +# 217| 15: [Method] TestStringAdd # 217| -1: [TypeMention] Void # 218| 4: [BlockStmt] {...} # 219| 0: [TryStmt] try {...} ... @@ -299,7 +299,7 @@ exceptions.cs: # 241| 0: [TypeMention] Exception # 242| 1: [BlockStmt] {...} # 243| 0: [EmptyStmt] ; -# 247| 15: [Method] TestDivide +# 247| 16: [Method] TestDivide # 247| -1: [TypeMention] Void # 248| 4: [BlockStmt] {...} # 249| 0: [TryStmt] try {...} ... @@ -337,7 +337,7 @@ exceptions.cs: # 270| 0: [TypeMention] Exception # 271| 1: [BlockStmt] {...} # 272| 0: [EmptyStmt] ; -# 276| 16: [Method] TestRemainder +# 276| 17: [Method] TestRemainder # 276| -1: [TypeMention] Void # 277| 4: [BlockStmt] {...} # 278| 0: [TryStmt] try {...} ... @@ -375,7 +375,7 @@ exceptions.cs: # 299| 0: [TypeMention] Exception # 300| 1: [BlockStmt] {...} # 301| 0: [EmptyStmt] ; -# 305| 17: [Method] TestMemberAccess +# 305| 18: [Method] TestMemberAccess # 305| -1: [TypeMention] Void # 306| 4: [BlockStmt] {...} # 307| 0: [TryStmt] try {...} ... @@ -412,7 +412,7 @@ exceptions.cs: # 328| 0: [TypeMention] Exception # 329| 1: [BlockStmt] {...} # 330| 0: [EmptyStmt] ; -# 334| 18: [Method] TestCast +# 334| 19: [Method] TestCast # 334| -1: [TypeMention] Void # 335| 4: [BlockStmt] {...} # 336| 0: [TryStmt] try {...} ... @@ -451,7 +451,7 @@ exceptions.cs: # 357| 0: [TypeMention] Exception # 358| 1: [BlockStmt] {...} # 359| 0: [EmptyStmt] ; -# 363| 19: [Method] TestThrow +# 363| 20: [Method] TestThrow # 363| -1: [TypeMention] Void # 364| 4: [BlockStmt] {...} # 365| 0: [TryStmt] try {...} ... @@ -490,7 +490,7 @@ exceptions.cs: # 387| 0: [TypeMention] Exception # 388| 1: [BlockStmt] {...} # 389| 0: [EmptyStmt] ; -# 393| 20: [Method] TestUnaryOperation +# 393| 21: [Method] TestUnaryOperation # 393| -1: [TypeMention] Void # 394| 4: [BlockStmt] {...} # 395| 0: [TryStmt] try {...} ... @@ -529,7 +529,7 @@ exceptions.cs: # 417| 0: [TypeMention] Exception # 418| 1: [BlockStmt] {...} # 419| 0: [EmptyStmt] ; -# 423| 21: [Method] TestRethrow +# 423| 22: [Method] TestRethrow # 423| -1: [TypeMention] Void # 424| 4: [BlockStmt] {...} # 425| 0: [TryStmt] try {...} ... @@ -548,7 +548,7 @@ exceptions.cs: # 440| 2: [GeneralCatchClause] catch {...} # 441| 1: [BlockStmt] {...} # 442| 0: [EmptyStmt] ; -# 446| 22: [Method] TestSubtypeCast +# 446| 23: [Method] TestSubtypeCast # 446| -1: [TypeMention] Void # 447| 4: [BlockStmt] {...} # 448| 0: [TryStmt] try {...} ... @@ -577,7 +577,7 @@ exceptions.cs: # 458| 0: [TypeMention] Exception # 459| 1: [BlockStmt] {...} # 460| 0: [EmptyStmt] ; -# 464| 23: [Method] TestDivideMaybeZero +# 464| 24: [Method] TestDivideMaybeZero # 464| -1: [TypeMention] Void #-----| 2: (Parameters) # 464| 0: [Parameter] i diff --git a/csharp/ql/test/library-tests/expressions/PrintAst.expected b/csharp/ql/test/library-tests/expressions/PrintAst.expected index bee0a1e429cd..208ea3881140 100644 --- a/csharp/ql/test/library-tests/expressions/PrintAst.expected +++ b/csharp/ql/test/library-tests/expressions/PrintAst.expected @@ -1,6 +1,6 @@ FoldedLiterals.cs: # 1| [Class] FoldedLiterals -# 3| 5: [Method] Test +# 3| 6: [Method] Test # 3| -1: [TypeMention] Void # 4| 4: [BlockStmt] {...} # 6| 0: [LocalVariableDeclStmt] ... ...; @@ -338,7 +338,7 @@ FoldedLiterals.cs: # 77| 0: [DecimalLiteral] 11 MethodAccess.cs: # 3| [Class] MethodAccess -# 5| 5: [Method] M +# 5| 6: [Method] M # 5| -1: [TypeMention] Void # 6| 4: [BlockStmt] {...} # 7| 0: [LocalFunctionStmt] M1(...) @@ -374,29 +374,29 @@ MethodAccess.cs: # 12| 0: [MethodAccess] access to method M3 # 12| -1: [TypeAccess] access to type MethodAccess # 12| 0: [TypeMention] MethodAccess -# 15| 6: [Method] M2 +# 15| 7: [Method] M2 # 15| -1: [TypeMention] Void # 15| 4: [BlockStmt] {...} -# 17| 7: [Method] M3 +# 17| 8: [Method] M3 # 17| -1: [TypeMention] Void # 17| 4: [BlockStmt] {...} Qualifiers.cs: # 3| [Class] Qualifiers -# 5| 5: [Property] S +# 5| 6: [Property] S # 5| -1: [TypeMention] short # 5| 3: [Getter] get_S # 5| 4: [MethodCall] call to method Static # 5| 0: [NullLiteral] null -# 7| 6: [Property] I +# 7| 7: [Property] I # 7| -1: [TypeMention] int # 7| 3: [Getter] get_I # 7| 4: [MethodCall] call to method Instance -# 9| 7: [Property] B +# 9| 8: [Property] B # 9| -1: [TypeMention] bool # 9| 3: [Getter] get_B # 9| 4: [MethodCall] call to method Instance # 9| -1: [ThisAccess] this access -# 11| 9: [Method] Static`1 +# 11| 10: [Method] Static`1 # 11| -1: [TypeMention] T #-----| 1: (Type parameters) # 11| 0: [TypeParameter] T @@ -406,7 +406,7 @@ Qualifiers.cs: # 11| 4: [DefaultValueExpr] default(...) # 11| 0: [TypeAccess] access to type T # 11| 0: [TypeMention] T -# 13| 12: [Method] Instance`1 +# 13| 13: [Method] Instance`1 # 13| -1: [TypeMention] T #-----| 1: (Type parameters) # 13| 0: [TypeParameter] T @@ -415,7 +415,7 @@ Qualifiers.cs: # 13| 0: [TypeMention] T ReducedExpression.cs: # 2| [Class] ReducedClass -# 5| 5: [Field] ReducedExpression +# 5| 6: [Field] ReducedExpression # 5| -1: [TypeMention] int # 5| 1: [ConditionalExpr] ... ? ... : ... # 5| 0: [BoolLiteral] true @@ -424,7 +424,7 @@ ReducedExpression.cs: expressions.cs: # 5| [NamespaceDeclaration] namespace ... { ... } # 7| 1: [Class] Class -# 10| 4: [Method] MainLiterals +# 10| 5: [Method] MainLiterals # 10| -1: [TypeMention] Void # 11| 4: [BlockStmt] {...} # 12| 0: [LocalVariableDeclStmt] ... ...; @@ -514,7 +514,7 @@ expressions.cs: # 34| 0: [AssignExpr] ... = ... # 34| 0: [LocalVariableAccess] access to local variable o # 34| 1: [NullLiteral] null -# 37| 5: [Method] LogicalOperators +# 37| 6: [Method] LogicalOperators # 37| -1: [TypeMention] bool #-----| 2: (Parameters) # 37| 0: [Parameter] a @@ -546,15 +546,15 @@ expressions.cs: # 41| 1: [ParameterAccess] access to parameter b # 41| 1: [LogicalNotExpr] !... # 41| 0: [LocalVariableAccess] access to local variable c -# 44| 6: [Field] constant +# 44| 7: [Field] constant # 44| -1: [TypeMention] string # 44| 1: [StringLiteralUtf16] "constant" -# 45| 7: [Field] f +# 45| 8: [Field] f # 45| -1: [TypeMention] int # 45| 1: [IntLiteral] 0 -# 46| 8: [Field] name +# 46| 9: [Field] name # 46| -1: [TypeMention] string -# 48| 9: [StaticConstructor] Class +# 48| 10: [StaticConstructor] Class # 49| 4: [BlockStmt] {...} # 51| 0: [ExprStmt] ...; # 51| 0: [AssignExpr] ... = ... @@ -568,19 +568,19 @@ expressions.cs: # 52| 0: [TypeMention] Class # 53| 2: [ExprStmt] ...; # 53| 0: [MethodCall] call to method Foo -# 56| 10: [InstanceConstructor] Class +# 56| 11: [InstanceConstructor] Class # 56| 3: [ConstructorInitializer] call to constructor Class # 56| 0: [IntLiteral] 0 # 56| 4: [BlockStmt] {...} -# 58| 11: [InstanceConstructor] Class +# 58| 12: [InstanceConstructor] Class #-----| 2: (Parameters) # 58| 0: [Parameter] i # 58| -1: [TypeMention] int # 58| 4: [BlockStmt] {...} -# 60| 12: [Method] Foo +# 60| 13: [Method] Foo # 60| -1: [TypeMention] Void # 60| 4: [BlockStmt] {...} -# 62| 13: [Method] Bar +# 62| 14: [Method] Bar # 62| -1: [TypeMention] int #-----| 2: (Parameters) # 62| 0: [Parameter] x @@ -593,7 +593,7 @@ expressions.cs: # 64| 0: [PropertyCall] access to property Length # 64| -1: [ParameterAccess] access to parameter s # 64| 1: [ParameterAccess] access to parameter x -# 67| 14: [Property] Name +# 67| 15: [Property] Name # 67| -1: [TypeMention] string # 69| 3: [Getter] get_Name # 69| 4: [BlockStmt] {...} @@ -607,7 +607,7 @@ expressions.cs: # 70| 0: [AssignExpr] ... = ... # 70| 0: [FieldAccess] access to field name # 70| 1: [ParameterAccess] access to parameter value -# 73| 15: [Indexer] Item +# 73| 16: [Indexer] Item # 73| -1: [TypeMention] bool #-----| 1: (Parameters) # 73| 0: [Parameter] i @@ -638,7 +638,7 @@ expressions.cs: # 76| 1: [ExprStmt] ...; # 76| 0: [PostIncrExpr] ...++ # 76| 0: [FieldAccess] access to field f -# 79| 16: [Method] MainAccesses +# 79| 17: [Method] MainAccesses # 79| -1: [TypeMention] Void #-----| 2: (Parameters) # 79| 0: [Parameter] other @@ -718,7 +718,7 @@ expressions.cs: # 89| -1: [LocalVariableAccess] access to local variable inlinearray # 89| 0: [IntLiteral] 2 # 89| 1: [IntLiteral] 7 -# 92| 17: [Method] MainIsAsCast +# 92| 18: [Method] MainIsAsCast # 92| -1: [TypeMention] Void #-----| 2: (Parameters) # 92| 0: [Parameter] s @@ -780,14 +780,14 @@ expressions.cs: # 101| 1: [StringLiteralUtf16] " " # 101| 1: [CastExpr] (...) ... # 101| 1: [LocalVariableAccess] access to local variable i -# 104| 18: [Class] Y`2 +# 104| 19: [Class] Y`2 #-----| 1: (Type parameters) # 104| 0: [TypeParameter] T # 104| 1: [TypeParameter] U -# 108| 20: [Class] X`1 +# 108| 21: [Class] X`1 #-----| 1: (Type parameters) # 108| 0: [TypeParameter] T -# 111| 5: [Method] PrintTypes +# 111| 6: [Method] PrintTypes # 111| -1: [TypeMention] Void # 112| 4: [BlockStmt] {...} # 113| 0: [LocalVariableDeclStmt] ... ...; @@ -840,17 +840,17 @@ expressions.cs: # 125| 1: [DefaultValueExpr] default(...) # 125| 0: [TypeAccess] access to type T # 125| 0: [TypeMention] T -# 130| 21: [Class] Nested +# 130| 22: [Class] Nested #-----| 3: (Base types) # 130| 0: [TypeMention] Class -# 132| 4: [StaticConstructor] Nested +# 132| 5: [StaticConstructor] Nested # 132| 4: [BlockStmt] {...} -# 133| 5: [InstanceConstructor] Nested +# 133| 6: [InstanceConstructor] Nested #-----| 2: (Parameters) # 133| 0: [Parameter] b # 133| -1: [TypeMention] bool # 133| 4: [BlockStmt] {...} -# 134| 6: [InstanceConstructor] Nested +# 134| 7: [InstanceConstructor] Nested #-----| 2: (Parameters) # 134| 0: [Parameter] i # 134| -1: [TypeMention] int @@ -859,7 +859,7 @@ expressions.cs: # 134| 0: [ParameterAccess] access to parameter i # 134| 1: [IntLiteral] 1 # 134| 4: [BlockStmt] {...} -# 136| 7: [Method] OtherAccesses +# 136| 8: [Method] OtherAccesses # 136| -1: [TypeMention] Void # 137| 4: [BlockStmt] {...} # 138| 0: [ExprStmt] ...; @@ -880,7 +880,7 @@ expressions.cs: # 139| 4: [CastExpr] (...) ... # 139| 1: [IntLiteral] 4 # 139| 5: [StringLiteralUtf16] "" -# 144| 22: [Method] MainLocalVarDecl +# 144| 23: [Method] MainLocalVarDecl # 144| -1: [TypeMention] Void # 145| 4: [BlockStmt] {...} # 146| 0: [LocalVariableDeclStmt] ... ...; @@ -918,7 +918,7 @@ expressions.cs: # 151| -1: [TypeMention] string # 151| 0: [LocalVariableAccess] access to local variable y # 151| 1: [StringLiteralUtf16] "test" -# 154| 23: [Method] MainLocalConstDecl +# 154| 24: [Method] MainLocalConstDecl # 154| -1: [TypeMention] Void # 155| 4: [BlockStmt] {...} # 156| 0: [LocalConstantDeclStmt] const ... ...; @@ -944,7 +944,7 @@ expressions.cs: # 158| 1: [LocalVariableAccess] access to local variable r # 158| 1: [CastExpr] (...) ... # 158| 1: [LocalVariableAccess] access to local variable r -# 161| 24: [Method] MainChecked +# 161| 25: [Method] MainChecked # 161| -1: [TypeMention] Void # 162| 4: [BlockStmt] {...} # 163| 0: [LocalVariableDeclStmt] ... ...; @@ -961,7 +961,7 @@ expressions.cs: # 164| 0: [AddExpr] ... + ... # 164| 0: [FieldAccess] access to field f # 164| 1: [IntLiteral] 20 -# 167| 25: [Method] MainElementAccess +# 167| 26: [Method] MainElementAccess # 167| -1: [TypeMention] Void #-----| 2: (Parameters) # 167| 0: [Parameter] i @@ -978,7 +978,7 @@ expressions.cs: # 169| -1: [ArrayInitializer] { ..., ... } # 169| 0: [CastExpr] (...) ... # 169| 1: [ParameterAccess] access to parameter i -# 172| 26: [Method] MainDelegateAndMethodAccesses +# 172| 27: [Method] MainDelegateAndMethodAccesses # 172| -1: [TypeMention] Void # 173| 4: [BlockStmt] {...} # 174| 0: [LocalVariableDeclStmt] ... ...; @@ -1127,26 +1127,26 @@ expressions.cs: # 205| 0: [Parameter] x # 205| -1: [TypeMention] int # 207| 4: [Class] C -# 210| 5: [Method] M1 +# 210| 6: [Method] M1 # 210| -1: [TypeMention] Void #-----| 2: (Parameters) # 210| 0: [Parameter] i # 210| -1: [TypeMention] int # 210| 4: [BlockStmt] {...} -# 211| 6: [Method] M2 +# 211| 7: [Method] M2 # 211| -1: [TypeMention] Void #-----| 2: (Parameters) # 211| 0: [Parameter] i # 211| -1: [TypeMention] int # 211| 4: [BlockStmt] {...} -# 212| 7: [Method] M3 +# 212| 8: [Method] M3 # 212| -1: [TypeMention] Void #-----| 2: (Parameters) # 212| 0: [Parameter] i # 212| -1: [TypeMention] int # 212| 4: [BlockStmt] {...} # 216| 5: [Class] X -# 219| 5: [Method] F +# 219| 6: [Method] F # 219| -1: [TypeMention] bool #-----| 2: (Parameters) # 219| 0: [Parameter] i @@ -1156,7 +1156,7 @@ expressions.cs: # 219| 0: [LTExpr] ... < ... # 219| 0: [ParameterAccess] access to parameter i # 219| 1: [IntLiteral] 2 -# 221| 6: [Method] G +# 221| 7: [Method] G # 221| -1: [TypeMention] bool #-----| 2: (Parameters) # 221| 0: [Parameter] s @@ -1171,7 +1171,7 @@ expressions.cs: # 225| 1: [Parameter] e # 225| -1: [TypeMention] object # 227| 7: [Class] Button -# 230| 5: [Event] Click +# 230| 6: [Event] Click # 230| -1: [TypeMention] EventHandler # 230| 3: [AddEventAccessor] add_Click #-----| 2: (Parameters) @@ -1179,7 +1179,7 @@ expressions.cs: # 230| 4: [RemoveEventAccessor] remove_Click #-----| 2: (Parameters) # 230| 0: [Parameter] value -# 232| 6: [Method] OnClick +# 232| 7: [Method] OnClick # 232| -1: [TypeMention] Void #-----| 2: (Parameters) # 232| 0: [Parameter] e @@ -1194,7 +1194,7 @@ expressions.cs: # 235| -1: [EventAccess,EventCall] access to event Click # 235| 0: [ThisAccess] this access # 235| 1: [ParameterAccess] access to parameter e -# 238| 7: [Method] Reset +# 238| 8: [Method] Reset # 238| -1: [TypeMention] Void # 239| 4: [BlockStmt] {...} # 240| 0: [ExprStmt] ...; @@ -1202,11 +1202,11 @@ expressions.cs: # 240| 0: [EventAccess,EventCall] access to event Click # 240| 1: [NullLiteral] null # 244| 8: [Class] LoginDialog -# 247| 4: [Field] OkButton +# 247| 5: [Field] OkButton # 247| -1: [TypeMention] Button -# 248| 5: [Field] CancelButton +# 248| 6: [Field] CancelButton # 248| -1: [TypeMention] Button -# 250| 6: [InstanceConstructor] LoginDialog +# 250| 7: [InstanceConstructor] LoginDialog # 251| 4: [BlockStmt] {...} # 252| 0: [ExprStmt] ...; # 252| 0: [AssignExpr] ... = ... @@ -1232,7 +1232,7 @@ expressions.cs: # 255| 1: [ExplicitDelegateCreation] delegate creation of type EventHandler # 255| -1: [TypeMention] EventHandler # 255| 0: [MethodAccess] access to method CancelButtonClick -# 258| 7: [Method] OkButtonClick +# 258| 8: [Method] OkButtonClick # 258| -1: [TypeMention] Void #-----| 2: (Parameters) # 258| 0: [Parameter] sender @@ -1240,7 +1240,7 @@ expressions.cs: # 258| 1: [Parameter] e # 258| -1: [TypeMention] object # 259| 4: [BlockStmt] {...} -# 262| 8: [Method] CancelButtonClick +# 262| 9: [Method] CancelButtonClick # 262| -1: [TypeMention] Void #-----| 2: (Parameters) # 262| 0: [Parameter] sender @@ -1249,18 +1249,18 @@ expressions.cs: # 262| -1: [TypeMention] object # 263| 4: [BlockStmt] {...} # 268| 9: [Class] IntVector -# 271| 4: [InstanceConstructor] IntVector +# 271| 5: [InstanceConstructor] IntVector #-----| 2: (Parameters) # 271| 0: [Parameter] length # 271| -1: [TypeMention] int # 271| 4: [BlockStmt] {...} -# 273| 5: [Property] Length +# 273| 6: [Property] Length # 273| -1: [TypeMention] int # 273| 3: [Getter] get_Length # 273| 4: [BlockStmt] {...} # 273| 0: [ReturnStmt] return ...; # 273| 0: [IntLiteral] 4 -# 275| 6: [Indexer] Item +# 275| 7: [Indexer] Item # 275| -1: [TypeMention] int #-----| 1: (Parameters) # 275| 0: [Parameter] index @@ -1276,7 +1276,7 @@ expressions.cs: # 275| 0: [Parameter] index # 275| 1: [Parameter] value # 275| 4: [BlockStmt] {...} -# 277| 7: [IncrementOperator] ++ +# 277| 8: [IncrementOperator] ++ # 277| -1: [TypeMention] IntVector #-----| 2: (Parameters) # 277| 0: [Parameter] iv @@ -1313,7 +1313,7 @@ expressions.cs: # 281| 1: [IntLiteral] 1 # 282| 2: [ReturnStmt] return ...; # 282| 0: [LocalVariableAccess] access to local variable temp -# 285| 8: [AddOperator] + +# 285| 9: [AddOperator] + # 285| -1: [TypeMention] IntVector #-----| 2: (Parameters) # 285| 0: [Parameter] iv1 @@ -1324,7 +1324,7 @@ expressions.cs: # 287| 0: [ReturnStmt] return ...; # 287| 0: [ParameterAccess] access to parameter iv1 # 292| 10: [Class] TestUnaryOperator -# 295| 5: [Method] MainUnaryOperator +# 295| 6: [Method] MainUnaryOperator # 295| -1: [TypeMention] Void # 296| 4: [BlockStmt] {...} # 297| 0: [LocalVariableDeclStmt] ... ...; @@ -1355,9 +1355,9 @@ expressions.cs: # 301| 0: [LocalVariableAccess] access to local variable iv1 # 301| 1: [LocalVariableAccess] access to local variable iv2 # 306| 11: [Struct] Digit -# 309| 5: [Field] value +# 309| 6: [Field] value # 309| -1: [TypeMention] byte -# 311| 6: [InstanceConstructor] Digit +# 311| 7: [InstanceConstructor] Digit #-----| 2: (Parameters) # 311| 0: [Parameter] value # 311| -1: [TypeMention] byte @@ -1380,7 +1380,7 @@ expressions.cs: # 315| 0: [FieldAccess] access to field value # 315| -1: [ThisAccess] this access # 315| 1: [ParameterAccess] access to parameter value -# 318| 7: [ImplicitConversionOperator] implicit conversion +# 318| 8: [ImplicitConversionOperator] implicit conversion # 318| -1: [TypeMention] byte #-----| 2: (Parameters) # 318| 0: [Parameter] d @@ -1389,7 +1389,7 @@ expressions.cs: # 320| 0: [ReturnStmt] return ...; # 320| 0: [FieldAccess] access to field value # 320| -1: [ParameterAccess] access to parameter d -# 323| 8: [ExplicitConversionOperator] explicit conversion +# 323| 9: [ExplicitConversionOperator] explicit conversion # 323| -1: [TypeMention] Digit #-----| 2: (Parameters) # 323| 0: [Parameter] b @@ -1400,7 +1400,7 @@ expressions.cs: # 325| -1: [TypeMention] Digit # 325| 0: [ParameterAccess] access to parameter b # 330| 12: [Class] TestConversionOperator -# 333| 5: [Method] MainConversionOperator +# 333| 6: [Method] MainConversionOperator # 333| -1: [TypeMention] Void # 334| 4: [BlockStmt] {...} # 335| 0: [LocalVariableDeclStmt] ... ...; @@ -1418,11 +1418,11 @@ expressions.cs: # 336| 1: [OperatorCall] call to operator implicit conversion # 336| 0: [LocalVariableAccess] access to local variable d # 341| 13: [Class] Point -# 344| 5: [Field] x +# 344| 6: [Field] x # 344| -1: [TypeMention] int -# 344| 6: [Field] y +# 344| 7: [Field] y # 344| -1: [TypeMention] int -# 346| 7: [Property] X +# 346| 8: [Property] X # 346| -1: [TypeMention] int # 346| 3: [Getter] get_X # 346| 4: [BlockStmt] {...} @@ -1436,7 +1436,7 @@ expressions.cs: # 346| 0: [AssignExpr] ... = ... # 346| 0: [FieldAccess] access to field x # 346| 1: [ParameterAccess] access to parameter value -# 347| 8: [Property] Y +# 347| 9: [Property] Y # 347| -1: [TypeMention] int # 347| 3: [Getter] get_Y # 347| 4: [BlockStmt] {...} @@ -1451,11 +1451,11 @@ expressions.cs: # 347| 0: [FieldAccess] access to field y # 347| 1: [ParameterAccess] access to parameter value # 351| 14: [Class] Rectangle -# 354| 5: [Field] p1 +# 354| 6: [Field] p1 # 354| -1: [TypeMention] Point -# 354| 6: [Field] p2 +# 354| 7: [Field] p2 # 354| -1: [TypeMention] Point -# 356| 7: [Property] P1 +# 356| 8: [Property] P1 # 356| -1: [TypeMention] Point # 356| 3: [Getter] get_P1 # 356| 4: [BlockStmt] {...} @@ -1469,7 +1469,7 @@ expressions.cs: # 356| 0: [AssignExpr] ... = ... # 356| 0: [FieldAccess] access to field p1 # 356| 1: [ParameterAccess] access to parameter value -# 357| 8: [Property] P2 +# 357| 9: [Property] P2 # 357| -1: [TypeMention] Point # 357| 3: [Getter] get_P2 # 357| 4: [BlockStmt] {...} @@ -1484,36 +1484,36 @@ expressions.cs: # 357| 0: [FieldAccess] access to field p2 # 357| 1: [ParameterAccess] access to parameter value # 361| 15: [Class] Rectangle2 -# 364| 5: [Field] p1 +# 364| 6: [Field] p1 # 364| -1: [TypeMention] Point # 364| 1: [ObjectCreation] object creation of type Point # 364| 0: [TypeMention] Point -# 365| 6: [Field] p2 +# 365| 7: [Field] p2 # 365| -1: [TypeMention] Point # 365| 1: [ObjectCreation] object creation of type Point # 365| 0: [TypeMention] Point -# 367| 7: [Property] P1 +# 367| 8: [Property] P1 # 367| -1: [TypeMention] Point # 367| 3: [Getter] get_P1 # 367| 4: [BlockStmt] {...} # 367| 0: [ReturnStmt] return ...; # 367| 0: [FieldAccess] access to field p1 -# 368| 8: [Property] P2 +# 368| 9: [Property] P2 # 368| -1: [TypeMention] Point # 368| 3: [Getter] get_P2 # 368| 4: [BlockStmt] {...} # 368| 0: [ReturnStmt] return ...; # 368| 0: [FieldAccess] access to field p2 # 372| 16: [Class] Contact -# 375| 5: [Field] name +# 375| 6: [Field] name # 375| -1: [TypeMention] string -# 376| 6: [Field] phoneNumbers +# 376| 7: [Field] phoneNumbers # 376| -1: [TypeMention] List # 376| 1: [TypeMention] string # 376| 1: [ObjectCreation] object creation of type List # 376| 0: [TypeMention] List # 376| 1: [TypeMention] string -# 378| 7: [Property] Name +# 378| 8: [Property] Name # 378| -1: [TypeMention] string # 378| 3: [Getter] get_Name # 378| 4: [BlockStmt] {...} @@ -1527,7 +1527,7 @@ expressions.cs: # 378| 0: [AssignExpr] ... = ... # 378| 0: [FieldAccess] access to field name # 378| 1: [ParameterAccess] access to parameter value -# 379| 8: [Property] PhoneNumbers +# 379| 9: [Property] PhoneNumbers # 379| -1: [TypeMention] List # 379| 1: [TypeMention] string # 379| 3: [Getter] get_PhoneNumbers @@ -1535,7 +1535,7 @@ expressions.cs: # 379| 0: [ReturnStmt] return ...; # 379| 0: [FieldAccess] access to field phoneNumbers # 383| 17: [Class] TestCreations -# 386| 5: [Method] MainCreations +# 386| 6: [Method] MainCreations # 386| -1: [TypeMention] Void # 387| 4: [BlockStmt] {...} # 388| 0: [LocalVariableDeclStmt] ... ...; @@ -1827,14 +1827,14 @@ expressions.cs: # 430| 0: [EQExpr] ... == ... # 430| 0: [LocalVariableAccess] access to local variable i # 430| 1: [IntLiteral] 2 -# 433| 6: [DelegateType] S +# 433| 7: [DelegateType] S #-----| 2: (Parameters) # 433| 0: [Parameter] x # 433| -1: [TypeMention] int # 433| 1: [Parameter] y # 433| -1: [TypeMention] int -# 434| 7: [DelegateType] Unit -# 436| 8: [Method] MultiDimensionalArrayCreations +# 434| 8: [DelegateType] Unit +# 436| 9: [Method] MultiDimensionalArrayCreations # 436| -1: [TypeMention] Void # 437| 4: [BlockStmt] {...} # 438| 0: [LocalVariableDeclStmt] ... ...; @@ -1994,7 +1994,7 @@ expressions.cs: # 445| 0: [IntLiteral] 1 # 445| 1: [IntLiteral] 2 # 445| 2: [IntLiteral] 3 -# 448| 9: [Method] MainAnonymousFunctions +# 448| 10: [Method] MainAnonymousFunctions # 448| -1: [TypeMention] Void # 449| 4: [BlockStmt] {...} # 450| 0: [LocalVariableDeclStmt] ... ...; @@ -2108,7 +2108,7 @@ expressions.cs: # 458| 0: [LocalVariableAccess] access to local variable j # 458| 1: [IntLiteral] 1 # 463| 18: [Class] OperatorCalls -# 465| 5: [Method] delegateCombine +# 465| 6: [Method] delegateCombine # 465| -1: [TypeMention] Void #-----| 2: (Parameters) # 465| 0: [Parameter] fun @@ -2123,7 +2123,7 @@ expressions.cs: # 468| 0: [AssignAddExpr] ... += ... # 468| 0: [LocalVariableAccess] access to local variable PropertyChanged # 468| 1: [ParameterAccess] access to parameter fun -# 471| 6: [Method] addition +# 471| 7: [Method] addition # 471| -1: [TypeMention] Num #-----| 2: (Parameters) # 471| 0: [Parameter] a @@ -2146,10 +2146,10 @@ expressions.cs: # 474| 1: [ParameterAccess] access to parameter c # 475| 2: [ReturnStmt] return ...; # 475| 0: [LocalVariableAccess] access to local variable result -# 477| 7: [Class] Num -# 479| 4: [Field] value +# 477| 8: [Class] Num +# 479| 5: [Field] value # 479| -1: [TypeMention] int -# 481| 5: [InstanceConstructor] Num +# 481| 6: [InstanceConstructor] Num #-----| 2: (Parameters) # 481| 0: [Parameter] value # 481| -1: [TypeMention] int @@ -2159,7 +2159,7 @@ expressions.cs: # 483| 0: [FieldAccess] access to field value # 483| -1: [ThisAccess] this access # 483| 1: [ParameterAccess] access to parameter value -# 486| 6: [AddOperator] + +# 486| 7: [AddOperator] + # 486| -1: [TypeMention] Num #-----| 2: (Parameters) # 486| 0: [Parameter] c1 @@ -2175,12 +2175,12 @@ expressions.cs: # 488| -1: [ParameterAccess] access to parameter c1 # 488| 1: [FieldAccess] access to field value # 488| -1: [ParameterAccess] access to parameter c2 -# 492| 8: [DelegateType] MyDelegate +# 492| 9: [DelegateType] MyDelegate #-----| 2: (Parameters) # 492| 0: [Parameter] e # 492| -1: [TypeMention] string # 495| 19: [Class] ExpressionDepth -# 497| 5: [Field] d +# 497| 6: [Field] d # 497| -1: [TypeMention] int # 497| 1: [AddExpr] ... + ... # 497| 0: [AddExpr] ... + ... @@ -2342,7 +2342,7 @@ expressions.cs: # 498| 1: [IntLiteral] 1 # 498| 1: [IntLiteral] 1 # 501| 20: [Class] TupleExprs -# 503| 5: [Method] Test +# 503| 6: [Method] Test # 503| -1: [TypeMention] Void # 504| 4: [BlockStmt] {...} # 505| 0: [LocalVariableDeclStmt] ... ...; @@ -2390,28 +2390,28 @@ expressions.cs: # 512| 1: [DefaultAttribute] [InlineArray(...)] # 512| -1: [TypeMention] InlineArrayAttribute # 512| 0: [IntLiteral] 10 -# 515| 5: [Field] myInlineArrayElements +# 515| 6: [Field] myInlineArrayElements # 515| -1: [TypeMention] int # 518| 22: [Class] ClassC1 -# 518| 4: [InstanceConstructor,PrimaryConstructor] ClassC1 +# 518| 5: [InstanceConstructor,PrimaryConstructor] ClassC1 #-----| 2: (Parameters) # 518| 0: [Parameter] oc1 # 518| -1: [TypeMention] object # 520| 23: [Class] ClassC2 #-----| 3: (Base types) # 520| 0: [TypeMention] ClassC1 -# 520| 4: [InstanceConstructor,PrimaryConstructor] ClassC2 +# 520| 5: [InstanceConstructor,PrimaryConstructor] ClassC2 #-----| 2: (Parameters) # 520| 0: [Parameter] oc2 # 520| -1: [TypeMention] object # 520| 3: [ConstructorInitializer] call to constructor ClassC1 # 520| 0: [ParameterAccess] access to parameter oc2 # 522| 24: [Class] SuppressNullableWarning -# 525| 5: [Method] Api +# 525| 6: [Method] Api # 525| -1: [TypeMention] object # 525| 4: [ObjectCreation] object creation of type Object # 525| 0: [TypeMention] object -# 527| 6: [Method] Test +# 527| 7: [Method] Test # 527| -1: [TypeMention] Void #-----| 2: (Parameters) # 527| 0: [Parameter] arg0 diff --git a/csharp/ql/test/library-tests/expressions/QualifiableExpr.expected b/csharp/ql/test/library-tests/expressions/QualifiableExpr.expected index c85d73bd7f7c..8030da8c4fa9 100644 --- a/csharp/ql/test/library-tests/expressions/QualifiableExpr.expected +++ b/csharp/ql/test/library-tests/expressions/QualifiableExpr.expected @@ -1,12 +1,17 @@ +| FoldedLiterals.cs:1:7:1:20 | call to method | FoldedLiterals.cs:1:7:1:20 | this access | +| MethodAccess.cs:3:7:3:18 | call to method | MethodAccess.cs:3:7:3:18 | this access | | MethodAccess.cs:8:20:8:21 | access to local function M1 | MethodAccess.cs:8:20:8:21 | this access | | MethodAccess.cs:9:13:9:14 | access to method M2 | MethodAccess.cs:9:13:9:14 | this access | | MethodAccess.cs:10:13:10:19 | access to method M2 | MethodAccess.cs:10:13:10:16 | this access | | MethodAccess.cs:12:13:12:27 | access to method M3 | MethodAccess.cs:12:13:12:24 | access to type MethodAccess | +| Qualifiers.cs:3:7:3:16 | call to method | Qualifiers.cs:3:7:3:16 | this access | | Qualifiers.cs:7:21:7:35 | call to method Instance | Qualifiers.cs:7:21:7:35 | this access | | Qualifiers.cs:9:22:9:42 | call to method Instance | Qualifiers.cs:9:22:9:25 | this access | +| ReducedExpression.cs:2:7:2:18 | call to method | ReducedExpression.cs:2:7:2:18 | this access | | expressions.cs:45:20:45:20 | access to field f | expressions.cs:45:20:45:20 | this access | | expressions.cs:51:13:51:34 | access to field name | expressions.cs:51:13:51:29 | access to type Class | | expressions.cs:52:13:52:23 | call to method Foo | expressions.cs:52:13:52:17 | access to type Class | +| expressions.cs:58:19:58:23 | call to method | expressions.cs:58:19:58:23 | this access | | expressions.cs:64:20:64:27 | access to property Length | expressions.cs:64:20:64:20 | access to parameter s | | expressions.cs:75:35:75:46 | call to method Equals | expressions.cs:75:35:75:35 | access to parameter s | | expressions.cs:76:30:76:30 | access to field f | expressions.cs:76:30:76:30 | this access | @@ -20,6 +25,10 @@ | expressions.cs:85:41:85:51 | access to indexer | expressions.cs:85:41:85:44 | this access | | expressions.cs:87:13:87:20 | access to array element | expressions.cs:87:13:87:17 | access to local variable array | | expressions.cs:89:13:89:26 | access to array element | expressions.cs:89:13:89:23 | access to local variable inlinearray | +| expressions.cs:104:15:104:15 | call to method | expressions.cs:104:15:104:15 | this access | +| expressions.cs:108:15:108:15 | call to method | expressions.cs:108:15:108:15 | this access | +| expressions.cs:133:13:133:18 | call to method | expressions.cs:133:13:133:18 | this access | +| expressions.cs:134:13:134:18 | call to method | expressions.cs:134:13:134:18 | this access | | expressions.cs:138:17:138:22 | access to field f | expressions.cs:138:17:138:20 | this access | | expressions.cs:139:17:139:55 | call to method MainAccesses | expressions.cs:139:17:139:20 | base access | | expressions.cs:149:13:149:40 | call to method WriteLine | expressions.cs:149:13:149:19 | access to type Console | @@ -33,9 +42,13 @@ | expressions.cs:191:36:191:38 | access to method G | expressions.cs:191:36:191:36 | access to type X | | expressions.cs:198:25:198:37 | access to local function LocalFunction | expressions.cs:198:25:198:37 | this access | | expressions.cs:199:19:199:31 | access to local function LocalFunction | expressions.cs:199:19:199:31 | this access | +| expressions.cs:207:11:207:11 | call to method | expressions.cs:207:11:207:11 | this access | +| expressions.cs:216:18:216:18 | call to method | expressions.cs:216:18:216:18 | this access | +| expressions.cs:227:18:227:23 | call to method | expressions.cs:227:18:227:23 | this access | | expressions.cs:234:17:234:21 | access to event Click | expressions.cs:234:17:234:21 | this access | | expressions.cs:235:17:235:21 | access to event Click | expressions.cs:235:17:235:21 | this access | | expressions.cs:240:13:240:17 | access to event Click | expressions.cs:240:13:240:17 | this access | +| expressions.cs:250:16:250:26 | call to method | expressions.cs:250:16:250:26 | this access | | expressions.cs:252:13:252:20 | access to field OkButton | expressions.cs:252:13:252:20 | this access | | expressions.cs:253:13:253:20 | access to field OkButton | expressions.cs:253:13:253:20 | this access | | expressions.cs:253:13:253:26 | access to event Click | expressions.cs:253:13:253:20 | access to field OkButton | @@ -44,30 +57,48 @@ | expressions.cs:255:13:255:24 | access to field CancelButton | expressions.cs:255:13:255:24 | this access | | expressions.cs:255:13:255:30 | access to event Click | expressions.cs:255:13:255:24 | access to field CancelButton | | expressions.cs:255:52:255:68 | access to method CancelButtonClick | expressions.cs:255:52:255:68 | this access | +| expressions.cs:271:16:271:24 | call to method | expressions.cs:271:16:271:24 | this access | | expressions.cs:279:44:279:52 | access to property Length | expressions.cs:279:44:279:45 | access to parameter iv | | expressions.cs:280:33:280:41 | access to property Length | expressions.cs:280:33:280:34 | access to parameter iv | | expressions.cs:281:17:281:23 | access to indexer | expressions.cs:281:17:281:20 | access to local variable temp | | expressions.cs:281:27:281:31 | access to indexer | expressions.cs:281:27:281:28 | access to parameter iv | +| expressions.cs:292:11:292:27 | call to method | expressions.cs:292:11:292:27 | this access | +| expressions.cs:306:19:306:23 | call to method | expressions.cs:306:19:306:23 | this access | +| expressions.cs:311:16:311:20 | call to method | expressions.cs:311:16:311:20 | this access | | expressions.cs:315:13:315:22 | access to field value | expressions.cs:315:13:315:16 | this access | | expressions.cs:320:20:320:26 | access to field value | expressions.cs:320:20:320:20 | access to parameter d | +| expressions.cs:330:11:330:32 | call to method | expressions.cs:330:11:330:32 | this access | +| expressions.cs:341:18:341:22 | call to method | expressions.cs:341:18:341:22 | this access | | expressions.cs:346:37:346:37 | access to field x | expressions.cs:346:37:346:37 | this access | | expressions.cs:346:48:346:48 | access to field x | expressions.cs:346:48:346:48 | this access | | expressions.cs:347:37:347:37 | access to field y | expressions.cs:347:37:347:37 | this access | | expressions.cs:347:48:347:48 | access to field y | expressions.cs:347:48:347:48 | this access | +| expressions.cs:351:18:351:26 | call to method | expressions.cs:351:18:351:26 | this access | | expressions.cs:356:40:356:41 | access to field p1 | expressions.cs:356:40:356:41 | this access | | expressions.cs:356:52:356:53 | access to field p1 | expressions.cs:356:52:356:53 | this access | | expressions.cs:357:40:357:41 | access to field p2 | expressions.cs:357:40:357:41 | this access | | expressions.cs:357:52:357:53 | access to field p2 | expressions.cs:357:52:357:53 | this access | +| expressions.cs:361:18:361:27 | call to method | expressions.cs:361:18:361:27 | this access | | expressions.cs:364:15:364:16 | access to field p1 | expressions.cs:364:15:364:16 | this access | | expressions.cs:365:15:365:16 | access to field p2 | expressions.cs:365:15:365:16 | this access | | expressions.cs:367:40:367:41 | access to field p1 | expressions.cs:367:40:367:41 | this access | | expressions.cs:368:40:368:41 | access to field p2 | expressions.cs:368:40:368:41 | this access | +| expressions.cs:372:18:372:24 | call to method | expressions.cs:372:18:372:24 | this access | | expressions.cs:376:22:376:33 | access to field phoneNumbers | expressions.cs:376:22:376:33 | this access | | expressions.cs:378:43:378:46 | access to field name | expressions.cs:378:43:378:46 | this access | | expressions.cs:378:57:378:60 | access to field name | expressions.cs:378:57:378:60 | this access | | expressions.cs:379:57:379:68 | access to field phoneNumbers | expressions.cs:379:57:379:68 | this access | +| expressions.cs:383:18:383:30 | call to method | expressions.cs:383:18:383:30 | this access | | expressions.cs:455:29:455:47 | call to method WriteLine | expressions.cs:455:29:455:35 | access to type Console | +| expressions.cs:463:11:463:23 | call to method | expressions.cs:463:11:463:23 | this access | +| expressions.cs:481:20:481:22 | call to method | expressions.cs:481:20:481:22 | this access | | expressions.cs:483:17:483:26 | access to field value | expressions.cs:483:17:483:20 | this access | | expressions.cs:488:32:488:39 | access to field value | expressions.cs:488:32:488:33 | access to parameter c1 | | expressions.cs:488:43:488:50 | access to field value | expressions.cs:488:43:488:44 | access to parameter c2 | +| expressions.cs:495:11:495:25 | call to method | expressions.cs:495:11:495:25 | this access | +| expressions.cs:501:11:501:20 | call to method | expressions.cs:501:11:501:20 | this access | +| expressions.cs:513:12:513:24 | call to method | expressions.cs:513:12:513:24 | this access | +| expressions.cs:518:11:518:17 | call to method | expressions.cs:518:11:518:17 | this access | +| expressions.cs:520:11:520:17 | call to method | expressions.cs:520:11:520:17 | this access | +| expressions.cs:522:11:522:33 | call to method | expressions.cs:522:11:522:33 | this access | | expressions.cs:530:21:530:25 | call to method Api | expressions.cs:530:21:530:25 | this access | diff --git a/csharp/ql/test/library-tests/extension-method-call/ExtensionMethodCalls.expected b/csharp/ql/test/library-tests/extension-method-call/ExtensionMethodCalls.expected index ae15431d9649..0407c9b3e397 100644 --- a/csharp/ql/test/library-tests/extension-method-call/ExtensionMethodCalls.expected +++ b/csharp/ql/test/library-tests/extension-method-call/ExtensionMethodCalls.expected @@ -1,6 +1,7 @@ methodCallTargets | methods.cs:14:60:14:73 | call to method Ext3`1 | methods.cs:14:28:14:34 | Ext3`1 | Ext3(T, int) | | methods.cs:16:60:16:74 | call to method Ext4`1 | methods.cs:16:28:16:34 | Ext4`1 | Ext4(T, int) | +| methods.cs:19:18:19:24 | call to method | methods.cs:19:18:19:24 | | () | | methods.cs:23:13:23:22 | call to method Ext0 | methods.cs:8:28:8:34 | Ext0 | Ext0(string, int) | | methods.cs:24:13:24:27 | call to method Ext0 | methods.cs:8:28:8:34 | Ext0 | Ext0(string, int) | | methods.cs:25:13:25:30 | call to method Ext0 | methods.cs:8:28:8:34 | Ext0 | Ext0(string, double) | diff --git a/csharp/ql/test/library-tests/fields/PrintAst.expected b/csharp/ql/test/library-tests/fields/PrintAst.expected index 4f33d662a06d..e9e6ad49a2ba 100644 --- a/csharp/ql/test/library-tests/fields/PrintAst.expected +++ b/csharp/ql/test/library-tests/fields/PrintAst.expected @@ -1,56 +1,56 @@ fields.cs: # 5| [NamespaceDeclaration] namespace ... { ... } # 7| 1: [Class] A -# 10| 6: [Field] X +# 10| 7: [Field] X # 10| -1: [TypeMention] int # 10| 1: [IntLiteral] 1 -# 10| 7: [Field] Y +# 10| 8: [Field] Y # 10| -1: [TypeMention] int -# 10| 8: [Field] Z +# 10| 9: [Field] Z # 10| -1: [TypeMention] int # 10| 1: [IntLiteral] 100 # 13| 2: [Class] B -# 15| 6: [Field] X +# 15| 7: [Field] X # 15| -1: [TypeMention] int # 15| 1: [IntLiteral] 1 -# 16| 7: [Field] Y +# 16| 8: [Field] Y # 16| -1: [TypeMention] int -# 17| 8: [Field] Z +# 17| 9: [Field] Z # 17| -1: [TypeMention] int # 17| 1: [IntLiteral] 100 # 20| 3: [Class] C`1 #-----| 1: (Type parameters) # 20| 0: [TypeParameter] V -# 23| 5: [Field] count +# 23| 6: [Field] count # 23| -1: [TypeMention] int # 23| 1: [IntLiteral] 0 -# 25| 6: [InstanceConstructor] C +# 25| 7: [InstanceConstructor] C # 25| 4: [BlockStmt] {...} # 25| 0: [ExprStmt] ...; # 25| 0: [PostIncrExpr] ...++ # 25| 0: [FieldAccess] access to field count -# 27| 7: [Property] Count +# 27| 8: [Property] Count # 27| -1: [TypeMention] int # 27| 3: [Getter] get_Count # 27| 4: [BlockStmt] {...} # 27| 0: [ReturnStmt] return ...; # 27| 0: [FieldAccess] access to field count # 31| 4: [Class] Application -# 34| 6: [Field] finished +# 34| 7: [Field] finished # 34| -1: [TypeMention] bool -# 35| 7: [Field] x +# 35| 8: [Field] x # 35| -1: [TypeMention] double # 35| 1: [MethodCall] call to method Sqrt # 35| -1: [TypeAccess] access to type Math # 35| 0: [TypeMention] Math # 35| 0: [DoubleLiteral] 2 -# 36| 8: [Field] i +# 36| 9: [Field] i # 36| -1: [TypeMention] int # 36| 1: [IntLiteral] 100 -# 37| 9: [Field] s +# 37| 10: [Field] s # 37| -1: [TypeMention] string # 37| 1: [StringLiteralUtf16] "Hello" -# 39| 10: [Method] Main +# 39| 11: [Method] Main # 39| -1: [TypeMention] Void # 40| 4: [BlockStmt] {...} # 41| 0: [LocalVariableDeclStmt] ... ...; @@ -93,7 +93,7 @@ fields.cs: # 45| 0: [TypeMention] C # 45| 1: [TypeMention] int # 50| 5: [Class] Color -# 53| 5: [Field] Black +# 53| 6: [Field] Black # 53| -1: [TypeMention] Color # 53| 1: [ObjectCreation] object creation of type Color # 53| -1: [TypeMention] Color @@ -103,7 +103,7 @@ fields.cs: # 53| 1: [IntLiteral] 0 # 53| 2: [CastExpr] (...) ... # 53| 1: [IntLiteral] 0 -# 54| 6: [Field] White +# 54| 7: [Field] White # 54| -1: [TypeMention] Color # 54| 1: [ObjectCreation] object creation of type Color # 54| -1: [TypeMention] Color @@ -113,7 +113,7 @@ fields.cs: # 54| 1: [IntLiteral] 255 # 54| 2: [CastExpr] (...) ... # 54| 1: [IntLiteral] 255 -# 56| 7: [InstanceConstructor] Color +# 56| 8: [InstanceConstructor] Color #-----| 2: (Parameters) # 56| 0: [Parameter] r # 56| -1: [TypeMention] byte @@ -123,30 +123,30 @@ fields.cs: # 56| -1: [TypeMention] byte # 56| 4: [BlockStmt] {...} # 60| 6: [Class] TestBindings -# 63| 6: [Field] a +# 63| 7: [Field] a # 63| -1: [TypeMention] int # 63| 1: [AddExpr] ... + ... # 63| 0: [FieldAccess] access to field b # 63| 1: [IntLiteral] 1 -# 64| 7: [Field] b +# 64| 8: [Field] b # 64| -1: [TypeMention] int # 64| 1: [AddExpr] ... + ... # 64| 0: [FieldAccess] access to field a # 64| 1: [IntLiteral] 1 # 70| [NamespaceDeclaration] namespace ... { ... } # 72| 1: [Class] A -# 74| 5: [Field] X +# 74| 6: [Field] X # 74| -1: [TypeMention] int # 74| 1: [AddExpr] ... + ... # 74| 0: [MemberConstantAccess] access to constant Z # 74| -1: [TypeAccess] access to type B # 74| 0: [TypeMention] B # 74| 1: [IntLiteral] 1 -# 75| 6: [Field] Y +# 75| 7: [Field] Y # 75| -1: [TypeMention] int # 75| 1: [IntLiteral] 10 # 78| 2: [Class] B -# 80| 5: [Field] Z +# 80| 6: [Field] Z # 80| -1: [TypeMention] int # 80| 1: [AddExpr] ... + ... # 80| 0: [MemberConstantAccess] access to constant Y @@ -154,13 +154,13 @@ fields.cs: # 80| 0: [TypeMention] A # 80| 1: [IntLiteral] 1 # 83| 3: [Class] C -# 85| 4: [Field] Foo +# 85| 5: [Field] Foo # 85| -1: [TypeMention] int # 85| 1: [IntLiteral] 1 -# 86| 5: [Field] x +# 86| 6: [Field] x # 86| -1: [TypeMention] long? # 86| 1: [TypeMention] long -# 87| 6: [InstanceConstructor] C +# 87| 7: [InstanceConstructor] C # 88| 4: [BlockStmt] {...} # 89| 0: [ExprStmt] ...; # 89| 0: [AssignExpr] ... = ... @@ -191,12 +191,12 @@ fields.cs: # 92| 1: [CastExpr] (...) ... # 92| 1: [MemberConstantAccess] access to constant Foo # 96| 4: [Class] D -# 98| 4: [InstanceConstructor] D +# 98| 5: [InstanceConstructor] D #-----| 2: (Parameters) # 98| 0: [Parameter] d # 98| -1: [TypeMention] int # 99| 4: [BlockStmt] {...} -# 101| 5: [ImplicitConversionOperator] implicit conversion +# 101| 6: [ImplicitConversionOperator] implicit conversion # 101| -1: [TypeMention] D #-----| 2: (Parameters) # 101| 0: [Parameter] d diff --git a/csharp/ql/test/library-tests/generics/Generics.expected b/csharp/ql/test/library-tests/generics/Generics.expected index d390859b4df9..8e82103a19e5 100644 --- a/csharp/ql/test/library-tests/generics/Generics.expected +++ b/csharp/ql/test/library-tests/generics/Generics.expected @@ -31,6 +31,7 @@ test14 test15 | generics.cs:7:23:7:40 | GenericDelegate | test16 +| generics.cs:135:11:135:16 | Subtle | generics.cs:135:11:135:16 | | | generics.cs:135:11:135:16 | Subtle | generics.cs:138:21:138:25 | fs`1 | | generics.cs:135:11:135:16 | Subtle | generics.cs:140:21:140:25 | fs`1 | | generics.cs:135:11:135:16 | Subtle | generics.cs:142:21:142:22 | fs | diff --git a/csharp/ql/test/library-tests/generics/Generics.ql b/csharp/ql/test/library-tests/generics/Generics.ql index ab1f0af982a8..95ae84ebd9a6 100644 --- a/csharp/ql/test/library-tests/generics/Generics.ql +++ b/csharp/ql/test/library-tests/generics/Generics.ql @@ -118,7 +118,7 @@ query predicate test15(ConstructedDelegateType d) { query predicate test16(Class c, Method m) { c.hasName("Subtle") and - count(c.getAMethod()) = 3 and + count(c.getAMethod()) = 4 and m = c.getAMethod() } diff --git a/csharp/ql/test/library-tests/generics/PrintAst.expected b/csharp/ql/test/library-tests/generics/PrintAst.expected index 3653b3b7a2d7..0d50888edd30 100644 --- a/csharp/ql/test/library-tests/generics/PrintAst.expected +++ b/csharp/ql/test/library-tests/generics/PrintAst.expected @@ -2,13 +2,13 @@ Nesting.cs: # 1| [Class] A`1 #-----| 1: (Type parameters) # 1| 0: [TypeParameter] T1 -# 3| 5: [Method] MA1 +# 3| 6: [Method] MA1 # 3| -1: [TypeMention] Void #-----| 2: (Parameters) # 3| 0: [Parameter] x # 3| -1: [TypeMention] T1 # 3| 4: [BlockStmt] {...} -# 4| 6: [Method] MA2`1 +# 4| 7: [Method] MA2`1 # 4| -1: [TypeMention] Void #-----| 1: (Type parameters) # 4| 0: [TypeParameter] T2 @@ -18,10 +18,10 @@ Nesting.cs: # 4| 1: [Parameter] y # 4| -1: [TypeMention] T2 # 4| 4: [BlockStmt] {...} -# 6| 7: [Class] B`1 +# 6| 8: [Class] B`1 #-----| 1: (Type parameters) # 6| 0: [TypeParameter] T3 -# 8| 5: [Method] MB1 +# 8| 6: [Method] MB1 # 8| -1: [TypeMention] Void #-----| 2: (Parameters) # 8| 0: [Parameter] x @@ -29,7 +29,7 @@ Nesting.cs: # 8| 1: [Parameter] y # 8| -1: [TypeMention] T3 # 8| 4: [BlockStmt] {...} -# 9| 6: [Method] MB2`1 +# 9| 7: [Method] MB2`1 # 9| -1: [TypeMention] Void #-----| 1: (Type parameters) # 9| 0: [TypeParameter] T4 @@ -41,14 +41,14 @@ Nesting.cs: # 9| 2: [Parameter] z # 9| -1: [TypeMention] T4 # 9| 4: [BlockStmt] {...} -# 12| 8: [Class] C -# 14| 5: [Method] MC1 +# 12| 9: [Class] C +# 14| 6: [Method] MC1 # 14| -1: [TypeMention] Void #-----| 2: (Parameters) # 14| 0: [Parameter] x # 14| -1: [TypeMention] T1 # 14| 4: [BlockStmt] {...} -# 15| 6: [Method] MC2`1 +# 15| 7: [Method] MC2`1 # 15| -1: [TypeMention] Void #-----| 1: (Type parameters) # 15| 0: [TypeParameter] T5 @@ -58,10 +58,10 @@ Nesting.cs: # 15| 1: [Parameter] y # 15| -1: [TypeMention] T5 # 15| 4: [BlockStmt] {...} -# 17| 7: [Class] D`1 +# 17| 8: [Class] D`1 #-----| 1: (Type parameters) # 17| 0: [TypeParameter] T6 -# 19| 5: [Method] MD1 +# 19| 6: [Method] MD1 # 19| -1: [TypeMention] Void #-----| 2: (Parameters) # 19| 0: [Parameter] x @@ -69,7 +69,7 @@ Nesting.cs: # 19| 1: [Parameter] y # 19| -1: [TypeMention] T6 # 19| 4: [BlockStmt] {...} -# 20| 6: [Method] MD2`1 +# 20| 7: [Method] MD2`1 # 20| -1: [TypeMention] Void #-----| 1: (Type parameters) # 20| 0: [TypeParameter] T7 @@ -81,7 +81,7 @@ Nesting.cs: # 20| 2: [Parameter] z # 20| -1: [TypeMention] T7 # 20| 4: [BlockStmt] {...} -# 24| 9: [Method] Construct +# 24| 10: [Method] Construct # 24| -1: [TypeMention] Void # 25| 4: [BlockStmt] {...} # 26| 0: [LocalVariableDeclStmt] ... ...; @@ -244,7 +244,7 @@ generics.cs: # 13| 3: [Class] A`1 #-----| 1: (Type parameters) # 13| 0: [TypeParameter] T -# 16| 5: [DelegateType] GenericDelegateInGenericClass`1 +# 16| 6: [DelegateType] GenericDelegateInGenericClass`1 #-----| 1: (Type parameters) # 16| 0: [TypeParameter] U #-----| 2: (Parameters) @@ -252,7 +252,7 @@ generics.cs: # 16| -1: [TypeMention] T # 16| 1: [Parameter] u # 16| -1: [TypeMention] U -# 18| 6: [Method] bar`1 +# 18| 7: [Method] bar`1 # 18| -1: [TypeMention] T #-----| 1: (Type parameters) # 18| 0: [TypeParameter] X @@ -271,25 +271,25 @@ generics.cs: # 22| 4: [Class] B`1 #-----| 1: (Type parameters) # 22| 0: [TypeParameter] T -# 25| 5: [Field] at +# 25| 6: [Field] at # 25| -1: [TypeMention] A # 25| 1: [TypeMention] T -# 27| 6: [Field] name +# 27| 7: [Field] name # 27| -1: [TypeMention] string -# 29| 7: [Method] foo +# 29| 8: [Method] foo # 29| -1: [TypeMention] Void # 29| 4: [BlockStmt] {...} -# 31| 8: [Method] fooParams +# 31| 9: [Method] fooParams # 31| -1: [TypeMention] Void #-----| 2: (Parameters) # 31| 0: [Parameter] ts # 31| -1: [TypeMention] T[] # 31| 1: [TypeMention] T # 31| 4: [BlockStmt] {...} -# 33| 9: [Method] staticFoo +# 33| 10: [Method] staticFoo # 33| -1: [TypeMention] Void # 33| 4: [BlockStmt] {...} -# 35| 10: [Property] Name +# 35| 11: [Property] Name # 35| -1: [TypeMention] string # 35| 3: [Getter] get_Name # 35| 4: [BlockStmt] {...} @@ -303,7 +303,7 @@ generics.cs: # 35| 0: [AssignExpr] ... = ... # 35| 0: [FieldAccess] access to field name # 35| 1: [ParameterAccess] access to parameter value -# 37| 11: [Event] myEvent +# 37| 12: [Event] myEvent # 37| -1: [TypeMention] GenericDelegate # 37| 1: [TypeMention] T # 37| 3: [AddEventAccessor] add_myEvent @@ -312,7 +312,7 @@ generics.cs: # 37| 4: [RemoveEventAccessor] remove_myEvent #-----| 2: (Parameters) # 37| 0: [Parameter] value -# 39| 12: [IncrementOperator] ++ +# 39| 13: [IncrementOperator] ++ # 39| -1: [TypeMention] B # 39| 1: [TypeMention] T #-----| 2: (Parameters) @@ -324,9 +324,9 @@ generics.cs: # 41| 0: [ObjectCreation] object creation of type B`1 # 41| 0: [TypeMention] B # 41| 1: [TypeMention] T -# 44| 13: [Destructor] ~B +# 44| 14: [Destructor] ~B # 44| 4: [BlockStmt] {...} -# 45| 14: [Method] f`1 +# 45| 15: [Method] f`1 # 45| -1: [TypeMention] Void #-----| 1: (Type parameters) # 45| 0: [TypeParameter] X @@ -339,17 +339,17 @@ generics.cs: #-----| 1: (Type parameters) # 48| 0: [TypeParameter] T1 # 48| 1: [TypeParameter] T2 -# 51| 5: [Class] Inner`2 +# 51| 6: [Class] Inner`2 #-----| 1: (Type parameters) # 51| 0: [TypeParameter] U1 # 51| 1: [TypeParameter] U2 -# 54| 5: [Field] t +# 54| 6: [Field] t # 54| -1: [TypeMention] T1 -# 55| 6: [Field] myFunc +# 55| 7: [Field] myFunc # 55| -1: [TypeMention] Func # 55| 1: [TypeMention] U1 # 55| 2: [TypeMention] T1 -# 56| 7: [Method] MyMethod`2 +# 56| 8: [Method] MyMethod`2 # 56| -1: [TypeMention] Void #-----| 1: (Type parameters) # 56| 0: [TypeParameter] W1 @@ -368,13 +368,13 @@ generics.cs: # 60| 6: [Class] Grid`1 #-----| 1: (Type parameters) # 60| 0: [TypeParameter] T -# 63| 5: [Field] NumRows +# 63| 6: [Field] NumRows # 63| -1: [TypeMention] int # 63| 1: [IntLiteral] 26 -# 64| 6: [Field] NumCols +# 64| 7: [Field] NumCols # 64| -1: [TypeMention] int # 64| 1: [IntLiteral] 10 -# 66| 7: [Field] cells +# 66| 8: [Field] cells # 66| -1: [TypeMention] T[,] # 66| 1: [TypeMention] T # 66| 1: [ArrayCreation] array creation of type T[,] @@ -382,7 +382,7 @@ generics.cs: # 66| 1: [TypeMention] T # 66| 0: [MemberConstantAccess] access to constant NumRows # 66| 1: [MemberConstantAccess] access to constant NumCols -# 68| 8: [Indexer] Item +# 68| 9: [Indexer] Item # 68| -1: [TypeMention] int #-----| 1: (Parameters) # 68| 0: [Parameter] i @@ -393,7 +393,7 @@ generics.cs: # 70| 4: [BlockStmt] {...} # 70| 0: [ReturnStmt] return ...; # 70| 0: [ParameterAccess] access to parameter i -# 73| 9: [Indexer] Item +# 73| 10: [Indexer] Item # 73| -1: [TypeMention] T #-----| 1: (Parameters) # 73| 0: [Parameter] c @@ -502,7 +502,7 @@ generics.cs: # 99| 1: [ParameterAccess] access to parameter col # 99| 1: [ParameterAccess] access to parameter value # 105| 7: [Class] Test -# 108| 5: [Method] Main +# 108| 6: [Method] Main # 108| -1: [TypeMention] Void # 109| 4: [BlockStmt] {...} # 110| 0: [LocalVariableDeclStmt] ... ...; @@ -605,7 +605,7 @@ generics.cs: # 128| 0: [ObjectCreation] object creation of type Test # 128| 0: [TypeMention] Test # 128| 1: [IntLiteral] 2 -# 131| 6: [Method] f +# 131| 7: [Method] f # 131| -1: [TypeMention] string #-----| 2: (Parameters) # 131| 0: [Parameter] s @@ -614,7 +614,7 @@ generics.cs: # 131| 0: [ReturnStmt] return ...; # 131| 0: [ParameterAccess] access to parameter s # 135| 8: [Class] Subtle -# 138| 5: [Method] fs`1 +# 138| 6: [Method] fs`1 # 138| -1: [TypeMention] Void #-----| 1: (Type parameters) # 138| 0: [TypeParameter] X @@ -622,7 +622,7 @@ generics.cs: # 138| 0: [Parameter] i # 138| -1: [TypeMention] int # 138| 4: [BlockStmt] {...} -# 140| 6: [Method] fs`1 +# 140| 7: [Method] fs`1 # 140| -1: [TypeMention] Void #-----| 1: (Type parameters) # 140| 0: [TypeParameter] X @@ -632,7 +632,7 @@ generics.cs: # 140| 1: [Parameter] j # 140| -1: [TypeMention] int # 140| 4: [BlockStmt] {...} -# 142| 7: [Method] fs +# 142| 8: [Method] fs # 142| -1: [TypeMention] Void #-----| 2: (Parameters) # 142| 0: [Parameter] i @@ -641,15 +641,15 @@ generics.cs: # 146| 9: [Class] Param`1 #-----| 1: (Type parameters) # 146| 0: [TypeParameter] T -# 148| 5: [Enum] E +# 148| 6: [Enum] E # 148| 5: [Field] x # 151| 10: [Class] ConstructedMethods -# 153| 7: [Method] CM1`1 +# 153| 8: [Method] CM1`1 # 153| -1: [TypeMention] Void #-----| 1: (Type parameters) # 153| 0: [TypeParameter] T # 153| 4: [BlockStmt] {...} -# 154| 10: [Method] CM2`1 +# 154| 11: [Method] CM2`1 # 154| -1: [TypeMention] T #-----| 1: (Type parameters) # 154| 0: [TypeParameter] T @@ -659,10 +659,10 @@ generics.cs: # 154| 4: [BlockStmt] {...} # 154| 0: [ReturnStmt] return ...; # 154| 0: [ParameterAccess] access to parameter t -# 156| 13: [Class] Class`1 +# 156| 14: [Class] Class`1 #-----| 1: (Type parameters) # 156| 0: [TypeParameter] T1 -# 158| 5: [Method] CM3`1 +# 158| 6: [Method] CM3`1 # 158| -1: [TypeMention] T2 #-----| 1: (Type parameters) # 158| 0: [TypeParameter] T2 @@ -674,10 +674,10 @@ generics.cs: # 158| 4: [BlockStmt] {...} # 158| 0: [ReturnStmt] return ...; # 158| 0: [ParameterAccess] access to parameter t -# 161| 14: [Method] NonCM +# 161| 15: [Method] NonCM # 161| -1: [TypeMention] Void # 161| 4: [BlockStmt] {...} -# 163| 15: [Method] CM +# 163| 16: [Method] CM # 163| -1: [TypeMention] Void # 164| 4: [BlockStmt] {...} # 165| 0: [ExprStmt] ...; @@ -718,14 +718,14 @@ generics.cs: #-----| 3: (Base types) # 179| 1: [TypeMention] Interface # 179| 1: [TypeMention] T -# 181| 5: [Method] set +# 181| 6: [Method] set # 181| -1: [TypeMention] Void #-----| 2: (Parameters) # 181| 0: [Parameter] t # 181| -1: [TypeMention] T # 181| 4: [BlockStmt] {...} # 184| 13: [Class] InheritanceTest -# 186| 5: [Field] member +# 186| 6: [Field] member # 186| -1: [TypeMention] Inheritance # 186| 1: [TypeMention] int # 189| 14: [Interface] Interface2`2 diff --git a/csharp/ql/test/library-tests/goto/Goto1.expected b/csharp/ql/test/library-tests/goto/Goto1.expected index 0baaf5ef723a..137c1b7241c4 100644 --- a/csharp/ql/test/library-tests/goto/Goto1.expected +++ b/csharp/ql/test/library-tests/goto/Goto1.expected @@ -1,6 +1,8 @@ | goto.cs:2:7:2:10 | call to constructor Object | goto.cs:2:7:2:10 | {...} | semmle.label | successor | -| goto.cs:2:7:2:10 | enter Goto | goto.cs:2:7:2:10 | call to constructor Object | semmle.label | successor | +| goto.cs:2:7:2:10 | call to method | goto.cs:2:7:2:10 | call to constructor Object | semmle.label | successor | +| goto.cs:2:7:2:10 | enter Goto | goto.cs:2:7:2:10 | this access | semmle.label | successor | | goto.cs:2:7:2:10 | exit Goto (normal) | goto.cs:2:7:2:10 | exit Goto | semmle.label | successor | +| goto.cs:2:7:2:10 | this access | goto.cs:2:7:2:10 | call to method | semmle.label | successor | | goto.cs:2:7:2:10 | {...} | goto.cs:2:7:2:10 | exit Goto (normal) | semmle.label | successor | | goto.cs:4:17:4:20 | enter Main | goto.cs:5:5:20:5 | {...} | semmle.label | successor | | goto.cs:4:17:4:20 | exit Main (normal) | goto.cs:4:17:4:20 | exit Main | semmle.label | successor | diff --git a/csharp/ql/test/library-tests/goto/PrintAst.expected b/csharp/ql/test/library-tests/goto/PrintAst.expected index a6ecfb8c3018..e90947ed979c 100644 --- a/csharp/ql/test/library-tests/goto/PrintAst.expected +++ b/csharp/ql/test/library-tests/goto/PrintAst.expected @@ -1,6 +1,6 @@ goto.cs: # 2| [Class] Goto -# 4| 5: [Method] Main +# 4| 6: [Method] Main # 4| -1: [TypeMention] Void # 5| 4: [BlockStmt] {...} # 6| 0: [BlockStmt] {...} diff --git a/csharp/ql/test/library-tests/implicittostring/implicitToString.expected b/csharp/ql/test/library-tests/implicittostring/implicitToString.expected index 14efebf23207..e42817cc3061 100644 --- a/csharp/ql/test/library-tests/implicittostring/implicitToString.expected +++ b/csharp/ql/test/library-tests/implicittostring/implicitToString.expected @@ -1,3 +1,8 @@ +| implicitToString.cs:3:14:3:33 | call to method | TestImplicitToString | +| implicitToString.cs:5:18:5:26 | call to method | Container | +| implicitToString.cs:13:18:13:27 | call to method | Container2 | +| implicitToString.cs:15:18:15:27 | call to method | Container3 | +| implicitToString.cs:17:18:17:37 | call to method | FormattableContainer | | implicitToString.cs:35:27:35:35 | call to method ToString | Container | | implicitToString.cs:37:22:37:30 | call to method ToString | Container | | implicitToString.cs:39:22:39:30 | call to method ToString | Container | diff --git a/csharp/ql/test/library-tests/indexers/PrintAst.expected b/csharp/ql/test/library-tests/indexers/PrintAst.expected index 6f9fde00e24f..93160309c79b 100644 --- a/csharp/ql/test/library-tests/indexers/PrintAst.expected +++ b/csharp/ql/test/library-tests/indexers/PrintAst.expected @@ -1,12 +1,12 @@ indexers.cs: # 5| [NamespaceDeclaration] namespace ... { ... } # 8| 1: [Class] BitArray -# 11| 4: [Field] bits +# 11| 5: [Field] bits # 11| -1: [TypeMention] Int32[] # 11| 1: [TypeMention] int -# 12| 5: [Field] length +# 12| 6: [Field] length # 12| -1: [TypeMention] int -# 14| 6: [InstanceConstructor] BitArray +# 14| 7: [InstanceConstructor] BitArray #-----| 2: (Parameters) # 14| 0: [Parameter] length # 14| -1: [TypeMention] int @@ -36,13 +36,13 @@ indexers.cs: # 19| 0: [FieldAccess] access to field length # 19| -1: [ThisAccess] this access # 19| 1: [ParameterAccess] access to parameter length -# 22| 7: [Property] Length +# 22| 8: [Property] Length # 22| -1: [TypeMention] int # 22| 3: [Getter] get_Length # 22| 4: [BlockStmt] {...} # 22| 0: [ReturnStmt] return ...; # 22| 0: [FieldAccess] access to field length -# 24| 8: [Indexer] Item +# 24| 9: [Indexer] Item # 24| -1: [TypeMention] bool #-----| 1: (Parameters) # 24| 0: [Parameter] index @@ -118,7 +118,7 @@ indexers.cs: # 46| 0: [IntLiteral] 1 # 46| 1: [ParameterAccess] access to parameter index # 53| 2: [Class] CountPrimes -# 56| 5: [Method] Count +# 56| 6: [Method] Count # 56| -1: [TypeMention] int #-----| 2: (Parameters) # 56| 0: [Parameter] max @@ -179,7 +179,7 @@ indexers.cs: # 66| 0: [LocalVariableAccess] access to local variable count # 69| 3: [ReturnStmt] return ...; # 69| 0: [LocalVariableAccess] access to local variable count -# 72| 6: [Method] Main +# 72| 7: [Method] Main # 72| -1: [TypeMention] Void #-----| 2: (Parameters) # 72| 0: [Parameter] args @@ -212,13 +212,13 @@ indexers.cs: # 76| 2: [CastExpr] (...) ... # 76| 1: [LocalVariableAccess] access to local variable max # 81| 3: [Class] Grid -# 84| 5: [Field] NumRows +# 84| 6: [Field] NumRows # 84| -1: [TypeMention] int # 84| 1: [IntLiteral] 26 -# 85| 6: [Field] NumCols +# 85| 7: [Field] NumCols # 85| -1: [TypeMention] int # 85| 1: [IntLiteral] 10 -# 87| 7: [Field] cells +# 87| 8: [Field] cells # 87| -1: [TypeMention] Int32[,] # 87| 1: [TypeMention] int # 87| 1: [ArrayCreation] array creation of type Int32[,] @@ -226,7 +226,7 @@ indexers.cs: # 87| 1: [TypeMention] int # 87| 0: [MemberConstantAccess] access to constant NumRows # 87| 1: [MemberConstantAccess] access to constant NumCols -# 89| 8: [Indexer] Item +# 89| 9: [Indexer] Item # 89| -1: [TypeMention] int #-----| 1: (Parameters) # 89| 0: [Parameter] c @@ -335,7 +335,7 @@ indexers.cs: # 115| 1: [ParameterAccess] access to parameter col # 115| 1: [ParameterAccess] access to parameter value # 121| 4: [Class] DuplicateIndexerSignatures -# 123| 5: [Indexer] Item +# 123| 6: [Indexer] Item # 123| -1: [TypeMention] bool #-----| 1: (Parameters) # 123| 0: [Parameter] index @@ -346,7 +346,7 @@ indexers.cs: # 125| 4: [BlockStmt] {...} # 125| 0: [ReturnStmt] return ...; # 125| 0: [BoolLiteral] false -# 128| 6: [Indexer] Item +# 128| 7: [Indexer] Item # 128| -1: [TypeMention] int #-----| 1: (Parameters) # 128| 0: [Parameter] c diff --git a/csharp/ql/test/library-tests/initializers/PrintAst.expected b/csharp/ql/test/library-tests/initializers/PrintAst.expected index 29b7ca47003e..f59bb2f135f5 100644 --- a/csharp/ql/test/library-tests/initializers/PrintAst.expected +++ b/csharp/ql/test/library-tests/initializers/PrintAst.expected @@ -1,14 +1,14 @@ initializers.cs: # 3| [Class] S1 -# 5| 5: [Field] P1 +# 5| 6: [Field] P1 # 5| -1: [TypeMention] int -# 6| 6: [Property] P2 +# 6| 7: [Property] P2 # 6| -1: [TypeMention] int # 6| 3: [Getter] get_P2 # 6| 4: [Setter] set_P2 #-----| 2: (Parameters) # 6| 0: [Parameter] value -# 7| 7: [Property] P3 +# 7| 8: [Property] P3 # 7| -1: [TypeMention] int # 7| 3: [Setter] set_P3 #-----| 2: (Parameters) @@ -17,13 +17,13 @@ initializers.cs: # 10| [Class] S2 #-----| 3: (Base types) # 10| 1: [TypeMention] IEnumerable -# 12| 5: [Method] Add +# 12| 6: [Method] Add # 12| -1: [TypeMention] Void #-----| 2: (Parameters) # 12| 0: [Parameter] x # 12| -1: [TypeMention] int # 12| 4: [BlockStmt] {...} -# 13| 6: [Method] Add +# 13| 7: [Method] Add # 13| -1: [TypeMention] Void #-----| 2: (Parameters) # 13| 0: [Parameter] x @@ -31,13 +31,13 @@ initializers.cs: # 13| 1: [Parameter] y # 13| -1: [TypeMention] int # 13| 4: [BlockStmt] {...} -# 14| 7: [Method] GetEnumerator +# 14| 8: [Method] GetEnumerator # 14| -1: [TypeMention] IEnumerator # 14| 4: [BlockStmt] {...} # 14| 0: [ReturnStmt] return ...; # 14| 0: [NullLiteral] null # 17| [Class] Test -# 19| 5: [Method] Main +# 19| 6: [Method] Main # 19| -1: [TypeMention] Void #-----| 2: (Parameters) # 19| 0: [Parameter] args diff --git a/csharp/ql/test/library-tests/linq/PrintAst.expected b/csharp/ql/test/library-tests/linq/PrintAst.expected index fee8ab80ee2e..c16babcf2706 100644 --- a/csharp/ql/test/library-tests/linq/PrintAst.expected +++ b/csharp/ql/test/library-tests/linq/PrintAst.expected @@ -1,6 +1,6 @@ queries.cs: # 5| [Class] Queries -# 7| 5: [Method] Queries1 +# 7| 6: [Method] Queries1 # 7| -1: [TypeMention] Void # 8| 4: [BlockStmt] {...} # 9| 0: [LocalVariableDeclStmt] ... ...; @@ -204,19 +204,19 @@ queries.cs: # 56| 1: [TupleExpr] (..., ...) # 56| 0: [LocalVariableAccess] access to local variable a # 56| 1: [LocalVariableAccess] access to local variable d -# 59| 6: [Class] A +# 59| 7: [Class] A #-----| 3: (Base types) # 59| 1: [TypeMention] IEnumerable -# 61| 5: [Method] GetEnumerator +# 61| 6: [Method] GetEnumerator # 61| -1: [TypeMention] IEnumerator # 62| 4: [BlockStmt] {...} # 63| 0: [ThrowStmt] throw ...; # 63| 0: [ObjectCreation] object creation of type NotImplementedException # 63| 0: [TypeMention] NotImplementedException -# 67| 7: [Class] B +# 67| 8: [Class] B #-----| 3: (Base types) # 67| 0: [TypeMention] A -# 69| 8: [Class] C +# 69| 9: [Class] C #-----| 3: (Base types) # 69| 0: [TypeMention] List # 69| 1: [TypeMention] int diff --git a/csharp/ql/test/library-tests/locations/locations.expected b/csharp/ql/test/library-tests/locations/locations.expected index d41369ddcd40..1d19fc3f0c5c 100644 --- a/csharp/ql/test/library-tests/locations/locations.expected +++ b/csharp/ql/test/library-tests/locations/locations.expected @@ -19,6 +19,7 @@ member_locations | A.cs:3:23:3:26 | A | A.cs:12:12:12:12 | A | A.cs:12:12:12:12 | A.cs:12:12:12:12 | | A.cs:3:23:3:26 | A | A.cs:13:6:13:6 | ~A | A.cs:13:6:13:6 | A.cs:13:6:13:6 | | A.cs:3:23:3:26 | A | A.cs:14:33:14:33 | + | A.cs:14:33:14:33 | A.cs:14:33:14:33 | +| A.cs:3:23:3:26 | A`1 | A.cs:3:23:3:26 | | A.cs:3:23:3:26 | A.cs:3:23:3:26 | | A.cs:3:23:3:26 | A`1 | A.cs:5:23:5:26 | Prop | A.cs:5:23:5:26 | A.cs:5:23:5:26 | | A.cs:3:23:3:26 | A`1 | A.cs:6:23:6:26 | Item | A.cs:6:23:6:26 | A.cs:6:23:6:26 | | A.cs:3:23:3:26 | A`1 | A.cs:7:40:7:44 | Event | A.cs:7:40:7:44 | A.cs:7:40:7:44 | @@ -29,12 +30,14 @@ member_locations | A.cs:3:23:3:26 | A`1 | A.cs:12:12:12:12 | A | A.cs:12:12:12:12 | A.cs:12:12:12:12 | | A.cs:3:23:3:26 | A`1 | A.cs:13:6:13:6 | ~A | A.cs:13:6:13:6 | A.cs:13:6:13:6 | | A.cs:3:23:3:26 | A`1 | A.cs:14:33:14:33 | + | A.cs:14:33:14:33 | A.cs:14:33:14:33 | +| A.cs:17:14:17:15 | A2 | A.cs:17:14:17:15 | | A.cs:17:14:17:15 | A.cs:17:14:17:15 | | A.cs:17:14:17:15 | A2 | A.cs:17:14:17:15 | A2 | A.cs:17:14:17:15 | A.cs:17:14:17:15 | | A.cs:17:14:17:15 | A2 | A.cs:19:28:19:31 | Prop | A.cs:19:28:19:31 | A.cs:19:28:19:31 | | A.cs:17:14:17:15 | A2 | A.cs:21:28:21:31 | Item | A.cs:21:28:21:31 | A.cs:21:28:21:31 | | A.cs:17:14:17:15 | A2 | A.cs:27:40:27:44 | Event | A.cs:27:40:27:44 | A.cs:27:40:27:44 | | A.cs:17:14:17:15 | A2 | A.cs:33:28:33:35 | ToObject | A.cs:33:28:33:35 | A.cs:33:28:33:35 | | A.cs:17:14:17:15 | A2 | A.cs:35:17:35:17 | M | A.cs:35:17:35:17 | A.cs:35:17:35:17 | +| B.cs:3:14:3:14 | B | B.cs:3:14:3:14 | | B.cs:3:14:3:14 | B.cs:3:14:3:14 | | B.cs:3:14:3:14 | B | B.cs:3:14:3:14 | B | B.cs:3:14:3:14 | B.cs:3:14:3:14 | | B.cs:3:14:3:14 | B | B.cs:5:25:5:28 | Prop | B.cs:5:25:5:28 | B.cs:5:25:5:28 | | B.cs:3:14:3:14 | B | B.cs:7:25:7:28 | Item | B.cs:7:25:7:28 | B.cs:7:25:7:28 | @@ -44,21 +47,32 @@ member_locations | Base.cs:1:23:1:29 | Base | Base.cs:3:17:3:17 | M | Base.cs:3:17:3:17 | Base.cs:3:17:3:17 | | Base.cs:1:23:1:29 | Base | Base.cs:5:18:5:26 | InnerBase | Base.cs:5:18:5:26 | Base.cs:5:18:5:26 | | Base.cs:1:23:1:29 | Base`1 | Base.cs:1:23:1:26 | Base | Base.cs:1:23:1:26 | Base.cs:1:23:1:26 | +| Base.cs:1:23:1:29 | Base`1 | Base.cs:1:23:1:29 | | Base.cs:1:23:1:29 | Base.cs:1:23:1:29 | | Base.cs:1:23:1:29 | Base`1 | Base.cs:3:17:3:17 | M | Base.cs:3:17:3:17 | Base.cs:3:17:3:17 | | Base.cs:1:23:1:29 | Base`1 | Base.cs:5:18:5:26 | InnerBase | Base.cs:5:18:5:26 | Base.cs:5:18:5:26 | +| Base.cs:5:18:5:26 | InnerBase | Base.cs:5:18:5:26 | | Base.cs:5:18:5:26 | Base.cs:5:18:5:26 | | Base.cs:5:18:5:26 | InnerBase | Base.cs:5:18:5:26 | InnerBase | Base.cs:5:18:5:26 | Base.cs:5:18:5:26 | | Base.cs:5:18:5:26 | InnerBase | Base.cs:5:18:5:26 | InnerBase | Base.cs:5:18:5:26 | Base.cs:5:18:5:26 | | Base.cs:8:23:8:30 | Base2`1 | Base.cs:8:23:8:27 | Base2 | Base.cs:8:23:8:27 | Base.cs:8:23:8:27 | +| Base.cs:8:23:8:30 | Base2`1 | Base.cs:8:23:8:30 | | Base.cs:8:23:8:30 | Base.cs:8:23:8:30 | +| C.cs:3:7:3:7 | C | C.cs:3:7:3:7 | | C.cs:3:7:3:7 | C.cs:3:7:3:7 | | C.cs:3:7:3:7 | C | C.cs:3:7:3:7 | C | C.cs:3:7:3:7 | C.cs:3:7:3:7 | | C.cs:3:7:3:7 | C | C.cs:5:17:5:17 | M | C.cs:5:17:5:17 | C.cs:5:17:5:17 | +| Multiple1.cs:1:22:1:29 | Multiple | Multiple1.cs:1:22:1:29 | | Multiple1.cs:1:22:1:29 | Multiple1.cs:1:22:1:29 | | Multiple1.cs:1:22:1:29 | Multiple | Multiple1.cs:1:22:1:29 | Multiple | Multiple1.cs:1:22:1:29 | Multiple1.cs:1:22:1:29 | | Multiple1.cs:3:22:3:39 | MultipleGeneric`1 | Multiple1.cs:3:22:3:36 | MultipleGeneric | Multiple1.cs:3:22:3:36 | Multiple1.cs:3:22:3:36 | +| Multiple1.cs:3:22:3:39 | MultipleGeneric`1 | Multiple1.cs:3:22:3:39 | | Multiple1.cs:3:22:3:39 | Multiple1.cs:3:22:3:39 | +| Multiple1.cs:5:14:5:30 | Multiple1Specific | Multiple1.cs:5:14:5:30 | | Multiple1.cs:5:14:5:30 | Multiple1.cs:5:14:5:30 | | Multiple1.cs:5:14:5:30 | Multiple1Specific | Multiple1.cs:5:14:5:30 | Multiple1Specific | Multiple1.cs:5:14:5:30 | Multiple1.cs:5:14:5:30 | | Multiple1.cs:5:14:5:30 | Multiple1Specific | Multiple1.cs:7:33:7:33 | M | Multiple1.cs:7:33:7:33 | Multiple1.cs:7:33:7:33 | +| Multiple2.cs:1:22:1:29 | Multiple | Multiple1.cs:1:22:1:29 | | Multiple1.cs:1:22:1:29 | Multiple1.cs:1:22:1:29 | | Multiple2.cs:1:22:1:29 | Multiple | Multiple1.cs:1:22:1:29 | Multiple | Multiple1.cs:1:22:1:29 | Multiple1.cs:1:22:1:29 | | Multiple2.cs:3:22:3:39 | MultipleGeneric`1 | Multiple1.cs:3:22:3:36 | MultipleGeneric | Multiple1.cs:3:22:3:36 | Multiple1.cs:3:22:3:36 | +| Multiple2.cs:3:22:3:39 | MultipleGeneric`1 | Multiple1.cs:3:22:3:39 | | Multiple1.cs:3:22:3:39 | Multiple1.cs:3:22:3:39 | +| Multiple2.cs:5:14:5:30 | Multiple2Specific | Multiple2.cs:5:14:5:30 | | Multiple2.cs:5:14:5:30 | Multiple2.cs:5:14:5:30 | | Multiple2.cs:5:14:5:30 | Multiple2Specific | Multiple2.cs:5:14:5:30 | Multiple2Specific | Multiple2.cs:5:14:5:30 | Multiple2.cs:5:14:5:30 | | Multiple2.cs:5:14:5:30 | Multiple2Specific | Multiple2.cs:7:17:7:17 | M | Multiple2.cs:7:17:7:17 | Multiple2.cs:7:17:7:17 | +| Sub.cs:1:14:1:16 | Sub | Sub.cs:1:14:1:16 | | Sub.cs:1:14:1:16 | Sub.cs:1:14:1:16 | | Sub.cs:1:14:1:16 | Sub | Sub.cs:1:14:1:16 | Sub | Sub.cs:1:14:1:16 | Sub.cs:1:14:1:16 | | Sub.cs:1:14:1:16 | Sub | Sub.cs:3:17:3:20 | SubM | Sub.cs:3:17:3:20 | Sub.cs:3:17:3:20 | accessor_location diff --git a/csharp/ql/test/library-tests/members/PrintAst.expected b/csharp/ql/test/library-tests/members/PrintAst.expected index c8fe6fbf5d9b..3d1f4a344a43 100644 --- a/csharp/ql/test/library-tests/members/PrintAst.expected +++ b/csharp/ql/test/library-tests/members/PrintAst.expected @@ -7,8 +7,8 @@ Members.cs: # 3| 1: [Parameter] e # 3| -1: [TypeMention] object # 6| 2: [Class] Class -# 9| 5: [Class] NestedClass -# 12| 5: [Method] Method`1 +# 9| 6: [Class] NestedClass +# 12| 6: [Method] Method`1 # 12| -1: [TypeMention] string #-----| 1: (Type parameters) # 12| 0: [TypeParameter] T @@ -17,7 +17,7 @@ Members.cs: # 12| -1: [TypeMention] T # 12| 4: [MethodCall] call to method ToString # 12| -1: [ParameterAccess] access to parameter t -# 14| 6: [Indexer] Item +# 14| 7: [Indexer] Item # 14| -1: [TypeMention] string #-----| 1: (Parameters) # 14| 0: [Parameter] i @@ -32,15 +32,15 @@ Members.cs: # 14| 0: [Parameter] i # 14| 1: [Parameter] value # 14| 4: [BlockStmt] {...} -# 16| 7: [Field] Field +# 16| 8: [Field] Field # 16| -1: [TypeMention] string -# 18| 8: [Property] Prop +# 18| 9: [Property] Prop # 18| -1: [TypeMention] string # 18| 3: [Getter] get_Prop # 18| 4: [Setter] set_Prop #-----| 2: (Parameters) # 18| 0: [Parameter] value -# 20| 9: [Event] Event +# 20| 10: [Event] Event # 20| -1: [TypeMention] EventHandler # 20| 3: [AddEventAccessor] add_Event #-----| 2: (Parameters) @@ -48,10 +48,10 @@ Members.cs: # 20| 4: [RemoveEventAccessor] remove_Event #-----| 2: (Parameters) # 20| 0: [Parameter] value -# 24| 6: [Method] Method +# 24| 7: [Method] Method # 24| -1: [TypeMention] Void # 24| 4: [BlockStmt] {...} -# 26| 7: [Indexer] Item +# 26| 8: [Indexer] Item # 26| -1: [TypeMention] string #-----| 1: (Parameters) # 26| 0: [Parameter] i @@ -66,15 +66,15 @@ Members.cs: # 26| 0: [Parameter] i # 26| 1: [Parameter] value # 26| 4: [BlockStmt] {...} -# 28| 8: [Field] Field +# 28| 9: [Field] Field # 28| -1: [TypeMention] string -# 30| 9: [Property] Prop +# 30| 10: [Property] Prop # 30| -1: [TypeMention] string # 30| 3: [Getter] get_Prop # 30| 4: [Setter] set_Prop #-----| 2: (Parameters) # 30| 0: [Parameter] value -# 32| 10: [Event] Event +# 32| 11: [Event] Event # 32| -1: [TypeMention] EventHandler # 32| 3: [AddEventAccessor] add_Event #-----| 2: (Parameters) @@ -83,8 +83,8 @@ Members.cs: #-----| 2: (Parameters) # 32| 0: [Parameter] value # 35| 3: [Class] Class2 -# 37| 5: [Class] NestedClass2 -# 39| 5: [Method] Method`1 +# 37| 6: [Class] NestedClass2 +# 39| 6: [Method] Method`1 # 39| -1: [TypeMention] string #-----| 1: (Type parameters) # 39| 0: [TypeParameter] T @@ -93,7 +93,7 @@ Members.cs: # 39| -1: [TypeMention] T # 39| 4: [MethodCall] call to method ToString # 39| -1: [ParameterAccess] access to parameter t -# 40| 6: [Indexer] Item +# 40| 7: [Indexer] Item # 40| -1: [TypeMention] string #-----| 1: (Parameters) # 40| 0: [Parameter] i @@ -108,15 +108,15 @@ Members.cs: # 40| 0: [Parameter] i # 40| 1: [Parameter] value # 40| 4: [BlockStmt] {...} -# 41| 7: [Field] Field +# 41| 8: [Field] Field # 41| -1: [TypeMention] string -# 42| 8: [Property] Prop +# 42| 9: [Property] Prop # 42| -1: [TypeMention] string # 42| 3: [Getter] get_Prop # 42| 4: [Setter] set_Prop #-----| 2: (Parameters) # 42| 0: [Parameter] value -# 43| 9: [Event] Event +# 43| 10: [Event] Event # 43| -1: [TypeMention] EventHandler # 43| 3: [AddEventAccessor] add_Event #-----| 2: (Parameters) @@ -124,10 +124,10 @@ Members.cs: # 43| 4: [RemoveEventAccessor] remove_Event #-----| 2: (Parameters) # 43| 0: [Parameter] value -# 46| 6: [Method] Method +# 46| 7: [Method] Method # 46| -1: [TypeMention] Void # 46| 4: [BlockStmt] {...} -# 47| 7: [Indexer] Item +# 47| 8: [Indexer] Item # 47| -1: [TypeMention] string #-----| 1: (Parameters) # 47| 0: [Parameter] i @@ -142,15 +142,15 @@ Members.cs: # 47| 0: [Parameter] i # 47| 1: [Parameter] value # 47| 4: [BlockStmt] {...} -# 48| 8: [Field] Field +# 48| 9: [Field] Field # 48| -1: [TypeMention] string -# 49| 9: [Property] Prop +# 49| 10: [Property] Prop # 49| -1: [TypeMention] string # 49| 3: [Getter] get_Prop # 49| 4: [Setter] set_Prop #-----| 2: (Parameters) # 49| 0: [Parameter] value -# 50| 10: [Event] Event +# 50| 11: [Event] Event # 50| -1: [TypeMention] EventHandler # 50| 3: [AddEventAccessor] add_Event #-----| 2: (Parameters) diff --git a/csharp/ql/test/library-tests/methods/PrintAst.expected b/csharp/ql/test/library-tests/methods/PrintAst.expected index 42268fdc89d2..4810c6c0b5b7 100644 --- a/csharp/ql/test/library-tests/methods/PrintAst.expected +++ b/csharp/ql/test/library-tests/methods/PrintAst.expected @@ -1,7 +1,7 @@ methods.cs: # 4| [NamespaceDeclaration] namespace ... { ... } # 7| 1: [Class] TestRef -# 10| 5: [Method] Swap +# 10| 6: [Method] Swap # 10| -1: [TypeMention] Void #-----| 2: (Parameters) # 10| 0: [Parameter] x @@ -22,7 +22,7 @@ methods.cs: # 14| 0: [AssignExpr] ... = ... # 14| 0: [ParameterAccess] access to parameter y # 14| 1: [LocalVariableAccess] access to local variable temp -# 17| 6: [Method] Main +# 17| 7: [Method] Main # 17| -1: [TypeMention] Void # 18| 4: [BlockStmt] {...} # 19| 0: [LocalVariableDeclStmt] ... ...; @@ -57,7 +57,7 @@ methods.cs: # 22| 2: [CastExpr] (...) ... # 22| 1: [LocalVariableAccess] access to local variable j # 26| 2: [Class] TestOut -# 29| 5: [Method] Divide +# 29| 6: [Method] Divide # 29| -1: [TypeMention] Void #-----| 2: (Parameters) # 29| 0: [Parameter] x @@ -81,7 +81,7 @@ methods.cs: # 32| 1: [RemExpr] ... % ... # 32| 0: [ParameterAccess] access to parameter x # 32| 1: [ParameterAccess] access to parameter y -# 35| 6: [Method] Main +# 35| 7: [Method] Main # 35| -1: [TypeMention] Void # 36| 4: [BlockStmt] {...} # 37| 0: [LocalVariableDeclStmt] ... ...; @@ -105,7 +105,7 @@ methods.cs: # 39| 2: [CastExpr] (...) ... # 39| 1: [LocalVariableAccess] access to local variable rem # 43| 3: [Class] Console -# 46| 5: [Method] Write +# 46| 6: [Method] Write # 46| -1: [TypeMention] Void #-----| 2: (Parameters) # 46| 0: [Parameter] fmt @@ -114,7 +114,7 @@ methods.cs: # 46| -1: [TypeMention] Object[] # 46| 1: [TypeMention] object # 46| 4: [BlockStmt] {...} -# 47| 6: [Method] WriteLine +# 47| 7: [Method] WriteLine # 47| -1: [TypeMention] Void #-----| 2: (Parameters) # 47| 0: [Parameter] fmt @@ -124,7 +124,7 @@ methods.cs: # 47| 1: [TypeMention] object # 47| 4: [BlockStmt] {...} # 50| 4: [Class] TestOverloading -# 53| 5: [Method] F +# 53| 6: [Method] F # 53| -1: [TypeMention] Void # 54| 4: [BlockStmt] {...} # 55| 0: [ExprStmt] ...; @@ -132,7 +132,7 @@ methods.cs: # 55| -1: [TypeAccess] access to type Console # 55| 0: [TypeMention] Console # 55| 0: [StringLiteralUtf16] "F()" -# 58| 6: [Method] F +# 58| 7: [Method] F # 58| -1: [TypeMention] Void #-----| 2: (Parameters) # 58| 0: [Parameter] x @@ -143,7 +143,7 @@ methods.cs: # 60| -1: [TypeAccess] access to type Console # 60| 0: [TypeMention] Console # 60| 0: [StringLiteralUtf16] "F(object)" -# 63| 7: [Method] F +# 63| 8: [Method] F # 63| -1: [TypeMention] Void #-----| 2: (Parameters) # 63| 0: [Parameter] x @@ -154,7 +154,7 @@ methods.cs: # 65| -1: [TypeAccess] access to type Console # 65| 0: [TypeMention] Console # 65| 0: [StringLiteralUtf16] "F(int)" -# 68| 8: [Method] F +# 68| 9: [Method] F # 68| -1: [TypeMention] Void #-----| 2: (Parameters) # 68| 0: [Parameter] x @@ -165,7 +165,7 @@ methods.cs: # 70| -1: [TypeAccess] access to type Console # 70| 0: [TypeMention] Console # 70| 0: [StringLiteralUtf16] "F(double)" -# 73| 11: [Method] F`1 +# 73| 12: [Method] F`1 # 73| -1: [TypeMention] Void #-----| 1: (Type parameters) # 73| 0: [TypeParameter] T @@ -178,7 +178,7 @@ methods.cs: # 75| -1: [TypeAccess] access to type Console # 75| 0: [TypeMention] Console # 75| 0: [StringLiteralUtf16] "F(T)" -# 78| 12: [Method] F +# 78| 13: [Method] F # 78| -1: [TypeMention] Void #-----| 2: (Parameters) # 78| 0: [Parameter] x @@ -191,7 +191,7 @@ methods.cs: # 80| -1: [TypeAccess] access to type Console # 80| 0: [TypeMention] Console # 80| 0: [StringLiteralUtf16] "F(double, double)" -# 83| 13: [Method] Main +# 83| 14: [Method] Main # 83| -1: [TypeMention] Void # 84| 4: [BlockStmt] {...} # 85| 0: [ExprStmt] ...; @@ -352,7 +352,7 @@ methods.cs: # 135| -1: [TypeAccess] access to type Boolean # 135| 0: [TypeMention] bool # 140| 7: [Class] TestDefaultParameters -# 142| 4: [Method] Method1 +# 142| 5: [Method] Method1 # 142| -1: [TypeMention] Void #-----| 2: (Parameters) # 142| 0: [Parameter] x @@ -360,7 +360,7 @@ methods.cs: # 142| 1: [Parameter] y # 142| -1: [TypeMention] int # 143| 4: [BlockStmt] {...} -# 146| 5: [Method] Method2 +# 146| 6: [Method] Method2 # 146| -1: [TypeMention] Void #-----| 2: (Parameters) # 146| 0: [Parameter] a @@ -379,12 +379,12 @@ methods.cs: # 146| 0: [StringLiteralUtf16] "a" # 146| 1: [StringLiteralUtf16] "b" # 147| 4: [BlockStmt] {...} -# 150| 6: [InstanceConstructor] TestDefaultParameters +# 150| 7: [InstanceConstructor] TestDefaultParameters #-----| 2: (Parameters) # 150| 0: [Parameter] x # 150| -1: [TypeMention] int # 151| 4: [BlockStmt] {...} -# 154| 7: [InstanceConstructor] TestDefaultParameters +# 154| 8: [InstanceConstructor] TestDefaultParameters #-----| 2: (Parameters) # 154| 0: [Parameter] x # 154| -1: [TypeMention] string @@ -394,7 +394,7 @@ methods.cs: # 154| 1: [ObjectCreation] object creation of type Double # 154| 0: [TypeMention] double # 155| 4: [BlockStmt] {...} -# 158| 8: [DelegateType] Del +# 158| 9: [DelegateType] Del #-----| 2: (Parameters) # 158| 0: [Parameter] a # 158| -1: [TypeMention] string @@ -405,7 +405,7 @@ methods.cs: # 158| -1: [TypeMention] double # 158| 1: [ObjectCreation] object creation of type Double # 158| 0: [TypeMention] double -# 160| 9: [Indexer] Item +# 160| 10: [Indexer] Item # 160| -1: [TypeMention] int #-----| 1: (Parameters) # 160| 0: [Parameter] x @@ -477,7 +477,7 @@ methods.cs: # 185| 9: [Class] TestCollidingMethods`1 #-----| 1: (Type parameters) # 185| 0: [TypeParameter] T -# 187| 5: [Method] M +# 187| 6: [Method] M # 187| -1: [TypeMention] Void #-----| 2: (Parameters) # 187| 0: [Parameter] p1 @@ -485,7 +485,7 @@ methods.cs: # 187| 1: [Parameter] p2 # 187| -1: [TypeMention] int # 187| 4: [BlockStmt] {...} -# 188| 6: [Method] M +# 188| 7: [Method] M # 188| -1: [TypeMention] Void #-----| 2: (Parameters) # 188| 0: [Parameter] p1 @@ -493,7 +493,7 @@ methods.cs: # 188| 1: [Parameter] p2 # 188| -1: [TypeMention] int # 188| 4: [BlockStmt] {...} -# 190| 7: [Method] Calls +# 190| 8: [Method] Calls # 190| -1: [TypeMention] Void # 191| 4: [BlockStmt] {...} # 192| 0: [LocalVariableDeclStmt] ... ...; @@ -525,13 +525,13 @@ methods.cs: # 197| -1: [LocalVariableAccess] access to local variable y # 197| 0: [IntLiteral] 1 # 197| 1: [IntLiteral] 1 -# 200| 8: [Class] Nested -# 202| 4: [InstanceConstructor] Nested +# 200| 9: [Class] Nested +# 202| 5: [InstanceConstructor] Nested #-----| 2: (Parameters) # 202| 0: [Parameter] p1 # 202| -1: [TypeMention] int # 202| 4: [BlockStmt] {...} -# 203| 5: [InstanceConstructor] Nested +# 203| 6: [InstanceConstructor] Nested #-----| 2: (Parameters) # 203| 0: [Parameter] p1 # 203| -1: [TypeMention] T diff --git a/csharp/ql/test/library-tests/namespaces/PrintAst.expected b/csharp/ql/test/library-tests/namespaces/PrintAst.expected index 2b0e505ec270..88d8dbe02a7e 100644 --- a/csharp/ql/test/library-tests/namespaces/PrintAst.expected +++ b/csharp/ql/test/library-tests/namespaces/PrintAst.expected @@ -26,7 +26,7 @@ namespaces.cs: # 72| 1: [Class] A`1 #-----| 1: (Type parameters) # 72| 0: [TypeParameter] T -# 75| 5: [Class] B +# 75| 6: [Class] B # 79| 2: [Class] A # 83| [NamespaceDeclaration] namespace ... { ... } # 90| [NamespaceDeclaration] namespace ... { ... } diff --git a/csharp/ql/test/library-tests/nestedtypes/PrintAst.expected b/csharp/ql/test/library-tests/nestedtypes/PrintAst.expected index 8a2f4343556a..9a0c4a7f029e 100644 --- a/csharp/ql/test/library-tests/nestedtypes/PrintAst.expected +++ b/csharp/ql/test/library-tests/nestedtypes/PrintAst.expected @@ -1,13 +1,13 @@ nestedtypes.cs: # 5| [NamespaceDeclaration] namespace ... { ... } # 8| 1: [Class] Base -# 11| 5: [Struct] S -# 13| 6: [Interface] I -# 15| 7: [DelegateType] MyDelegate +# 11| 6: [Struct] S +# 13| 7: [Interface] I +# 15| 8: [DelegateType] MyDelegate #-----| 2: (Parameters) # 15| 0: [Parameter] s # 15| -1: [TypeMention] S -# 17| 8: [Method] F +# 17| 9: [Method] F # 17| -1: [TypeMention] Void # 18| 4: [BlockStmt] {...} # 19| 0: [ExprStmt] ...; @@ -15,12 +15,12 @@ nestedtypes.cs: # 19| -1: [TypeAccess] access to type Console # 19| 0: [TypeMention] Console # 19| 0: [StringLiteralUtf16] "Base.F" -# 22| 9: [Class] C +# 22| 10: [Class] C # 26| 2: [Class] Derived #-----| 3: (Base types) # 26| 0: [TypeMention] Base -# 29| 5: [Class] Nested -# 32| 5: [Method] G +# 29| 6: [Class] Nested +# 32| 6: [Method] G # 32| -1: [TypeMention] Void # 33| 4: [BlockStmt] {...} # 34| 0: [LocalVariableDeclStmt] ... ...; @@ -33,7 +33,7 @@ nestedtypes.cs: # 35| 0: [MethodCall] call to method F # 35| -1: [LocalVariableAccess] access to local variable d # 42| 3: [Class] Test -# 45| 5: [Method] Main +# 45| 6: [Method] Main # 45| -1: [TypeMention] Void # 46| 4: [BlockStmt] {...} # 47| 0: [LocalVariableDeclStmt] ... ...; @@ -50,10 +50,10 @@ nestedtypes.cs: # 53| 4: [Class] Outer`1 #-----| 1: (Type parameters) # 53| 0: [TypeParameter] T -# 56| 6: [Class] Inner`1 +# 56| 7: [Class] Inner`1 #-----| 1: (Type parameters) # 56| 0: [TypeParameter] U -# 59| 5: [Method] F +# 59| 6: [Method] F # 59| -1: [TypeMention] Void #-----| 2: (Parameters) # 59| 0: [Parameter] t @@ -61,7 +61,7 @@ nestedtypes.cs: # 59| 1: [Parameter] u # 59| -1: [TypeMention] U # 59| 4: [BlockStmt] {...} -# 63| 7: [Method] F +# 63| 8: [Method] F # 63| -1: [TypeMention] Void #-----| 2: (Parameters) # 63| 0: [Parameter] t @@ -100,8 +100,8 @@ nestedtypes.cs: # 74| 5: [Class] Outer2`1 #-----| 1: (Type parameters) # 74| 0: [TypeParameter] T -# 77| 5: [Class] Inner2`1 +# 77| 6: [Class] Inner2`1 #-----| 1: (Type parameters) # 77| 0: [TypeParameter] T -# 80| 5: [Field] t +# 80| 6: [Field] t # 80| -1: [TypeMention] T diff --git a/csharp/ql/test/library-tests/nullable/NullableExpressions.expected b/csharp/ql/test/library-tests/nullable/NullableExpressions.expected index 675450ab2eeb..7d66522f0b95 100644 --- a/csharp/ql/test/library-tests/nullable/NullableExpressions.expected +++ b/csharp/ql/test/library-tests/nullable/NullableExpressions.expected @@ -1,4 +1,6 @@ | 1 | 14 | nullable.cs:1:14:1:21 | Nullable | nullable.cs:1:14:1:21 | call to constructor Object | Object | +| 1 | 14 | nullable.cs:1:14:1:21 | Nullable | nullable.cs:1:14:1:21 | call to method | Void | +| 1 | 14 | nullable.cs:1:14:1:21 | call to method | nullable.cs:1:14:1:21 | this access | Nullable | | 5 | 13 | nullable.cs:5:9:6:24 | if (...) ... | nullable.cs:5:13:5:21 | ... == ... | Boolean | | 5 | 13 | nullable.cs:5:13:5:21 | ... == ... | nullable.cs:5:13:5:13 | access to parameter x | Nullable | | 5 | 18 | nullable.cs:5:13:5:21 | ... == ... | nullable.cs:5:18:5:21 | null | null | diff --git a/csharp/ql/test/library-tests/obinit/Flow.expected b/csharp/ql/test/library-tests/obinit/Flow.expected new file mode 100644 index 000000000000..a9306a762ffe --- /dev/null +++ b/csharp/ql/test/library-tests/obinit/Flow.expected @@ -0,0 +1,20 @@ +edges +| obinit.cs:5:23:5:23 | [post] this access : A [field s] : String | obinit.cs:7:16:7:16 | [post] this access : A [field s] : String | provenance | | +| obinit.cs:5:27:5:34 | "source" : String | obinit.cs:5:23:5:23 | [post] this access : A [field s] : String | provenance | | +| obinit.cs:7:16:7:16 | [post] this access : A [field s] : String | obinit.cs:7:16:7:16 | this [Return] : A [field s] : String | provenance | | +| obinit.cs:7:16:7:16 | this [Return] : A [field s] : String | obinit.cs:20:19:20:25 | object creation of type A : A [field s] : String | provenance | | +| obinit.cs:20:15:20:15 | access to local variable a : A [field s] : String | obinit.cs:21:18:21:18 | access to local variable a : A [field s] : String | provenance | | +| obinit.cs:20:19:20:25 | object creation of type A : A [field s] : String | obinit.cs:20:15:20:15 | access to local variable a : A [field s] : String | provenance | | +| obinit.cs:21:18:21:18 | access to local variable a : A [field s] : String | obinit.cs:21:18:21:20 | access to field s | provenance | | +flow +| obinit.cs:21:18:21:20 | access to field s | +nodes +| obinit.cs:5:23:5:23 | [post] this access : A [field s] : String | semmle.label | [post] this access : A [field s] : String | +| obinit.cs:5:27:5:34 | "source" : String | semmle.label | "source" : String | +| obinit.cs:7:16:7:16 | [post] this access : A [field s] : String | semmle.label | [post] this access : A [field s] : String | +| obinit.cs:7:16:7:16 | this [Return] : A [field s] : String | semmle.label | this [Return] : A [field s] : String | +| obinit.cs:20:15:20:15 | access to local variable a : A [field s] : String | semmle.label | access to local variable a : A [field s] : String | +| obinit.cs:20:19:20:25 | object creation of type A : A [field s] : String | semmle.label | object creation of type A : A [field s] : String | +| obinit.cs:21:18:21:18 | access to local variable a : A [field s] : String | semmle.label | access to local variable a : A [field s] : String | +| obinit.cs:21:18:21:20 | access to field s | semmle.label | access to field s | +subpaths diff --git a/csharp/ql/test/library-tests/obinit/Flow.ql b/csharp/ql/test/library-tests/obinit/Flow.ql new file mode 100644 index 000000000000..54f0300546c4 --- /dev/null +++ b/csharp/ql/test/library-tests/obinit/Flow.ql @@ -0,0 +1,20 @@ +import csharp + +module FlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source.asExpr().(StringLiteral).getValue() = "source" + } + + predicate isSink(DataFlow::Node sink) { + exists(MethodCall mc | + mc.getTarget().getUndecoratedName() = "Sink" and + mc.getAnArgument() = sink.asExpr() + ) + } +} + +module Flow = DataFlow::Global; + +import Flow::PathGraph + +query predicate flow(DataFlow::Node sink) { Flow::flowTo(sink) } diff --git a/csharp/ql/test/library-tests/obinit/Flow.qlref b/csharp/ql/test/library-tests/obinit/Flow.qlref new file mode 100644 index 000000000000..f48796a83f70 --- /dev/null +++ b/csharp/ql/test/library-tests/obinit/Flow.qlref @@ -0,0 +1,2 @@ +query: Flow.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/csharp/ql/test/library-tests/obinit/ObInit.expected b/csharp/ql/test/library-tests/obinit/ObInit.expected new file mode 100644 index 000000000000..38dd82686801 --- /dev/null +++ b/csharp/ql/test/library-tests/obinit/ObInit.expected @@ -0,0 +1,25 @@ +method +| obinit.cs:2:18:2:18 | | obinit.cs:2:18:2:18 | A | +| obinit.cs:14:18:14:18 | | obinit.cs:14:18:14:18 | B | +call +| obinit.cs:7:16:7:16 | call to method | obinit.cs:2:18:2:18 | | obinit.cs:7:16:7:16 | A | +| obinit.cs:9:16:9:16 | call to method | obinit.cs:2:18:2:18 | | obinit.cs:9:16:9:16 | A | +| obinit.cs:15:16:15:16 | call to method | obinit.cs:14:18:14:18 | | obinit.cs:15:16:15:16 | B | +cfg +| obinit.cs:2:18:2:18 | | obinit.cs:3:13:3:13 | this access | obinit.cs:3:17:3:17 | 1 | normal | 0 | +| obinit.cs:2:18:2:18 | | obinit.cs:3:13:3:17 | ... = ... | obinit.cs:5:23:5:23 | this access | normal | 2 | +| obinit.cs:2:18:2:18 | | obinit.cs:3:17:3:17 | 1 | obinit.cs:3:13:3:17 | ... = ... | normal | 1 | +| obinit.cs:2:18:2:18 | | obinit.cs:5:23:5:23 | this access | obinit.cs:5:27:5:34 | "source" | normal | 3 | +| obinit.cs:2:18:2:18 | | obinit.cs:5:27:5:34 | "source" | obinit.cs:5:23:5:34 | ... = ... | normal | 4 | +| obinit.cs:7:16:7:16 | A | obinit.cs:7:16:7:16 | call to constructor Object | obinit.cs:7:20:7:22 | {...} | normal | 2 | +| obinit.cs:7:16:7:16 | A | obinit.cs:7:16:7:16 | call to method | obinit.cs:7:16:7:16 | call to constructor Object | normal | 1 | +| obinit.cs:7:16:7:16 | A | obinit.cs:7:16:7:16 | this access | obinit.cs:7:16:7:16 | call to method | normal | 0 | +| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | call to constructor Object | obinit.cs:9:25:9:27 | {...} | normal | 2 | +| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | call to method | obinit.cs:9:16:9:16 | call to constructor Object | normal | 1 | +| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | this access | obinit.cs:9:16:9:16 | call to method | normal | 0 | +| obinit.cs:11:16:11:16 | A | obinit.cs:11:34:11:37 | call to constructor A | obinit.cs:11:42:11:44 | {...} | normal | 1 | +| obinit.cs:11:16:11:16 | A | obinit.cs:11:39:11:39 | access to parameter y | obinit.cs:11:34:11:37 | call to constructor A | normal | 0 | +| obinit.cs:15:16:15:16 | B | obinit.cs:15:16:15:16 | call to method | obinit.cs:15:27:15:28 | 10 | normal | 1 | +| obinit.cs:15:16:15:16 | B | obinit.cs:15:16:15:16 | this access | obinit.cs:15:16:15:16 | call to method | normal | 0 | +| obinit.cs:15:16:15:16 | B | obinit.cs:15:22:15:25 | call to constructor A | obinit.cs:15:31:15:33 | {...} | normal | 3 | +| obinit.cs:15:16:15:16 | B | obinit.cs:15:27:15:28 | 10 | obinit.cs:15:22:15:25 | call to constructor A | normal | 2 | diff --git a/csharp/ql/test/library-tests/obinit/ObInit.ql b/csharp/ql/test/library-tests/obinit/ObInit.ql new file mode 100644 index 000000000000..cfd21d14b5e0 --- /dev/null +++ b/csharp/ql/test/library-tests/obinit/ObInit.ql @@ -0,0 +1,28 @@ +import csharp +import semmle.code.csharp.controlflow.internal.ControlFlowGraphImpl +import semmle.code.csharp.controlflow.internal.Completion +import semmle.code.csharp.dataflow.internal.DataFlowPrivate +import semmle.code.csharp.dataflow.internal.DataFlowDispatch + +query predicate method(ObjectInitMethod m, RefType t) { m.getDeclaringType() = t } + +query predicate call(Call c, ObjectInitMethod m, Callable src) { + c.getTarget() = m and c.getEnclosingCallable() = src +} + +predicate scope(Callable callable, AstNode n, int i) { + (callable instanceof ObjectInitMethod or callable instanceof Constructor) and + scopeFirst(callable, n) and + i = 0 + or + exists(AstNode prev | + scope(callable, prev, i - 1) and + succ(prev, n, _) and + i < 30 + ) +} + +query predicate cfg(Callable callable, AstNode pred, AstNode succ, Completion c, int i) { + scope(callable, pred, i) and + succ(pred, succ, c) +} diff --git a/csharp/ql/test/library-tests/obinit/obinit.cs b/csharp/ql/test/library-tests/obinit/obinit.cs new file mode 100644 index 000000000000..9a9c628e71f5 --- /dev/null +++ b/csharp/ql/test/library-tests/obinit/obinit.cs @@ -0,0 +1,30 @@ +namespace ObInit { + public class A { + int x = 1; + + public string s = "source"; + + public A() { } + + public A(int y) { } + + public A(int y, int z) : this(y) { } + } + + public class B : A { + public B() : base(10) { } + + static void Sink(string s) { } + + static void Foo() { + A a = new A(); + Sink(a.s); // $ flow + + A a2 = new A(0, 0); + Sink(a2.s); // $ MISSING: flow + + B b = new B(); + Sink(b.s); // $ MISSING: flow + } + } +} diff --git a/csharp/ql/test/library-tests/operators/PrintAst.expected b/csharp/ql/test/library-tests/operators/PrintAst.expected index 0b490c13d2c0..d3b41fe05fb7 100644 --- a/csharp/ql/test/library-tests/operators/PrintAst.expected +++ b/csharp/ql/test/library-tests/operators/PrintAst.expected @@ -1,18 +1,18 @@ operators.cs: # 5| [NamespaceDeclaration] namespace ... { ... } # 7| 1: [Class] IntVector -# 10| 4: [InstanceConstructor] IntVector +# 10| 5: [InstanceConstructor] IntVector #-----| 2: (Parameters) # 10| 0: [Parameter] length # 10| -1: [TypeMention] int # 10| 4: [BlockStmt] {...} -# 12| 5: [Property] Length +# 12| 6: [Property] Length # 12| -1: [TypeMention] int # 12| 3: [Getter] get_Length # 12| 4: [BlockStmt] {...} # 12| 0: [ReturnStmt] return ...; # 12| 0: [IntLiteral] 4 -# 14| 6: [Indexer] Item +# 14| 7: [Indexer] Item # 14| -1: [TypeMention] int #-----| 1: (Parameters) # 14| 0: [Parameter] index @@ -28,7 +28,7 @@ operators.cs: # 14| 0: [Parameter] index # 14| 1: [Parameter] value # 14| 4: [BlockStmt] {...} -# 16| 7: [IncrementOperator] ++ +# 16| 8: [IncrementOperator] ++ # 16| -1: [TypeMention] IntVector #-----| 2: (Parameters) # 16| 0: [Parameter] iv @@ -66,7 +66,7 @@ operators.cs: # 21| 2: [ReturnStmt] return ...; # 21| 0: [LocalVariableAccess] access to local variable temp # 26| 2: [Class] TestUnaryOperator -# 29| 5: [Method] Main +# 29| 6: [Method] Main # 29| -1: [TypeMention] Void # 30| 4: [BlockStmt] {...} # 31| 0: [LocalVariableDeclStmt] ... ...; @@ -90,9 +90,9 @@ operators.cs: # 34| 1: [OperatorCall] call to operator ++ # 34| 0: [LocalVariableAccess] access to local variable iv1 # 39| 3: [Struct] Digit -# 42| 5: [Field] value +# 42| 6: [Field] value # 42| -1: [TypeMention] byte -# 44| 6: [InstanceConstructor] Digit +# 44| 7: [InstanceConstructor] Digit #-----| 2: (Parameters) # 44| 0: [Parameter] value # 44| -1: [TypeMention] byte @@ -115,7 +115,7 @@ operators.cs: # 48| 0: [FieldAccess] access to field value # 48| -1: [ThisAccess] this access # 48| 1: [ParameterAccess] access to parameter value -# 51| 7: [ImplicitConversionOperator] implicit conversion +# 51| 8: [ImplicitConversionOperator] implicit conversion # 51| -1: [TypeMention] byte #-----| 2: (Parameters) # 51| 0: [Parameter] d @@ -124,7 +124,7 @@ operators.cs: # 53| 0: [ReturnStmt] return ...; # 53| 0: [FieldAccess] access to field value # 53| -1: [ParameterAccess] access to parameter d -# 56| 8: [ExplicitConversionOperator] explicit conversion +# 56| 9: [ExplicitConversionOperator] explicit conversion # 56| -1: [TypeMention] Digit #-----| 2: (Parameters) # 56| 0: [Parameter] b @@ -135,7 +135,7 @@ operators.cs: # 58| -1: [TypeMention] Digit # 58| 0: [ParameterAccess] access to parameter b # 63| 4: [Class] TestConversionOperator -# 66| 5: [Method] Main +# 66| 6: [Method] Main # 66| -1: [TypeMention] Void # 67| 4: [BlockStmt] {...} # 68| 0: [LocalVariableDeclStmt] ... ...; diff --git a/csharp/ql/test/library-tests/overlay/base/test.expected b/csharp/ql/test/library-tests/overlay/base/test.expected index 0c2b5750f2cb..67a440b87db7 100644 --- a/csharp/ql/test/library-tests/overlay/base/test.expected +++ b/csharp/ql/test/library-tests/overlay/base/test.expected @@ -1,5 +1,7 @@ expressions | A.cs:8:16:8:16 | call to constructor Object | +| A.cs:8:16:8:16 | call to method | +| A.cs:8:16:8:16 | this access | | A.cs:10:13:10:16 | access to field name | | A.cs:10:13:10:16 | this access | | A.cs:10:13:10:20 | ... = ... | @@ -34,7 +36,11 @@ expressions | A.cs:58:27:58:30 | this access | | A.cs:59:20:59:20 | access to local variable x | | A.cs:63:18:63:36 | call to constructor Attribute | +| A.cs:63:18:63:36 | call to method | +| A.cs:63:18:63:36 | this access | | A.cs:65:18:65:18 | call to constructor Object | +| A.cs:65:18:65:18 | call to method | +| A.cs:65:18:65:18 | this access | | Program.cs:9:17:9:20 | access to parameter args | | Program.cs:9:17:9:27 | access to property Length | | Program.cs:9:17:9:32 | ... == ... | @@ -56,6 +62,8 @@ expressions | Program.cs:16:31:16:31 | access to local variable a | | Program.cs:16:31:16:42 | call to method ToString | | Program.cs:21:16:21:22 | call to constructor Object | +| Program.cs:21:16:21:22 | call to method | +| Program.cs:21:16:21:22 | this access | | Program.cs:23:13:23:23 | access to field programName | | Program.cs:23:13:23:23 | this access | | Program.cs:23:13:23:27 | ... = ... | @@ -77,6 +85,8 @@ expressions | Program.cs:51:35:51:59 | "Program handler removed" | | Program.cs:57:20:57:20 | access to parameter b | | Program.cs:64:18:64:33 | call to constructor Attribute | +| Program.cs:64:18:64:33 | call to method | +| Program.cs:64:18:64:33 | this access | statements | A.cs:9:9:11:9 | {...} | | A.cs:10:13:10:21 | ...; | diff --git a/csharp/ql/test/library-tests/overlay/overlay/test.expected b/csharp/ql/test/library-tests/overlay/overlay/test.expected index d9d4d0ec6fe0..bb9a82b3a238 100644 --- a/csharp/ql/test/library-tests/overlay/overlay/test.expected +++ b/csharp/ql/test/library-tests/overlay/overlay/test.expected @@ -1,6 +1,10 @@ expressions | A.cs:5:18:5:18 | call to constructor Object | +| A.cs:5:18:5:18 | call to method | +| A.cs:5:18:5:18 | this access | | A.cs:10:16:10:16 | call to constructor Object | +| A.cs:10:16:10:16 | call to method | +| A.cs:10:16:10:16 | this access | | A.cs:12:13:12:16 | access to field name | | A.cs:12:13:12:16 | this access | | A.cs:12:13:12:20 | ... = ... | @@ -40,6 +44,8 @@ expressions | A.cs:64:24:64:27 | this access | | A.cs:64:24:64:37 | call to method ToUpper | | A.cs:69:18:69:36 | call to constructor Attribute | +| A.cs:69:18:69:36 | call to method | +| A.cs:69:18:69:36 | this access | | Program.cs:9:17:9:20 | access to parameter args | | Program.cs:9:17:9:27 | access to property Length | | Program.cs:9:17:9:32 | ... == ... | @@ -61,6 +67,8 @@ expressions | Program.cs:16:31:16:31 | access to local variable a | | Program.cs:16:31:16:42 | call to method ToString | | Program.cs:21:16:21:22 | call to constructor Object | +| Program.cs:21:16:21:22 | call to method | +| Program.cs:21:16:21:22 | this access | | Program.cs:23:13:23:23 | access to field programName | | Program.cs:23:13:23:23 | this access | | Program.cs:23:13:23:27 | ... = ... | @@ -82,6 +90,8 @@ expressions | Program.cs:51:35:51:59 | "Program handler removed" | | Program.cs:57:20:57:20 | access to parameter b | | Program.cs:64:18:64:33 | call to constructor Attribute | +| Program.cs:64:18:64:33 | call to method | +| Program.cs:64:18:64:33 | this access | statements | A.cs:5:18:5:18 | {...} | | A.cs:11:9:13:9 | {...} | diff --git a/csharp/ql/test/library-tests/partial/Partial2.expected b/csharp/ql/test/library-tests/partial/Partial2.expected index 9dc3a24a4ce8..87194dd3f9eb 100644 --- a/csharp/ql/test/library-tests/partial/Partial2.expected +++ b/csharp/ql/test/library-tests/partial/Partial2.expected @@ -1,10 +1,15 @@ +| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:1:15:1:26 | | | Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 | | Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:5:17:5:23 | Method2 | | Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:14:18:14:39 | PartialMethodWithBody1 | | Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:15:17:15:23 | Method3 | +| Partial.cs:12:15:12:26 | TwoPartClass | Partial.cs:1:15:1:26 | | | Partial.cs:12:15:12:26 | TwoPartClass | Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 | | Partial.cs:12:15:12:26 | TwoPartClass | Partial.cs:5:17:5:23 | Method2 | | Partial.cs:12:15:12:26 | TwoPartClass | Partial.cs:14:18:14:39 | PartialMethodWithBody1 | | Partial.cs:12:15:12:26 | TwoPartClass | Partial.cs:15:17:15:23 | Method3 | +| Partial.cs:32:15:32:33 | OnePartPartialClass | Partial.cs:32:15:32:33 | | | Partial.cs:32:15:32:33 | OnePartPartialClass | Partial.cs:34:18:34:42 | PartialMethodWithoutBody2 | | Partial.cs:32:15:32:33 | OnePartPartialClass | Partial.cs:35:17:35:23 | Method4 | +| PartialMultipleFiles1.cs:1:22:1:41 | PartialMultipleFiles | PartialMultipleFiles1.cs:1:22:1:41 | | +| PartialMultipleFiles2.cs:1:22:1:41 | PartialMultipleFiles | PartialMultipleFiles1.cs:1:22:1:41 | | diff --git a/csharp/ql/test/library-tests/partial/PrintAst.expected b/csharp/ql/test/library-tests/partial/PrintAst.expected index d97f6fc01f04..0729946b18be 100644 --- a/csharp/ql/test/library-tests/partial/PrintAst.expected +++ b/csharp/ql/test/library-tests/partial/PrintAst.expected @@ -1,19 +1,19 @@ Partial.cs: # 1| [Class] TwoPartClass -# 4| 5: [Method] PartialMethodWithoutBody1 +# 4| 6: [Method] PartialMethodWithoutBody1 # 4| -1: [TypeMention] Void -# 5| 6: [Method] Method2 +# 5| 7: [Method] Method2 # 5| -1: [TypeMention] Void # 5| 4: [BlockStmt] {...} -# 14| 7: [Method] PartialMethodWithBody1 +# 14| 8: [Method] PartialMethodWithBody1 # 3| -1: [TypeMention] Void # 14| 4: [BlockStmt] {...} -# 15| 8: [Method] Method3 +# 15| 9: [Method] Method3 # 15| -1: [TypeMention] Void # 15| 4: [BlockStmt] {...} -# 16| 9: [Field] _backingField +# 16| 10: [Field] _backingField # 16| -1: [TypeMention] object -# 18| 10: [Property] PartialProperty1 +# 18| 11: [Property] PartialProperty1 # 7| -1: [TypeMention] object # 18| -1: [TypeMention] object # 20| 3: [Getter] get_PartialProperty1 @@ -28,10 +28,10 @@ Partial.cs: # 21| 0: [AssignExpr] ... = ... # 21| 0: [FieldAccess] access to field _backingField # 21| 1: [ParameterAccess] access to parameter value -# 23| 11: [Field] _backingArray +# 23| 12: [Field] _backingArray # 23| -1: [TypeMention] Object[] # 23| 1: [TypeMention] object -# 25| 12: [Indexer] Item +# 25| 13: [Indexer] Item # 9| -1: [TypeMention] object # 25| -1: [TypeMention] object #-----| 1: (Parameters) @@ -58,22 +58,22 @@ Partial.cs: # 28| 0: [ParameterAccess] access to parameter index # 28| 1: [ParameterAccess] access to parameter value # 32| [Class] OnePartPartialClass -# 34| 5: [Method] PartialMethodWithoutBody2 +# 34| 6: [Method] PartialMethodWithoutBody2 # 34| -1: [TypeMention] Void -# 35| 6: [Method] Method4 +# 35| 7: [Method] Method4 # 35| -1: [TypeMention] Void # 35| 4: [BlockStmt] {...} # 38| [Class] NonPartialClass -# 40| 5: [Method] Method5 +# 40| 6: [Method] Method5 # 40| -1: [TypeMention] Void # 40| 4: [BlockStmt] {...} -# 41| 6: [Property] Property +# 41| 7: [Property] Property # 41| -1: [TypeMention] object # 41| 3: [Getter] get_Property # 41| 4: [Setter] set_Property #-----| 2: (Parameters) # 41| 0: [Parameter] value -# 42| 7: [Indexer] Item +# 42| 8: [Indexer] Item # 42| -1: [TypeMention] object #-----| 1: (Parameters) # 42| 0: [Parameter] index diff --git a/csharp/ql/test/library-tests/properties/PrintAst.expected b/csharp/ql/test/library-tests/properties/PrintAst.expected index 370d180a08e8..2df3ee3f5e85 100644 --- a/csharp/ql/test/library-tests/properties/PrintAst.expected +++ b/csharp/ql/test/library-tests/properties/PrintAst.expected @@ -1,9 +1,9 @@ properties.cs: # 5| [NamespaceDeclaration] namespace ... { ... } # 7| 1: [Class] Button -# 10| 5: [Field] caption +# 10| 6: [Field] caption # 10| -1: [TypeMention] string -# 12| 6: [Property] Caption +# 12| 7: [Property] Caption # 12| -1: [TypeMention] string # 15| 3: [Getter] get_Caption # 15| 4: [BlockStmt] {...} @@ -22,7 +22,7 @@ properties.cs: # 21| 0: [AssignExpr] ... = ... # 21| 0: [FieldAccess] access to field caption # 21| 1: [ParameterAccess] access to parameter value -# 26| 7: [Method] Paint +# 26| 8: [Method] Paint # 26| -1: [TypeMention] Void # 27| 4: [BlockStmt] {...} # 28| 0: [LocalVariableDeclStmt] ... ...; @@ -43,9 +43,9 @@ properties.cs: # 30| 1: [PropertyCall] access to property Caption # 30| -1: [LocalVariableAccess] access to local variable okButton # 34| 2: [Class] Counter -# 37| 5: [Field] next +# 37| 6: [Field] next # 37| -1: [TypeMention] int -# 39| 6: [Property] Next +# 39| 7: [Property] Next # 39| -1: [TypeMention] int # 41| 3: [Getter] get_Next # 41| 4: [BlockStmt] {...} @@ -53,32 +53,32 @@ properties.cs: # 41| 0: [PostIncrExpr] ...++ # 41| 0: [FieldAccess] access to field next # 46| 3: [Class] Point -# 49| 5: [Property] X +# 49| 6: [Property] X # 49| -1: [TypeMention] int # 49| 3: [Getter] get_X # 49| 4: [Setter] set_X #-----| 2: (Parameters) # 49| 0: [Parameter] value -# 50| 6: [Property] Y +# 50| 7: [Property] Y # 50| -1: [TypeMention] int # 50| 3: [Getter] get_Y # 50| 4: [Setter] set_Y #-----| 2: (Parameters) # 50| 0: [Parameter] value # 54| 4: [Class] ReadOnlyPoint -# 57| 4: [Property] X +# 57| 5: [Property] X # 57| -1: [TypeMention] int # 57| 3: [Getter] get_X # 57| 4: [Setter] set_X #-----| 2: (Parameters) # 57| 0: [Parameter] value -# 58| 5: [Property] Y +# 58| 6: [Property] Y # 58| -1: [TypeMention] int # 58| 3: [Getter] get_Y # 58| 4: [Setter] set_Y #-----| 2: (Parameters) # 58| 0: [Parameter] value -# 59| 6: [InstanceConstructor] ReadOnlyPoint +# 59| 7: [InstanceConstructor] ReadOnlyPoint #-----| 2: (Parameters) # 59| 0: [Parameter] x # 59| -1: [TypeMention] int @@ -94,15 +94,15 @@ properties.cs: # 62| 0: [PropertyCall] access to property Y # 62| 1: [ParameterAccess] access to parameter y # 67| 5: [Class] A -# 69| 5: [Field] y +# 69| 6: [Field] y # 69| -1: [TypeMention] int -# 70| 6: [Property] X +# 70| 7: [Property] X # 70| -1: [TypeMention] int # 70| 3: [Getter] get_X # 70| 4: [BlockStmt] {...} # 70| 0: [ReturnStmt] return ...; # 70| 0: [IntLiteral] 0 -# 71| 7: [Property] Y +# 71| 8: [Property] Y # 71| -1: [TypeMention] int # 73| 3: [Getter] get_Y # 73| 4: [BlockStmt] {...} @@ -116,7 +116,7 @@ properties.cs: # 74| 0: [AssignExpr] ... = ... # 74| 0: [FieldAccess] access to field y # 74| 1: [ParameterAccess] access to parameter value -# 76| 8: [Property] Z +# 76| 9: [Property] Z # 76| -1: [TypeMention] int # 76| 3: [Getter] get_Z # 76| 4: [Setter] set_Z @@ -125,9 +125,9 @@ properties.cs: # 79| 6: [Class] B #-----| 3: (Base types) # 79| 0: [TypeMention] A -# 81| 5: [Field] z +# 81| 6: [Field] z # 81| -1: [TypeMention] int -# 82| 6: [Property] X +# 82| 7: [Property] X # 82| -1: [TypeMention] int # 82| 3: [Getter] get_X # 82| 4: [BlockStmt] {...} @@ -136,7 +136,7 @@ properties.cs: # 82| 0: [PropertyCall] access to property X # 82| -1: [BaseAccess] base access # 82| 1: [IntLiteral] 1 -# 83| 7: [Property] Y +# 83| 8: [Property] Y # 83| -1: [TypeMention] int # 83| 3: [Setter] set_Y #-----| 2: (Parameters) @@ -152,7 +152,7 @@ properties.cs: # 83| 1: [IntLiteral] 0 # 83| 1: [IntLiteral] 0 # 83| 2: [ParameterAccess] access to parameter value -# 84| 8: [Property] Z +# 84| 9: [Property] Z # 84| -1: [TypeMention] int # 86| 3: [Getter] get_Z # 86| 4: [BlockStmt] {...} @@ -167,13 +167,13 @@ properties.cs: # 87| 0: [FieldAccess] access to field z # 87| 1: [ParameterAccess] access to parameter value # 91| 7: [Class] Test -# 93| 5: [Property] Init +# 93| 6: [Property] Init # 93| -1: [TypeMention] int # 93| 3: [Setter] set_Init #-----| 2: (Parameters) # 93| 0: [Parameter] value # 93| 4: [BlockStmt] {...} -# 94| 6: [Method] Main +# 94| 7: [Method] Main # 94| -1: [TypeMention] Void # 95| 4: [BlockStmt] {...} # 96| 0: [LocalVariableDeclStmt] ... ...; @@ -211,19 +211,19 @@ properties.cs: # 110| 9: [Class] ImplementsProperties #-----| 3: (Base types) # 110| 1: [TypeMention] InterfaceWithProperties -# 112| 5: [Property] Prop1 +# 112| 6: [Property] Prop1 # 112| -1: [TypeMention] int # 114| 3: [Getter] get_Prop1 # 114| 4: [BlockStmt] {...} # 114| 0: [ReturnStmt] return ...; # 114| 0: [IntLiteral] 0 -# 117| 6: [Property] Prop2 +# 117| 7: [Property] Prop2 # 117| -1: [TypeMention] int # 119| 3: [Setter] set_Prop2 #-----| 2: (Parameters) # 119| 0: [Parameter] value # 119| 4: [BlockStmt] {...} -# 122| 7: [Property] Prop2 +# 122| 8: [Property] Prop2 # 122| -1: [TypeMention] InterfaceWithProperties # 122| -1: [TypeMention] int # 124| 3: [Setter] set_Prop2 diff --git a/csharp/ql/test/library-tests/standalone/brokentypes/brokenTypes.expected b/csharp/ql/test/library-tests/standalone/brokentypes/brokenTypes.expected index bb3acba4f64c..524249492d34 100644 --- a/csharp/ql/test/library-tests/standalone/brokentypes/brokenTypes.expected +++ b/csharp/ql/test/library-tests/standalone/brokentypes/brokenTypes.expected @@ -1,7 +1,15 @@ | BrokenTypes.cs:2:14:2:13 | call to constructor Object | object | ObjectType | +| BrokenTypes.cs:2:14:2:13 | call to method | Void | VoidType | +| BrokenTypes.cs:2:14:2:13 | this access | | UnknownType | | BrokenTypes.cs:5:14:5:16 | call to constructor Object | object | ObjectType | +| BrokenTypes.cs:5:14:5:16 | call to method | Void | VoidType | +| BrokenTypes.cs:5:14:5:16 | this access | var | UnknownType | | BrokenTypes.cs:7:14:7:14 | call to constructor Object | object | ObjectType | +| BrokenTypes.cs:7:14:7:14 | call to method | Void | VoidType | +| BrokenTypes.cs:7:14:7:14 | this access | C | Class | | BrokenTypes.cs:13:14:13:20 | call to constructor Object | object | ObjectType | +| BrokenTypes.cs:13:14:13:20 | call to method | Void | VoidType | +| BrokenTypes.cs:13:14:13:20 | this access | Program | Class | | BrokenTypes.cs:17:11:17:12 | access to local variable x1 | C | Class | | BrokenTypes.cs:17:11:17:22 | C x1 = ... | C | Class | | BrokenTypes.cs:17:16:17:22 | object creation of type C | C | Class | diff --git a/csharp/ql/test/library-tests/standalone/controlflow/cfg.expected b/csharp/ql/test/library-tests/standalone/controlflow/cfg.expected index fab1dec11004..a42a3c662d4f 100644 --- a/csharp/ql/test/library-tests/standalone/controlflow/cfg.expected +++ b/csharp/ql/test/library-tests/standalone/controlflow/cfg.expected @@ -1,6 +1,8 @@ | ControlFlow.cs:3:7:3:9 | call to constructor Object | ControlFlow.cs:3:7:3:9 | {...} | -| ControlFlow.cs:3:7:3:9 | enter Cfg | ControlFlow.cs:3:7:3:9 | call to constructor Object | +| ControlFlow.cs:3:7:3:9 | call to method | ControlFlow.cs:3:7:3:9 | call to constructor Object | +| ControlFlow.cs:3:7:3:9 | enter Cfg | ControlFlow.cs:3:7:3:9 | this access | | ControlFlow.cs:3:7:3:9 | exit Cfg (normal) | ControlFlow.cs:3:7:3:9 | exit Cfg | +| ControlFlow.cs:3:7:3:9 | this access | ControlFlow.cs:3:7:3:9 | call to method | | ControlFlow.cs:3:7:3:9 | {...} | ControlFlow.cs:3:7:3:9 | exit Cfg (normal) | | ControlFlow.cs:5:10:5:10 | enter F | ControlFlow.cs:6:5:11:5 | {...} | | ControlFlow.cs:5:10:5:10 | exit F (normal) | ControlFlow.cs:5:10:5:10 | exit F | diff --git a/csharp/ql/test/library-tests/standalone/errorrecovery/ErrorCalls.expected b/csharp/ql/test/library-tests/standalone/errorrecovery/ErrorCalls.expected index a4a2aa6e7a83..791cd3450e85 100644 --- a/csharp/ql/test/library-tests/standalone/errorrecovery/ErrorCalls.expected +++ b/csharp/ql/test/library-tests/standalone/errorrecovery/ErrorCalls.expected @@ -1,10 +1,15 @@ | errors.cs:13:11:13:12 | errors.cs:13:11:13:12 | call to constructor Object | Object | +| errors.cs:13:11:13:12 | errors.cs:13:11:13:12 | call to method | | | errors.cs:22:31:22:40 | errors.cs:22:31:22:40 | call to method | none | | errors.cs:41:21:41:28 | errors.cs:41:21:41:28 | object creation of type C1 | C1 | | errors.cs:42:13:42:19 | errors.cs:42:13:42:19 | call to method m1 | m1 | | errors.cs:43:13:43:19 | errors.cs:43:13:43:19 | call to method m2 | m2 | | errors.cs:44:13:44:38 | errors.cs:44:13:44:38 | call to method WriteLine | WriteLine | | errors.cs:48:11:48:12 | errors.cs:48:11:48:12 | call to constructor Object | Object | +| errors.cs:48:11:48:12 | errors.cs:48:11:48:12 | call to method | | | errors.cs:51:17:51:25 | errors.cs:51:17:51:25 | object creation of type C2 | none | | errors.cs:65:11:65:12 | errors.cs:65:11:65:12 | call to constructor Object | Object | +| errors.cs:65:11:65:12 | errors.cs:65:11:65:12 | call to method | | | errors.cs:70:11:70:12 | errors.cs:70:11:70:12 | call to constructor Object | Object | +| errors.cs:70:11:70:12 | errors.cs:70:11:70:12 | call to method | | +| errors.cs:79:11:79:12 | errors.cs:79:11:79:12 | call to method | | diff --git a/csharp/ql/test/library-tests/standalone/externalLocationSink/externalLocationSink.expected b/csharp/ql/test/library-tests/standalone/externalLocationSink/externalLocationSink.expected index 8c4346f78328..3f724bc49022 100644 --- a/csharp/ql/test/library-tests/standalone/externalLocationSink/externalLocationSink.expected +++ b/csharp/ql/test/library-tests/standalone/externalLocationSink/externalLocationSink.expected @@ -4,5 +4,6 @@ compilationErrors | standalone.cs:16:12:16:18 | CS0104: 'ILogger' is an ambiguous reference between 'A.ILogger' and 'B.ILogger' | methodCalls +| standalone.cs:14:14:14:14 | call to method | | standalone.cs:20:9:20:21 | call to method | | standalone.cs:25:9:25:33 | call to method | diff --git a/csharp/ql/test/library-tests/statements/PrintAst.expected b/csharp/ql/test/library-tests/statements/PrintAst.expected index 6aea0fa286e4..59af8ce4a2ea 100644 --- a/csharp/ql/test/library-tests/statements/PrintAst.expected +++ b/csharp/ql/test/library-tests/statements/PrintAst.expected @@ -1,6 +1,6 @@ fixed.cs: # 3| [Class] Fixed -# 5| 5: [Method] fixed1 +# 5| 6: [Method] fixed1 # 5| -1: [TypeMention] Void # 6| 4: [BlockStmt] {...} # 7| 0: [LocalVariableDeclStmt] ... ...; @@ -52,7 +52,7 @@ fixed.cs: statements.cs: # 6| [NamespaceDeclaration] namespace ... { ... } # 8| 1: [Class] Class -# 11| 5: [Method] Main +# 11| 6: [Method] Main # 11| -1: [TypeMention] Void # 12| 4: [BlockStmt] {...} # 13| 0: [LabelStmt] block: @@ -60,7 +60,7 @@ statements.cs: # 15| 0: [BlockStmt] {...} # 17| 1: [BlockStmt] {...} # 18| 0: [BlockStmt] {...} -# 24| 6: [Method] MainEmpty +# 24| 7: [Method] MainEmpty # 24| -1: [TypeMention] Void # 25| 4: [BlockStmt] {...} # 26| 0: [LocalVariableDeclStmt] ... ...; @@ -75,7 +75,7 @@ statements.cs: # 28| 4: [IfStmt] if (...) ... # 28| 0: [BoolLiteral] true # 28| 1: [EmptyStmt] ; -# 31| 7: [Method] MainLocalVarDecl +# 31| 8: [Method] MainLocalVarDecl # 31| -1: [TypeMention] Void # 32| 4: [BlockStmt] {...} # 33| 0: [LocalVariableDeclStmt] ... ...; @@ -113,7 +113,7 @@ statements.cs: # 38| -1: [TypeMention] string # 38| 0: [LocalVariableAccess] access to local variable y # 38| 1: [StringLiteralUtf16] "test" -# 41| 8: [Method] MainLocalConstDecl +# 41| 9: [Method] MainLocalConstDecl # 41| -1: [TypeMention] Void # 42| 4: [BlockStmt] {...} # 43| 0: [LocalConstantDeclStmt] const ... ...; @@ -139,7 +139,7 @@ statements.cs: # 45| 1: [LocalVariableAccess] access to local variable r # 45| 1: [CastExpr] (...) ... # 45| 1: [LocalVariableAccess] access to local variable r -# 48| 9: [Method] MainExpr +# 48| 10: [Method] MainExpr # 48| -1: [TypeMention] Void # 49| 4: [BlockStmt] {...} # 50| 0: [LocalVariableDeclStmt] ... ...; @@ -162,7 +162,7 @@ statements.cs: # 54| -1: [TypeAccess] access to type Console # 54| 0: [TypeMention] Console # 54| 0: [LocalVariableAccess] access to local variable i -# 57| 10: [Method] MainIf +# 57| 11: [Method] MainIf # 57| -1: [TypeMention] Void #-----| 2: (Parameters) # 57| 0: [Parameter] args @@ -186,7 +186,7 @@ statements.cs: # 65| -1: [TypeAccess] access to type Console # 65| 0: [TypeMention] Console # 65| 0: [StringLiteralUtf16] "One or more arguments" -# 69| 11: [Method] MainSwitch +# 69| 12: [Method] MainSwitch # 69| -1: [TypeMention] Void #-----| 2: (Parameters) # 69| 0: [Parameter] args @@ -226,7 +226,7 @@ statements.cs: # 81| 1: [CastExpr] (...) ... # 81| 1: [LocalVariableAccess] access to local variable n # 82| 8: [BreakStmt] break; -# 86| 12: [Method] StringSwitch +# 86| 13: [Method] StringSwitch # 86| -1: [TypeMention] int #-----| 2: (Parameters) # 86| 0: [Parameter] foo @@ -270,7 +270,7 @@ statements.cs: # 106| 0: [IntLiteral] 7 # 108| 1: [ReturnStmt] return ...; # 108| 0: [IntLiteral] 7 -# 111| 13: [Method] MainWhile +# 111| 14: [Method] MainWhile # 111| -1: [TypeMention] Void #-----| 2: (Parameters) # 111| 0: [Parameter] args @@ -298,7 +298,7 @@ statements.cs: # 117| 1: [ExprStmt] ...; # 117| 0: [PostIncrExpr] ...++ # 117| 0: [LocalVariableAccess] access to local variable i -# 121| 14: [Method] MainDo +# 121| 15: [Method] MainDo # 121| -1: [TypeMention] Void # 122| 4: [BlockStmt] {...} # 123| 0: [LocalVariableDeclStmt] ... ...; @@ -324,7 +324,7 @@ statements.cs: # 127| -1: [TypeAccess] access to type Console # 127| 0: [TypeMention] Console # 127| 0: [LocalVariableAccess] access to local variable s -# 131| 15: [Method] MainFor +# 131| 16: [Method] MainFor # 131| -1: [TypeMention] Void #-----| 2: (Parameters) # 131| 0: [Parameter] args @@ -350,7 +350,7 @@ statements.cs: # 135| 0: [ArrayAccess] access to array element # 135| -1: [ParameterAccess] access to parameter args # 135| 0: [LocalVariableAccess] access to local variable i -# 139| 16: [Method] MainForeach +# 139| 17: [Method] MainForeach # 139| -1: [TypeMention] Void #-----| 2: (Parameters) # 139| 0: [Parameter] args @@ -367,7 +367,7 @@ statements.cs: # 143| -1: [TypeAccess] access to type Console # 143| 0: [TypeMention] Console # 143| 0: [LocalVariableAccess] access to local variable s -# 147| 17: [Method] MainBreak +# 147| 18: [Method] MainBreak # 147| -1: [TypeMention] Void # 148| 4: [BlockStmt] {...} # 149| 0: [WhileStmt] while (...) ... @@ -390,7 +390,7 @@ statements.cs: # 153| -1: [TypeAccess] access to type Console # 153| 0: [TypeMention] Console # 153| 0: [LocalVariableAccess] access to local variable s -# 157| 18: [Method] MainContinue +# 157| 19: [Method] MainContinue # 157| -1: [TypeMention] Void #-----| 2: (Parameters) # 157| 0: [Parameter] args @@ -423,7 +423,7 @@ statements.cs: # 162| 0: [ArrayAccess] access to array element # 162| -1: [ParameterAccess] access to parameter args # 162| 0: [LocalVariableAccess] access to local variable i -# 166| 19: [Method] MainGoto +# 166| 20: [Method] MainGoto # 166| -1: [TypeMention] Void #-----| 2: (Parameters) # 166| 0: [Parameter] args @@ -452,7 +452,7 @@ statements.cs: # 171| 1: [PropertyCall] access to property Length # 171| -1: [ParameterAccess] access to parameter args # 171| 1: [GotoLabelStmt] goto ...; -# 174| 20: [Method] Add +# 174| 21: [Method] Add # 174| -1: [TypeMention] int #-----| 2: (Parameters) # 174| 0: [Parameter] a @@ -464,7 +464,7 @@ statements.cs: # 176| 0: [AddExpr] ... + ... # 176| 0: [ParameterAccess] access to parameter a # 176| 1: [ParameterAccess] access to parameter b -# 178| 21: [Method] MainReturn +# 178| 22: [Method] MainReturn # 178| -1: [TypeMention] Void # 179| 4: [BlockStmt] {...} # 180| 0: [ExprStmt] ...; @@ -475,7 +475,7 @@ statements.cs: # 180| 0: [IntLiteral] 1 # 180| 1: [IntLiteral] 2 # 181| 1: [ReturnStmt] return ...; -# 184| 22: [Method] Range +# 184| 23: [Method] Range # 184| -1: [TypeMention] IEnumerable # 184| 1: [TypeMention] int #-----| 2: (Parameters) @@ -498,7 +498,7 @@ statements.cs: # 188| 0: [YieldReturnStmt] yield return ...; # 188| 0: [LocalVariableAccess] access to local variable i # 190| 1: [YieldBreakStmt] yield break; -# 192| 23: [Method] MainYield +# 192| 24: [Method] MainYield # 192| -1: [TypeMention] Void # 193| 4: [BlockStmt] {...} # 194| 0: [ForeachStmt] foreach (... ... in ...) ... @@ -514,7 +514,7 @@ statements.cs: # 196| -1: [TypeAccess] access to type Console # 196| 0: [TypeMention] Console # 196| 0: [LocalVariableAccess] access to local variable x -# 200| 24: [Method] Divide +# 200| 25: [Method] Divide # 200| -1: [TypeMention] double #-----| 2: (Parameters) # 200| 0: [Parameter] x @@ -534,7 +534,7 @@ statements.cs: # 203| 0: [DivExpr] ... / ... # 203| 0: [ParameterAccess] access to parameter x # 203| 1: [ParameterAccess] access to parameter y -# 205| 25: [Method] MainTryThrow +# 205| 26: [Method] MainTryThrow # 205| -1: [TypeMention] Void #-----| 2: (Parameters) # 205| 0: [Parameter] args @@ -603,7 +603,7 @@ statements.cs: # 223| -1: [TypeAccess] access to type Console # 223| 0: [TypeMention] Console # 223| 0: [StringLiteralUtf16] "Exception" -# 231| 26: [Method] MainCheckedUnchecked +# 231| 27: [Method] MainCheckedUnchecked # 231| -1: [TypeMention] Void # 232| 4: [BlockStmt] {...} # 233| 0: [LocalVariableDeclStmt] ... ...; @@ -631,10 +631,10 @@ statements.cs: # 240| 0: [AddExpr] ... + ... # 240| 0: [LocalVariableAccess] access to local variable i # 240| 1: [IntLiteral] 1 -# 244| 27: [Class] AccountLock -# 246| 5: [Field] balance +# 244| 28: [Class] AccountLock +# 246| 6: [Field] balance # 246| -1: [TypeMention] decimal -# 247| 6: [Method] Withdraw +# 247| 7: [Method] Withdraw # 247| -1: [TypeMention] Void #-----| 2: (Parameters) # 247| 0: [Parameter] amount @@ -656,7 +656,7 @@ statements.cs: # 255| 0: [AssignSubExpr] ... -= ... # 255| 0: [FieldAccess] access to field balance # 255| 1: [ParameterAccess] access to parameter amount -# 260| 28: [Method] MainUsing +# 260| 29: [Method] MainUsing # 260| -1: [TypeMention] Void # 261| 4: [BlockStmt] {...} # 262| 0: [UsingBlockStmt] using (...) {...} @@ -686,7 +686,7 @@ statements.cs: # 268| 0: [TypeMention] File # 268| 0: [StringLiteralUtf16] "test.txt" # 269| 1: [BlockStmt] {...} -# 273| 29: [Method] MainLabeled +# 273| 30: [Method] MainLabeled # 273| -1: [TypeMention] Void # 274| 4: [BlockStmt] {...} # 275| 0: [GotoLabelStmt] goto ...; @@ -700,11 +700,11 @@ statements.cs: # 278| 0: [AssignExpr] ... = ... # 278| 0: [LocalVariableAccess] access to local variable x # 278| 1: [IntLiteral] 9 -# 281| 30: [Field] lockObject +# 281| 31: [Field] lockObject # 281| -1: [TypeMention] Lock # 281| 1: [ObjectCreation] object creation of type Lock # 281| 0: [TypeMention] Lock -# 283| 31: [Method] LockMethod +# 283| 32: [Method] LockMethod # 283| -1: [TypeMention] Void # 284| 4: [BlockStmt] {...} # 285| 0: [LockStmt] lock (...) {...} diff --git a/csharp/ql/test/library-tests/stringinterpolation/PrintAst.expected b/csharp/ql/test/library-tests/stringinterpolation/PrintAst.expected index 6529f9feed5c..4e975eedd4c0 100644 --- a/csharp/ql/test/library-tests/stringinterpolation/PrintAst.expected +++ b/csharp/ql/test/library-tests/stringinterpolation/PrintAst.expected @@ -1,6 +1,6 @@ StringInterpolation.cs: # 3| [Class] MyStringInterpolationClass -# 6| 5: [Method] M +# 6| 6: [Method] M # 6| -1: [TypeMention] Void # 7| 4: [BlockStmt] {...} # 8| 0: [LocalVariableDeclStmt] ... ...; diff --git a/csharp/ql/test/library-tests/structuralcomparison/structuralComparison.expected b/csharp/ql/test/library-tests/structuralcomparison/structuralComparison.expected index 9d3c935266a9..0f131d8c25cb 100644 --- a/csharp/ql/test/library-tests/structuralcomparison/structuralComparison.expected +++ b/csharp/ql/test/library-tests/structuralcomparison/structuralComparison.expected @@ -52,6 +52,8 @@ same | StructuralComparison.cs:50:18:50:21 | access to property Prop | StructuralComparison.cs:51:18:51:26 | access to property Prop | gvn | StructuralComparison.cs:3:14:3:18 | call to constructor Object | (kind:Expr(79)) | +| StructuralComparison.cs:3:14:3:18 | call to method | ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,)) | +| StructuralComparison.cs:3:14:3:18 | this access | (kind:Expr(12),false,Class) | | StructuralComparison.cs:3:14:3:18 | {...} | (kind:Stmt(1)) | | StructuralComparison.cs:5:26:5:26 | access to field x | (kind:Expr(16),true,x) | | StructuralComparison.cs:5:26:5:26 | this access | (kind:Expr(12)) | @@ -148,8 +150,12 @@ gvn | StructuralComparison.cs:28:15:28:15 | access to field x | (kind:Expr(16),true,x) | | StructuralComparison.cs:28:15:28:15 | this access | (kind:Expr(12),false,Class) | | StructuralComparison.cs:32:14:32:22 | call to constructor Object | (kind:Expr(79)) | +| StructuralComparison.cs:32:14:32:22 | call to method | ((kind:Expr(12),false,BaseClass) :: (kind:Expr(24),false,)) | +| StructuralComparison.cs:32:14:32:22 | this access | (kind:Expr(12),false,BaseClass) | | StructuralComparison.cs:32:14:32:22 | {...} | (kind:Stmt(1)) | | StructuralComparison.cs:38:14:38:25 | call to constructor BaseClass | (kind:Expr(79)) | +| StructuralComparison.cs:38:14:38:25 | call to method | ((kind:Expr(12),false,DerivedClass) :: (kind:Expr(24),false,)) | +| StructuralComparison.cs:38:14:38:25 | this access | (kind:Expr(12),false,DerivedClass) | | StructuralComparison.cs:38:14:38:25 | {...} | (kind:Stmt(1)) | | StructuralComparison.cs:41:5:45:5 | {...} | ((((kind:Expr(14),false,x3) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,x2) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,x1) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (kind:Stmt(1))))) | | StructuralComparison.cs:42:9:42:28 | ... ...; | (((kind:Expr(14),false,x1) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | diff --git a/csharp/ql/test/library-tests/types/PrintAst.expected b/csharp/ql/test/library-tests/types/PrintAst.expected index 47c3c11261bf..c6dc07ab1a56 100644 --- a/csharp/ql/test/library-tests/types/PrintAst.expected +++ b/csharp/ql/test/library-tests/types/PrintAst.expected @@ -1,91 +1,91 @@ types.cs: # 1| [NamespaceDeclaration] namespace ... { ... } # 3| 1: [Class] Class -# 5| 5: [Method] BoolType +# 5| 6: [Method] BoolType # 5| -1: [TypeMention] bool -# 6| 6: [Method] CharType +# 6| 7: [Method] CharType # 6| -1: [TypeMention] char -# 7| 7: [Method] DecimalType +# 7| 8: [Method] DecimalType # 7| -1: [TypeMention] decimal -# 8| 8: [Method] SByteType +# 8| 9: [Method] SByteType # 8| -1: [TypeMention] sbyte -# 9| 9: [Method] ShortType +# 9| 10: [Method] ShortType # 9| -1: [TypeMention] short -# 10| 10: [Method] IntType +# 10| 11: [Method] IntType # 10| -1: [TypeMention] int -# 11| 11: [Method] LongType +# 11| 12: [Method] LongType # 11| -1: [TypeMention] long -# 12| 12: [Method] ByteType +# 12| 13: [Method] ByteType # 12| -1: [TypeMention] byte -# 13| 13: [Method] UShortType +# 13| 14: [Method] UShortType # 13| -1: [TypeMention] ushort -# 14| 14: [Method] UIntType +# 14| 15: [Method] UIntType # 14| -1: [TypeMention] uint -# 15| 15: [Method] ULongType +# 15| 16: [Method] ULongType # 15| -1: [TypeMention] ulong -# 16| 16: [Method] FloatType +# 16| 17: [Method] FloatType # 16| -1: [TypeMention] float -# 17| 17: [Method] DoubleType +# 17| 18: [Method] DoubleType # 17| -1: [TypeMention] double -# 18| 18: [Method] NullableType +# 18| 19: [Method] NullableType # 18| -1: [TypeMention] Struct? # 18| 1: [TypeMention] Struct -# 19| 19: [Method] VoidType +# 19| 20: [Method] VoidType # 19| -1: [TypeMention] Void -# 20| 20: [Method] ArrayType +# 20| 21: [Method] ArrayType # 20| -1: [TypeMention] Class[] # 20| 1: [TypeMention] Class -# 21| 21: [Method] ArrayArrayType +# 21| 22: [Method] ArrayArrayType # 21| -1: [TypeMention] Class[][] # 21| 1: [TypeMention] Class -# 22| 22: [Method] ConstructedClassType +# 22| 23: [Method] ConstructedClassType # 22| -1: [TypeMention] GenericClass # 22| 1: [TypeMention] Class -# 23| 23: [Method] ConstructedInterfaceType +# 23| 24: [Method] ConstructedInterfaceType # 23| -1: [TypeMention] GenericInterface # 23| 1: [TypeMention] Class -# 24| 24: [Method] ConstructedStructType +# 24| 25: [Method] ConstructedStructType # 24| -1: [TypeMention] GenericStruct # 24| 1: [TypeMention] Class -# 25| 25: [Method] DelegateType +# 25| 26: [Method] DelegateType # 25| -1: [TypeMention] Delegate -# 26| 26: [Method] PointerType +# 26| 27: [Method] PointerType # 26| -1: [TypeMention] byte* # 26| 1: [TypeMention] byte -# 27| 27: [Method] PointerPointerType +# 27| 28: [Method] PointerPointerType # 27| -1: [TypeMention] byte** # 27| 1: [TypeMention] byte -# 28| 28: [Method] PointerArrayArrayType +# 28| 29: [Method] PointerArrayArrayType # 28| -1: [TypeMention] Byte*[][] # 28| 1: [TypeMention] byte -# 29| 29: [Method] NullableArrayType +# 29| 30: [Method] NullableArrayType # 29| -1: [TypeMention] Nullable[] # 29| 1: [TypeMention] byte? # 29| 1: [TypeMention] byte -# 30| 30: [Method] NullableArrayArrayType +# 30| 31: [Method] NullableArrayArrayType # 30| -1: [TypeMention] Nullable[][] # 30| 1: [TypeMention] byte? # 30| 1: [TypeMention] byte -# 32| 31: [Method] ArrayNullArrayType1 +# 32| 32: [Method] ArrayNullArrayType1 # 32| -1: [TypeMention] Byte[][] # 32| 1: [TypeMention] byte -# 33| 32: [Method] ArrayNullArrayType2 +# 33| 33: [Method] ArrayNullArrayType2 # 33| -1: [TypeMention] Object[][] # 33| 1: [TypeMention] object -# 34| 33: [Method] ArrayNullableRefType +# 34| 34: [Method] ArrayNullableRefType # 34| -1: [TypeMention] Object[] # 34| 1: [TypeMention] object -# 35| 34: [Method] NullableRefType +# 35| 35: [Method] NullableRefType # 35| -1: [TypeMention] object -# 37| 35: [Method] NullableArrayArrayType2 +# 37| 36: [Method] NullableArrayArrayType2 # 37| -1: [TypeMention] Nullable[][] # 37| 1: [TypeMention] byte? # 37| 1: [TypeMention] byte -# 38| 36: [Method] Map +# 38| 37: [Method] Map # 38| -1: [TypeMention] Map # 38| 1: [TypeMention] string # 38| 2: [TypeMention] Class -# 39| 37: [Method] Null +# 39| 38: [Method] Null # 39| -1: [TypeMention] Class # 40| 4: [BlockStmt] {...} # 41| 0: [ReturnStmt] return ...; @@ -112,21 +112,21 @@ types.cs: # 59| 1: [DefaultAttribute] [InlineArray(...)] # 59| -1: [TypeMention] InlineArrayAttribute # 59| 0: [IntLiteral] 10 -# 62| 5: [Field] myInlineArrayElements +# 62| 6: [Field] myInlineArrayElements # 62| -1: [TypeMention] int # 66| 11: [InlineArrayType] MyMultiDimensionalInlineArray #-----| 0: (Attributes) # 65| 1: [DefaultAttribute] [InlineArray(...)] # 65| -1: [TypeMention] InlineArrayAttribute # 65| 0: [IntLiteral] 5 -# 68| 5: [Field] myMultiDimentionalInlineArrayElements +# 68| 6: [Field] myMultiDimentionalInlineArrayElements # 68| -1: [TypeMention] MyInlineArray # 72| 12: [InlineArrayType] MyMultiDimensionalInlineArray2 #-----| 0: (Attributes) # 71| 1: [DefaultAttribute] [InlineArray(...)] # 71| -1: [TypeMention] InlineArrayAttribute # 71| 0: [IntLiteral] 7 -# 74| 5: [Field] myMultiDimentionalInlineArrayElements +# 74| 6: [Field] myMultiDimentionalInlineArrayElements # 74| -1: [TypeMention] String[] # 74| 1: [TypeMention] string # 78| 13: [InlineArrayType] MyMultiDimensionalInlineArray3 @@ -134,7 +134,7 @@ types.cs: # 77| 1: [DefaultAttribute] [InlineArray(...)] # 77| -1: [TypeMention] InlineArrayAttribute # 77| 0: [IntLiteral] 4 -# 80| 5: [Field] myMultiDimentionalInlineArrayElements +# 80| 6: [Field] myMultiDimentionalInlineArrayElements # 80| -1: [TypeMention] Object[,] # 80| 1: [TypeMention] object # 84| 14: [InlineArrayType] MyMultiDimensionalInlineArray4 @@ -142,6 +142,6 @@ types.cs: # 83| 1: [DefaultAttribute] [InlineArray(...)] # 83| -1: [TypeMention] InlineArrayAttribute # 83| 0: [IntLiteral] 11 -# 86| 5: [Field] myMultiDimentionalInlineArrayElements +# 86| 6: [Field] myMultiDimentionalInlineArrayElements # 86| -1: [TypeMention] Object[][] # 86| 1: [TypeMention] object diff --git a/csharp/ql/test/library-tests/unsafe/PrintAst.expected b/csharp/ql/test/library-tests/unsafe/PrintAst.expected index d18e3b330724..76e1387cb762 100644 --- a/csharp/ql/test/library-tests/unsafe/PrintAst.expected +++ b/csharp/ql/test/library-tests/unsafe/PrintAst.expected @@ -1,7 +1,7 @@ unsafe.cs: # 1| [NamespaceDeclaration] namespace ... { ... } # 3| 1: [Class] Test -# 5| 5: [Method] Main +# 5| 6: [Method] Main # 5| -1: [TypeMention] Void #-----| 2: (Parameters) # 5| 0: [Parameter] args @@ -93,7 +93,7 @@ unsafe.cs: # 19| 1: [SubExpr] ... - ... # 19| 0: [LocalVariableAccess] access to local variable ip # 19| 1: [LocalVariableAccess] access to local variable ip42 -# 22| 6: [Method] f +# 22| 7: [Method] f # 22| -1: [TypeMention] Void #-----| 2: (Parameters) # 22| 0: [Parameter] p @@ -114,10 +114,10 @@ unsafe.cs: # 26| 0: [AddExpr] ... + ... # 26| 0: [ParameterAccess] access to parameter p # 26| 1: [IntLiteral] 0 -# 30| 7: [Method] g +# 30| 8: [Method] g # 30| -1: [TypeMention] Void # 30| 4: [BlockStmt] {...} -# 32| 8: [Method] h +# 32| 9: [Method] h # 32| -1: [TypeMention] Void # 33| 4: [BlockStmt] {...} # 34| 0: [UnsafeStmt] unsafe {...} diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected index 238cbd0bc3ba..9d54fb1cdd78 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected @@ -17,6 +17,9 @@ | SqlInjectionDapper.cs:58:42:58:46 | access to local variable query | SqlInjectionDapper.cs:57:86:57:94 | access to property Text : String | SqlInjectionDapper.cs:58:42:58:46 | access to local variable query | This query depends on $@. | SqlInjectionDapper.cs:57:86:57:94 | access to property Text : String | this TextBox text | | SqlInjectionDapper.cs:67:42:67:46 | access to local variable query | SqlInjectionDapper.cs:66:86:66:94 | access to property Text : String | SqlInjectionDapper.cs:67:42:67:46 | access to local variable query | This query depends on $@. | SqlInjectionDapper.cs:66:86:66:94 | access to property Text : String | this TextBox text | | SqlInjectionDapper.cs:77:52:77:56 | access to local variable query | SqlInjectionDapper.cs:75:86:75:94 | access to property Text : String | SqlInjectionDapper.cs:77:52:77:56 | access to local variable query | This query depends on $@. | SqlInjectionDapper.cs:75:86:75:94 | access to property Text : String | this TextBox text | +| SqlInjectionNHibernate.cs:17:36:17:53 | access to property Text | SqlInjectionNHibernate.cs:17:36:17:48 | access to field untrustedData : TextBox | SqlInjectionNHibernate.cs:17:36:17:53 | access to property Text | This query depends on $@. | SqlInjectionNHibernate.cs:17:36:17:48 | access to field untrustedData : TextBox | this ASP.NET user input | +| SqlInjectionNHibernate.cs:19:45:19:62 | access to property Text | SqlInjectionNHibernate.cs:19:45:19:57 | access to field untrustedData : TextBox | SqlInjectionNHibernate.cs:19:45:19:62 | access to property Text | This query depends on $@. | SqlInjectionNHibernate.cs:19:45:19:57 | access to field untrustedData : TextBox | this ASP.NET user input | +| SqlInjectionNHibernate.cs:21:33:21:50 | access to property Text | SqlInjectionNHibernate.cs:21:33:21:45 | access to field untrustedData : TextBox | SqlInjectionNHibernate.cs:21:33:21:50 | access to property Text | This query depends on $@. | SqlInjectionNHibernate.cs:21:33:21:45 | access to field untrustedData : TextBox | this ASP.NET user input | | SqlInjectionSqlite.cs:19:51:19:68 | access to property Text | SqlInjectionSqlite.cs:19:51:19:63 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:19:51:19:68 | access to property Text | This query depends on $@. | SqlInjectionSqlite.cs:19:51:19:63 | access to field untrustedData : TextBox | this ASP.NET user input | | SqlInjectionSqlite.cs:24:41:24:58 | access to property Text | SqlInjectionSqlite.cs:24:41:24:53 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:24:41:24:58 | access to property Text | This query depends on $@. | SqlInjectionSqlite.cs:24:41:24:53 | access to field untrustedData : TextBox | this ASP.NET user input | | SqlInjectionSqlite.cs:33:49:33:66 | access to property Text | SqlInjectionSqlite.cs:33:49:33:61 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:33:49:33:66 | access to property Text | This query depends on $@. | SqlInjectionSqlite.cs:33:49:33:61 | access to field untrustedData : TextBox | this ASP.NET user input | @@ -27,43 +30,43 @@ edges | SecondOrderSqlInjection.cs:20:31:20:44 | access to local variable customerReader : SqlDataReader | SecondOrderSqlInjection.cs:25:119:25:132 | access to local variable customerReader : SqlDataReader | provenance | | | SecondOrderSqlInjection.cs:20:48:20:78 | call to method ExecuteReader : SqlDataReader | SecondOrderSqlInjection.cs:20:31:20:44 | access to local variable customerReader : SqlDataReader | provenance | | -| SecondOrderSqlInjection.cs:25:119:25:132 | access to local variable customerReader : SqlDataReader | SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | provenance | MaD:23 | -| SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | provenance | Sink:MaD:15 | +| SecondOrderSqlInjection.cs:25:119:25:132 | access to local variable customerReader : SqlDataReader | SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | provenance | MaD:26 | +| SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | provenance | Sink:MaD:18 | | SecondOrderSqlInjection.cs:33:31:33:32 | access to local variable fs : FileStream | SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | provenance | | -| SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | SecondOrderSqlInjection.cs:33:31:33:32 | access to local variable fs : FileStream | provenance | Src:MaD:19 | -| SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | SecondOrderSqlInjection.cs:33:31:33:32 | access to local variable fs : FileStream | provenance | Src:MaD:18 | +| SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | SecondOrderSqlInjection.cs:33:31:33:32 | access to local variable fs : FileStream | provenance | Src:MaD:22 | +| SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | SecondOrderSqlInjection.cs:33:31:33:32 | access to local variable fs : FileStream | provenance | Src:MaD:21 | | SecondOrderSqlInjection.cs:35:37:35:38 | access to local variable sr : StreamReader | SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | provenance | | | SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | SecondOrderSqlInjection.cs:35:37:35:38 | access to local variable sr : StreamReader | provenance | | -| SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | provenance | MaD:25 | +| SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | provenance | MaD:28 | | SecondOrderSqlInjection.cs:38:29:38:31 | access to local variable sql : String | SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | provenance | | -| SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | provenance | MaD:26 | +| SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | provenance | MaD:29 | | SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | SecondOrderSqlInjection.cs:38:29:38:31 | access to local variable sql : String | provenance | | -| SecondOrderSqlInjection.cs:40:25:40:27 | access to local variable sql : String | SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | provenance | Sink:MaD:10 | -| SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | provenance | MaD:28 | +| SecondOrderSqlInjection.cs:40:25:40:27 | access to local variable sql : String | SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | provenance | Sink:MaD:13 | +| SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | provenance | MaD:31 | | SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | SecondOrderSqlInjection.cs:40:25:40:27 | access to local variable sql : String | provenance | | -| SqlInjection.cs:37:21:37:26 | access to local variable query1 : String | SqlInjection.cs:39:50:39:55 | access to local variable query1 | provenance | Sink:MaD:17 | -| SqlInjection.cs:38:21:38:35 | access to field categoryTextBox : TextBox | SqlInjection.cs:38:21:38:40 | access to property Text : String | provenance | MaD:27 | +| SqlInjection.cs:37:21:37:26 | access to local variable query1 : String | SqlInjection.cs:39:50:39:55 | access to local variable query1 | provenance | Sink:MaD:20 | +| SqlInjection.cs:38:21:38:35 | access to field categoryTextBox : TextBox | SqlInjection.cs:38:21:38:40 | access to property Text : String | provenance | MaD:30 | | SqlInjection.cs:38:21:38:40 | access to property Text : String | SqlInjection.cs:37:21:37:26 | access to local variable query1 : String | provenance | | -| SqlInjection.cs:72:25:72:30 | access to local variable query1 : String | SqlInjection.cs:74:56:74:61 | access to local variable query1 | provenance | Sink:MaD:7 | -| SqlInjection.cs:72:25:72:30 | access to local variable query1 : String | SqlInjection.cs:75:55:75:60 | access to local variable query1 | provenance | Sink:MaD:8 | -| SqlInjection.cs:73:33:73:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:73:33:73:52 | access to property Text : String | provenance | MaD:27 | +| SqlInjection.cs:72:25:72:30 | access to local variable query1 : String | SqlInjection.cs:74:56:74:61 | access to local variable query1 | provenance | Sink:MaD:10 | +| SqlInjection.cs:72:25:72:30 | access to local variable query1 : String | SqlInjection.cs:75:55:75:60 | access to local variable query1 | provenance | Sink:MaD:11 | +| SqlInjection.cs:73:33:73:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:73:33:73:52 | access to property Text : String | provenance | MaD:30 | | SqlInjection.cs:73:33:73:52 | access to property Text : String | SqlInjection.cs:72:25:72:30 | access to local variable query1 : String | provenance | | -| SqlInjection.cs:86:21:86:26 | access to local variable query1 : String | SqlInjection.cs:88:50:88:55 | access to local variable query1 | provenance | Sink:MaD:17 | +| SqlInjection.cs:86:21:86:26 | access to local variable query1 : String | SqlInjection.cs:88:50:88:55 | access to local variable query1 | provenance | Sink:MaD:20 | | SqlInjection.cs:87:21:87:29 | access to property Text : String | SqlInjection.cs:86:21:86:26 | access to local variable query1 : String | provenance | | -| SqlInjection.cs:96:21:96:31 | access to local variable queryString : String | SqlInjection.cs:98:42:98:52 | access to local variable queryString | provenance | Sink:MaD:14 | +| SqlInjection.cs:96:21:96:31 | access to local variable queryString : String | SqlInjection.cs:98:42:98:52 | access to local variable queryString | provenance | Sink:MaD:17 | | SqlInjection.cs:96:21:96:31 | access to local variable queryString : String | SqlInjection.cs:98:42:98:52 | access to local variable queryString : String | provenance | | | SqlInjection.cs:97:21:97:29 | access to property Text : String | SqlInjection.cs:96:21:96:31 | access to local variable queryString : String | provenance | | -| SqlInjection.cs:98:21:98:23 | access to local variable cmd : SqlCommand | SqlInjection.cs:99:50:99:52 | access to local variable cmd | provenance | Sink:MaD:16 | +| SqlInjection.cs:98:21:98:23 | access to local variable cmd : SqlCommand | SqlInjection.cs:99:50:99:52 | access to local variable cmd | provenance | Sink:MaD:19 | | SqlInjection.cs:98:27:98:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:98:21:98:23 | access to local variable cmd : SqlCommand | provenance | | -| SqlInjection.cs:98:42:98:52 | access to local variable queryString : String | SqlInjection.cs:98:27:98:53 | object creation of type SqlCommand : SqlCommand | provenance | MaD:22 | -| SqlInjection.cs:107:21:107:31 | access to local variable queryString : String | SqlInjection.cs:109:42:109:52 | access to local variable queryString | provenance | Sink:MaD:14 | +| SqlInjection.cs:98:42:98:52 | access to local variable queryString : String | SqlInjection.cs:98:27:98:53 | object creation of type SqlCommand : SqlCommand | provenance | MaD:25 | +| SqlInjection.cs:107:21:107:31 | access to local variable queryString : String | SqlInjection.cs:109:42:109:52 | access to local variable queryString | provenance | Sink:MaD:17 | | SqlInjection.cs:107:21:107:31 | access to local variable queryString : String | SqlInjection.cs:109:42:109:52 | access to local variable queryString : String | provenance | | -| SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | SqlInjection.cs:107:21:107:31 | access to local variable queryString : String | provenance | Src:MaD:20 | -| SqlInjection.cs:109:21:109:23 | access to local variable cmd : SqlCommand | SqlInjection.cs:110:50:110:52 | access to local variable cmd | provenance | Sink:MaD:16 | +| SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | SqlInjection.cs:107:21:107:31 | access to local variable queryString : String | provenance | Src:MaD:23 | +| SqlInjection.cs:109:21:109:23 | access to local variable cmd : SqlCommand | SqlInjection.cs:110:50:110:52 | access to local variable cmd | provenance | Sink:MaD:19 | | SqlInjection.cs:109:27:109:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:109:21:109:23 | access to local variable cmd : SqlCommand | provenance | | -| SqlInjection.cs:109:42:109:52 | access to local variable queryString : String | SqlInjection.cs:109:27:109:53 | object creation of type SqlCommand : SqlCommand | provenance | MaD:22 | +| SqlInjection.cs:109:42:109:52 | access to local variable queryString : String | SqlInjection.cs:109:27:109:53 | object creation of type SqlCommand : SqlCommand | provenance | MaD:25 | | SqlInjection.cs:122:73:122:78 | userId : String | SqlInjection.cs:125:20:125:24 | access to local variable query : String | provenance | | -| SqlInjection.cs:125:20:125:24 | access to local variable query : String | SqlInjection.cs:129:53:129:57 | access to local variable query | provenance | Sink:MaD:15 | +| SqlInjection.cs:125:20:125:24 | access to local variable query : String | SqlInjection.cs:129:53:129:57 | access to local variable query | provenance | Sink:MaD:18 | | SqlInjectionDapper.cs:20:21:20:25 | access to local variable query : String | SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | provenance | Sink:MaD:4 | | SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | SqlInjectionDapper.cs:20:21:20:25 | access to local variable query : String | provenance | | | SqlInjectionDapper.cs:29:21:29:25 | access to local variable query : String | SqlInjectionDapper.cs:30:66:30:70 | access to local variable query | provenance | Sink:MaD:5 | @@ -78,27 +81,36 @@ edges | SqlInjectionDapper.cs:66:86:66:94 | access to property Text : String | SqlInjectionDapper.cs:66:21:66:25 | access to local variable query : String | provenance | | | SqlInjectionDapper.cs:75:21:75:25 | access to local variable query : String | SqlInjectionDapper.cs:77:52:77:56 | access to local variable query | provenance | | | SqlInjectionDapper.cs:75:86:75:94 | access to property Text : String | SqlInjectionDapper.cs:75:21:75:25 | access to local variable query : String | provenance | | -| SqlInjectionSqlite.cs:19:51:19:63 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:19:51:19:68 | access to property Text | provenance | MaD:27 Sink:MaD:9 | -| SqlInjectionSqlite.cs:24:17:24:19 | access to local variable cmd : SQLiteCommand | SqlInjectionSqlite.cs:44:45:44:47 | access to local variable cmd | provenance | Sink:MaD:11 | +| SqlInjectionNHibernate.cs:17:36:17:48 | access to field untrustedData : TextBox | SqlInjectionNHibernate.cs:17:36:17:53 | access to property Text | provenance | MaD:30 Sink:MaD:8 | +| SqlInjectionNHibernate.cs:17:36:17:48 | access to field untrustedData : TextBox | SqlInjectionNHibernate.cs:17:36:17:53 | access to property Text | provenance | MaD:30 Sink:MaD:9 | +| SqlInjectionNHibernate.cs:17:36:17:48 | access to field untrustedData : TextBox | SqlInjectionNHibernate.cs:17:36:17:53 | access to property Text | provenance | MaD:30 Sink:MaD:7 | +| SqlInjectionNHibernate.cs:19:45:19:57 | access to field untrustedData : TextBox | SqlInjectionNHibernate.cs:19:45:19:62 | access to property Text | provenance | MaD:30 Sink:MaD:8 | +| SqlInjectionNHibernate.cs:19:45:19:57 | access to field untrustedData : TextBox | SqlInjectionNHibernate.cs:19:45:19:62 | access to property Text | provenance | MaD:30 Sink:MaD:9 | +| SqlInjectionNHibernate.cs:19:45:19:57 | access to field untrustedData : TextBox | SqlInjectionNHibernate.cs:19:45:19:62 | access to property Text | provenance | MaD:30 Sink:MaD:7 | +| SqlInjectionNHibernate.cs:21:33:21:45 | access to field untrustedData : TextBox | SqlInjectionNHibernate.cs:21:33:21:50 | access to property Text | provenance | MaD:30 Sink:MaD:8 | +| SqlInjectionNHibernate.cs:21:33:21:45 | access to field untrustedData : TextBox | SqlInjectionNHibernate.cs:21:33:21:50 | access to property Text | provenance | MaD:30 Sink:MaD:9 | +| SqlInjectionNHibernate.cs:21:33:21:45 | access to field untrustedData : TextBox | SqlInjectionNHibernate.cs:21:33:21:50 | access to property Text | provenance | MaD:30 Sink:MaD:7 | +| SqlInjectionSqlite.cs:19:51:19:63 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:19:51:19:68 | access to property Text | provenance | MaD:30 Sink:MaD:12 | +| SqlInjectionSqlite.cs:24:17:24:19 | access to local variable cmd : SQLiteCommand | SqlInjectionSqlite.cs:44:45:44:47 | access to local variable cmd | provenance | Sink:MaD:14 | | SqlInjectionSqlite.cs:24:23:24:71 | object creation of type SQLiteCommand : SQLiteCommand | SqlInjectionSqlite.cs:24:17:24:19 | access to local variable cmd : SQLiteCommand | provenance | | -| SqlInjectionSqlite.cs:24:41:24:53 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:24:41:24:58 | access to property Text | provenance | MaD:27 Sink:MaD:10 | -| SqlInjectionSqlite.cs:24:41:24:53 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:24:41:24:58 | access to property Text : String | provenance | MaD:27 | -| SqlInjectionSqlite.cs:24:41:24:58 | access to property Text : String | SqlInjectionSqlite.cs:24:23:24:71 | object creation of type SQLiteCommand : SQLiteCommand | provenance | MaD:21 | -| SqlInjectionSqlite.cs:33:49:33:61 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:33:49:33:66 | access to property Text | provenance | MaD:27 Sink:MaD:12 | -| SqlInjectionSqlite.cs:39:45:39:57 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:39:45:39:62 | access to property Text | provenance | MaD:27 Sink:MaD:13 | +| SqlInjectionSqlite.cs:24:41:24:53 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:24:41:24:58 | access to property Text | provenance | MaD:30 Sink:MaD:13 | +| SqlInjectionSqlite.cs:24:41:24:53 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:24:41:24:58 | access to property Text : String | provenance | MaD:30 | +| SqlInjectionSqlite.cs:24:41:24:58 | access to property Text : String | SqlInjectionSqlite.cs:24:23:24:71 | object creation of type SQLiteCommand : SQLiteCommand | provenance | MaD:24 | +| SqlInjectionSqlite.cs:33:49:33:61 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:33:49:33:66 | access to property Text | provenance | MaD:30 Sink:MaD:15 | +| SqlInjectionSqlite.cs:39:45:39:57 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:39:45:39:62 | access to property Text | provenance | MaD:30 Sink:MaD:16 | | SqlInjectionSqlite.cs:49:31:49:32 | access to local variable fs : FileStream | SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | provenance | | -| SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | SqlInjectionSqlite.cs:49:31:49:32 | access to local variable fs : FileStream | provenance | Src:MaD:19 | -| SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | SqlInjectionSqlite.cs:49:31:49:32 | access to local variable fs : FileStream | provenance | Src:MaD:18 | -| SqlInjectionSqlite.cs:49:51:49:63 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:49:51:49:68 | access to property Text : String | provenance | MaD:27 | -| SqlInjectionSqlite.cs:49:51:49:68 | access to property Text : String | SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | provenance | MaD:24 | +| SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | SqlInjectionSqlite.cs:49:31:49:32 | access to local variable fs : FileStream | provenance | Src:MaD:22 | +| SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | SqlInjectionSqlite.cs:49:31:49:32 | access to local variable fs : FileStream | provenance | Src:MaD:21 | +| SqlInjectionSqlite.cs:49:51:49:63 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:49:51:49:68 | access to property Text : String | provenance | MaD:30 | +| SqlInjectionSqlite.cs:49:51:49:68 | access to property Text : String | SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | provenance | MaD:27 | | SqlInjectionSqlite.cs:51:37:51:38 | access to local variable sr : StreamReader | SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | provenance | | | SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | SqlInjectionSqlite.cs:51:37:51:38 | access to local variable sr : StreamReader | provenance | | -| SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | provenance | MaD:25 | +| SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | provenance | MaD:28 | | SqlInjectionSqlite.cs:54:29:54:31 | access to local variable sql : String | SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | provenance | | -| SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | provenance | MaD:26 | +| SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | provenance | MaD:29 | | SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | SqlInjectionSqlite.cs:54:29:54:31 | access to local variable sql : String | provenance | | -| SqlInjectionSqlite.cs:56:25:56:27 | access to local variable sql : String | SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | provenance | Sink:MaD:10 | -| SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | provenance | MaD:28 | +| SqlInjectionSqlite.cs:56:25:56:27 | access to local variable sql : String | SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | provenance | Sink:MaD:13 | +| SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | provenance | MaD:31 | | SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | SqlInjectionSqlite.cs:56:25:56:27 | access to local variable sql : String | provenance | | models | 1 | Sink: Dapper; SqlMapper; false; ExecuteAsync; (System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable); ; Argument[1]; sql-injection; manual | @@ -107,28 +119,31 @@ models | 4 | Sink: Dapper; SqlMapper; false; Query; (System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable); ; Argument[1]; sql-injection; manual | | 5 | Sink: Dapper; SqlMapper; false; QueryAsync; (System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable); ; Argument[1]; sql-injection; manual | | 6 | Sink: Dapper; SqlMapper; false; QueryFirstAsync; (System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable); ; Argument[1]; sql-injection; manual | -| 7 | Sink: System.Data.Entity; Database; false; ExecuteSqlCommand; (System.String,System.Object[]); ; Argument[0]; sql-injection; manual | -| 8 | Sink: System.Data.Entity; Database; false; SqlQuery; (System.String,System.Object[]); ; Argument[0]; sql-injection; manual | -| 9 | Sink: System.Data.SQLite; SQLiteCommand; false; SQLiteCommand; (System.String); ; Argument[0]; sql-injection; manual | -| 10 | Sink: System.Data.SQLite; SQLiteCommand; false; SQLiteCommand; (System.String,System.Data.SQLite.SQLiteConnection); ; Argument[0]; sql-injection; manual | -| 11 | Sink: System.Data.SQLite; SQLiteDataAdapter; false; SQLiteDataAdapter; (System.Data.SQLite.SQLiteCommand); ; Argument[0]; sql-injection; manual | -| 12 | Sink: System.Data.SQLite; SQLiteDataAdapter; false; SQLiteDataAdapter; (System.String,System.Data.SQLite.SQLiteConnection); ; Argument[0]; sql-injection; manual | -| 13 | Sink: System.Data.SQLite; SQLiteDataAdapter; false; SQLiteDataAdapter; (System.String,System.String); ; Argument[0]; sql-injection; manual | -| 14 | Sink: System.Data.SqlClient; SqlCommand; false; SqlCommand; (System.String); ; Argument[0]; sql-injection; manual | -| 15 | Sink: System.Data.SqlClient; SqlCommand; false; SqlCommand; (System.String,System.Data.SqlClient.SqlConnection); ; Argument[0]; sql-injection; manual | -| 16 | Sink: System.Data.SqlClient; SqlDataAdapter; false; SqlDataAdapter; (System.Data.SqlClient.SqlCommand); ; Argument[0]; sql-injection; manual | -| 17 | Sink: System.Data.SqlClient; SqlDataAdapter; false; SqlDataAdapter; (System.String,System.Data.SqlClient.SqlConnection); ; Argument[0]; sql-injection; manual | -| 18 | Source: System.IO; FileStream; false; FileStream; ; ; Argument[this]; file-write; manual | -| 19 | Source: System.IO; FileStream; false; FileStream; ; ; Argument[this]; file; manual | -| 20 | Source: System; Console; false; ReadLine; ; ; ReturnValue; stdin; manual | -| 21 | Summary: System.Data.SQLite; SQLiteCommand; false; SQLiteCommand; (System.String,System.Data.SQLite.SQLiteConnection); ; Argument[0]; Argument[this]; taint; manual | -| 22 | Summary: System.Data.SqlClient; SqlCommand; false; SqlCommand; (System.String); ; Argument[0]; Argument[this]; taint; manual | -| 23 | Summary: System.Data; IDataRecord; true; GetString; (System.Int32); ; Argument[this]; ReturnValue; taint; manual | -| 24 | Summary: System.IO; FileStream; false; FileStream; (System.String,System.IO.FileMode); ; Argument[0]; Argument[this]; taint; manual | -| 25 | Summary: System.IO; StreamReader; false; StreamReader; (System.IO.Stream,System.Text.Encoding); ; Argument[0]; Argument[this]; taint; manual | -| 26 | Summary: System.IO; TextReader; true; ReadLine; (); ; Argument[this]; ReturnValue; taint; manual | -| 27 | Summary: System.Web.UI.WebControls; TextBox; false; get_Text; (); ; Argument[this]; ReturnValue; taint; manual | -| 28 | Summary: System; String; false; Trim; (); ; Argument[this]; ReturnValue; taint; manual | +| 7 | Sink: NHibernate.Impl; AbstractSessionImpl; true; CreateSQLQuery; (System.String); ; Argument[0]; sql-injection; manual | +| 8 | Sink: NHibernate; ISession; true; CreateSQLQuery; (System.String); ; Argument[0]; sql-injection; manual | +| 9 | Sink: NHibernate; IStatelessSession; true; CreateSQLQuery; (System.String); ; Argument[0]; sql-injection; manual | +| 10 | Sink: System.Data.Entity; Database; false; ExecuteSqlCommand; (System.String,System.Object[]); ; Argument[0]; sql-injection; manual | +| 11 | Sink: System.Data.Entity; Database; false; SqlQuery; (System.String,System.Object[]); ; Argument[0]; sql-injection; manual | +| 12 | Sink: System.Data.SQLite; SQLiteCommand; false; SQLiteCommand; (System.String); ; Argument[0]; sql-injection; manual | +| 13 | Sink: System.Data.SQLite; SQLiteCommand; false; SQLiteCommand; (System.String,System.Data.SQLite.SQLiteConnection); ; Argument[0]; sql-injection; manual | +| 14 | Sink: System.Data.SQLite; SQLiteDataAdapter; false; SQLiteDataAdapter; (System.Data.SQLite.SQLiteCommand); ; Argument[0]; sql-injection; manual | +| 15 | Sink: System.Data.SQLite; SQLiteDataAdapter; false; SQLiteDataAdapter; (System.String,System.Data.SQLite.SQLiteConnection); ; Argument[0]; sql-injection; manual | +| 16 | Sink: System.Data.SQLite; SQLiteDataAdapter; false; SQLiteDataAdapter; (System.String,System.String); ; Argument[0]; sql-injection; manual | +| 17 | Sink: System.Data.SqlClient; SqlCommand; false; SqlCommand; (System.String); ; Argument[0]; sql-injection; manual | +| 18 | Sink: System.Data.SqlClient; SqlCommand; false; SqlCommand; (System.String,System.Data.SqlClient.SqlConnection); ; Argument[0]; sql-injection; manual | +| 19 | Sink: System.Data.SqlClient; SqlDataAdapter; false; SqlDataAdapter; (System.Data.SqlClient.SqlCommand); ; Argument[0]; sql-injection; manual | +| 20 | Sink: System.Data.SqlClient; SqlDataAdapter; false; SqlDataAdapter; (System.String,System.Data.SqlClient.SqlConnection); ; Argument[0]; sql-injection; manual | +| 21 | Source: System.IO; FileStream; false; FileStream; ; ; Argument[this]; file-write; manual | +| 22 | Source: System.IO; FileStream; false; FileStream; ; ; Argument[this]; file; manual | +| 23 | Source: System; Console; false; ReadLine; ; ; ReturnValue; stdin; manual | +| 24 | Summary: System.Data.SQLite; SQLiteCommand; false; SQLiteCommand; (System.String,System.Data.SQLite.SQLiteConnection); ; Argument[0]; Argument[this]; taint; manual | +| 25 | Summary: System.Data.SqlClient; SqlCommand; false; SqlCommand; (System.String); ; Argument[0]; Argument[this]; taint; manual | +| 26 | Summary: System.Data; IDataRecord; true; GetString; (System.Int32); ; Argument[this]; ReturnValue; taint; manual | +| 27 | Summary: System.IO; FileStream; false; FileStream; (System.String,System.IO.FileMode); ; Argument[0]; Argument[this]; taint; manual | +| 28 | Summary: System.IO; StreamReader; false; StreamReader; (System.IO.Stream,System.Text.Encoding); ; Argument[0]; Argument[this]; taint; manual | +| 29 | Summary: System.IO; TextReader; true; ReadLine; (); ; Argument[this]; ReturnValue; taint; manual | +| 30 | Summary: System.Web.UI.WebControls; TextBox; false; get_Text; (); ; Argument[this]; ReturnValue; taint; manual | +| 31 | Summary: System; String; false; Trim; (); ; Argument[this]; ReturnValue; taint; manual | nodes | SecondOrderSqlInjection.cs:20:31:20:44 | access to local variable customerReader : SqlDataReader | semmle.label | access to local variable customerReader : SqlDataReader | | SecondOrderSqlInjection.cs:20:48:20:78 | call to method ExecuteReader : SqlDataReader | semmle.label | call to method ExecuteReader : SqlDataReader | @@ -197,6 +212,12 @@ nodes | SqlInjectionDapper.cs:75:21:75:25 | access to local variable query : String | semmle.label | access to local variable query : String | | SqlInjectionDapper.cs:75:86:75:94 | access to property Text : String | semmle.label | access to property Text : String | | SqlInjectionDapper.cs:77:52:77:56 | access to local variable query | semmle.label | access to local variable query | +| SqlInjectionNHibernate.cs:17:36:17:48 | access to field untrustedData : TextBox | semmle.label | access to field untrustedData : TextBox | +| SqlInjectionNHibernate.cs:17:36:17:53 | access to property Text | semmle.label | access to property Text | +| SqlInjectionNHibernate.cs:19:45:19:57 | access to field untrustedData : TextBox | semmle.label | access to field untrustedData : TextBox | +| SqlInjectionNHibernate.cs:19:45:19:62 | access to property Text | semmle.label | access to property Text | +| SqlInjectionNHibernate.cs:21:33:21:45 | access to field untrustedData : TextBox | semmle.label | access to field untrustedData : TextBox | +| SqlInjectionNHibernate.cs:21:33:21:50 | access to property Text | semmle.label | access to property Text | | SqlInjectionSqlite.cs:19:51:19:63 | access to field untrustedData : TextBox | semmle.label | access to field untrustedData : TextBox | | SqlInjectionSqlite.cs:19:51:19:68 | access to property Text | semmle.label | access to property Text | | SqlInjectionSqlite.cs:24:17:24:19 | access to local variable cmd : SQLiteCommand | semmle.label | access to local variable cmd : SQLiteCommand | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjectionNHibernate.cs b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjectionNHibernate.cs new file mode 100644 index 000000000000..3493891abb20 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjectionNHibernate.cs @@ -0,0 +1,24 @@ +using System; + +namespace TestNHibernate +{ + using System.Data; + using System.IO; + using System.Text; + using System.Web.UI.WebControls; + + class SqlInjection + { + private string connectionString; + public TextBox untrustedData; + + public void InjectUntrustedData(NHibernate.ISession session, NHibernate.IStatelessSession statelessSession, NHibernate.Impl.AbstractSessionImpl impl) + { + session.CreateSQLQuery(untrustedData.Text); // $ Alert[cs/sql-injection] + + statelessSession.CreateSQLQuery(untrustedData.Text); // $ Alert[cs/sql-injection] + + impl.CreateSQLQuery(untrustedData.Text); // $ Alert[cs/sql-injection] + } + } +} diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/options b/csharp/ql/test/query-tests/Security Features/CWE-089/options index 77da3f8c8fb3..7cdc544e958f 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/options @@ -4,3 +4,4 @@ semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resour semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/System.Data.SQLite/1.0.119/System.Data.SQLite.csproj semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Windows.cs semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/NHibernate/5.5.2/NHibernate.csproj diff --git a/csharp/ql/test/query-tests/Security Features/CWE-352/missing-aspnetcore/MissingAntiForgeryTokenValidation.cs b/csharp/ql/test/query-tests/Security Features/CWE-352/missing-aspnetcore/MissingAntiForgeryTokenValidation.cs new file mode 100644 index 000000000000..84d904f900d3 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-352/missing-aspnetcore/MissingAntiForgeryTokenValidation.cs @@ -0,0 +1,31 @@ +using Microsoft.AspNetCore.Mvc; + +public class HomeController : Controller +{ + // BAD: Anti forgery token has been forgotten + [HttpPost] + public ActionResult Login() + { + return View(); + } + + // GOOD: Anti forgery token is validated + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult UpdateDetails() + { + return View(); + } + + // No validation required, as this is a GET method. + public ActionResult ShowHelp() + { + return View(); + } + + // Should be ignored, because it is not an action method + [NonAction] + public void UtilityMethod() + { + } +} diff --git a/csharp/ql/test/query-tests/Security Features/CWE-352/missing-aspnetcore/MissingAntiForgeryTokenValidation.expected b/csharp/ql/test/query-tests/Security Features/CWE-352/missing-aspnetcore/MissingAntiForgeryTokenValidation.expected new file mode 100644 index 000000000000..859fd4be9200 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-352/missing-aspnetcore/MissingAntiForgeryTokenValidation.expected @@ -0,0 +1 @@ +| MissingAntiForgeryTokenValidation.cs:7:25:7:29 | Login | Method 'Login' handles a POST request without performing CSRF token validation. | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-352/missing-aspnetcore/MissingAntiForgeryTokenValidation.qlref b/csharp/ql/test/query-tests/Security Features/CWE-352/missing-aspnetcore/MissingAntiForgeryTokenValidation.qlref new file mode 100644 index 000000000000..5e1ab2426c65 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-352/missing-aspnetcore/MissingAntiForgeryTokenValidation.qlref @@ -0,0 +1 @@ +query: Security Features/CWE-352/MissingAntiForgeryTokenValidation.ql diff --git a/csharp/ql/test/query-tests/Security Features/CWE-352/missing-aspnetcore/options b/csharp/ql/test/query-tests/Security Features/CWE-352/missing-aspnetcore/options new file mode 100644 index 000000000000..698ad488b6d4 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-352/missing-aspnetcore/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj diff --git a/csharp/ql/test/resources/stubs/Amazon.Lambda.APIGatewayEvents/2.7.1/Amazon.Lambda.APIGatewayEvents.csproj b/csharp/ql/test/resources/stubs/Amazon.Lambda.APIGatewayEvents/2.7.1/Amazon.Lambda.APIGatewayEvents.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Amazon.Lambda.APIGatewayEvents/2.7.1/Amazon.Lambda.APIGatewayEvents.csproj +++ b/csharp/ql/test/resources/stubs/Amazon.Lambda.APIGatewayEvents/2.7.1/Amazon.Lambda.APIGatewayEvents.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Amazon.Lambda.Core/2.5.0/Amazon.Lambda.Core.csproj b/csharp/ql/test/resources/stubs/Amazon.Lambda.Core/2.5.0/Amazon.Lambda.Core.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Amazon.Lambda.Core/2.5.0/Amazon.Lambda.Core.csproj +++ b/csharp/ql/test/resources/stubs/Amazon.Lambda.Core/2.5.0/Amazon.Lambda.Core.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Antlr3.Runtime/3.5.1/Antlr3.Runtime.csproj b/csharp/ql/test/resources/stubs/Antlr3.Runtime/3.5.1/Antlr3.Runtime.csproj index 38998301525b..b1003793c720 100644 --- a/csharp/ql/test/resources/stubs/Antlr3.Runtime/3.5.1/Antlr3.Runtime.csproj +++ b/csharp/ql/test/resources/stubs/Antlr3.Runtime/3.5.1/Antlr3.Runtime.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Azure.Core/1.38.0/Azure.Core.csproj b/csharp/ql/test/resources/stubs/Azure.Core/1.38.0/Azure.Core.csproj index a440919775d7..4be1ba89cb8b 100644 --- a/csharp/ql/test/resources/stubs/Azure.Core/1.38.0/Azure.Core.csproj +++ b/csharp/ql/test/resources/stubs/Azure.Core/1.38.0/Azure.Core.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Azure.Identity/1.11.4/Azure.Identity.csproj b/csharp/ql/test/resources/stubs/Azure.Identity/1.11.4/Azure.Identity.csproj index e16e446b3a1b..3ff33c8434fb 100644 --- a/csharp/ql/test/resources/stubs/Azure.Identity/1.11.4/Azure.Identity.csproj +++ b/csharp/ql/test/resources/stubs/Azure.Identity/1.11.4/Azure.Identity.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Dapper/2.1.35/Dapper.csproj b/csharp/ql/test/resources/stubs/Dapper/2.1.35/Dapper.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Dapper/2.1.35/Dapper.csproj +++ b/csharp/ql/test/resources/stubs/Dapper/2.1.35/Dapper.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/EntityFramework/6.5.1/EntityFramework.csproj b/csharp/ql/test/resources/stubs/EntityFramework/6.5.1/EntityFramework.csproj index edca0c61e771..2485c5768e39 100644 --- a/csharp/ql/test/resources/stubs/EntityFramework/6.5.1/EntityFramework.csproj +++ b/csharp/ql/test/resources/stubs/EntityFramework/6.5.1/EntityFramework.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Iesi.Collections/4.0.4/Iesi.Collections.csproj b/csharp/ql/test/resources/stubs/Iesi.Collections/4.0.4/Iesi.Collections.csproj index eedd49158a14..032e2630cd1f 100644 --- a/csharp/ql/test/resources/stubs/Iesi.Collections/4.0.4/Iesi.Collections.csproj +++ b/csharp/ql/test/resources/stubs/Iesi.Collections/4.0.4/Iesi.Collections.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Bcl.AsyncInterfaces/1.1.1/Microsoft.Bcl.AsyncInterfaces.csproj b/csharp/ql/test/resources/stubs/Microsoft.Bcl.AsyncInterfaces/1.1.1/Microsoft.Bcl.AsyncInterfaces.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Bcl.AsyncInterfaces/1.1.1/Microsoft.Bcl.AsyncInterfaces.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Bcl.AsyncInterfaces/1.1.1/Microsoft.Bcl.AsyncInterfaces.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Bcl.Cryptography/9.0.4/Microsoft.Bcl.Cryptography.csproj b/csharp/ql/test/resources/stubs/Microsoft.Bcl.Cryptography/9.0.4/Microsoft.Bcl.Cryptography.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Bcl.Cryptography/9.0.4/Microsoft.Bcl.Cryptography.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Bcl.Cryptography/9.0.4/Microsoft.Bcl.Cryptography.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.CSharp/4.7.0/Microsoft.CSharp.csproj b/csharp/ql/test/resources/stubs/Microsoft.CSharp/4.7.0/Microsoft.CSharp.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.CSharp/4.7.0/Microsoft.CSharp.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.CSharp/4.7.0/Microsoft.CSharp.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient.SNI.runtime/6.0.2/Microsoft.Data.SqlClient.SNI.runtime.csproj b/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient.SNI.runtime/6.0.2/Microsoft.Data.SqlClient.SNI.runtime.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient.SNI.runtime/6.0.2/Microsoft.Data.SqlClient.SNI.runtime.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient.SNI.runtime/6.0.2/Microsoft.Data.SqlClient.SNI.runtime.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient/6.0.2/Microsoft.Data.SqlClient.csproj b/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient/6.0.2/Microsoft.Data.SqlClient.csproj index 457f65b723ba..b01103f87464 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient/6.0.2/Microsoft.Data.SqlClient.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient/6.0.2/Microsoft.Data.SqlClient.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Caching.Abstractions/9.0.4/Microsoft.Extensions.Caching.Abstractions.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Caching.Abstractions/9.0.4/Microsoft.Extensions.Caching.Abstractions.csproj index ba6857adb2b9..144dee9836f7 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Caching.Abstractions/9.0.4/Microsoft.Extensions.Caching.Abstractions.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Caching.Abstractions/9.0.4/Microsoft.Extensions.Caching.Abstractions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Caching.Memory/9.0.4/Microsoft.Extensions.Caching.Memory.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Caching.Memory/9.0.4/Microsoft.Extensions.Caching.Memory.csproj index 611dcc85a91d..b3ef41ed5608 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Caching.Memory/9.0.4/Microsoft.Extensions.Caching.Memory.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Caching.Memory/9.0.4/Microsoft.Extensions.Caching.Memory.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Configuration.Abstractions/8.0.0/Microsoft.Extensions.Configuration.Abstractions.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Configuration.Abstractions/8.0.0/Microsoft.Extensions.Configuration.Abstractions.csproj index bc1dd1b3547f..675855d61697 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Configuration.Abstractions/8.0.0/Microsoft.Extensions.Configuration.Abstractions.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Configuration.Abstractions/8.0.0/Microsoft.Extensions.Configuration.Abstractions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Configuration.Binder/8.0.0/Microsoft.Extensions.Configuration.Binder.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Configuration.Binder/8.0.0/Microsoft.Extensions.Configuration.Binder.csproj index 27f68066b0c4..b45625dcaf91 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Configuration.Binder/8.0.0/Microsoft.Extensions.Configuration.Binder.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Configuration.Binder/8.0.0/Microsoft.Extensions.Configuration.Binder.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Configuration/8.0.0/Microsoft.Extensions.Configuration.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Configuration/8.0.0/Microsoft.Extensions.Configuration.csproj index 3a3d95c8025c..e491cc391cfd 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Configuration/8.0.0/Microsoft.Extensions.Configuration.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Configuration/8.0.0/Microsoft.Extensions.Configuration.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0/Microsoft.Extensions.DependencyInjection.Abstractions.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0/Microsoft.Extensions.DependencyInjection.Abstractions.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0/Microsoft.Extensions.DependencyInjection.Abstractions.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0/Microsoft.Extensions.DependencyInjection.Abstractions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.DependencyInjection.Abstractions/9.0.4/Microsoft.Extensions.DependencyInjection.Abstractions.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.DependencyInjection.Abstractions/9.0.4/Microsoft.Extensions.DependencyInjection.Abstractions.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.DependencyInjection.Abstractions/9.0.4/Microsoft.Extensions.DependencyInjection.Abstractions.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.DependencyInjection.Abstractions/9.0.4/Microsoft.Extensions.DependencyInjection.Abstractions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.DependencyInjection/8.0.0/Microsoft.Extensions.DependencyInjection.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.DependencyInjection/8.0.0/Microsoft.Extensions.DependencyInjection.csproj index d40ad81bae2b..9c117ab0052e 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.DependencyInjection/8.0.0/Microsoft.Extensions.DependencyInjection.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.DependencyInjection/8.0.0/Microsoft.Extensions.DependencyInjection.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Diagnostics.Abstractions/8.0.0/Microsoft.Extensions.Diagnostics.Abstractions.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Diagnostics.Abstractions/8.0.0/Microsoft.Extensions.Diagnostics.Abstractions.csproj index 5e2dafdbf458..c6cb5c63e8f0 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Diagnostics.Abstractions/8.0.0/Microsoft.Extensions.Diagnostics.Abstractions.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Diagnostics.Abstractions/8.0.0/Microsoft.Extensions.Diagnostics.Abstractions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Diagnostics/8.0.0/Microsoft.Extensions.Diagnostics.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Diagnostics/8.0.0/Microsoft.Extensions.Diagnostics.csproj index 9d6ce5a7870e..15a14363eda8 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Diagnostics/8.0.0/Microsoft.Extensions.Diagnostics.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Diagnostics/8.0.0/Microsoft.Extensions.Diagnostics.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Http/8.0.0/Microsoft.Extensions.Http.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Http/8.0.0/Microsoft.Extensions.Http.csproj index ad6270c7d19b..361c7c439cb1 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Http/8.0.0/Microsoft.Extensions.Http.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Http/8.0.0/Microsoft.Extensions.Http.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Logging.Abstractions/8.0.0/Microsoft.Extensions.Logging.Abstractions.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Logging.Abstractions/8.0.0/Microsoft.Extensions.Logging.Abstractions.csproj index d40ad81bae2b..9c117ab0052e 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Logging.Abstractions/8.0.0/Microsoft.Extensions.Logging.Abstractions.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Logging.Abstractions/8.0.0/Microsoft.Extensions.Logging.Abstractions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Logging.Abstractions/9.0.4/Microsoft.Extensions.Logging.Abstractions.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Logging.Abstractions/9.0.4/Microsoft.Extensions.Logging.Abstractions.csproj index 24dcab514cf1..26c5c626f386 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Logging.Abstractions/9.0.4/Microsoft.Extensions.Logging.Abstractions.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Logging.Abstractions/9.0.4/Microsoft.Extensions.Logging.Abstractions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Logging/8.0.0/Microsoft.Extensions.Logging.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Logging/8.0.0/Microsoft.Extensions.Logging.csproj index 528435467564..6f6268b46f1a 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Logging/8.0.0/Microsoft.Extensions.Logging.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Logging/8.0.0/Microsoft.Extensions.Logging.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Options.ConfigurationExtensions/8.0.0/Microsoft.Extensions.Options.ConfigurationExtensions.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Options.ConfigurationExtensions/8.0.0/Microsoft.Extensions.Options.ConfigurationExtensions.csproj index 8f14f384fd66..da4c02d67bc0 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Options.ConfigurationExtensions/8.0.0/Microsoft.Extensions.Options.ConfigurationExtensions.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Options.ConfigurationExtensions/8.0.0/Microsoft.Extensions.Options.ConfigurationExtensions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Options/8.0.0/Microsoft.Extensions.Options.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Options/8.0.0/Microsoft.Extensions.Options.csproj index 477139a9ca36..ab32cef0094c 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Options/8.0.0/Microsoft.Extensions.Options.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Options/8.0.0/Microsoft.Extensions.Options.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Options/9.0.4/Microsoft.Extensions.Options.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Options/9.0.4/Microsoft.Extensions.Options.csproj index be3f78d87fc7..3232e8381630 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Options/9.0.4/Microsoft.Extensions.Options.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Options/9.0.4/Microsoft.Extensions.Options.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Primitives/8.0.0/Microsoft.Extensions.Primitives.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Primitives/8.0.0/Microsoft.Extensions.Primitives.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Primitives/8.0.0/Microsoft.Extensions.Primitives.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Primitives/8.0.0/Microsoft.Extensions.Primitives.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Primitives/9.0.4/Microsoft.Extensions.Primitives.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Primitives/9.0.4/Microsoft.Extensions.Primitives.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Primitives/9.0.4/Microsoft.Extensions.Primitives.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Primitives/9.0.4/Microsoft.Extensions.Primitives.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Identity.Client.Extensions.Msal/4.61.3/Microsoft.Identity.Client.Extensions.Msal.csproj b/csharp/ql/test/resources/stubs/Microsoft.Identity.Client.Extensions.Msal/4.61.3/Microsoft.Identity.Client.Extensions.Msal.csproj index a085743bd520..8b04793470c2 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Identity.Client.Extensions.Msal/4.61.3/Microsoft.Identity.Client.Extensions.Msal.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Identity.Client.Extensions.Msal/4.61.3/Microsoft.Identity.Client.Extensions.Msal.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Identity.Client/4.61.3/Microsoft.Identity.Client.csproj b/csharp/ql/test/resources/stubs/Microsoft.Identity.Client/4.61.3/Microsoft.Identity.Client.csproj index 3951c0cd04ff..15c39f9afd87 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Identity.Client/4.61.3/Microsoft.Identity.Client.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Identity.Client/4.61.3/Microsoft.Identity.Client.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Abstractions/7.5.0/Microsoft.IdentityModel.Abstractions.csproj b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Abstractions/7.5.0/Microsoft.IdentityModel.Abstractions.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Abstractions/7.5.0/Microsoft.IdentityModel.Abstractions.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Abstractions/7.5.0/Microsoft.IdentityModel.Abstractions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.JsonWebTokens/7.5.0/Microsoft.IdentityModel.JsonWebTokens.csproj b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.JsonWebTokens/7.5.0/Microsoft.IdentityModel.JsonWebTokens.csproj index 3f7a9eeb43fa..2f8d8081f4fa 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.JsonWebTokens/7.5.0/Microsoft.IdentityModel.JsonWebTokens.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.JsonWebTokens/7.5.0/Microsoft.IdentityModel.JsonWebTokens.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Logging/7.5.0/Microsoft.IdentityModel.Logging.csproj b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Logging/7.5.0/Microsoft.IdentityModel.Logging.csproj index ccae125b498e..a3ab1ba05873 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Logging/7.5.0/Microsoft.IdentityModel.Logging.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Logging/7.5.0/Microsoft.IdentityModel.Logging.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols.OpenIdConnect/7.5.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.csproj b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols.OpenIdConnect/7.5.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.csproj index 4fcb6a92ab72..e1b68d55db9e 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols.OpenIdConnect/7.5.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols.OpenIdConnect/7.5.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols/7.5.0/Microsoft.IdentityModel.Protocols.csproj b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols/7.5.0/Microsoft.IdentityModel.Protocols.csproj index 3f7a9eeb43fa..2f8d8081f4fa 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols/7.5.0/Microsoft.IdentityModel.Protocols.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols/7.5.0/Microsoft.IdentityModel.Protocols.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Tokens/7.5.0/Microsoft.IdentityModel.Tokens.csproj b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Tokens/7.5.0/Microsoft.IdentityModel.Tokens.csproj index 524740979fa2..5355c82a2a2d 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Tokens/7.5.0/Microsoft.IdentityModel.Tokens.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Tokens/7.5.0/Microsoft.IdentityModel.Tokens.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.NETCore.Platforms/3.1.0/Microsoft.NETCore.Platforms.csproj b/csharp/ql/test/resources/stubs/Microsoft.NETCore.Platforms/3.1.0/Microsoft.NETCore.Platforms.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.NETCore.Platforms/3.1.0/Microsoft.NETCore.Platforms.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.NETCore.Platforms/3.1.0/Microsoft.NETCore.Platforms.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.NETCore.Targets/1.1.0/Microsoft.NETCore.Targets.csproj b/csharp/ql/test/resources/stubs/Microsoft.NETCore.Targets/1.1.0/Microsoft.NETCore.Targets.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.NETCore.Targets/1.1.0/Microsoft.NETCore.Targets.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.NETCore.Targets/1.1.0/Microsoft.NETCore.Targets.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.SqlServer.Server/1.0.0/Microsoft.SqlServer.Server.csproj b/csharp/ql/test/resources/stubs/Microsoft.SqlServer.Server/1.0.0/Microsoft.SqlServer.Server.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.SqlServer.Server/1.0.0/Microsoft.SqlServer.Server.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.SqlServer.Server/1.0.0/Microsoft.SqlServer.Server.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Win32.Primitives/4.3.0/Microsoft.Win32.Primitives.csproj b/csharp/ql/test/resources/stubs/Microsoft.Win32.Primitives/4.3.0/Microsoft.Win32.Primitives.csproj index 4ed1849a7e34..e03091cbb831 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Win32.Primitives/4.3.0/Microsoft.Win32.Primitives.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Win32.Primitives/4.3.0/Microsoft.Win32.Primitives.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Win32.SystemEvents/9.0.1/Microsoft.Win32.SystemEvents.csproj b/csharp/ql/test/resources/stubs/Microsoft.Win32.SystemEvents/9.0.1/Microsoft.Win32.SystemEvents.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Win32.SystemEvents/9.0.1/Microsoft.Win32.SystemEvents.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Win32.SystemEvents/9.0.1/Microsoft.Win32.SystemEvents.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/NETStandard.Library/1.6.1/NETStandard.Library.csproj b/csharp/ql/test/resources/stubs/NETStandard.Library/1.6.1/NETStandard.Library.csproj index 273e29bbe555..456dbed0286e 100644 --- a/csharp/ql/test/resources/stubs/NETStandard.Library/1.6.1/NETStandard.Library.csproj +++ b/csharp/ql/test/resources/stubs/NETStandard.Library/1.6.1/NETStandard.Library.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/NHibernate/5.5.2/NHibernate.csproj b/csharp/ql/test/resources/stubs/NHibernate/5.5.2/NHibernate.csproj index c327bef839ae..d7190e71fe25 100644 --- a/csharp/ql/test/resources/stubs/NHibernate/5.5.2/NHibernate.csproj +++ b/csharp/ql/test/resources/stubs/NHibernate/5.5.2/NHibernate.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Newtonsoft.Json/13.0.3/Newtonsoft.Json.csproj b/csharp/ql/test/resources/stubs/Newtonsoft.Json/13.0.3/Newtonsoft.Json.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Newtonsoft.Json/13.0.3/Newtonsoft.Json.csproj +++ b/csharp/ql/test/resources/stubs/Newtonsoft.Json/13.0.3/Newtonsoft.Json.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Remotion.Linq.EagerFetching/2.2.0/Remotion.Linq.EagerFetching.csproj b/csharp/ql/test/resources/stubs/Remotion.Linq.EagerFetching/2.2.0/Remotion.Linq.EagerFetching.csproj index c1ed1379cbda..decc44b4c3c9 100644 --- a/csharp/ql/test/resources/stubs/Remotion.Linq.EagerFetching/2.2.0/Remotion.Linq.EagerFetching.csproj +++ b/csharp/ql/test/resources/stubs/Remotion.Linq.EagerFetching/2.2.0/Remotion.Linq.EagerFetching.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Remotion.Linq/2.2.0/Remotion.Linq.csproj b/csharp/ql/test/resources/stubs/Remotion.Linq/2.2.0/Remotion.Linq.csproj index d6c4929252c5..bcce1168ac5a 100644 --- a/csharp/ql/test/resources/stubs/Remotion.Linq/2.2.0/Remotion.Linq.csproj +++ b/csharp/ql/test/resources/stubs/Remotion.Linq/2.2.0/Remotion.Linq.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Client/8.5.2/ServiceStack.Client.csproj b/csharp/ql/test/resources/stubs/ServiceStack.Client/8.5.2/ServiceStack.Client.csproj index 086203dafdc7..f85faa8f7c90 100644 --- a/csharp/ql/test/resources/stubs/ServiceStack.Client/8.5.2/ServiceStack.Client.csproj +++ b/csharp/ql/test/resources/stubs/ServiceStack.Client/8.5.2/ServiceStack.Client.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Common/8.5.2/ServiceStack.Common.csproj b/csharp/ql/test/resources/stubs/ServiceStack.Common/8.5.2/ServiceStack.Common.csproj index 738ed3be534a..2b25400ea6ab 100644 --- a/csharp/ql/test/resources/stubs/ServiceStack.Common/8.5.2/ServiceStack.Common.csproj +++ b/csharp/ql/test/resources/stubs/ServiceStack.Common/8.5.2/ServiceStack.Common.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Interfaces/8.5.2/ServiceStack.Interfaces.csproj b/csharp/ql/test/resources/stubs/ServiceStack.Interfaces/8.5.2/ServiceStack.Interfaces.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/ServiceStack.Interfaces/8.5.2/ServiceStack.Interfaces.csproj +++ b/csharp/ql/test/resources/stubs/ServiceStack.Interfaces/8.5.2/ServiceStack.Interfaces.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/ServiceStack.OrmLite.SqlServer/8.5.2/ServiceStack.OrmLite.SqlServer.csproj b/csharp/ql/test/resources/stubs/ServiceStack.OrmLite.SqlServer/8.5.2/ServiceStack.OrmLite.SqlServer.csproj index c091c7d032fa..597c06cbe84c 100644 --- a/csharp/ql/test/resources/stubs/ServiceStack.OrmLite.SqlServer/8.5.2/ServiceStack.OrmLite.SqlServer.csproj +++ b/csharp/ql/test/resources/stubs/ServiceStack.OrmLite.SqlServer/8.5.2/ServiceStack.OrmLite.SqlServer.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/ServiceStack.OrmLite/8.5.2/ServiceStack.OrmLite.csproj b/csharp/ql/test/resources/stubs/ServiceStack.OrmLite/8.5.2/ServiceStack.OrmLite.csproj index 7138015c599d..dc9c0b1497b9 100644 --- a/csharp/ql/test/resources/stubs/ServiceStack.OrmLite/8.5.2/ServiceStack.OrmLite.csproj +++ b/csharp/ql/test/resources/stubs/ServiceStack.OrmLite/8.5.2/ServiceStack.OrmLite.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Text/8.5.2/ServiceStack.Text.csproj b/csharp/ql/test/resources/stubs/ServiceStack.Text/8.5.2/ServiceStack.Text.csproj index f52b7af13264..72a6682fc4d5 100644 --- a/csharp/ql/test/resources/stubs/ServiceStack.Text/8.5.2/ServiceStack.Text.csproj +++ b/csharp/ql/test/resources/stubs/ServiceStack.Text/8.5.2/ServiceStack.Text.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/ServiceStack/8.5.2/ServiceStack.csproj b/csharp/ql/test/resources/stubs/ServiceStack/8.5.2/ServiceStack.csproj index 5fc24d19b677..4dbb285aaa55 100644 --- a/csharp/ql/test/resources/stubs/ServiceStack/8.5.2/ServiceStack.csproj +++ b/csharp/ql/test/resources/stubs/ServiceStack/8.5.2/ServiceStack.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Stub.System.Data.SQLite.Core.NetStandard/1.0.119/Stub.System.Data.SQLite.Core.NetStandard.csproj b/csharp/ql/test/resources/stubs/Stub.System.Data.SQLite.Core.NetStandard/1.0.119/Stub.System.Data.SQLite.Core.NetStandard.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/Stub.System.Data.SQLite.Core.NetStandard/1.0.119/Stub.System.Data.SQLite.Core.NetStandard.csproj +++ b/csharp/ql/test/resources/stubs/Stub.System.Data.SQLite.Core.NetStandard/1.0.119/Stub.System.Data.SQLite.Core.NetStandard.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.AppContext/4.3.0/System.AppContext.csproj b/csharp/ql/test/resources/stubs/System.AppContext/4.3.0/System.AppContext.csproj index 05ae99d36ae6..45b1e4e8f0ef 100644 --- a/csharp/ql/test/resources/stubs/System.AppContext/4.3.0/System.AppContext.csproj +++ b/csharp/ql/test/resources/stubs/System.AppContext/4.3.0/System.AppContext.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Buffers/4.3.0/System.Buffers.csproj b/csharp/ql/test/resources/stubs/System.Buffers/4.3.0/System.Buffers.csproj index 461a9c76cd82..d6f8f78264eb 100644 --- a/csharp/ql/test/resources/stubs/System.Buffers/4.3.0/System.Buffers.csproj +++ b/csharp/ql/test/resources/stubs/System.Buffers/4.3.0/System.Buffers.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.ClientModel/1.0.0/System.ClientModel.csproj b/csharp/ql/test/resources/stubs/System.ClientModel/1.0.0/System.ClientModel.csproj index af9830f6d13d..758bf53c79a8 100644 --- a/csharp/ql/test/resources/stubs/System.ClientModel/1.0.0/System.ClientModel.csproj +++ b/csharp/ql/test/resources/stubs/System.ClientModel/1.0.0/System.ClientModel.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.CodeDom/6.0.0/System.CodeDom.csproj b/csharp/ql/test/resources/stubs/System.CodeDom/6.0.0/System.CodeDom.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.CodeDom/6.0.0/System.CodeDom.csproj +++ b/csharp/ql/test/resources/stubs/System.CodeDom/6.0.0/System.CodeDom.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Collections.Concurrent/4.3.0/System.Collections.Concurrent.csproj b/csharp/ql/test/resources/stubs/System.Collections.Concurrent/4.3.0/System.Collections.Concurrent.csproj index e14050e856c7..bc793c64812f 100644 --- a/csharp/ql/test/resources/stubs/System.Collections.Concurrent/4.3.0/System.Collections.Concurrent.csproj +++ b/csharp/ql/test/resources/stubs/System.Collections.Concurrent/4.3.0/System.Collections.Concurrent.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Collections.NonGeneric/4.3.0/System.Collections.NonGeneric.csproj b/csharp/ql/test/resources/stubs/System.Collections.NonGeneric/4.3.0/System.Collections.NonGeneric.csproj index c90f517b0d7d..2349fd41cce9 100644 --- a/csharp/ql/test/resources/stubs/System.Collections.NonGeneric/4.3.0/System.Collections.NonGeneric.csproj +++ b/csharp/ql/test/resources/stubs/System.Collections.NonGeneric/4.3.0/System.Collections.NonGeneric.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Collections/4.3.0/System.Collections.csproj b/csharp/ql/test/resources/stubs/System.Collections/4.3.0/System.Collections.csproj index 4ed1849a7e34..e03091cbb831 100644 --- a/csharp/ql/test/resources/stubs/System.Collections/4.3.0/System.Collections.csproj +++ b/csharp/ql/test/resources/stubs/System.Collections/4.3.0/System.Collections.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.ComponentModel.Annotations/5.0.0/System.ComponentModel.Annotations.csproj b/csharp/ql/test/resources/stubs/System.ComponentModel.Annotations/5.0.0/System.ComponentModel.Annotations.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.ComponentModel.Annotations/5.0.0/System.ComponentModel.Annotations.csproj +++ b/csharp/ql/test/resources/stubs/System.ComponentModel.Annotations/5.0.0/System.ComponentModel.Annotations.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.ComponentModel.Primitives/4.3.0/System.ComponentModel.Primitives.csproj b/csharp/ql/test/resources/stubs/System.ComponentModel.Primitives/4.3.0/System.ComponentModel.Primitives.csproj index a3f8fc48b0ce..d9054dba10f1 100644 --- a/csharp/ql/test/resources/stubs/System.ComponentModel.Primitives/4.3.0/System.ComponentModel.Primitives.csproj +++ b/csharp/ql/test/resources/stubs/System.ComponentModel.Primitives/4.3.0/System.ComponentModel.Primitives.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.ComponentModel/4.3.0/System.ComponentModel.csproj b/csharp/ql/test/resources/stubs/System.ComponentModel/4.3.0/System.ComponentModel.csproj index 05ae99d36ae6..45b1e4e8f0ef 100644 --- a/csharp/ql/test/resources/stubs/System.ComponentModel/4.3.0/System.ComponentModel.csproj +++ b/csharp/ql/test/resources/stubs/System.ComponentModel/4.3.0/System.ComponentModel.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/9.0.1/System.Configuration.ConfigurationManager.csproj b/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/9.0.1/System.Configuration.ConfigurationManager.csproj index 8017e89ccf27..992d2312bd55 100644 --- a/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/9.0.1/System.Configuration.ConfigurationManager.csproj +++ b/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/9.0.1/System.Configuration.ConfigurationManager.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/9.0.4/System.Configuration.ConfigurationManager.csproj b/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/9.0.4/System.Configuration.ConfigurationManager.csproj index 8017e89ccf27..992d2312bd55 100644 --- a/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/9.0.4/System.Configuration.ConfigurationManager.csproj +++ b/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/9.0.4/System.Configuration.ConfigurationManager.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Console/4.3.0/System.Console.csproj b/csharp/ql/test/resources/stubs/System.Console/4.3.0/System.Console.csproj index 9b785dfa9372..28e7058a12ea 100644 --- a/csharp/ql/test/resources/stubs/System.Console/4.3.0/System.Console.csproj +++ b/csharp/ql/test/resources/stubs/System.Console/4.3.0/System.Console.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Data.OleDb/9.0.1/System.Data.OleDb.csproj b/csharp/ql/test/resources/stubs/System.Data.OleDb/9.0.1/System.Data.OleDb.csproj index ded2d0d5626b..0e4bf5f125b5 100644 --- a/csharp/ql/test/resources/stubs/System.Data.OleDb/9.0.1/System.Data.OleDb.csproj +++ b/csharp/ql/test/resources/stubs/System.Data.OleDb/9.0.1/System.Data.OleDb.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Data.SQLite.Core/1.0.119/System.Data.SQLite.Core.csproj b/csharp/ql/test/resources/stubs/System.Data.SQLite.Core/1.0.119/System.Data.SQLite.Core.csproj index f28b2ba64e49..5b0ee2f26961 100644 --- a/csharp/ql/test/resources/stubs/System.Data.SQLite.Core/1.0.119/System.Data.SQLite.Core.csproj +++ b/csharp/ql/test/resources/stubs/System.Data.SQLite.Core/1.0.119/System.Data.SQLite.Core.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Data.SQLite.EF6/1.0.119/System.Data.SQLite.EF6.csproj b/csharp/ql/test/resources/stubs/System.Data.SQLite.EF6/1.0.119/System.Data.SQLite.EF6.csproj index 73e466e08064..5497fba3f3b2 100644 --- a/csharp/ql/test/resources/stubs/System.Data.SQLite.EF6/1.0.119/System.Data.SQLite.EF6.csproj +++ b/csharp/ql/test/resources/stubs/System.Data.SQLite.EF6/1.0.119/System.Data.SQLite.EF6.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Data.SQLite/1.0.119/System.Data.SQLite.csproj b/csharp/ql/test/resources/stubs/System.Data.SQLite/1.0.119/System.Data.SQLite.csproj index a9338476133f..d425aed68d50 100644 --- a/csharp/ql/test/resources/stubs/System.Data.SQLite/1.0.119/System.Data.SQLite.csproj +++ b/csharp/ql/test/resources/stubs/System.Data.SQLite/1.0.119/System.Data.SQLite.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Data.SqlClient/4.9.0/System.Data.SqlClient.csproj b/csharp/ql/test/resources/stubs/System.Data.SqlClient/4.9.0/System.Data.SqlClient.csproj index df3e3803d8da..857412787758 100644 --- a/csharp/ql/test/resources/stubs/System.Data.SqlClient/4.9.0/System.Data.SqlClient.csproj +++ b/csharp/ql/test/resources/stubs/System.Data.SqlClient/4.9.0/System.Data.SqlClient.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Diagnostics.Debug/4.3.0/System.Diagnostics.Debug.csproj b/csharp/ql/test/resources/stubs/System.Diagnostics.Debug/4.3.0/System.Diagnostics.Debug.csproj index 4ed1849a7e34..e03091cbb831 100644 --- a/csharp/ql/test/resources/stubs/System.Diagnostics.Debug/4.3.0/System.Diagnostics.Debug.csproj +++ b/csharp/ql/test/resources/stubs/System.Diagnostics.Debug/4.3.0/System.Diagnostics.Debug.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Diagnostics.DiagnosticSource/6.0.1/System.Diagnostics.DiagnosticSource.csproj b/csharp/ql/test/resources/stubs/System.Diagnostics.DiagnosticSource/6.0.1/System.Diagnostics.DiagnosticSource.csproj index 44f3b6c98d18..3c0ecb9c83e1 100644 --- a/csharp/ql/test/resources/stubs/System.Diagnostics.DiagnosticSource/6.0.1/System.Diagnostics.DiagnosticSource.csproj +++ b/csharp/ql/test/resources/stubs/System.Diagnostics.DiagnosticSource/6.0.1/System.Diagnostics.DiagnosticSource.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Diagnostics.DiagnosticSource/8.0.0/System.Diagnostics.DiagnosticSource.csproj b/csharp/ql/test/resources/stubs/System.Diagnostics.DiagnosticSource/8.0.0/System.Diagnostics.DiagnosticSource.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Diagnostics.DiagnosticSource/8.0.0/System.Diagnostics.DiagnosticSource.csproj +++ b/csharp/ql/test/resources/stubs/System.Diagnostics.DiagnosticSource/8.0.0/System.Diagnostics.DiagnosticSource.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Diagnostics.EventLog/9.0.1/System.Diagnostics.EventLog.csproj b/csharp/ql/test/resources/stubs/System.Diagnostics.EventLog/9.0.1/System.Diagnostics.EventLog.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Diagnostics.EventLog/9.0.1/System.Diagnostics.EventLog.csproj +++ b/csharp/ql/test/resources/stubs/System.Diagnostics.EventLog/9.0.1/System.Diagnostics.EventLog.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Diagnostics.EventLog/9.0.4/System.Diagnostics.EventLog.csproj b/csharp/ql/test/resources/stubs/System.Diagnostics.EventLog/9.0.4/System.Diagnostics.EventLog.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Diagnostics.EventLog/9.0.4/System.Diagnostics.EventLog.csproj +++ b/csharp/ql/test/resources/stubs/System.Diagnostics.EventLog/9.0.4/System.Diagnostics.EventLog.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Diagnostics.PerformanceCounter/9.0.1/System.Diagnostics.PerformanceCounter.csproj b/csharp/ql/test/resources/stubs/System.Diagnostics.PerformanceCounter/9.0.1/System.Diagnostics.PerformanceCounter.csproj index bb528bfa8267..8daf53f8044c 100644 --- a/csharp/ql/test/resources/stubs/System.Diagnostics.PerformanceCounter/9.0.1/System.Diagnostics.PerformanceCounter.csproj +++ b/csharp/ql/test/resources/stubs/System.Diagnostics.PerformanceCounter/9.0.1/System.Diagnostics.PerformanceCounter.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Diagnostics.Tools/4.3.0/System.Diagnostics.Tools.csproj b/csharp/ql/test/resources/stubs/System.Diagnostics.Tools/4.3.0/System.Diagnostics.Tools.csproj index 4ed1849a7e34..e03091cbb831 100644 --- a/csharp/ql/test/resources/stubs/System.Diagnostics.Tools/4.3.0/System.Diagnostics.Tools.csproj +++ b/csharp/ql/test/resources/stubs/System.Diagnostics.Tools/4.3.0/System.Diagnostics.Tools.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Diagnostics.Tracing/4.3.0/System.Diagnostics.Tracing.csproj b/csharp/ql/test/resources/stubs/System.Diagnostics.Tracing/4.3.0/System.Diagnostics.Tracing.csproj index 4ed1849a7e34..e03091cbb831 100644 --- a/csharp/ql/test/resources/stubs/System.Diagnostics.Tracing/4.3.0/System.Diagnostics.Tracing.csproj +++ b/csharp/ql/test/resources/stubs/System.Diagnostics.Tracing/4.3.0/System.Diagnostics.Tracing.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Drawing.Common/9.0.1/System.Drawing.Common.csproj b/csharp/ql/test/resources/stubs/System.Drawing.Common/9.0.1/System.Drawing.Common.csproj index 342c6102919b..2a731d898154 100644 --- a/csharp/ql/test/resources/stubs/System.Drawing.Common/9.0.1/System.Drawing.Common.csproj +++ b/csharp/ql/test/resources/stubs/System.Drawing.Common/9.0.1/System.Drawing.Common.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Dynamic.Runtime/4.3.0/System.Dynamic.Runtime.csproj b/csharp/ql/test/resources/stubs/System.Dynamic.Runtime/4.3.0/System.Dynamic.Runtime.csproj index d22ce2d8ece6..c295597573c8 100644 --- a/csharp/ql/test/resources/stubs/System.Dynamic.Runtime/4.3.0/System.Dynamic.Runtime.csproj +++ b/csharp/ql/test/resources/stubs/System.Dynamic.Runtime/4.3.0/System.Dynamic.Runtime.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Globalization.Calendars/4.3.0/System.Globalization.Calendars.csproj b/csharp/ql/test/resources/stubs/System.Globalization.Calendars/4.3.0/System.Globalization.Calendars.csproj index 0dfbf223dbad..4a713846d3b9 100644 --- a/csharp/ql/test/resources/stubs/System.Globalization.Calendars/4.3.0/System.Globalization.Calendars.csproj +++ b/csharp/ql/test/resources/stubs/System.Globalization.Calendars/4.3.0/System.Globalization.Calendars.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Globalization.Extensions/4.3.0/System.Globalization.Extensions.csproj b/csharp/ql/test/resources/stubs/System.Globalization.Extensions/4.3.0/System.Globalization.Extensions.csproj index 5e5d3cd90e96..d0fc9d064fe1 100644 --- a/csharp/ql/test/resources/stubs/System.Globalization.Extensions/4.3.0/System.Globalization.Extensions.csproj +++ b/csharp/ql/test/resources/stubs/System.Globalization.Extensions/4.3.0/System.Globalization.Extensions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Globalization/4.3.0/System.Globalization.csproj b/csharp/ql/test/resources/stubs/System.Globalization/4.3.0/System.Globalization.csproj index 4ed1849a7e34..e03091cbb831 100644 --- a/csharp/ql/test/resources/stubs/System.Globalization/4.3.0/System.Globalization.csproj +++ b/csharp/ql/test/resources/stubs/System.Globalization/4.3.0/System.Globalization.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.IO.Compression.ZipFile/4.3.0/System.IO.Compression.ZipFile.csproj b/csharp/ql/test/resources/stubs/System.IO.Compression.ZipFile/4.3.0/System.IO.Compression.ZipFile.csproj index aa49337117c3..84d7216ee2d9 100644 --- a/csharp/ql/test/resources/stubs/System.IO.Compression.ZipFile/4.3.0/System.IO.Compression.ZipFile.csproj +++ b/csharp/ql/test/resources/stubs/System.IO.Compression.ZipFile/4.3.0/System.IO.Compression.ZipFile.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.IO.Compression/4.3.0/System.IO.Compression.csproj b/csharp/ql/test/resources/stubs/System.IO.Compression/4.3.0/System.IO.Compression.csproj index f3323292dcdd..5af530f71b35 100644 --- a/csharp/ql/test/resources/stubs/System.IO.Compression/4.3.0/System.IO.Compression.csproj +++ b/csharp/ql/test/resources/stubs/System.IO.Compression/4.3.0/System.IO.Compression.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.IO.FileSystem.Primitives/4.3.0/System.IO.FileSystem.Primitives.csproj b/csharp/ql/test/resources/stubs/System.IO.FileSystem.Primitives/4.3.0/System.IO.FileSystem.Primitives.csproj index 05ae99d36ae6..45b1e4e8f0ef 100644 --- a/csharp/ql/test/resources/stubs/System.IO.FileSystem.Primitives/4.3.0/System.IO.FileSystem.Primitives.csproj +++ b/csharp/ql/test/resources/stubs/System.IO.FileSystem.Primitives/4.3.0/System.IO.FileSystem.Primitives.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.IO.FileSystem/4.3.0/System.IO.FileSystem.csproj b/csharp/ql/test/resources/stubs/System.IO.FileSystem/4.3.0/System.IO.FileSystem.csproj index c5d1e07015aa..2d8600a5a32a 100644 --- a/csharp/ql/test/resources/stubs/System.IO.FileSystem/4.3.0/System.IO.FileSystem.csproj +++ b/csharp/ql/test/resources/stubs/System.IO.FileSystem/4.3.0/System.IO.FileSystem.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.IO/4.3.0/System.IO.csproj b/csharp/ql/test/resources/stubs/System.IO/4.3.0/System.IO.csproj index 531a3f6347c0..cf4711e44718 100644 --- a/csharp/ql/test/resources/stubs/System.IO/4.3.0/System.IO.csproj +++ b/csharp/ql/test/resources/stubs/System.IO/4.3.0/System.IO.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.IdentityModel.Tokens.Jwt/7.5.0/System.IdentityModel.Tokens.Jwt.csproj b/csharp/ql/test/resources/stubs/System.IdentityModel.Tokens.Jwt/7.5.0/System.IdentityModel.Tokens.Jwt.csproj index 2f5d2330dc95..ad74be7ad082 100644 --- a/csharp/ql/test/resources/stubs/System.IdentityModel.Tokens.Jwt/7.5.0/System.IdentityModel.Tokens.Jwt.csproj +++ b/csharp/ql/test/resources/stubs/System.IdentityModel.Tokens.Jwt/7.5.0/System.IdentityModel.Tokens.Jwt.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Linq.Expressions/4.3.0/System.Linq.Expressions.csproj b/csharp/ql/test/resources/stubs/System.Linq.Expressions/4.3.0/System.Linq.Expressions.csproj index 2942048df30e..a44d7b8937ec 100644 --- a/csharp/ql/test/resources/stubs/System.Linq.Expressions/4.3.0/System.Linq.Expressions.csproj +++ b/csharp/ql/test/resources/stubs/System.Linq.Expressions/4.3.0/System.Linq.Expressions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Linq.Queryable/4.0.1/System.Linq.Queryable.csproj b/csharp/ql/test/resources/stubs/System.Linq.Queryable/4.0.1/System.Linq.Queryable.csproj index 1b9179010ea4..d80dbdd4d7c0 100644 --- a/csharp/ql/test/resources/stubs/System.Linq.Queryable/4.0.1/System.Linq.Queryable.csproj +++ b/csharp/ql/test/resources/stubs/System.Linq.Queryable/4.0.1/System.Linq.Queryable.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Linq/4.3.0/System.Linq.csproj b/csharp/ql/test/resources/stubs/System.Linq/4.3.0/System.Linq.csproj index df71d560e137..5e81708b4cc3 100644 --- a/csharp/ql/test/resources/stubs/System.Linq/4.3.0/System.Linq.csproj +++ b/csharp/ql/test/resources/stubs/System.Linq/4.3.0/System.Linq.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Memory.Data/1.0.2/System.Memory.Data.csproj b/csharp/ql/test/resources/stubs/System.Memory.Data/1.0.2/System.Memory.Data.csproj index c444f79ac6f3..c9b6459dcb3b 100644 --- a/csharp/ql/test/resources/stubs/System.Memory.Data/1.0.2/System.Memory.Data.csproj +++ b/csharp/ql/test/resources/stubs/System.Memory.Data/1.0.2/System.Memory.Data.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Memory/4.5.4/System.Memory.csproj b/csharp/ql/test/resources/stubs/System.Memory/4.5.4/System.Memory.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Memory/4.5.4/System.Memory.csproj +++ b/csharp/ql/test/resources/stubs/System.Memory/4.5.4/System.Memory.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Memory/4.6.0/System.Memory.csproj b/csharp/ql/test/resources/stubs/System.Memory/4.6.0/System.Memory.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Memory/4.6.0/System.Memory.csproj +++ b/csharp/ql/test/resources/stubs/System.Memory/4.6.0/System.Memory.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Net.Http/4.3.0/System.Net.Http.csproj b/csharp/ql/test/resources/stubs/System.Net.Http/4.3.0/System.Net.Http.csproj index 8b07cde32bf4..36246904dc0f 100644 --- a/csharp/ql/test/resources/stubs/System.Net.Http/4.3.0/System.Net.Http.csproj +++ b/csharp/ql/test/resources/stubs/System.Net.Http/4.3.0/System.Net.Http.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Net.Primitives/4.3.0/System.Net.Primitives.csproj b/csharp/ql/test/resources/stubs/System.Net.Primitives/4.3.0/System.Net.Primitives.csproj index 1f3b6fd84a87..13849284ebda 100644 --- a/csharp/ql/test/resources/stubs/System.Net.Primitives/4.3.0/System.Net.Primitives.csproj +++ b/csharp/ql/test/resources/stubs/System.Net.Primitives/4.3.0/System.Net.Primitives.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Net.Sockets/4.3.0/System.Net.Sockets.csproj b/csharp/ql/test/resources/stubs/System.Net.Sockets/4.3.0/System.Net.Sockets.csproj index cf920ee7e922..0644b1a5fc3b 100644 --- a/csharp/ql/test/resources/stubs/System.Net.Sockets/4.3.0/System.Net.Sockets.csproj +++ b/csharp/ql/test/resources/stubs/System.Net.Sockets/4.3.0/System.Net.Sockets.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Numerics.Vectors/4.5.0/System.Numerics.Vectors.csproj b/csharp/ql/test/resources/stubs/System.Numerics.Vectors/4.5.0/System.Numerics.Vectors.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Numerics.Vectors/4.5.0/System.Numerics.Vectors.csproj +++ b/csharp/ql/test/resources/stubs/System.Numerics.Vectors/4.5.0/System.Numerics.Vectors.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.ObjectModel/4.3.0/System.ObjectModel.csproj b/csharp/ql/test/resources/stubs/System.ObjectModel/4.3.0/System.ObjectModel.csproj index 6aa1406d634d..48f65b0b017d 100644 --- a/csharp/ql/test/resources/stubs/System.ObjectModel/4.3.0/System.ObjectModel.csproj +++ b/csharp/ql/test/resources/stubs/System.ObjectModel/4.3.0/System.ObjectModel.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Reflection.Emit.ILGeneration/4.3.0/System.Reflection.Emit.ILGeneration.csproj b/csharp/ql/test/resources/stubs/System.Reflection.Emit.ILGeneration/4.3.0/System.Reflection.Emit.ILGeneration.csproj index 80dffb6c91a3..b5752b6f67da 100644 --- a/csharp/ql/test/resources/stubs/System.Reflection.Emit.ILGeneration/4.3.0/System.Reflection.Emit.ILGeneration.csproj +++ b/csharp/ql/test/resources/stubs/System.Reflection.Emit.ILGeneration/4.3.0/System.Reflection.Emit.ILGeneration.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Reflection.Emit.Lightweight/4.7.0/System.Reflection.Emit.Lightweight.csproj b/csharp/ql/test/resources/stubs/System.Reflection.Emit.Lightweight/4.7.0/System.Reflection.Emit.Lightweight.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Reflection.Emit.Lightweight/4.7.0/System.Reflection.Emit.Lightweight.csproj +++ b/csharp/ql/test/resources/stubs/System.Reflection.Emit.Lightweight/4.7.0/System.Reflection.Emit.Lightweight.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Reflection.Emit/4.7.0/System.Reflection.Emit.csproj b/csharp/ql/test/resources/stubs/System.Reflection.Emit/4.7.0/System.Reflection.Emit.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Reflection.Emit/4.7.0/System.Reflection.Emit.csproj +++ b/csharp/ql/test/resources/stubs/System.Reflection.Emit/4.7.0/System.Reflection.Emit.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Reflection.Extensions/4.3.0/System.Reflection.Extensions.csproj b/csharp/ql/test/resources/stubs/System.Reflection.Extensions/4.3.0/System.Reflection.Extensions.csproj index 3418538bc44b..84fe0ba3fd93 100644 --- a/csharp/ql/test/resources/stubs/System.Reflection.Extensions/4.3.0/System.Reflection.Extensions.csproj +++ b/csharp/ql/test/resources/stubs/System.Reflection.Extensions/4.3.0/System.Reflection.Extensions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Reflection.Primitives/4.3.0/System.Reflection.Primitives.csproj b/csharp/ql/test/resources/stubs/System.Reflection.Primitives/4.3.0/System.Reflection.Primitives.csproj index 4ed1849a7e34..e03091cbb831 100644 --- a/csharp/ql/test/resources/stubs/System.Reflection.Primitives/4.3.0/System.Reflection.Primitives.csproj +++ b/csharp/ql/test/resources/stubs/System.Reflection.Primitives/4.3.0/System.Reflection.Primitives.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Reflection.TypeExtensions/4.7.0/System.Reflection.TypeExtensions.csproj b/csharp/ql/test/resources/stubs/System.Reflection.TypeExtensions/4.7.0/System.Reflection.TypeExtensions.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Reflection.TypeExtensions/4.7.0/System.Reflection.TypeExtensions.csproj +++ b/csharp/ql/test/resources/stubs/System.Reflection.TypeExtensions/4.7.0/System.Reflection.TypeExtensions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Reflection/4.3.0/System.Reflection.csproj b/csharp/ql/test/resources/stubs/System.Reflection/4.3.0/System.Reflection.csproj index 0869c160e2d0..3c5a8575fb74 100644 --- a/csharp/ql/test/resources/stubs/System.Reflection/4.3.0/System.Reflection.csproj +++ b/csharp/ql/test/resources/stubs/System.Reflection/4.3.0/System.Reflection.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Resources.ResourceManager/4.3.0/System.Resources.ResourceManager.csproj b/csharp/ql/test/resources/stubs/System.Resources.ResourceManager/4.3.0/System.Resources.ResourceManager.csproj index 195c1b3ba7c3..7059a7567450 100644 --- a/csharp/ql/test/resources/stubs/System.Resources.ResourceManager/4.3.0/System.Resources.ResourceManager.csproj +++ b/csharp/ql/test/resources/stubs/System.Resources.ResourceManager/4.3.0/System.Resources.ResourceManager.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Runtime.CompilerServices.Unsafe/6.0.0/System.Runtime.CompilerServices.Unsafe.csproj b/csharp/ql/test/resources/stubs/System.Runtime.CompilerServices.Unsafe/6.0.0/System.Runtime.CompilerServices.Unsafe.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Runtime.CompilerServices.Unsafe/6.0.0/System.Runtime.CompilerServices.Unsafe.csproj +++ b/csharp/ql/test/resources/stubs/System.Runtime.CompilerServices.Unsafe/6.0.0/System.Runtime.CompilerServices.Unsafe.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Runtime.Extensions/4.3.0/System.Runtime.Extensions.csproj b/csharp/ql/test/resources/stubs/System.Runtime.Extensions/4.3.0/System.Runtime.Extensions.csproj index 4ed1849a7e34..e03091cbb831 100644 --- a/csharp/ql/test/resources/stubs/System.Runtime.Extensions/4.3.0/System.Runtime.Extensions.csproj +++ b/csharp/ql/test/resources/stubs/System.Runtime.Extensions/4.3.0/System.Runtime.Extensions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Runtime.Handles/4.3.0/System.Runtime.Handles.csproj b/csharp/ql/test/resources/stubs/System.Runtime.Handles/4.3.0/System.Runtime.Handles.csproj index 4ed1849a7e34..e03091cbb831 100644 --- a/csharp/ql/test/resources/stubs/System.Runtime.Handles/4.3.0/System.Runtime.Handles.csproj +++ b/csharp/ql/test/resources/stubs/System.Runtime.Handles/4.3.0/System.Runtime.Handles.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Runtime.InteropServices.RuntimeInformation/4.3.0/System.Runtime.InteropServices.RuntimeInformation.csproj b/csharp/ql/test/resources/stubs/System.Runtime.InteropServices.RuntimeInformation/4.3.0/System.Runtime.InteropServices.RuntimeInformation.csproj index 6f9c25eb7441..3bcf3a63a774 100644 --- a/csharp/ql/test/resources/stubs/System.Runtime.InteropServices.RuntimeInformation/4.3.0/System.Runtime.InteropServices.RuntimeInformation.csproj +++ b/csharp/ql/test/resources/stubs/System.Runtime.InteropServices.RuntimeInformation/4.3.0/System.Runtime.InteropServices.RuntimeInformation.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Runtime.InteropServices/4.3.0/System.Runtime.InteropServices.csproj b/csharp/ql/test/resources/stubs/System.Runtime.InteropServices/4.3.0/System.Runtime.InteropServices.csproj index 2e413fd28d58..29b2e27579f8 100644 --- a/csharp/ql/test/resources/stubs/System.Runtime.InteropServices/4.3.0/System.Runtime.InteropServices.csproj +++ b/csharp/ql/test/resources/stubs/System.Runtime.InteropServices/4.3.0/System.Runtime.InteropServices.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Runtime.Numerics/4.3.0/System.Runtime.Numerics.csproj b/csharp/ql/test/resources/stubs/System.Runtime.Numerics/4.3.0/System.Runtime.Numerics.csproj index 57754ba8a4e1..7391fce40cde 100644 --- a/csharp/ql/test/resources/stubs/System.Runtime.Numerics/4.3.0/System.Runtime.Numerics.csproj +++ b/csharp/ql/test/resources/stubs/System.Runtime.Numerics/4.3.0/System.Runtime.Numerics.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Runtime.Serialization.Formatters/4.3.0/System.Runtime.Serialization.Formatters.csproj b/csharp/ql/test/resources/stubs/System.Runtime.Serialization.Formatters/4.3.0/System.Runtime.Serialization.Formatters.csproj index 969789e70054..11b6e7e27e01 100644 --- a/csharp/ql/test/resources/stubs/System.Runtime.Serialization.Formatters/4.3.0/System.Runtime.Serialization.Formatters.csproj +++ b/csharp/ql/test/resources/stubs/System.Runtime.Serialization.Formatters/4.3.0/System.Runtime.Serialization.Formatters.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Runtime.Serialization.Primitives/4.3.0/System.Runtime.Serialization.Primitives.csproj b/csharp/ql/test/resources/stubs/System.Runtime.Serialization.Primitives/4.3.0/System.Runtime.Serialization.Primitives.csproj index 296b55a60a8f..a7640c74aa7b 100644 --- a/csharp/ql/test/resources/stubs/System.Runtime.Serialization.Primitives/4.3.0/System.Runtime.Serialization.Primitives.csproj +++ b/csharp/ql/test/resources/stubs/System.Runtime.Serialization.Primitives/4.3.0/System.Runtime.Serialization.Primitives.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Runtime/4.3.0/System.Runtime.csproj b/csharp/ql/test/resources/stubs/System.Runtime/4.3.0/System.Runtime.csproj index 32b25ba435e5..c1bb4d18f73d 100644 --- a/csharp/ql/test/resources/stubs/System.Runtime/4.3.0/System.Runtime.csproj +++ b/csharp/ql/test/resources/stubs/System.Runtime/4.3.0/System.Runtime.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Security.Cryptography.Algorithms/4.3.0/System.Security.Cryptography.Algorithms.csproj b/csharp/ql/test/resources/stubs/System.Security.Cryptography.Algorithms/4.3.0/System.Security.Cryptography.Algorithms.csproj index 4c2a4eaf5883..9f73adccf5d8 100644 --- a/csharp/ql/test/resources/stubs/System.Security.Cryptography.Algorithms/4.3.0/System.Security.Cryptography.Algorithms.csproj +++ b/csharp/ql/test/resources/stubs/System.Security.Cryptography.Algorithms/4.3.0/System.Security.Cryptography.Algorithms.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Security.Cryptography.Cng/4.3.0/System.Security.Cryptography.Cng.csproj b/csharp/ql/test/resources/stubs/System.Security.Cryptography.Cng/4.3.0/System.Security.Cryptography.Cng.csproj index cadc9113fab0..ed73cd974f73 100644 --- a/csharp/ql/test/resources/stubs/System.Security.Cryptography.Cng/4.3.0/System.Security.Cryptography.Cng.csproj +++ b/csharp/ql/test/resources/stubs/System.Security.Cryptography.Cng/4.3.0/System.Security.Cryptography.Cng.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Security.Cryptography.Csp/4.3.0/System.Security.Cryptography.Csp.csproj b/csharp/ql/test/resources/stubs/System.Security.Cryptography.Csp/4.3.0/System.Security.Cryptography.Csp.csproj index 8aa9b969d659..894b05f5b5d2 100644 --- a/csharp/ql/test/resources/stubs/System.Security.Cryptography.Csp/4.3.0/System.Security.Cryptography.Csp.csproj +++ b/csharp/ql/test/resources/stubs/System.Security.Cryptography.Csp/4.3.0/System.Security.Cryptography.Csp.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Security.Cryptography.Encoding/4.3.0/System.Security.Cryptography.Encoding.csproj b/csharp/ql/test/resources/stubs/System.Security.Cryptography.Encoding/4.3.0/System.Security.Cryptography.Encoding.csproj index 4ee4e2b80932..27721f827a71 100644 --- a/csharp/ql/test/resources/stubs/System.Security.Cryptography.Encoding/4.3.0/System.Security.Cryptography.Encoding.csproj +++ b/csharp/ql/test/resources/stubs/System.Security.Cryptography.Encoding/4.3.0/System.Security.Cryptography.Encoding.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Security.Cryptography.OpenSsl/4.3.0/System.Security.Cryptography.OpenSsl.csproj b/csharp/ql/test/resources/stubs/System.Security.Cryptography.OpenSsl/4.3.0/System.Security.Cryptography.OpenSsl.csproj index 8ba6c5da32d0..b8300780e8de 100644 --- a/csharp/ql/test/resources/stubs/System.Security.Cryptography.OpenSsl/4.3.0/System.Security.Cryptography.OpenSsl.csproj +++ b/csharp/ql/test/resources/stubs/System.Security.Cryptography.OpenSsl/4.3.0/System.Security.Cryptography.OpenSsl.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Security.Cryptography.Pkcs/9.0.4/System.Security.Cryptography.Pkcs.csproj b/csharp/ql/test/resources/stubs/System.Security.Cryptography.Pkcs/9.0.4/System.Security.Cryptography.Pkcs.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Security.Cryptography.Pkcs/9.0.4/System.Security.Cryptography.Pkcs.csproj +++ b/csharp/ql/test/resources/stubs/System.Security.Cryptography.Pkcs/9.0.4/System.Security.Cryptography.Pkcs.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Security.Cryptography.Primitives/4.3.0/System.Security.Cryptography.Primitives.csproj b/csharp/ql/test/resources/stubs/System.Security.Cryptography.Primitives/4.3.0/System.Security.Cryptography.Primitives.csproj index 4ea09d97c5cf..9d13c0aca7e2 100644 --- a/csharp/ql/test/resources/stubs/System.Security.Cryptography.Primitives/4.3.0/System.Security.Cryptography.Primitives.csproj +++ b/csharp/ql/test/resources/stubs/System.Security.Cryptography.Primitives/4.3.0/System.Security.Cryptography.Primitives.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/9.0.1/System.Security.Cryptography.ProtectedData.csproj b/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/9.0.1/System.Security.Cryptography.ProtectedData.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/9.0.1/System.Security.Cryptography.ProtectedData.csproj +++ b/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/9.0.1/System.Security.Cryptography.ProtectedData.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/9.0.4/System.Security.Cryptography.ProtectedData.csproj b/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/9.0.4/System.Security.Cryptography.ProtectedData.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/9.0.4/System.Security.Cryptography.ProtectedData.csproj +++ b/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/9.0.4/System.Security.Cryptography.ProtectedData.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Security.Cryptography.X509Certificates/4.3.0/System.Security.Cryptography.X509Certificates.csproj b/csharp/ql/test/resources/stubs/System.Security.Cryptography.X509Certificates/4.3.0/System.Security.Cryptography.X509Certificates.csproj index 13e32293916c..5b4bcef20f96 100644 --- a/csharp/ql/test/resources/stubs/System.Security.Cryptography.X509Certificates/4.3.0/System.Security.Cryptography.X509Certificates.csproj +++ b/csharp/ql/test/resources/stubs/System.Security.Cryptography.X509Certificates/4.3.0/System.Security.Cryptography.X509Certificates.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Security.Permissions/9.0.1/System.Security.Permissions.csproj b/csharp/ql/test/resources/stubs/System.Security.Permissions/9.0.1/System.Security.Permissions.csproj index e25e81c4c5f4..da1d02073433 100644 --- a/csharp/ql/test/resources/stubs/System.Security.Permissions/9.0.1/System.Security.Permissions.csproj +++ b/csharp/ql/test/resources/stubs/System.Security.Permissions/9.0.1/System.Security.Permissions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Text.Encoding.Extensions/4.3.0/System.Text.Encoding.Extensions.csproj b/csharp/ql/test/resources/stubs/System.Text.Encoding.Extensions/4.3.0/System.Text.Encoding.Extensions.csproj index 8cc5decfb55e..944efc80f303 100644 --- a/csharp/ql/test/resources/stubs/System.Text.Encoding.Extensions/4.3.0/System.Text.Encoding.Extensions.csproj +++ b/csharp/ql/test/resources/stubs/System.Text.Encoding.Extensions/4.3.0/System.Text.Encoding.Extensions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Text.Encoding/4.3.0/System.Text.Encoding.csproj b/csharp/ql/test/resources/stubs/System.Text.Encoding/4.3.0/System.Text.Encoding.csproj index 4ed1849a7e34..e03091cbb831 100644 --- a/csharp/ql/test/resources/stubs/System.Text.Encoding/4.3.0/System.Text.Encoding.csproj +++ b/csharp/ql/test/resources/stubs/System.Text.Encoding/4.3.0/System.Text.Encoding.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Text.Encodings.Web/4.7.2/System.Text.Encodings.Web.csproj b/csharp/ql/test/resources/stubs/System.Text.Encodings.Web/4.7.2/System.Text.Encodings.Web.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Text.Encodings.Web/4.7.2/System.Text.Encodings.Web.csproj +++ b/csharp/ql/test/resources/stubs/System.Text.Encodings.Web/4.7.2/System.Text.Encodings.Web.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Text.Json/4.7.2/System.Text.Json.csproj b/csharp/ql/test/resources/stubs/System.Text.Json/4.7.2/System.Text.Json.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Text.Json/4.7.2/System.Text.Json.csproj +++ b/csharp/ql/test/resources/stubs/System.Text.Json/4.7.2/System.Text.Json.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Text.RegularExpressions/4.3.0/System.Text.RegularExpressions.csproj b/csharp/ql/test/resources/stubs/System.Text.RegularExpressions/4.3.0/System.Text.RegularExpressions.csproj index 05ae99d36ae6..45b1e4e8f0ef 100644 --- a/csharp/ql/test/resources/stubs/System.Text.RegularExpressions/4.3.0/System.Text.RegularExpressions.csproj +++ b/csharp/ql/test/resources/stubs/System.Text.RegularExpressions/4.3.0/System.Text.RegularExpressions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Threading.Tasks.Extensions/4.3.0/System.Threading.Tasks.Extensions.csproj b/csharp/ql/test/resources/stubs/System.Threading.Tasks.Extensions/4.3.0/System.Threading.Tasks.Extensions.csproj index 9719080f3140..5fadc1ee521c 100644 --- a/csharp/ql/test/resources/stubs/System.Threading.Tasks.Extensions/4.3.0/System.Threading.Tasks.Extensions.csproj +++ b/csharp/ql/test/resources/stubs/System.Threading.Tasks.Extensions/4.3.0/System.Threading.Tasks.Extensions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Threading.Tasks.Extensions/4.5.4/System.Threading.Tasks.Extensions.csproj b/csharp/ql/test/resources/stubs/System.Threading.Tasks.Extensions/4.5.4/System.Threading.Tasks.Extensions.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Threading.Tasks.Extensions/4.5.4/System.Threading.Tasks.Extensions.csproj +++ b/csharp/ql/test/resources/stubs/System.Threading.Tasks.Extensions/4.5.4/System.Threading.Tasks.Extensions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Threading.Tasks/4.3.0/System.Threading.Tasks.csproj b/csharp/ql/test/resources/stubs/System.Threading.Tasks/4.3.0/System.Threading.Tasks.csproj index 4ed1849a7e34..e03091cbb831 100644 --- a/csharp/ql/test/resources/stubs/System.Threading.Tasks/4.3.0/System.Threading.Tasks.csproj +++ b/csharp/ql/test/resources/stubs/System.Threading.Tasks/4.3.0/System.Threading.Tasks.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Threading.Timer/4.3.0/System.Threading.Timer.csproj b/csharp/ql/test/resources/stubs/System.Threading.Timer/4.3.0/System.Threading.Timer.csproj index 4ed1849a7e34..e03091cbb831 100644 --- a/csharp/ql/test/resources/stubs/System.Threading.Timer/4.3.0/System.Threading.Timer.csproj +++ b/csharp/ql/test/resources/stubs/System.Threading.Timer/4.3.0/System.Threading.Timer.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Threading/4.3.0/System.Threading.csproj b/csharp/ql/test/resources/stubs/System.Threading/4.3.0/System.Threading.csproj index a52b105bcb73..72f1cb505bbc 100644 --- a/csharp/ql/test/resources/stubs/System.Threading/4.3.0/System.Threading.csproj +++ b/csharp/ql/test/resources/stubs/System.Threading/4.3.0/System.Threading.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Windows.Extensions/9.0.1/System.Windows.Extensions.csproj b/csharp/ql/test/resources/stubs/System.Windows.Extensions/9.0.1/System.Windows.Extensions.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/System.Windows.Extensions/9.0.1/System.Windows.Extensions.csproj +++ b/csharp/ql/test/resources/stubs/System.Windows.Extensions/9.0.1/System.Windows.Extensions.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Xml.ReaderWriter/4.3.0/System.Xml.ReaderWriter.csproj b/csharp/ql/test/resources/stubs/System.Xml.ReaderWriter/4.3.0/System.Xml.ReaderWriter.csproj index 57b27b200a4c..0b9b8f7afcc9 100644 --- a/csharp/ql/test/resources/stubs/System.Xml.ReaderWriter/4.3.0/System.Xml.ReaderWriter.csproj +++ b/csharp/ql/test/resources/stubs/System.Xml.ReaderWriter/4.3.0/System.Xml.ReaderWriter.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Xml.XDocument/4.3.0/System.Xml.XDocument.csproj b/csharp/ql/test/resources/stubs/System.Xml.XDocument/4.3.0/System.Xml.XDocument.csproj index d594a8ea0f40..ccd054372772 100644 --- a/csharp/ql/test/resources/stubs/System.Xml.XDocument/4.3.0/System.Xml.XDocument.csproj +++ b/csharp/ql/test/resources/stubs/System.Xml.XDocument/4.3.0/System.Xml.XDocument.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj b/csharp/ql/test/resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj index adf087e7314c..6d21fd550222 100644 --- a/csharp/ql/test/resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj +++ b/csharp/ql/test/resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj b/csharp/ql/test/resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj index 396498c82614..dc08e6a07f72 100644 --- a/csharp/ql/test/resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +++ b/csharp/ql/test/resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj b/csharp/ql/test/resources/stubs/runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj +++ b/csharp/ql/test/resources/stubs/runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj b/csharp/ql/test/resources/stubs/runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj +++ b/csharp/ql/test/resources/stubs/runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj b/csharp/ql/test/resources/stubs/runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj +++ b/csharp/ql/test/resources/stubs/runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.native.System.Data.SqlClient.sni.csproj b/csharp/ql/test/resources/stubs/runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.native.System.Data.SqlClient.sni.csproj index db0fe00833ee..651bfd2c5490 100644 --- a/csharp/ql/test/resources/stubs/runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.native.System.Data.SqlClient.sni.csproj +++ b/csharp/ql/test/resources/stubs/runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.native.System.Data.SqlClient.sni.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.native.System.IO.Compression/4.3.0/runtime.native.System.IO.Compression.csproj b/csharp/ql/test/resources/stubs/runtime.native.System.IO.Compression/4.3.0/runtime.native.System.IO.Compression.csproj index 32b25ba435e5..c1bb4d18f73d 100644 --- a/csharp/ql/test/resources/stubs/runtime.native.System.IO.Compression/4.3.0/runtime.native.System.IO.Compression.csproj +++ b/csharp/ql/test/resources/stubs/runtime.native.System.IO.Compression/4.3.0/runtime.native.System.IO.Compression.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.native.System.Net.Http/4.3.0/runtime.native.System.Net.Http.csproj b/csharp/ql/test/resources/stubs/runtime.native.System.Net.Http/4.3.0/runtime.native.System.Net.Http.csproj index 32b25ba435e5..c1bb4d18f73d 100644 --- a/csharp/ql/test/resources/stubs/runtime.native.System.Net.Http/4.3.0/runtime.native.System.Net.Http.csproj +++ b/csharp/ql/test/resources/stubs/runtime.native.System.Net.Http/4.3.0/runtime.native.System.Net.Http.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.native.System.Security.Cryptography.Apple/4.3.0/runtime.native.System.Security.Cryptography.Apple.csproj b/csharp/ql/test/resources/stubs/runtime.native.System.Security.Cryptography.Apple/4.3.0/runtime.native.System.Security.Cryptography.Apple.csproj index 27e7adb1b755..f2560c2ad2f1 100644 --- a/csharp/ql/test/resources/stubs/runtime.native.System.Security.Cryptography.Apple/4.3.0/runtime.native.System.Security.Cryptography.Apple.csproj +++ b/csharp/ql/test/resources/stubs/runtime.native.System.Security.Cryptography.Apple/4.3.0/runtime.native.System.Security.Cryptography.Apple.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.native.System.Security.Cryptography.OpenSsl.csproj b/csharp/ql/test/resources/stubs/runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.native.System.Security.Cryptography.OpenSsl.csproj index a864639497f2..bb4a0f554a80 100644 --- a/csharp/ql/test/resources/stubs/runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.native.System.Security.Cryptography.OpenSsl.csproj +++ b/csharp/ql/test/resources/stubs/runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.native.System.Security.Cryptography.OpenSsl.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.native.System/4.3.0/runtime.native.System.csproj b/csharp/ql/test/resources/stubs/runtime.native.System/4.3.0/runtime.native.System.csproj index 32b25ba435e5..c1bb4d18f73d 100644 --- a/csharp/ql/test/resources/stubs/runtime.native.System/4.3.0/runtime.native.System.csproj +++ b/csharp/ql/test/resources/stubs/runtime.native.System/4.3.0/runtime.native.System.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj b/csharp/ql/test/resources/stubs/runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj +++ b/csharp/ql/test/resources/stubs/runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj b/csharp/ql/test/resources/stubs/runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj +++ b/csharp/ql/test/resources/stubs/runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0/runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple.csproj b/csharp/ql/test/resources/stubs/runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0/runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0/runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple.csproj +++ b/csharp/ql/test/resources/stubs/runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0/runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj b/csharp/ql/test/resources/stubs/runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj +++ b/csharp/ql/test/resources/stubs/runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj b/csharp/ql/test/resources/stubs/runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj +++ b/csharp/ql/test/resources/stubs/runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj b/csharp/ql/test/resources/stubs/runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj +++ b/csharp/ql/test/resources/stubs/runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj b/csharp/ql/test/resources/stubs/runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj +++ b/csharp/ql/test/resources/stubs/runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj b/csharp/ql/test/resources/stubs/runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj +++ b/csharp/ql/test/resources/stubs/runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0/runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-arm64.runtime.native.System.Data.SqlClient.sni.csproj b/csharp/ql/test/resources/stubs/runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-arm64.runtime.native.System.Data.SqlClient.sni.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-arm64.runtime.native.System.Data.SqlClient.sni.csproj +++ b/csharp/ql/test/resources/stubs/runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-arm64.runtime.native.System.Data.SqlClient.sni.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-x64.runtime.native.System.Data.SqlClient.sni.csproj b/csharp/ql/test/resources/stubs/runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-x64.runtime.native.System.Data.SqlClient.sni.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-x64.runtime.native.System.Data.SqlClient.sni.csproj +++ b/csharp/ql/test/resources/stubs/runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-x64.runtime.native.System.Data.SqlClient.sni.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-x86.runtime.native.System.Data.SqlClient.sni.csproj b/csharp/ql/test/resources/stubs/runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-x86.runtime.native.System.Data.SqlClient.sni.csproj index c7646fbae204..2be6995cd169 100644 --- a/csharp/ql/test/resources/stubs/runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-x86.runtime.native.System.Data.SqlClient.sni.csproj +++ b/csharp/ql/test/resources/stubs/runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-x86.runtime.native.System.Data.SqlClient.sni.csproj @@ -1,6 +1,6 @@ - net9.0 + net10.0 true bin\ false diff --git a/csharp/ql/test/utils/modeleditor/ApplicationModeEndpoints.expected b/csharp/ql/test/utils/modeleditor/ApplicationModeEndpoints.expected index 7dcf3b4f8774..b73eb6717e51 100644 --- a/csharp/ql/test/utils/modeleditor/ApplicationModeEndpoints.expected +++ b/csharp/ql/test/utils/modeleditor/ApplicationModeEndpoints.expected @@ -1,12 +1,12 @@ -| NonPublicClass.cs:9:9:9:31 | call to method WriteLine | System | Console | WriteLine | (System.String) | true | System.Console | 9.0.0.0 | neutral | source | -| PublicClass.cs:9:9:9:30 | call to method WriteLine | System | Console | WriteLine | (System.String) | true | System.Console | 9.0.0.0 | neutral | source | -| PublicClass.cs:14:9:14:30 | call to method WriteLine | System | Console | WriteLine | (System.String) | true | System.Console | 9.0.0.0 | neutral | source | -| PublicClass.cs:19:9:19:51 | call to method WriteLine | System | Console | WriteLine | (System.String) | true | System.Console | 9.0.0.0 | neutral | source | -| PublicClass.cs:19:33:19:50 | call to method ReadLine | System | Console | ReadLine | () | true | System.Console | 9.0.0.0 | neutral | source | -| PublicClass.cs:19:33:19:50 | call to method ReadLine | System | Console | ReadLine | () | true | System.Console | 9.0.0.0 | source | source | -| PublicClass.cs:24:9:24:46 | call to method Write | System | Console | Write | (System.Object) | true | System.Console | 9.0.0.0 | neutral | source | -| PublicClass.cs:30:9:30:30 | call to method WriteLine | System | Console | WriteLine | (System.String) | true | System.Console | 9.0.0.0 | neutral | source | -| PublicGenericClass.cs:9:9:9:30 | call to method WriteLine | System | Console | WriteLine | (System.Object) | true | System.Console | 9.0.0.0 | neutral | source | -| PublicGenericClass.cs:14:9:14:30 | call to method WriteLine | System | Console | WriteLine | (System.Object) | true | System.Console | 9.0.0.0 | neutral | source | -| PublicGenericInterface.cs:13:9:13:30 | call to method WriteLine | System | Console | WriteLine | (System.String) | true | System.Console | 9.0.0.0 | neutral | source | -| PublicInterface.cs:13:9:13:30 | call to method WriteLine | System | Console | WriteLine | (System.String) | true | System.Console | 9.0.0.0 | neutral | source | +| NonPublicClass.cs:9:9:9:31 | call to method WriteLine | System | Console | WriteLine | (System.String) | true | System.Console | 10.0.0.0 | neutral | source | +| PublicClass.cs:9:9:9:30 | call to method WriteLine | System | Console | WriteLine | (System.String) | true | System.Console | 10.0.0.0 | neutral | source | +| PublicClass.cs:14:9:14:30 | call to method WriteLine | System | Console | WriteLine | (System.String) | true | System.Console | 10.0.0.0 | neutral | source | +| PublicClass.cs:19:9:19:51 | call to method WriteLine | System | Console | WriteLine | (System.String) | true | System.Console | 10.0.0.0 | neutral | source | +| PublicClass.cs:19:33:19:50 | call to method ReadLine | System | Console | ReadLine | () | true | System.Console | 10.0.0.0 | neutral | source | +| PublicClass.cs:19:33:19:50 | call to method ReadLine | System | Console | ReadLine | () | true | System.Console | 10.0.0.0 | source | source | +| PublicClass.cs:24:9:24:46 | call to method Write | System | Console | Write | (System.Object) | true | System.Console | 10.0.0.0 | neutral | source | +| PublicClass.cs:30:9:30:30 | call to method WriteLine | System | Console | WriteLine | (System.String) | true | System.Console | 10.0.0.0 | neutral | source | +| PublicGenericClass.cs:9:9:9:30 | call to method WriteLine | System | Console | WriteLine | (System.Object) | true | System.Console | 10.0.0.0 | neutral | source | +| PublicGenericClass.cs:14:9:14:30 | call to method WriteLine | System | Console | WriteLine | (System.Object) | true | System.Console | 10.0.0.0 | neutral | source | +| PublicGenericInterface.cs:13:9:13:30 | call to method WriteLine | System | Console | WriteLine | (System.String) | true | System.Console | 10.0.0.0 | neutral | source | +| PublicInterface.cs:13:9:13:30 | call to method WriteLine | System | Console | WriteLine | (System.String) | true | System.Console | 10.0.0.0 | neutral | source | diff --git a/csharp/scripts/create-extractor-pack.sh b/csharp/scripts/create-extractor-pack.sh index a1b5a044ebc8..3003dd81172d 100755 --- a/csharp/scripts/create-extractor-pack.sh +++ b/csharp/scripts/create-extractor-pack.sh @@ -21,7 +21,7 @@ mkdir -p extractor-pack mkdir -p extractor-pack/tools/${platform} function dotnet_publish { - dotnet publish --self-contained --configuration Release --runtime ${dotnet_platform} -p:RuntimeFrameworkVersion=9.0.5 $1 --output extractor-pack/tools/${platform} + dotnet publish --self-contained --configuration Release --runtime ${dotnet_platform} -p:RuntimeFrameworkVersion=10.0.0 $1 --output extractor-pack/tools/${platform} } dotnet tool restore diff --git a/csharp/scripts/gen-assembly-info.py b/csharp/scripts/gen-assembly-info.py index ca88f5e1683d..9937477f70de 100644 --- a/csharp/scripts/gen-assembly-info.py +++ b/csharp/scripts/gen-assembly-info.py @@ -28,7 +28,7 @@ def options(): [assembly: AssemblyCompany("GitHub")] [assembly: AssemblyCopyright("Copyright © 2024 GitHub")] -[assembly: System.Runtime.Versioning.TargetFramework(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")] +[assembly: System.Runtime.Versioning.TargetFramework(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")] """ output_file.write_text(output_file_contents) diff --git a/csharp/scripts/stubs/helpers.py b/csharp/scripts/stubs/helpers.py index f3810e4f8cc8..28b73258c208 100644 --- a/csharp/scripts/stubs/helpers.py +++ b/csharp/scripts/stubs/helpers.py @@ -56,7 +56,7 @@ def remove_files(path, ext): def write_csproj_prefix(ioWrapper): ioWrapper.write('\n') ioWrapper.write(' \n') - ioWrapper.write(' net9.0\n') + ioWrapper.write(' net10.0\n') ioWrapper.write(' true\n') ioWrapper.write(' bin\\n') ioWrapper.write( @@ -73,7 +73,7 @@ def __init__(self, thisScript, relativeWorkDir, template): self.projectDirIn = os.path.join(self.workDir, self.projectNameIn) self.template = template print("\n* Creating new input project") - self.run_cmd(['dotnet', 'new', self.template, "-f", "net9.0", "--language", "C#", '--name', + self.run_cmd(['dotnet', 'new', self.template, "-f", "net10.0", "--language", "C#", '--name', self.projectNameIn, '--output', self.projectDirIn]) remove_files(self.projectDirIn, '.cs') @@ -118,7 +118,7 @@ def make_stubs(self): bqrsFile = os.path.join(rawOutputDir, outputName + '.bqrs') jsonFile = os.path.join(rawOutputDir, outputName + '.json') - sdk_version = '9.0.300' + sdk_version = '10.0.100' print("\n* Creating new global.json file and setting SDK to " + sdk_version) self.run_cmd(['dotnet', 'new', 'globaljson', '--force', '--sdk-version', sdk_version, '--output', self.workDir]) diff --git a/csharp/tools/tracing-config.lua b/csharp/tools/tracing-config.lua index 13ede12a237e..94cc4fabc16b 100644 --- a/csharp/tools/tracing-config.lua +++ b/csharp/tools/tracing-config.lua @@ -183,7 +183,7 @@ function RegisterExtractorPack(id) MsBuildMatcher, CreatePatternMatcher({ '^csc.*%.exe$' }, MatchCompilerName, extractor, { prepend = { '--compiler', '"${compiler}"' }, - order = ORDER_BEFORE + order = ORDER_AFTER }), CreatePatternMatcher({ '^fakes.*%.exe$', 'moles.*%.exe' }, MatchCompilerName, nil, { trace = false }), @@ -224,7 +224,7 @@ function RegisterExtractorPack(id) CreatePatternMatcher({ '^mcs%.exe$', '^csc%.exe$', '^csc$' }, MatchCompilerName, extractor, { prepend = { '--compiler', '${compiler}' }, - order = ORDER_BEFORE + order = ORDER_AFTER }), MsBuildMatcher, function(compilerName, compilerPath, compilerArguments, _languageId) diff --git a/docs/codeql/codeql-language-guides/abstract-syntax-tree-classes-for-working-with-java-programs.rst b/docs/codeql/codeql-language-guides/abstract-syntax-tree-classes-for-working-with-java-programs.rst index 9921ba9734b7..c94b9d1891e9 100644 --- a/docs/codeql/codeql-language-guides/abstract-syntax-tree-classes-for-working-with-java-programs.rst +++ b/docs/codeql/codeql-language-guides/abstract-syntax-tree-classes-for-working-with-java-programs.rst @@ -231,7 +231,7 @@ Accesses +--------------------------------+---------------------+ | ``a[i]`` | ArrayAccess_ | +--------------------------------+---------------------+ -| ``f(...)`` | MethodAccess_ | +| ``f(...)`` | MethodCall_ | +--------------------------------+ | | ``e.m(...)`` | | +--------------------------------+---------------------+ @@ -374,7 +374,7 @@ Further reading .. _ThisAccess: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$ThisAccess.html .. _SuperAccess: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$SuperAccess.html .. _ArrayAccess: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$ArrayAccess.html -.. _MethodAccess: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$MethodAccess.html +.. _MethodCall: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$MethodCall.html .. _WildcardTypeAccess: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$WildcardTypeAccess.html .. _FieldAccess: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$FieldAccess.html .. _CastExpr: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$CastExpr.html diff --git a/docs/codeql/codeql-language-guides/basic-query-for-java-code.rst b/docs/codeql/codeql-language-guides/basic-query-for-java-code.rst index 63944d25d433..b61e0f01ee74 100644 --- a/docs/codeql/codeql-language-guides/basic-query-for-java-code.rst +++ b/docs/codeql/codeql-language-guides/basic-query-for-java-code.rst @@ -42,11 +42,11 @@ Running a quick query .. code-block:: ql - from MethodAccess ma + from MethodCall mc where - ma.getMethod().hasName("equals") and - ma.getArgument(0).(StringLiteral).getValue() = "" - select ma, "This comparison to empty string is inefficient, use isEmpty() instead." + mc.getMethod().hasName("equals") and + mc.getArgument(0).(StringLiteral).getValue() = "" + select mc, "This comparison to empty string is inefficient, use isEmpty() instead." Note that CodeQL treats Java and Kotlin as part of the same language, so even though this query starts with ``import java``, it will work for both Java and Kotlin code. @@ -55,7 +55,7 @@ Running a quick query .. image:: ../images/codeql-for-visual-studio-code/basic-java-query-results-1.png :align: center -If any matching code is found, click a link in the ``ma`` column to view the ``.equals`` expression in the code viewer. +If any matching code is found, click a link in the ``mc`` column to view the ``.equals`` expression in the code viewer. .. image:: ../images/codeql-for-visual-studio-code/basic-java-query-results-2.png :align: center @@ -72,15 +72,15 @@ After the initial ``import`` statement, this simple query comprises three parts +==================================================================================================+===================================================================================================================+===================================================================================================+ | ``import java`` | Imports the standard CodeQL libraries for Java and Kotlin. | Every query begins with one or more ``import`` statements. | +--------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------+ -| ``from MethodAccess ma`` | Defines the variables for the query. | We use: | +| ``from MethodCall mc`` | Defines the variables for the query. | We use: | | | Declarations are of the form: | | -| | `` `` | - a ``MethodAccess`` variable for call expressions | +| | `` `` | - a ``MethodCall`` variable for call expressions | +--------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------+ -| ``where ma.getMethod().hasName("equals") and ma.getArgument(0).(StringLiteral).getValue() = ""`` | Defines a condition on the variables. | ``ma.getMethod().hasName("equals")`` restricts ``ma`` to only calls to methods call ``equals``. | +| ``where mc.getMethod().hasName("equals") and mc.getArgument(0).(StringLiteral).getValue() = ""`` | Defines a condition on the variables. | ``mc.getMethod().hasName("equals")`` restricts ``mc`` to only calls to methods call ``equals``. | | | | | -| | | ``ma.getArgument(0).(StringLiteral).getValue() = ""`` says the argument must be literal ``""``. | +| | | ``mc.getArgument(0).(StringLiteral).getValue() = ""`` says the argument must be literal ``""``. | +--------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------+ -| ``select ma, "This comparison to empty string is inefficient, use isEmpty() instead."`` | Defines what to report for each match. | Reports the resulting ``.equals`` expression with a string that explains the problem. | +| ``select mc, "This comparison to empty string is inefficient, use isEmpty() instead."`` | Defines what to report for each match. | Reports the resulting ``.equals`` expression with a string that explains the problem. | | | | | | | ``select`` statements for queries that are used to find instances of poor coding practice are always in the form: | | | | ``select , ""`` | | @@ -110,16 +110,16 @@ In this case, it is not possible to simply use ``o.isEmpty()`` instead, as ``o`` .. code-block:: ql - ma.getQualifier().getType() instanceof TypeString + mc.getQualifier().getType() instanceof TypeString The ``where`` clause is now: .. code-block:: ql where - ma.getQualifier().getType() instanceof TypeString and - ma.getMethod().hasName("equals") and - ma.getArgument(0).(StringLiteral).getValue() = "" + mc.getQualifier().getType() instanceof TypeString and + mc.getMethod().hasName("equals") and + mc.getArgument(0).(StringLiteral).getValue() = "" #. Re-run the query. @@ -141,4 +141,4 @@ Further reading .. |image-quick-query| image:: ../images/codeql-for-visual-studio-code/quick-query-tab-java.png -.. |result-col-1| replace:: The first column corresponds to the expression ``ma`` and is linked to the location in the source code of the project where ``ma`` occurs. \ No newline at end of file +.. |result-col-1| replace:: The first column corresponds to the expression ``mc`` and is linked to the location in the source code of the project where ``mc`` occurs. \ No newline at end of file diff --git a/docs/codeql/codeql-language-guides/navigating-the-call-graph.rst b/docs/codeql/codeql-language-guides/navigating-the-call-graph.rst index 6e1b443f96bd..a36b029b1d36 100644 --- a/docs/codeql/codeql-language-guides/navigating-the-call-graph.rst +++ b/docs/codeql/codeql-language-guides/navigating-the-call-graph.rst @@ -8,7 +8,7 @@ CodeQL has classes for identifying code that calls other code, and code that can Call graph classes ------------------ -The CodeQL library for Java/Kotlin provides two abstract classes for representing a program's call graph: ``Callable`` and ``Call``. The former is simply the common superclass of ``Method`` and ``Constructor``, the latter is a common superclass of ``MethodAccess``, ``ClassInstanceExpression``, ``ThisConstructorInvocationStmt`` and ``SuperConstructorInvocationStmt``. Simply put, a ``Callable`` is something that can be invoked, and a ``Call`` is something that invokes a ``Callable``. +The CodeQL library for Java/Kotlin provides two abstract classes for representing a program's call graph: ``Callable`` and ``Call``. The former is simply the common superclass of ``Method`` and ``Constructor``, the latter is a common superclass of ``MethodCall``, ``ClassInstanceExpression``, ``ThisConstructorInvocationStmt`` and ``SuperConstructorInvocationStmt``. Simply put, a ``Callable`` is something that can be invoked, and a ``Call`` is something that invokes a ``Callable``. For example, in the following program all callables and calls have been annotated with comments: diff --git a/docs/codeql/codeql-language-guides/types-in-java.rst b/docs/codeql/codeql-language-guides/types-in-java.rst index bed021489ea0..2633f8d012f4 100644 --- a/docs/codeql/codeql-language-guides/types-in-java.rst +++ b/docs/codeql/codeql-language-guides/types-in-java.rst @@ -113,7 +113,7 @@ To identify these cases, we can create two CodeQL classes that represent, respec } /** class representing calls to java.util.Collection.toArray(T[]) */ - class CollectionToArrayCall extends MethodAccess { + class CollectionToArrayCall extends MethodCall { CollectionToArrayCall() { exists(CollectionToArray m | this.getMethod().getSourceDeclaration().overridesOrInstantiates*(m) @@ -210,7 +210,7 @@ Now we want to identify all calls to ``Collection.contains``, including any meth .. code-block:: ql - class JavaUtilCollectionContainsCall extends MethodAccess { + class JavaUtilCollectionContainsCall extends MethodCall { JavaUtilCollectionContainsCall() { exists(JavaUtilCollectionContains jucc | this.getMethod().getSourceDeclaration().overrides*(jucc) @@ -297,7 +297,7 @@ Adding these three improvements, our final query becomes: } } - class JavaUtilCollectionContainsCall extends MethodAccess { + class JavaUtilCollectionContainsCall extends MethodCall { JavaUtilCollectionContainsCall() { exists(JavaUtilCollectionContains jucc | this.getMethod().getSourceDeclaration().overrides*(jucc) diff --git a/go/Makefile b/go/Makefile index ac3182ae5711..0b9dc9e4ea4c 100644 --- a/go/Makefile +++ b/go/Makefile @@ -54,9 +54,9 @@ ql/lib/go.dbscheme.stats: ql/lib/go.dbscheme build/stats/src.stamp extractor codeql dataset measure -o $@ build/stats/database/db-go test: all build/testdb/check-upgrade-path - codeql test run -j0 ql/test --search-path .. --check-diff-informed --consistency-queries ql/test/consistency --compilation-cache=$(cache) --dynamic-join-order-mode=$(rtjo) --check-databases --fail-on-trap-errors --check-undefined-labels --check-unused-labels --check-repeated-labels --check-redefined-labels --check-use-before-definition + codeql test run -j0 ql/test --search-path .. --check-diff-informed --consistency-queries ql/consistency-queries --compilation-cache=$(cache) --dynamic-join-order-mode=$(rtjo) --check-databases --fail-on-trap-errors --check-undefined-labels --check-unused-labels --check-repeated-labels --check-redefined-labels --check-use-before-definition # use GOOS=linux because GOOS=darwin GOARCH=386 is no longer supported - env GOOS=linux GOARCH=386 codeql$(EXE) test run -j0 ql/test/query-tests/Security/CWE-681 --search-path .. --check-diff-informed --consistency-queries ql/test/consistency --compilation-cache=$(cache) --dynamic-join-order-mode=$(rtjo) + env GOOS=linux GOARCH=386 codeql$(EXE) test run -j0 ql/test/query-tests/Security/CWE-681 --search-path .. --check-diff-informed --consistency-queries ql/consistency-queries --compilation-cache=$(cache) --dynamic-join-order-mode=$(rtjo) cd extractor; $(BAZEL) test ... bash extractor-smoke-test/test.sh || (echo "Extractor smoke test FAILED"; exit 1) diff --git a/go/extractor/go.mod b/go/extractor/go.mod index e581fdb652ca..2729c7dfcc5f 100644 --- a/go/extractor/go.mod +++ b/go/extractor/go.mod @@ -9,8 +9,8 @@ toolchain go1.25.0 // when adding or removing dependencies, run // bazel mod tidy require ( - golang.org/x/mod v0.30.0 - golang.org/x/tools v0.39.0 + golang.org/x/mod v0.31.0 + golang.org/x/tools v0.40.0 ) -require golang.org/x/sync v0.18.0 // indirect +require golang.org/x/sync v0.19.0 // indirect diff --git a/go/extractor/go.sum b/go/extractor/go.sum index 6579b4828481..488d20031935 100644 --- a/go/extractor/go.sum +++ b/go/extractor/go.sum @@ -1,8 +1,8 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= -golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= -golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= -golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= -golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= -golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= +golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= +golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA= +golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc= diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index b4d2815a6229..002730472533 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.38 + +No user-facing changes. + ## 1.0.37 No user-facing changes. diff --git a/go/ql/test/consistency/UnexpectedFrontendErrors.ql b/go/ql/consistency-queries/UnexpectedFrontendErrors.ql similarity index 100% rename from go/ql/test/consistency/UnexpectedFrontendErrors.ql rename to go/ql/consistency-queries/UnexpectedFrontendErrors.ql diff --git a/go/ql/consistency-queries/change-notes/released/1.0.38.md b/go/ql/consistency-queries/change-notes/released/1.0.38.md new file mode 100644 index 000000000000..2c984549c5fb --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.38.md @@ -0,0 +1,3 @@ +## 1.0.38 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index 9ad62b332475..b14e9763a8d4 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.37 +lastReleaseVersion: 1.0.38 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 4c9f973d66d2..8bb3c230c3e7 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.37 +version: 1.0.39-dev groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 8b78244ad87a..5f0fda7c3e6c 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.0.5 + +No user-facing changes. + ## 5.0.4 No user-facing changes. diff --git a/go/ql/lib/change-notes/2025-11-26-unexpected-frontend-errors-query-moved.md b/go/ql/lib/change-notes/2025-11-26-unexpected-frontend-errors-query-moved.md new file mode 100644 index 000000000000..cf4b724dbd92 --- /dev/null +++ b/go/ql/lib/change-notes/2025-11-26-unexpected-frontend-errors-query-moved.md @@ -0,0 +1,4 @@ +--- +category: breaking +--- +* The query `go/unexpected-frontend-error` has been moved from the `codeql/go-queries` query to the `codeql-go-consistency-queries` query pack. diff --git a/go/ql/lib/change-notes/released/5.0.5.md b/go/ql/lib/change-notes/released/5.0.5.md new file mode 100644 index 000000000000..be08f8736365 --- /dev/null +++ b/go/ql/lib/change-notes/released/5.0.5.md @@ -0,0 +1,3 @@ +## 5.0.5 + +No user-facing changes. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 8cb0167caf0c..02e5f00fa9e4 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.0.4 +lastReleaseVersion: 5.0.5 diff --git a/go/ql/lib/ext/empty.model.yml b/go/ql/lib/ext/empty.model.yml index 8d661a9f1db6..1709a6098eb5 100644 --- a/go/ql/lib/ext/empty.model.yml +++ b/go/ql/lib/ext/empty.model.yml @@ -9,6 +9,14 @@ extensions: pack: codeql/go-all extensible: sinkModel data: [] + - addsTo: + pack: codeql/go-all + extensible: barrierModel + data: [] + - addsTo: + pack: codeql/go-all + extensible: barrierGuardModel + data: [] - addsTo: pack: codeql/go-all extensible: summaryModel diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 5049a6210857..64cb6fbf98ce 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 5.0.4 +version: 5.0.6-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/lib/semmle/go/controlflow/IR.qll b/go/ql/lib/semmle/go/controlflow/IR.qll index 2c8b673184ea..144f0df6e7db 100644 --- a/go/ql/lib/semmle/go/controlflow/IR.qll +++ b/go/ql/lib/semmle/go/controlflow/IR.qll @@ -1588,4 +1588,9 @@ module IR { * in a field/method access, element access, or slice expression. */ EvalImplicitDerefInstruction implicitDerefInstruction(Expr e) { result = MkImplicitDeref(e) } + + /** Gets the base of `insn`, if `insn` is an implicit field read. */ + Instruction lookThroughImplicitFieldRead(Instruction insn) { + result = insn.(ImplicitFieldReadInstruction).getBaseInstruction() + } } diff --git a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll index 3228f4248859..de1e3da62813 100644 --- a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll +++ b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll @@ -86,7 +86,7 @@ */ private import go -import internal.ExternalFlowExtensions as FlowExtensions +private import internal.ExternalFlowExtensions::Extensions as Extensions private import FlowSummary as FlowSummary private import internal.DataFlowPrivate private import internal.FlowSummaryImpl @@ -94,201 +94,32 @@ private import internal.FlowSummaryImpl::Public as Public private import internal.FlowSummaryImpl::Private private import internal.FlowSummaryImpl::Private::External private import codeql.mad.ModelValidation as SharedModelVal +private import codeql.mad.static.ModelsAsData as SharedMaD -/** Gets the prefix for a group of packages. */ -private string groupPrefix() { result = "group:" } - -/** - * Gets a package represented by `packageOrGroup`. - * - * If `packageOrGroup` is of the form `group:` then `result` is a - * package in the group ``, as determined by `packageGrouping`. - * Otherwise, `result` is `packageOrGroup`. - */ -bindingset[packageOrGroup] -private string getPackage(string packageOrGroup) { - not exists(string group | packageOrGroup = groupPrefix() + group) and result = packageOrGroup - or - exists(string group | - FlowExtensions::packageGrouping(group, result) and - packageOrGroup = groupPrefix() + group - ) -} - -/** - * Holds if a source model exists for the given parameters. - * - * Note that `group:` references are expanded into one or more actual packages - * by this predicate. - */ -predicate sourceModel( - string package, string type, boolean subtypes, string name, string signature, string ext, - string output, string kind, string provenance, QlBuiltins::ExtensionId madId -) { - exists(string packageOrGroup | - package = getPackage(packageOrGroup) and - FlowExtensions::sourceModel(packageOrGroup, type, subtypes, name, signature, ext, output, kind, - provenance, madId) - ) -} - -/** - * Holds if a sink model exists for the given parameters. - * - * Note that `group:` references are expanded into one or more actual packages - * by this predicate. - */ -predicate sinkModel( - string package, string type, boolean subtypes, string name, string signature, string ext, - string input, string kind, string provenance, QlBuiltins::ExtensionId madId -) { - exists(string packageOrGroup | package = getPackage(packageOrGroup) | - FlowExtensions::sinkModel(packageOrGroup, type, subtypes, name, signature, ext, input, kind, - provenance, madId) - ) -} - -/** - * Holds if a summary model exists for the given parameters. - * - * Note that `group:` references are expanded into one or more actual packages - * by this predicate. - */ -predicate summaryModel( - string package, string type, boolean subtypes, string name, string signature, string ext, - string input, string output, string kind, string provenance, QlBuiltins::ExtensionId madId -) { - exists(string packageOrGroup | package = getPackage(packageOrGroup) | - FlowExtensions::summaryModel(packageOrGroup, type, subtypes, name, signature, ext, input, - output, kind, provenance, madId) - ) -} - -/** - * Holds if a neutral model exists for the given parameters. - * - * Note that `group:` references are expanded into one or more actual packages - * by this predicate. - */ -predicate neutralModel( - string package, string type, string name, string signature, string kind, string provenance -) { - exists(string packageOrGroup | package = getPackage(packageOrGroup) | - FlowExtensions::neutralModel(packageOrGroup, type, name, signature, kind, provenance) - ) -} - -/** - * Holds if the given extension tuple `madId` should pretty-print as `model`. - * - * This predicate should only be used in tests. - */ -predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) { - exists( - string package, string type, boolean subtypes, string name, string signature, string ext, - string output, string kind, string provenance - | - FlowExtensions::sourceModel(package, type, subtypes, name, signature, ext, output, kind, - provenance, madId) and - model = - "Source: " + package + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; " + - ext + "; " + output + "; " + kind + "; " + provenance - ) - or - exists( - string package, string type, boolean subtypes, string name, string signature, string ext, - string input, string kind, string provenance - | - FlowExtensions::sinkModel(package, type, subtypes, name, signature, ext, input, kind, - provenance, madId) and - model = - "Sink: " + package + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; " + - ext + "; " + input + "; " + kind + "; " + provenance - ) - or - exists( - string package, string type, boolean subtypes, string name, string signature, string ext, - string input, string output, string kind, string provenance - | - FlowExtensions::summaryModel(package, type, subtypes, name, signature, ext, input, output, kind, - provenance, madId) and - model = - "Summary: " + package + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; " + - ext + "; " + input + "; " + output + "; " + kind + "; " + provenance - ) -} - -bindingset[p] -private string cleanPackage(string p) { - exists(string noPrefix | - p = fixedVersionPrefix() + noPrefix - or - not p = fixedVersionPrefix() + any(string s) and - noPrefix = p - | - result = noPrefix.regexpReplaceAll(majorVersionSuffixRegex(), "") - ) -} +private module MadInput implements SharedMaD::InputSig { + string namespaceSegmentSeparator() { result = "/" } -private predicate relevantPackage(string package) { - exists(string p | package = cleanPackage(p) | - sourceModel(p, _, _, _, _, _, _, _, _, _) or - sinkModel(p, _, _, _, _, _, _, _, _, _) or - summaryModel(p, _, _, _, _, _, _, _, _, _, _) - ) + bindingset[p] + string cleanNamespace(string p) { + exists(string noPrefix | + p = fixedVersionPrefix() + noPrefix + or + not p = fixedVersionPrefix() + any(string s) and + noPrefix = p + | + result = noPrefix.regexpReplaceAll(majorVersionSuffixRegex(), "") + ) + } } -private predicate packageLink(string shortpkg, string longpkg) { - relevantPackage(shortpkg) and - relevantPackage(longpkg) and - longpkg.prefix(longpkg.indexOf("/")) = shortpkg -} +private module MaD = SharedMaD::ModelsAsData; -private predicate canonicalPackage(string package) { - relevantPackage(package) and not packageLink(_, package) -} +import MaD -private predicate canonicalPkgLink(string package, string subpkg) { - canonicalPackage(package) and - (subpkg = package or packageLink(package, subpkg)) -} +module FlowExtensions = Extensions; -/** - * Holds if MaD framework coverage of `package` is `n` api endpoints of the - * kind `(kind, part)`, and `pkgs` is the number of subpackages of `package` - * which have MaD framework coverage (including `package` itself). - */ -predicate modelCoverage(string package, int pkgs, string kind, string part, int n) { - pkgs = strictcount(string subpkg | canonicalPkgLink(package, subpkg)) and - ( - part = "source" and - n = - strictcount(string subpkg, string type, boolean subtypes, string name, string signature, - string ext, string output, string provenance, string x | - canonicalPkgLink(package, subpkg) and - subpkg = cleanPackage(x) and - sourceModel(x, type, subtypes, name, signature, ext, output, kind, provenance, _) - ) - or - part = "sink" and - n = - strictcount(string subpkg, string type, boolean subtypes, string name, string signature, - string ext, string input, string provenance, string x | - canonicalPkgLink(package, subpkg) and - subpkg = cleanPackage(x) and - sinkModel(x, type, subtypes, name, signature, ext, input, kind, provenance, _) - ) - or - part = "summary" and - n = - strictcount(string subpkg, string type, boolean subtypes, string name, string signature, - string ext, string input, string output, string provenance, string x | - canonicalPkgLink(package, subpkg) and - subpkg = cleanPackage(x) and - summaryModel(x, type, subtypes, name, signature, ext, input, output, kind, provenance, _) - ) - ) -} +/** Gets the prefix for a group of packages. */ +private string groupPrefix() { result = "group:" } /** Provides a query predicate to check the MaD models for validation errors. */ module ModelValidation { diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplConsistency.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplConsistency.qll index aa9c9da1bd13..b4d927711506 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplConsistency.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplConsistency.qll @@ -5,10 +5,25 @@ private import go private import DataFlowImplSpecific as Impl +private import DataFlowUtil private import TaintTrackingImplSpecific private import codeql.dataflow.internal.DataFlowImplConsistency private import semmle.go.dataflow.internal.DataFlowNodes -private module Input implements InputSig { } +private module Input implements InputSig { + predicate missingLocationExclude(DataFlow::Node n) { + n instanceof DataFlow::GlobalFunctionNode or n instanceof Private::FlowSummaryNode + } + + predicate uniqueNodeLocationExclude(DataFlow::Node n) { missingLocationExclude(n) } + + predicate localFlowIsLocalExclude(DataFlow::Node n1, DataFlow::Node n2) { + n1 instanceof DataFlow::FunctionNode and simpleLocalFlowStep(n1, n2, _) + } + + predicate argHasPostUpdateExclude(DataFlow::ArgumentNode n) { + not DataFlow::insnHasPostUpdateNode(n.asInstruction()) + } +} module Consistency = MakeConsistency; diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll index a388e4bab040..4fb767e548c6 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll @@ -838,7 +838,11 @@ module Public { exists(IR::MethodReadInstruction mri | ce.getTarget() instanceof Method and mri = IR::evalExprInstruction(ce.getCalleeExpr()) and - insn = mri.getReceiver() + // If a.x is reading a promoted field, and it's equivalent to a.b.c.x, + // then mri.getReceiver() will give us the implicit field read a.b.c + // and we want to have post-update nodes for a, the implicit field + // read a.b and the implicit field read a.b.c. + insn = IR::lookThroughImplicitFieldRead*(mri.getReceiver()) ) ) and mutableType(insn.getResultType()) diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll index 94609d1c1113..76b0ef363e31 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll @@ -89,7 +89,8 @@ predicate basicLocalFlowStep(Node nodeFrom, Node nodeTo) { nodeFrom = instructionNode(pred) or nodeFrom.(PostUpdateNode).getPreUpdateNode() = instructionNode(pred) ) and - nodeTo = instructionNode(succ) + nodeTo = instructionNode(succ) and + nodeTo != nodeFrom ) or // GlobalFunctionNode -> use diff --git a/go/ql/lib/semmle/go/dataflow/internal/ExternalFlowExtensions.qll b/go/ql/lib/semmle/go/dataflow/internal/ExternalFlowExtensions.qll index b1e1c906028c..2e962299f3ed 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/ExternalFlowExtensions.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/ExternalFlowExtensions.qll @@ -2,6 +2,8 @@ * This module provides extensible predicates for defining MaD models. */ +private import codeql.mad.static.ModelsAsData as SharedMaD + /** * Holds if a source model exists for the given parameters. */ @@ -18,6 +20,22 @@ extensible predicate sinkModel( string input, string kind, string provenance, QlBuiltins::ExtensionId madId ); +/** + * Holds if a barrier model exists for the given parameters. + */ +extensible predicate barrierModel( + string package, string type, boolean subtypes, string name, string signature, string ext, + string output, string kind, string provenance, QlBuiltins::ExtensionId madId +); + +/** + * Holds if a barrier guard model exists for the given parameters. + */ +extensible predicate barrierGuardModel( + string package, string type, boolean subtypes, string name, string signature, string ext, + string input, string acceptingvalue, string kind, string provenance, QlBuiltins::ExtensionId madId +); + /** * Holds if a summary model exists for the given parameters. */ @@ -37,3 +55,9 @@ extensible predicate neutralModel( * Holds if the package `package` is part of the group `group`. */ extensible predicate packageGrouping(string group, string package); + +module Extensions implements SharedMaD::ExtensionsSig { + import ExternalFlowExtensions + + predicate namespaceGrouping = packageGrouping/2; +} diff --git a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll index f12c9e6eeb1b..6c49cb75bd3e 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll @@ -137,11 +137,9 @@ module SourceSinkInterpretationInput implements SourceOrSinkElement e, string output, string kind, Public::Provenance provenance, string model ) { exists( - string package, string type, boolean subtypes, string name, string signature, string ext, - QlBuiltins::ExtensionId madId + string package, string type, boolean subtypes, string name, string signature, string ext | - sourceModel(package, type, subtypes, name, signature, ext, output, kind, provenance, madId) and - model = "MaD:" + madId.toString() and + sourceModel(package, type, subtypes, name, signature, ext, output, kind, provenance, model) and e = interpretElement(package, type, subtypes, name, signature, ext) ) } @@ -154,15 +152,26 @@ module SourceSinkInterpretationInput implements SourceOrSinkElement e, string input, string kind, Public::Provenance provenance, string model ) { exists( - string package, string type, boolean subtypes, string name, string signature, string ext, - QlBuiltins::ExtensionId madId + string package, string type, boolean subtypes, string name, string signature, string ext | - sinkModel(package, type, subtypes, name, signature, ext, input, kind, provenance, madId) and - model = "MaD:" + madId.toString() and + sinkModel(package, type, subtypes, name, signature, ext, input, kind, provenance, model) and e = interpretElement(package, type, subtypes, name, signature, ext) ) } + predicate barrierElement( + Element n, string output, string kind, Public::Provenance provenance, string model + ) { + none() + } + + predicate barrierGuardElement( + Element n, string input, Public::AcceptingValue acceptingvalue, string kind, + Public::Provenance provenance, string model + ) { + none() + } + // Note that due to embedding, which is currently implemented via some // Methods having multiple qualified names, a given Method is liable to have // more than one SourceOrSinkElement, one for each of the names it claims. @@ -384,17 +393,13 @@ module SourceSinkInterpretationInput implements } private DataFlow::Node skipImplicitFieldReads(DataFlow::Node n) { - not exists(lookThroughImplicitFieldRead(n)) and result = n + not exists(IR::lookThroughImplicitFieldRead(n.asInstruction())) and result = n or - result = skipImplicitFieldReads(lookThroughImplicitFieldRead(n)) - } - - private DataFlow::Node lookThroughImplicitFieldRead(DataFlow::Node n) { - result.asInstruction() = - n.(DataFlow::InstructionNode) - .asInstruction() - .(IR::ImplicitFieldReadInstruction) - .getBaseInstruction() + exists(DataFlow::Node mid | + mid.asInstruction() = IR::lookThroughImplicitFieldRead(n.asInstruction()) + | + result = skipImplicitFieldReads(mid) + ) } /** Provides additional sink specification logic. */ @@ -491,12 +496,10 @@ module Private { string model ) { exists( - string namespace, string type, boolean subtypes, string name, string signature, string ext, - QlBuiltins::ExtensionId madId + string namespace, string type, boolean subtypes, string name, string signature, string ext | summaryModel(namespace, type, subtypes, name, signature, ext, input, output, kind, - provenance, madId) and - model = "MaD:" + madId.toString() and + provenance, model) and c.asFunction() = interpretElement(namespace, type, subtypes, name, signature, ext).asEntity() ) diff --git a/go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll b/go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll index 079ab35ee366..03df08179751 100644 --- a/go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll +++ b/go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll @@ -27,7 +27,7 @@ module AllocationSizeOverflow { private module FindLargeLensFlow = TaintTracking::Global; private DataFlow::CallNode getALargeLenCall() { - exists(DataFlow::Node lenArg | FindLargeLensFlow::flow(_, lenArg) | + exists(DataFlow::Node lenArg | FindLargeLensFlow::flowTo(lenArg) | result.getArgument(0) = lenArg ) } diff --git a/go/ql/lib/semmle/go/security/ExternalAPIs.qll b/go/ql/lib/semmle/go/security/ExternalAPIs.qll index f85f939258f1..0a9be6bcc70d 100644 --- a/go/ql/lib/semmle/go/security/ExternalAPIs.qll +++ b/go/ql/lib/semmle/go/security/ExternalAPIs.qll @@ -211,7 +211,7 @@ module UntrustedDataToUnknownExternalApiFlow = /** A node representing untrusted data being passed to an external API. */ class UntrustedExternalApiDataNode extends ExternalApiDataNode { - UntrustedExternalApiDataNode() { UntrustedDataToExternalApiFlow::flow(_, this) } + UntrustedExternalApiDataNode() { UntrustedDataToExternalApiFlow::flowTo(this) } /** Gets a source of untrusted data which is passed to this external API data node. */ DataFlow::Node getAnUntrustedSource() { UntrustedDataToExternalApiFlow::flow(result, this) } diff --git a/go/ql/lib/semmle/go/security/MissingJwtSignatureCheck.qll b/go/ql/lib/semmle/go/security/MissingJwtSignatureCheck.qll index 15afe81944ff..1f8185d43979 100644 --- a/go/ql/lib/semmle/go/security/MissingJwtSignatureCheck.qll +++ b/go/ql/lib/semmle/go/security/MissingJwtSignatureCheck.qll @@ -15,7 +15,7 @@ module MissingJwtSignatureCheck { module Config implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof Source and - not SafeParse::flow(source, _) + not SafeParse::flowFrom(source) } predicate isSink(DataFlow::Node sink) { sink instanceof Sink } diff --git a/go/ql/lib/semmle/go/security/UnsafeUnzipSymlink.qll b/go/ql/lib/semmle/go/security/UnsafeUnzipSymlink.qll index 19047b12b788..0ced26c3eff3 100644 --- a/go/ql/lib/semmle/go/security/UnsafeUnzipSymlink.qll +++ b/go/ql/lib/semmle/go/security/UnsafeUnzipSymlink.qll @@ -32,7 +32,7 @@ module UnsafeUnzipSymlink { * Holds if `node` is an archive header field read that flows to a `path/filepath.EvalSymlinks` call. */ private predicate symlinksEvald(DataFlow::Node node) { - EvalSymlinksFlow::flow(getASimilarReadNode(node), _) + EvalSymlinksFlow::flowFrom(getASimilarReadNode(node)) } private module Config implements DataFlow::ConfigSig { diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index d73a2a4a4806..126e2b8583c3 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.5.2 + +No user-facing changes. + ## 1.5.1 No user-facing changes. diff --git a/go/ql/src/Security/CWE-020/MissingRegexpAnchor.ql b/go/ql/src/Security/CWE-020/MissingRegexpAnchor.ql index 43a24b1aef36..a4b18bff8d3f 100644 --- a/go/ql/src/Security/CWE-020/MissingRegexpAnchor.ql +++ b/go/ql/src/Security/CWE-020/MissingRegexpAnchor.ql @@ -81,5 +81,5 @@ module Config implements DataFlow::ConfigSig { module Flow = DataFlow::Global; from DataFlow::Node source, string msg -where Flow::flow(source, _) and Config::isSourceString(source, msg) +where Flow::flowFrom(source) and Config::isSourceString(source, msg) select source, msg diff --git a/go/ql/src/Security/CWE-352/ConstantOauth2State.ql b/go/ql/src/Security/CWE-352/ConstantOauth2State.ql index 501eb6109c71..edbb41782b8c 100644 --- a/go/ql/src/Security/CWE-352/ConstantOauth2State.ql +++ b/go/ql/src/Security/CWE-352/ConstantOauth2State.ql @@ -154,7 +154,7 @@ module FlowToPrintFlow = DataFlow::Global; /** Holds if the provided `CallNode`'s result flows to an argument of a printer call. */ predicate resultFlowsToPrinter(DataFlow::CallNode authCodeUrlCall) { - FlowToPrintFlow::flow(authCodeUrlCall.getResult(), _) + FlowToPrintFlow::flowFrom(authCodeUrlCall.getResult()) } /** Get a data-flow node that reads the value of `os.Stdin`. */ diff --git a/go/ql/src/Security/CWE-601/OpenUrlRedirect.ql b/go/ql/src/Security/CWE-601/OpenUrlRedirect.ql index 17ec112955fc..34023f6161e7 100644 --- a/go/ql/src/Security/CWE-601/OpenUrlRedirect.ql +++ b/go/ql/src/Security/CWE-601/OpenUrlRedirect.ql @@ -21,6 +21,6 @@ where OpenUrlRedirect::Flow::flowPath(source, sink) and // this excludes flow from safe parts of request URLs, for example the full URL when the // doing a redirect from `http://` to `https://` - not SafeUrlFlow::Flow::flow(_, sink.getNode()) + not SafeUrlFlow::Flow::flowTo(sink.getNode()) select sink.getNode(), source, sink, "This path to an untrusted URL redirection depends on a $@.", source.getNode(), "user-provided value" diff --git a/go/ql/src/Security/CWE-918/RequestForgery.ql b/go/ql/src/Security/CWE-918/RequestForgery.ql index 5a5c32654839..a54f51db9cef 100644 --- a/go/ql/src/Security/CWE-918/RequestForgery.ql +++ b/go/ql/src/Security/CWE-918/RequestForgery.ql @@ -21,6 +21,6 @@ where RequestForgery::Flow::flowPath(source, sink) and request = sink.getNode().(RequestForgery::Sink).getARequest() and // this excludes flow from safe parts of request URLs, for example the full URL - not SafeUrlFlow::Flow::flow(_, sink.getNode()) + not SafeUrlFlow::Flow::flowTo(sink.getNode()) select request, source, sink, "The $@ of this request depends on a $@.", sink.getNode(), sink.getNode().(RequestForgery::Sink).getKind(), source, "user-provided value" diff --git a/go/ql/src/change-notes/released/1.5.2.md b/go/ql/src/change-notes/released/1.5.2.md new file mode 100644 index 000000000000..384c27833f18 --- /dev/null +++ b/go/ql/src/change-notes/released/1.5.2.md @@ -0,0 +1,3 @@ +## 1.5.2 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index c5775c46013c..7eb901bae56a 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.1 +lastReleaseVersion: 1.5.2 diff --git a/go/ql/src/experimental/CWE-285/PamAuthBypass.ql b/go/ql/src/experimental/CWE-285/PamAuthBypass.ql index 755a023ef625..daba2f895443 100644 --- a/go/ql/src/experimental/CWE-285/PamAuthBypass.ql +++ b/go/ql/src/experimental/CWE-285/PamAuthBypass.ql @@ -70,5 +70,6 @@ module PamStartToAuthenticateFlow = TaintTracking::Global, <, and &. It does not account for ", or ', which makes it an incomplete XSS sanitizer. - addsTo: pack: codeql/java-all extensible: summaryModel diff --git a/java/ql/lib/ext/java.io.model.yml b/java/ql/lib/ext/java.io.model.yml index 3582e2b78ac6..07e39c9e12f7 100644 --- a/java/ql/lib/ext/java.io.model.yml +++ b/java/ql/lib/ext/java.io.model.yml @@ -162,3 +162,8 @@ extensions: extensible: sourceModel data: - ["java.io", "FileInputStream", True, "FileInputStream", "", "", "Argument[this]", "file", "manual"] + - addsTo: + pack: codeql/java-all + extensible: barrierModel + data: + - ["java.io", "File", True, "getName", "()", "", "ReturnValue", "path-injection", "manual"] diff --git a/java/ql/lib/ext/java.net.model.yml b/java/ql/lib/ext/java.net.model.yml index 084fce7bbc4b..e69db468a4a4 100644 --- a/java/ql/lib/ext/java.net.model.yml +++ b/java/ql/lib/ext/java.net.model.yml @@ -34,6 +34,11 @@ extensions: - ["java.net", "URLClassLoader", False, "URLClassLoader", "(URL[],ClassLoader)", "", "Argument[0]", "request-forgery", "manual"] - ["java.net", "URLClassLoader", False, "URLClassLoader", "(URL[])", "", "Argument[0]", "request-forgery", "manual"] - ["java.net", "PasswordAuthentication", False, "PasswordAuthentication", "(String,char[])", "", "Argument[0]", "credentials-username", "hq-generated"] + - addsTo: + pack: codeql/java-all + extensible: barrierGuardModel + data: + - ["java.net", "URI", True, "isAbsolute", "()", "", "Argument[this]", "false", "request-forgery", "manual"] - addsTo: pack: codeql/java-all extensible: summaryModel diff --git a/java/ql/lib/ext/java.util.regex.model.yml b/java/ql/lib/ext/java.util.regex.model.yml index 4f0776e59bd2..20269a271b55 100644 --- a/java/ql/lib/ext/java.util.regex.model.yml +++ b/java/ql/lib/ext/java.util.regex.model.yml @@ -12,6 +12,11 @@ extensions: - ["java.util.regex", "Pattern", False, "split", "(CharSequence)", "", "Argument[this]", "regex-use[0]", "manual"] - ["java.util.regex", "Pattern", False, "split", "(CharSequence,int)", "", "Argument[this]", "regex-use[0]", "manual"] - ["java.util.regex", "Pattern", False, "splitAsStream", "(CharSequence)", "", "Argument[this]", "regex-use[0]", "manual"] + - addsTo: + pack: codeql/java-all + extensible: barrierModel + data: + - ["java.util.regex", "Pattern", False, "quote", "(String)", "", "ReturnValue", "regex-use", "manual"] - addsTo: pack: codeql/java-all extensible: summaryModel diff --git a/java/ql/lib/ext/org.owasp.esapi.model.yml b/java/ql/lib/ext/org.owasp.esapi.model.yml index 30578debe580..70890d7e03b3 100644 --- a/java/ql/lib/ext/org.owasp.esapi.model.yml +++ b/java/ql/lib/ext/org.owasp.esapi.model.yml @@ -1,6 +1,42 @@ extensions: + - addsTo: + pack: codeql/java-all + extensible: barrierGuardModel + data: + - ["org.owasp.esapi", "Validator", true, "isValidCreditCard", "", "", "Argument[1]", "true", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "isValidDate", "", "", "Argument[1]", "true", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "isValidDirectoryPath", "", "", "Argument[1]", "true", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "isValidDouble", "", "", "Argument[1]", "true", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "isValidFileContent", "", "", "Argument[1]", "true", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "isValidFileName", "", "", "Argument[1]", "true", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "isValidInput", "", "", "Argument[1]", "true", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "isValidInteger", "", "", "Argument[1]", "true", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "isValidListItem", "", "", "Argument[1]", "true", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "isValidNumber", "", "", "Argument[1]", "true", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "isValidPrintable", "", "", "Argument[1]", "true", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "isValidRedirectLocation", "", "", "Argument[1]", "true", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "isValidSafeHTML", "", "", "Argument[1]", "true", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "isValidURI", "", "", "Argument[1]", "true", "trust-boundary-violation", "manual"] + - addsTo: + pack: codeql/java-all + extensible: barrierModel + data: + - ["org.owasp.esapi", "Validator", true, "getValidCreditCard", "", "", "ReturnValue", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "getValidDate", "", "", "ReturnValue", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "getValidDirectoryPath", "", "", "ReturnValue", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "getValidDouble", "", "", "ReturnValue", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "getValidFileContent", "", "", "ReturnValue", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "getValidFileName", "", "", "ReturnValue", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "getValidInput", "", "", "ReturnValue", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "getValidInteger", "", "", "ReturnValue", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "getValidListItem", "", "", "ReturnValue", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "getValidNumber", "", "", "ReturnValue", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "getValidPrintable", "", "", "ReturnValue", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "getValidRedirectLocation", "", "", "ReturnValue", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "getValidSafeHTML", "", "", "ReturnValue", "trust-boundary-violation", "manual"] + - ["org.owasp.esapi", "Validator", true, "getValidURI", "", "", "ReturnValue", "trust-boundary-violation", "manual"] - addsTo: pack: codeql/java-all extensible: summaryModel data: - - ["org.owasp.esapi", "Encoder", true, "encodeForHTML", "(String)", "", "Argument[0]", "ReturnValue", "taint", "manual"] \ No newline at end of file + - ["org.owasp.esapi", "Encoder", true, "encodeForHTML", "(String)", "", "Argument[0]", "ReturnValue", "taint", "manual"] diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 6fd56d60f415..f0f57e7150db 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 7.8.1 +version: 7.8.3-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index d1849df0f3ec..4a0fc3f85464 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -91,14 +91,60 @@ module; import java private import semmle.code.java.dataflow.DataFlow::DataFlow +private import semmle.code.java.controlflow.Guards private import FlowSummary as FlowSummary private import internal.DataFlowPrivate private import internal.FlowSummaryImpl private import internal.FlowSummaryImpl::Public private import internal.FlowSummaryImpl::Private private import internal.FlowSummaryImpl::Private::External -private import internal.ExternalFlowExtensions as Extensions +private import internal.ExternalFlowExtensions::Extensions as Extensions private import codeql.mad.ModelValidation as SharedModelVal +private import codeql.mad.static.ModelsAsData as SharedMaD + +private module MadInput implements SharedMaD::InputSig { + /** Holds if a source model exists for the given parameters. */ + predicate additionalSourceModel( + string package, string type, boolean subtypes, string name, string signature, string ext, + string output, string kind, string provenance, string model + ) { + exists(QlBuiltins::ExtensionId madId | + any(ActiveExperimentalModelsInternal q) + .sourceModel(package, type, subtypes, name, signature, ext, output, kind, provenance, + madId) and + model = "MaD:" + madId.toString() + ) + } + + /** Holds if a sink model exists for the given parameters. */ + predicate additionalSinkModel( + string package, string type, boolean subtypes, string name, string signature, string ext, + string input, string kind, string provenance, string model + ) { + exists(QlBuiltins::ExtensionId madId | + any(ActiveExperimentalModelsInternal q) + .sinkModel(package, type, subtypes, name, signature, ext, input, kind, provenance, madId) and + model = "MaD:" + madId.toString() + ) + } + + /** Holds if a summary model exists for the given parameters. */ + predicate additionalSummaryModel( + string package, string type, boolean subtypes, string name, string signature, string ext, + string input, string output, string kind, string provenance, string model + ) { + exists(QlBuiltins::ExtensionId madId | + any(ActiveExperimentalModelsInternal q) + .summaryModel(package, type, subtypes, name, signature, ext, input, output, kind, + provenance, madId) and + model = "MaD:" + madId.toString() + ) + } +} + +private module MaD = SharedMaD::ModelsAsData; + +import MaD /** * A class for activating additional model rows. @@ -146,60 +192,18 @@ abstract private class ActiveExperimentalModelsInternal extends string { deprecated class ActiveExperimentalModels = ActiveExperimentalModelsInternal; -/** Holds if a source model exists for the given parameters. */ -predicate sourceModel( - string package, string type, boolean subtypes, string name, string signature, string ext, - string output, string kind, string provenance, QlBuiltins::ExtensionId madId -) { - ( - Extensions::sourceModel(package, type, subtypes, name, signature, ext, output, kind, provenance, - madId) - or - any(ActiveExperimentalModelsInternal q) - .sourceModel(package, type, subtypes, name, signature, ext, output, kind, provenance, madId) - ) -} - -/** Holds if a sink model exists for the given parameters. */ -predicate sinkModel( - string package, string type, boolean subtypes, string name, string signature, string ext, - string input, string kind, string provenance, QlBuiltins::ExtensionId madId -) { - ( - Extensions::sinkModel(package, type, subtypes, name, signature, ext, input, kind, provenance, - madId) - or - any(ActiveExperimentalModelsInternal q) - .sinkModel(package, type, subtypes, name, signature, ext, input, kind, provenance, madId) - ) -} - -/** Holds if a summary model exists for the given parameters. */ -predicate summaryModel( - string package, string type, boolean subtypes, string name, string signature, string ext, - string input, string output, string kind, string provenance, QlBuiltins::ExtensionId madId -) { - ( - Extensions::summaryModel(package, type, subtypes, name, signature, ext, input, output, kind, - provenance, madId) - or - any(ActiveExperimentalModelsInternal q) - .summaryModel(package, type, subtypes, name, signature, ext, input, output, kind, - provenance, madId) - ) -} - /** * Holds if the given extension tuple `madId` should pretty-print as `model`. * * This predicate should only be used in tests. */ predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) { + MaD::interpretModelForTest(madId, model) + or exists( string package, string type, boolean subtypes, string name, string signature, string ext, string output, string kind, string provenance | - sourceModel(package, type, subtypes, name, signature, ext, output, kind, provenance, madId) or Extensions::experimentalSourceModel(package, type, subtypes, name, signature, ext, output, kind, provenance, _, madId) | @@ -212,7 +216,6 @@ predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) { string package, string type, boolean subtypes, string name, string signature, string ext, string input, string kind, string provenance | - sinkModel(package, type, subtypes, name, signature, ext, input, kind, provenance, madId) or Extensions::experimentalSinkModel(package, type, subtypes, name, signature, ext, input, kind, provenance, _, madId) | @@ -225,8 +228,6 @@ predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) { string package, string type, boolean subtypes, string name, string signature, string ext, string input, string output, string kind, string provenance | - summaryModel(package, type, subtypes, name, signature, ext, input, output, kind, provenance, - madId) or Extensions::experimentalSummaryModel(package, type, subtypes, name, signature, ext, input, output, kind, provenance, _, madId) | @@ -236,65 +237,6 @@ predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) { ) } -/** Holds if a neutral model exists for the given parameters. */ -predicate neutralModel = Extensions::neutralModel/6; - -private predicate relevantPackage(string package) { - sourceModel(package, _, _, _, _, _, _, _, _, _) or - sinkModel(package, _, _, _, _, _, _, _, _, _) or - summaryModel(package, _, _, _, _, _, _, _, _, _, _) -} - -private predicate packageLink(string shortpkg, string longpkg) { - relevantPackage(shortpkg) and - relevantPackage(longpkg) and - longpkg.prefix(longpkg.indexOf(".")) = shortpkg -} - -private predicate canonicalPackage(string package) { - relevantPackage(package) and not packageLink(_, package) -} - -private predicate canonicalPkgLink(string package, string subpkg) { - canonicalPackage(package) and - (subpkg = package or packageLink(package, subpkg)) -} - -/** - * Holds if MaD framework coverage of `package` is `n` api endpoints of the - * kind `(kind, part)`, and `pkgs` is the number of subpackages of `package` - * which have MaD framework coverage (including `package` itself). - */ -predicate modelCoverage(string package, int pkgs, string kind, string part, int n) { - pkgs = strictcount(string subpkg | canonicalPkgLink(package, subpkg)) and - ( - part = "source" and - n = - strictcount(string subpkg, string type, boolean subtypes, string name, string signature, - string ext, string output, string provenance | - canonicalPkgLink(package, subpkg) and - sourceModel(subpkg, type, subtypes, name, signature, ext, output, kind, provenance, _) - ) - or - part = "sink" and - n = - strictcount(string subpkg, string type, boolean subtypes, string name, string signature, - string ext, string input, string provenance | - canonicalPkgLink(package, subpkg) and - sinkModel(subpkg, type, subtypes, name, signature, ext, input, kind, provenance, _) - ) - or - part = "summary" and - n = - strictcount(string subpkg, string type, boolean subtypes, string name, string signature, - string ext, string input, string output, string provenance | - canonicalPkgLink(package, subpkg) and - summaryModel(subpkg, type, subtypes, name, signature, ext, input, output, kind, provenance, - _) - ) - ) -} - /** Provides a query predicate to check the MaD models for validation errors. */ module ModelValidation { private import codeql.dataflow.internal.AccessPathSyntax as AccessPathSyntax @@ -303,7 +245,9 @@ module ModelValidation { summaryModel(_, _, _, _, _, _, path, _, _, _, _) or summaryModel(_, _, _, _, _, _, _, path, _, _, _) or sinkModel(_, _, _, _, _, _, path, _, _, _) or - sourceModel(_, _, _, _, _, _, path, _, _, _) + sourceModel(_, _, _, _, _, _, path, _, _, _) or + barrierModel(_, _, _, _, _, _, path, _, _, _) or + barrierGuardModel(_, _, _, _, _, _, path, _, _, _, _) } private module MkAccessPath = AccessPathSyntax::AccessPath; @@ -316,6 +260,8 @@ module ModelValidation { exists(string pred, AccessPath input, AccessPathToken part | sinkModel(_, _, _, _, _, _, input, _, _, _) and pred = "sink" or + barrierGuardModel(_, _, _, _, _, _, input, _, _, _, _) and pred = "barrier guard" + or summaryModel(_, _, _, _, _, _, input, _, _, _, _) and pred = "summary" | ( @@ -338,6 +284,8 @@ module ModelValidation { exists(string pred, AccessPath output, AccessPathToken part | sourceModel(_, _, _, _, _, _, output, _, _, _) and pred = "source" or + barrierModel(_, _, _, _, _, _, output, _, _, _) and pred = "barrier" + or summaryModel(_, _, _, _, _, _, _, output, _, _, _) and pred = "summary" | ( @@ -355,7 +303,13 @@ module ModelValidation { private module KindValConfig implements SharedModelVal::KindValidationConfigSig { predicate summaryKind(string kind) { summaryModel(_, _, _, _, _, _, _, _, kind, _, _) } - predicate sinkKind(string kind) { sinkModel(_, _, _, _, _, _, _, kind, _, _) } + predicate sinkKind(string kind) { + sinkModel(_, _, _, _, _, _, _, kind, _, _) + or + barrierModel(_, _, _, _, _, _, _, kind, _, _) + or + barrierGuardModel(_, _, _, _, _, _, _, _, kind, _, _) + } predicate sourceKind(string kind) { sourceModel(_, _, _, _, _, _, _, kind, _, _) } @@ -373,6 +327,11 @@ module ModelValidation { or sinkModel(package, type, _, name, signature, ext, _, _, provenance, _) and pred = "sink" or + barrierModel(package, type, _, name, signature, ext, _, _, provenance, _) and pred = "barrier" + or + barrierGuardModel(package, type, _, name, signature, ext, _, _, _, provenance, _) and + pred = "barrier guard" + or summaryModel(package, type, _, name, signature, ext, _, _, _, provenance, _) and pred = "summary" or @@ -398,6 +357,14 @@ module ModelValidation { invalidProvenance(provenance) and result = "Unrecognized provenance description \"" + provenance + "\" in " + pred + " model." ) + or + exists(string acceptingvalue | + barrierGuardModel(_, _, _, _, _, _, _, acceptingvalue, _, _, _) and + invalidAcceptingValue(acceptingvalue) and + result = + "Unrecognized accepting value description \"" + acceptingvalue + + "\" in barrier guard model." + ) } /** Holds if some row in a MaD flow model appears to contain typos. */ @@ -418,6 +385,10 @@ private predicate elementSpec( or sinkModel(package, type, subtypes, name, signature, ext, _, _, _, _) or + barrierModel(package, type, subtypes, name, signature, ext, _, _, _, _) + or + barrierGuardModel(package, type, subtypes, name, signature, ext, _, _, _, _, _) + or summaryModel(package, type, subtypes, name, signature, ext, _, _, _, _, _) or neutralModel(package, type, name, signature, _, _) and ext = "" and subtypes = true @@ -578,6 +549,53 @@ private module Cached { isSinkNode(n, kind, model) and n.asNode() = node ) } + + private newtype TKindModelPair = + TMkPair(string kind, string model) { isBarrierGuardNode(_, _, kind, model) } + + private GuardValue convertAcceptingValue(AcceptingValue av) { + av.isTrue() and result.asBooleanValue() = true + or + av.isFalse() and result.asBooleanValue() = false + or + av.isNoException() and result.getDualValue().isThrowsException() + or + av.isZero() and result.asIntValue() = 0 + or + av.isNotZero() and result.getDualValue().asIntValue() = 0 + or + av.isNull() and result.isNullValue() + or + av.isNotNull() and result.isNonNullValue() + } + + private predicate barrierGuardChecks(Guard g, Expr e, GuardValue gv, TKindModelPair kmp) { + exists( + SourceSinkInterpretationInput::InterpretNode n, AcceptingValue acceptingvalue, string kind, + string model + | + isBarrierGuardNode(n, acceptingvalue, kind, model) and + n.asNode().asExpr() = e and + kmp = TMkPair(kind, model) and + gv = convertAcceptingValue(acceptingvalue) + | + g.(Call).getAnArgument() = e or g.(MethodCall).getQualifier() = e + ) + } + + /** + * Holds if `node` is specified as a barrier with the given kind in a MaD flow + * model. + */ + cached + predicate barrierNode(Node node, string kind, string model) { + exists(SourceSinkInterpretationInput::InterpretNode n | + isBarrierNode(n, kind, model) and n.asNode() = node + ) + or + ParameterizedBarrierGuard::getABarrierNode(TMkPair(kind, + model)) = node + } } import Cached @@ -594,6 +612,12 @@ predicate sourceNode(Node node, string kind) { sourceNode(node, kind, _) } */ predicate sinkNode(Node node, string kind) { sinkNode(node, kind, _) } +/** + * Holds if `node` is specified as a barrier with the given kind in a MaD flow + * model. + */ +predicate barrierNode(Node node, string kind) { barrierNode(node, kind, _) } + // adapter class for converting Mad summaries to `SummarizedCallable`s private class SummarizedCallableAdapter extends SummarizedCallable { SummarizedCallableAdapter() { summaryElement(this, _, _, _, _, _, _) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll index dc58529ed263..a27f14cede08 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll @@ -60,7 +60,7 @@ private module DispatchImpl { not ( // Only use summarized callables with generated summaries in case // the static call target is not in the source code. - // Note that if applyGeneratedModel holds it implies that there doesn't + // Note that if `applyGeneratedModel` holds it implies that there doesn't // exist a manual model. exists(Callable staticTarget | staticTarget = call.getCallee().getSourceDeclaration() | staticTarget.fromSource() and not staticTarget.isStub() diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll index 00e7d15ee8b8..e2e80c293ef0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll @@ -374,6 +374,29 @@ class ContentSet instanceof Content { } } +/** + * Holds if the guard `g` validates the expression `e` upon evaluating to `gv`. + * + * The expression `e` is expected to be a syntactic part of the guard `g`. + * For example, the guard `g` might be a call `isSafe(x)` and the expression `e` + * the argument `x`. + */ +signature predicate valueGuardChecksSig(Guard g, Expr e, GuardValue gv); + +/** + * Provides a set of barrier nodes for a guard that validates an expression. + * + * This is expected to be used in `isBarrier`/`isSanitizer` definitions + * in data flow and taint tracking. + */ +module BarrierGuardValue { + /** Gets a node that is safely guarded by the given guard check. */ + Node getABarrierNode() { + SsaFlow::asNode(result) = + SsaImpl::DataFlowIntegration::BarrierGuard::getABarrierNode() + } +} + /** * Holds if the guard `g` validates the expression `e` upon evaluating to `branch`. * @@ -390,9 +413,38 @@ signature predicate guardChecksSig(Guard g, Expr e, boolean branch); * in data flow and taint tracking. */ module BarrierGuard { + private predicate guardChecks0(Guard g, Expr e, GuardValue gv) { + guardChecks(g, e, gv.asBooleanValue()) + } + /** Gets a node that is safely guarded by the given guard check. */ - Node getABarrierNode() { + Node getABarrierNode() { result = BarrierGuardValue::getABarrierNode() } +} + +bindingset[this] +private signature class ParamSig; + +private module WithParam { + /** + * Holds if the guard `g` validates the expression `e` upon evaluating to `gv`. + * + * The expression `e` is expected to be a syntactic part of the guard `g`. + * For example, the guard `g` might be a call `isSafe(x)` and the expression `e` + * the argument `x`. + */ + signature predicate guardChecksSig(Guard g, Expr e, GuardValue gv, P param); +} + +/** + * Provides a set of barrier nodes for a guard that validates an expression. + * + * This is expected to be used in `isBarrier`/`isSanitizer` definitions + * in data flow and taint tracking. + */ +module ParameterizedBarrierGuard::guardChecksSig/4 guardChecks> { + /** Gets a node that is safely guarded by the given guard check. */ + Node getABarrierNode(P param) { SsaFlow::asNode(result) = - SsaImpl::DataFlowIntegration::BarrierGuard::getABarrierNode() + SsaImpl::DataFlowIntegration::ParameterizedBarrierGuard::getABarrierNode(param) } } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/ExternalFlowExtensions.qll b/java/ql/lib/semmle/code/java/dataflow/internal/ExternalFlowExtensions.qll index 32b5d289e28c..be474ad45352 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/ExternalFlowExtensions.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/ExternalFlowExtensions.qll @@ -4,6 +4,8 @@ overlay[local?] module; +private import codeql.mad.static.ModelsAsData as SharedMaD + /** * Holds if a source model exists for the given parameters. */ @@ -20,6 +22,22 @@ extensible predicate sinkModel( string input, string kind, string provenance, QlBuiltins::ExtensionId madId ); +/** + * Holds if a barrier model exists for the given parameters. + */ +extensible predicate barrierModel( + string package, string type, boolean subtypes, string name, string signature, string ext, + string output, string kind, string provenance, QlBuiltins::ExtensionId madId +); + +/** + * Holds if a barrier guard model exists for the given parameters. + */ +extensible predicate barrierGuardModel( + string package, string type, boolean subtypes, string name, string signature, string ext, + string input, string acceptingvalue, string kind, string provenance, QlBuiltins::ExtensionId madId +); + /** * Holds if a summary model exists for the given parameters. */ @@ -77,3 +95,9 @@ extensible predicate experimentalSummaryModel( string input, string output, string kind, string provenance, string filter, QlBuiltins::ExtensionId madId ); + +module Extensions implements SharedMaD::ExtensionsSig { + import ExternalFlowExtensions + + predicate namespaceGrouping(string group, string namespace) { none() } +} diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll index 8dc28ea2f601..b9d8f58cecbc 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll @@ -158,7 +158,9 @@ private predicate relatedArgSpec(Callable c, string spec) { summaryModel(namespace, type, subtypes, name, signature, ext, spec, _, _, _, _) or summaryModel(namespace, type, subtypes, name, signature, ext, _, spec, _, _, _) or sourceModel(namespace, type, subtypes, name, signature, ext, spec, _, _, _) or - sinkModel(namespace, type, subtypes, name, signature, ext, spec, _, _, _) + sinkModel(namespace, type, subtypes, name, signature, ext, spec, _, _, _) or + barrierModel(namespace, type, subtypes, name, signature, ext, spec, _, _, _) or + barrierGuardModel(namespace, type, subtypes, name, signature, ext, spec, _, _, _, _) | c = interpretElement(namespace, type, subtypes, name, signature, ext, _) ) @@ -226,11 +228,10 @@ module SourceSinkInterpretationInput implements ) { exists( string namespace, string type, boolean subtypes, string name, string signature, string ext, - SourceOrSinkElement baseSource, string originalOutput, QlBuiltins::ExtensionId madId + SourceOrSinkElement baseSource, string originalOutput | sourceModel(namespace, type, subtypes, name, signature, ext, originalOutput, kind, provenance, - madId) and - model = "MaD:" + madId.toString() and + model) and baseSource = interpretElement(namespace, type, subtypes, name, signature, ext, _) and ( e = baseSource and output = originalOutput @@ -245,11 +246,10 @@ module SourceSinkInterpretationInput implements ) { exists( string namespace, string type, boolean subtypes, string name, string signature, string ext, - SourceOrSinkElement baseSink, string originalInput, QlBuiltins::ExtensionId madId + SourceOrSinkElement baseSink, string originalInput | sinkModel(namespace, type, subtypes, name, signature, ext, originalInput, kind, provenance, - madId) and - model = "MaD:" + madId.toString() and + model) and baseSink = interpretElement(namespace, type, subtypes, name, signature, ext, _) and ( e = baseSink and originalInput = input @@ -259,6 +259,43 @@ module SourceSinkInterpretationInput implements ) } + predicate barrierElement( + Element e, string output, string kind, Public::Provenance provenance, string model + ) { + exists( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + SourceOrSinkElement baseBarrier, string originalOutput + | + barrierModel(namespace, type, subtypes, name, signature, ext, originalOutput, kind, + provenance, model) and + baseBarrier = interpretElement(namespace, type, subtypes, name, signature, ext, _) and + ( + e = baseBarrier and output = originalOutput + or + correspondingKotlinParameterDefaultsArgSpec(baseBarrier, e, originalOutput, output) + ) + ) + } + + predicate barrierGuardElement( + Element e, string input, Public::AcceptingValue acceptingvalue, string kind, + Public::Provenance provenance, string model + ) { + exists( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + SourceOrSinkElement baseBarrier, string originalInput + | + barrierGuardModel(namespace, type, subtypes, name, signature, ext, originalInput, + acceptingvalue, kind, provenance, model) and + baseBarrier = interpretElement(namespace, type, subtypes, name, signature, ext, _) and + ( + e = baseBarrier and input = originalInput + or + correspondingKotlinParameterDefaultsArgSpec(baseBarrier, e, originalInput, input) + ) + ) + } + class SourceOrSinkElement = Element; private newtype TInterpretNode = @@ -343,12 +380,10 @@ module Private { ) { exists( string namespace, string type, boolean subtypes, string name, string signature, string ext, - string originalInput, string originalOutput, Callable baseCallable, - QlBuiltins::ExtensionId madId + string originalInput, string originalOutput, Callable baseCallable | summaryModel(namespace, type, subtypes, name, signature, ext, originalInput, originalOutput, - kind, provenance, madId) and - model = "MaD:" + madId.toString() and + kind, provenance, model) and baseCallable = interpretElement(namespace, type, subtypes, name, signature, ext, isExact) and ( c.asCallable() = baseCallable and input = originalInput and output = originalOutput diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll index 624f82fd341d..bafb16d6ab53 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -564,12 +564,14 @@ private module Cached { DataFlowIntegrationImpl::localMustFlowStep(v, nodeFrom, nodeTo) } - signature predicate guardChecksSig(Guards::Guard g, Expr e, boolean branch); + signature predicate guardChecksSig(Guards::Guard g, Expr e, Guards::GuardValue gv); cached // nothing is actually cached module BarrierGuard { - private predicate guardChecksAdjTypes(Guards::Guards_v3::Guard g, Expr e, boolean branch) { - guardChecks(g, e, branch) + private predicate guardChecksAdjTypes( + Guards::Guards_v3::Guard g, Expr e, Guards::GuardValue gv + ) { + guardChecks(g, e, gv) } private predicate guardChecksWithWrappers( @@ -586,6 +588,36 @@ private module Cached { predicate getABarrierNode = getABarrierNodeImpl/0; } + + bindingset[this] + private signature class ParamSig; + + private module WithParam { + signature predicate guardChecksSig(Guards::Guard g, Expr e, Guards::GuardValue gv, P param); + } + + cached // nothing is actually cached + module ParameterizedBarrierGuard::guardChecksSig/4 guardChecks> { + private predicate guardChecksAdjTypes( + Guards::Guards_v3::Guard g, Expr e, Guards::GuardValue gv, P param + ) { + guardChecks(g, e, gv, param) + } + + private predicate guardChecksWithWrappers( + DataFlowIntegrationInput::Guard g, Definition def, Guards::GuardValue val, P param + ) { + Guards::Guards_v3::ParameterizedValidationWrapper::guardChecksDef(g, + def, val, param) + } + + private Node getABarrierNodeImpl(P param) { + result = + DataFlowIntegrationImpl::BarrierGuardDefWithState::getABarrierNode(param) + } + + predicate getABarrierNode = getABarrierNodeImpl/1; + } } cached diff --git a/java/ql/lib/semmle/code/java/frameworks/Regex.qll b/java/ql/lib/semmle/code/java/frameworks/Regex.qll index f63f46c38780..56be77eae825 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Regex.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Regex.qll @@ -4,11 +4,46 @@ module; import java +/** The class `java.util.regex.Matcher`. */ +class TypeRegexMatcher extends Class { + TypeRegexMatcher() { this.hasQualifiedName("java.util.regex", "Matcher") } +} + +/** + * The `matches` method of `java.util.regex.Matcher`. + */ +class MatcherMatchesMethod extends Method { + MatcherMatchesMethod() { + this.getDeclaringType() instanceof TypeRegexMatcher and + this.hasName("matches") + } +} + /** The class `java.util.regex.Pattern`. */ class TypeRegexPattern extends Class { TypeRegexPattern() { this.hasQualifiedName("java.util.regex", "Pattern") } } +/** + * The `matches` method of `java.util.regex.Pattern`. + */ +class PatternMatchesMethod extends Method { + PatternMatchesMethod() { + this.getDeclaringType() instanceof TypeRegexPattern and + this.hasName("matches") + } +} + +/** + * The `matcher` method of `java.util.regex.Pattern`. + */ +class PatternMatcherMethod extends Method { + PatternMatcherMethod() { + this.getDeclaringType() instanceof TypeRegexPattern and + this.hasName("matcher") + } +} + /** The `quote` method of the `java.util.regex.Pattern` class. */ class PatternQuoteMethod extends Method { PatternQuoteMethod() { diff --git a/java/ql/lib/semmle/code/java/frameworks/google/GoogleHttpClientApi.qll b/java/ql/lib/semmle/code/java/frameworks/google/GoogleHttpClientApi.qll index 5e0304ca7b2a..62da79a2e402 100644 --- a/java/ql/lib/semmle/code/java/frameworks/google/GoogleHttpClientApi.qll +++ b/java/ql/lib/semmle/code/java/frameworks/google/GoogleHttpClientApi.qll @@ -26,9 +26,7 @@ private module TypeLiteralToParseAsFlowConfig implements DataFlow::ConfigSig { private module TypeLiteralToParseAsFlow = DataFlow::Global; -private TypeLiteral getSourceWithFlowToParseAs() { - TypeLiteralToParseAsFlow::flow(DataFlow::exprNode(result), _) -} +private TypeLiteral getSourceWithFlowToParseAs() { TypeLiteralToParseAsFlow::flowFromExpr(result) } /** A field that is deserialized by `HttpResponse.parseAs`. */ class HttpResponseParseAsDeserializableField extends DeserializableField { diff --git a/java/ql/lib/semmle/code/java/frameworks/hudson/Hudson.qll b/java/ql/lib/semmle/code/java/frameworks/hudson/Hudson.qll index 44752f94576b..86b659289171 100644 --- a/java/ql/lib/semmle/code/java/frameworks/hudson/Hudson.qll +++ b/java/ql/lib/semmle/code/java/frameworks/hudson/Hudson.qll @@ -14,14 +14,3 @@ class HudsonWebMethod extends Method { this.getDeclaringType().getASourceSupertype*().hasQualifiedName("hudson.model", "Descriptor") } } - -private class HudsonUtilXssSanitizer extends XssSanitizer { - HudsonUtilXssSanitizer() { - this.asExpr() - .(MethodCall) - .getMethod() - // Not including xmlEscape because it only accounts for >, <, and &. - // It does not account for ", or ', which makes it an incomplete XSS sanitizer. - .hasQualifiedName("hudson", "Util", "escape") - } -} diff --git a/java/ql/lib/semmle/code/java/frameworks/jackson/JacksonSerializability.qll b/java/ql/lib/semmle/code/java/frameworks/jackson/JacksonSerializability.qll index aa7da753f434..b9fdbe58f77d 100644 --- a/java/ql/lib/semmle/code/java/frameworks/jackson/JacksonSerializability.qll +++ b/java/ql/lib/semmle/code/java/frameworks/jackson/JacksonSerializability.qll @@ -110,7 +110,7 @@ private module TypeLiteralToJacksonDatabindFlow = DataFlow::Global; private TypeLiteral getSourceWithFlowToJacksonDatabind() { - TypeLiteralToJacksonDatabindFlow::flow(DataFlow::exprNode(result), _) + TypeLiteralToJacksonDatabindFlow::flowFromExpr(result) } /** A type whose values are explicitly deserialized in a call to a Jackson method. */ diff --git a/java/ql/lib/semmle/code/java/frameworks/owasp/Esapi.qll b/java/ql/lib/semmle/code/java/frameworks/owasp/Esapi.qll deleted file mode 100644 index fe95cd0d39d3..000000000000 --- a/java/ql/lib/semmle/code/java/frameworks/owasp/Esapi.qll +++ /dev/null @@ -1,42 +0,0 @@ -/** Classes and predicates for reasoning about the `owasp.easpi` package. */ -overlay[local?] -module; - -import java - -/** - * The `org.owasp.esapi.Validator` interface. - */ -class EsapiValidator extends RefType { - EsapiValidator() { this.hasQualifiedName("org.owasp.esapi", "Validator") } -} - -/** - * The methods of `org.owasp.esapi.Validator` which validate data. - */ -class EsapiIsValidMethod extends Method { - EsapiIsValidMethod() { - this.getDeclaringType() instanceof EsapiValidator and - this.hasName([ - "isValidCreditCard", "isValidDate", "isValidDirectoryPath", "isValidDouble", - "isValidFileContent", "isValidFileName", "isValidInput", "isValidInteger", - "isValidListItem", "isValidNumber", "isValidPrintable", "isValidRedirectLocation", - "isValidSafeHTML", "isValidURI" - ]) - } -} - -/** - * The methods of `org.owasp.esapi.Validator` which return validated data. - */ -class EsapiGetValidMethod extends Method { - EsapiGetValidMethod() { - this.getDeclaringType() instanceof EsapiValidator and - this.hasName([ - "getValidCreditCard", "getValidDate", "getValidDirectoryPath", "getValidDouble", - "getValidFileContent", "getValidFileName", "getValidInput", "getValidInteger", - "getValidListItem", "getValidNumber", "getValidPrintable", "getValidRedirectLocation", - "getValidSafeHTML", "getValidURI" - ]) - } -} diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll index 929fa2d6c912..4deb2bc812bb 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll @@ -164,7 +164,7 @@ private module RegexFlowConfig implements DataFlow::ConfigSig { private module RegexFlow = DataFlow::Global; private predicate usedAsRegexImpl(StringLiteral regex, string mode, boolean match_full_string) { - RegexFlow::flow(DataFlow::exprNode(regex), _) and + RegexFlow::flowFromExpr(regex) and mode = "None" and // TODO: proper mode detection (if matchesFullString(regex) then match_full_string = true else match_full_string = false) } diff --git a/java/ql/lib/semmle/code/java/security/ImproperIntentVerificationQuery.qll b/java/ql/lib/semmle/code/java/security/ImproperIntentVerificationQuery.qll index ff5ebe862178..61f88f39578b 100644 --- a/java/ql/lib/semmle/code/java/security/ImproperIntentVerificationQuery.qll +++ b/java/ql/lib/semmle/code/java/security/ImproperIntentVerificationQuery.qll @@ -51,7 +51,7 @@ private module VerifiedIntentFlow = DataFlow::Global; /** An `onReceive` method that doesn't verify the action of the intent it receives. */ private class UnverifiedOnReceiveMethod extends OnReceiveMethod { UnverifiedOnReceiveMethod() { - not VerifiedIntentFlow::flow(DataFlow::parameterNode(this.getIntentParameter()), _) and + not VerifiedIntentFlow::flowFrom(DataFlow::parameterNode(this.getIntentParameter())) and // Empty methods do not need to be verified since they do not perform any actions. this.getBody().getNumStmt() > 0 } diff --git a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll index da6f242bde52..2018004a3fb5 100644 --- a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll +++ b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll @@ -4,6 +4,7 @@ module; import java private import semmle.code.java.controlflow.Guards +private import semmle.code.java.dataflow.ExternalFlow private import semmle.code.java.dataflow.FlowSources private import semmle.code.java.dataflow.SSA private import semmle.code.java.frameworks.kotlin.IO @@ -288,19 +289,8 @@ private Method getSourceMethod(Method m) { result = m } -/** - * A sanitizer that protects against path injection vulnerabilities - * by extracting the final component of the user provided path. - * - * TODO: convert this class to models-as-data if sanitizer support is added - */ -private class FileGetNameSanitizer extends PathInjectionSanitizer { - FileGetNameSanitizer() { - exists(MethodCall mc | - mc.getMethod().hasQualifiedName("java.io", "File", "getName") and - this.asExpr() = mc - ) - } +private class DefaultPathInjectionSanitizer extends PathInjectionSanitizer { + DefaultPathInjectionSanitizer() { barrierNode(this, "path-injection") } } /** Holds if `g` is a guard that checks for `..` components. */ diff --git a/java/ql/lib/semmle/code/java/security/RequestForgery.qll b/java/ql/lib/semmle/code/java/security/RequestForgery.qll index dc15ad943bc7..690e4f9315b9 100644 --- a/java/ql/lib/semmle/code/java/security/RequestForgery.qll +++ b/java/ql/lib/semmle/code/java/security/RequestForgery.qll @@ -118,25 +118,8 @@ private class ContainsUrlSanitizer extends RequestForgerySanitizer { } } -/** - * A check that the URL is relative, and therefore safe for URL redirects. - */ -private predicate isRelativeUrlSanitizer(Guard guard, Expr e, boolean branch) { - guard = - any(MethodCall call | - call.getMethod().hasQualifiedName("java.net", "URI", "isAbsolute") and - e = call.getQualifier() and - branch = false - ) -} - -/** - * A check that the URL is relative, and therefore safe for URL redirects. - */ -private class RelativeUrlSanitizer extends RequestForgerySanitizer { - RelativeUrlSanitizer() { - this = DataFlow::BarrierGuard::getABarrierNode() - } +private class DefaultRequestForgerySanitizer extends RequestForgerySanitizer { + DefaultRequestForgerySanitizer() { barrierNode(this, "request-forgery") } } /** @@ -166,22 +149,7 @@ private class HostComparisonSanitizer extends RequestForgerySanitizer { } /** - * A qualifier in a call to a `.matches()` method that is a sanitizer for URL redirects. - * - * Matches any method call where the method is named `matches`. + * A comparison with a regular expression that is a sanitizer for URL redirects. */ -private predicate isMatchesSanitizer(Guard guard, Expr e, boolean branch) { - guard = - any(MethodCall method | - method.getMethod().getName() = "matches" and - e = method.getQualifier() and - branch = true - ) -} - -/** - * A qualifier in a call to `.matches()` that is a sanitizer for URL redirects. - */ -private class MatchesSanitizer extends RequestForgerySanitizer { - MatchesSanitizer() { this = DataFlow::BarrierGuard::getABarrierNode() } -} +private class RegexpCheckRequestForgerySanitizer extends RequestForgerySanitizer instanceof RegexpCheckBarrier +{ } diff --git a/java/ql/lib/semmle/code/java/security/Sanitizers.qll b/java/ql/lib/semmle/code/java/security/Sanitizers.qll index 21e7ccf264f9..3f909864d2cd 100644 --- a/java/ql/lib/semmle/code/java/security/Sanitizers.qll +++ b/java/ql/lib/semmle/code/java/security/Sanitizers.qll @@ -3,7 +3,9 @@ overlay[local?] module; import java +private import semmle.code.java.controlflow.Guards private import semmle.code.java.dataflow.DataFlow +private import semmle.code.java.frameworks.Regex /** * A node whose type is a simple type unlikely to carry taint, such as primitives and their boxed counterparts, @@ -29,3 +31,44 @@ class SimpleTypeSanitizer extends DataFlow::Node { this.getType() instanceof EnumType } } + +/** + * Holds if `guard` holds with branch `branch` if `e` matches a regular expression. + * + * This is overapproximate: we do not attempt to reason about the correctness of the regexp. + * + * Use this if you want to define a derived `DataFlow::BarrierGuard` without + * make the type recursive. Otherwise use `RegexpCheckBarrier`. + */ +predicate regexpMatchGuardChecks(Guard guard, Expr e, boolean branch) { + exists(Method method, MethodCall mc | + method = mc.getMethod() and + guard = mc and + branch = true + | + // `String.matches` and other `matches` methods. + method.getName() = "matches" and + e = mc.getQualifier() + or + method instanceof PatternMatchesMethod and + e = mc.getArgument(1) + or + method instanceof MatcherMatchesMethod and + exists(MethodCall matcherCall | + matcherCall.getMethod() instanceof PatternMatcherMethod and + e = matcherCall.getArgument(0) and + DataFlow::localExprFlow(matcherCall, mc.getQualifier()) + ) + ) +} + +/** + * A check against a regular expression, considered as a barrier guard. + * + * This is overapproximate: we do not attempt to reason about the correctness of the regexp. + */ +class RegexpCheckBarrier extends DataFlow::Node { + RegexpCheckBarrier() { + this = DataFlow::BarrierGuard::getABarrierNode() + } +} diff --git a/java/ql/lib/semmle/code/java/security/TrustBoundaryViolationQuery.qll b/java/ql/lib/semmle/code/java/security/TrustBoundaryViolationQuery.qll index b2f49834b5ab..477aeb48b64e 100644 --- a/java/ql/lib/semmle/code/java/security/TrustBoundaryViolationQuery.qll +++ b/java/ql/lib/semmle/code/java/security/TrustBoundaryViolationQuery.qll @@ -5,7 +5,6 @@ private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.controlflow.Guards private import semmle.code.java.dataflow.ExternalFlow private import semmle.code.java.dataflow.FlowSources -private import semmle.code.java.frameworks.owasp.Esapi private import semmle.code.java.security.Sanitizers /** @@ -28,25 +27,8 @@ class TrustBoundaryViolationSink extends DataFlow::Node { */ abstract class TrustBoundaryValidationSanitizer extends DataFlow::Node { } -/** - * A node validated by an OWASP ESAPI validation method. - */ -private class EsapiValidatedInputSanitizer extends TrustBoundaryValidationSanitizer { - EsapiValidatedInputSanitizer() { - this = DataFlow::BarrierGuard::getABarrierNode() or - this.asExpr().(MethodCall).getMethod() instanceof EsapiGetValidMethod - } -} - -/** - * Holds if `g` is a guard that checks that `e` is valid data according to an OWASP ESAPI validation method. - */ -private predicate esapiIsValidData(Guard g, Expr e, boolean branch) { - branch = true and - exists(MethodCall ma | ma.getMethod() instanceof EsapiIsValidMethod | - g = ma and - e = ma.getArgument(1) - ) +private class DefaultTrustBoundaryValidationSanitizer extends TrustBoundaryValidationSanitizer { + DefaultTrustBoundaryValidationSanitizer() { barrierNode(this, "trust-boundary-violation") } } /** diff --git a/java/ql/lib/semmle/code/java/security/XSS.qll b/java/ql/lib/semmle/code/java/security/XSS.qll index 990371cc8cfe..c131f868f36c 100644 --- a/java/ql/lib/semmle/code/java/security/XSS.qll +++ b/java/ql/lib/semmle/code/java/security/XSS.qll @@ -54,12 +54,24 @@ private class DefaultXssSink extends XssSink { } } -/** A default sanitizer that considers numeric and boolean typed data safe for writing to output. */ private class DefaultXssSanitizer extends XssSanitizer { - DefaultXssSanitizer() { + DefaultXssSanitizer() { barrierNode(this, ["html-injection", "js-injection"]) } +} + +/** A sanitizer that considers numeric and boolean typed data safe for writing to output. */ +private class PrimitiveSanitizer extends XssSanitizer { + PrimitiveSanitizer() { this.getType() instanceof NumericType or - this.getType() instanceof BooleanType or - // Match `org.springframework.web.util.HtmlUtils.htmlEscape` and possibly other methods like it. + this.getType() instanceof BooleanType + } +} + +/** + * A call to `org.springframework.web.util.HtmlUtils.htmlEscape`, or possibly + * other methods like it, considered as a sanitizer for XSS. + */ +private class HtmlEscapeXssSanitizer extends XssSanitizer { + HtmlEscapeXssSanitizer() { this.asExpr().(MethodCall).getMethod().getName().regexpMatch("(?i)html_?escape.*") } } diff --git a/java/ql/lib/semmle/code/java/security/regexp/RegexInjection.qll b/java/ql/lib/semmle/code/java/security/regexp/RegexInjection.qll index eb27ec873752..d91b411b7978 100644 --- a/java/ql/lib/semmle/code/java/security/regexp/RegexInjection.qll +++ b/java/ql/lib/semmle/code/java/security/regexp/RegexInjection.qll @@ -21,17 +21,8 @@ private class DefaultRegexInjectionSink extends RegexInjectionSink { } } -/** - * A call to the `Pattern.quote` method, which gives metacharacters or escape sequences - * no special meaning. - */ -private class PatternQuoteCall extends RegexInjectionSanitizer { - PatternQuoteCall() { - exists(MethodCall ma, Method m | m = ma.getMethod() | - ma.getArgument(0) = this.asExpr() and - m instanceof PatternQuoteMethod - ) - } +private class DefaultRegexInjectionSanitizer extends RegexInjectionSanitizer { + DefaultRegexInjectionSanitizer() { barrierNode(this, "regex-use") } } /** diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index f78a970245f8..a30e72bfaef2 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.10.3 + +### Minor Analysis Improvements + +* Java analysis no longer forces `--source` and `--target` compiler flags for Maven builds. This allows Maven to use the project's own compiler configuration, improving build compatibility. + ## 1.10.2 No user-facing changes. diff --git a/java/ql/src/Security/CWE/CWE-200/AndroidWebViewSettingsAllowsContentAccess.ql b/java/ql/src/Security/CWE/CWE-200/AndroidWebViewSettingsAllowsContentAccess.ql index 45767185dfd2..cc076039940d 100644 --- a/java/ql/src/Security/CWE/CWE-200/AndroidWebViewSettingsAllowsContentAccess.ql +++ b/java/ql/src/Security/CWE/CWE-200/AndroidWebViewSettingsAllowsContentAccess.ql @@ -118,7 +118,7 @@ where // implicit: no setAllowContentAccess(false) exists(WebViewSource source | source.asExpr() = e and - not WebViewDisallowContentAccessFlow::flow(source, _) + not WebViewDisallowContentAccessFlow::flowFrom(source) ) select e, "Sensitive information may be exposed via a malicious link due to access to content:// links being allowed in this WebView." diff --git a/java/ql/src/change-notes/released/1.10.3.md b/java/ql/src/change-notes/released/1.10.3.md new file mode 100644 index 000000000000..758236f0cc06 --- /dev/null +++ b/java/ql/src/change-notes/released/1.10.3.md @@ -0,0 +1,5 @@ +## 1.10.3 + +### Minor Analysis Improvements + +* Java analysis no longer forces `--source` and `--target` compiler flags for Maven builds. This allows Maven to use the project's own compiler configuration, improving build compatibility. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 7303d5a67610..d3e15295550a 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.10.2 +lastReleaseVersion: 1.10.3 diff --git a/java/ql/src/experimental/Security/CWE/CWE-295/JxBrowserWithoutCertValidation.ql b/java/ql/src/experimental/Security/CWE/CWE-295/JxBrowserWithoutCertValidation.ql index 48c49d5c071d..c53c2cacdaed 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-295/JxBrowserWithoutCertValidation.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-295/JxBrowserWithoutCertValidation.ql @@ -85,7 +85,7 @@ private module JxBrowserFlow = DataFlow::Global; deprecated query predicate problems(DataFlow::Node src, string message) { JxBrowserFlowConfig::isSource(src) and - not JxBrowserFlow::flow(src, _) and + not JxBrowserFlow::flowFrom(src) and not isSafeJxBrowserVersion() and message = "This JxBrowser instance may not check HTTPS certificates." } diff --git a/java/ql/src/experimental/Security/CWE/CWE-346/UnvalidatedCors.ql b/java/ql/src/experimental/Security/CWE/CWE-346/UnvalidatedCors.ql index ef95db6f6c53..fc0cc59244c5 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-346/UnvalidatedCors.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-346/UnvalidatedCors.ql @@ -50,7 +50,7 @@ private Expr getAccessControlAllowOriginHeaderName() { * A taint-tracking configuration for flow from a source node to CorsProbableCheckAccess methods. */ module CorsSourceReachesCheckConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { CorsOriginFlow::flow(source, _) } + predicate isSource(DataFlow::Node source) { CorsOriginFlow::flowFrom(source) } predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(CorsProbableCheckAccess check).getAnArgument() @@ -86,7 +86,7 @@ deprecated query predicate problems( string message1, DataFlow::Node sourceNode, string message2 ) { CorsOriginFlow::flowPath(source, sink) and - not CorsSourceReachesCheckFlow::flow(sourceNode, _) and + not CorsSourceReachesCheckFlow::flowFrom(sourceNode) and sinkNode = sink.getNode() and message1 = "CORS header is being set using user controlled value $@." and sourceNode = source.getNode() and diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql index 778939887f0e..16b0f024329a 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql @@ -17,7 +17,7 @@ deprecated import JwtAuth0 as JwtAuth0 deprecated module JwtDecodeConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource and - not FlowToJwtVerify::flow(source, _) + not FlowToJwtVerify::flowFrom(source) } predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(JwtAuth0::GetPayload a) } diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 5f8aae2fae02..d5ab0a6cc4ae 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.10.2 +version: 1.10.4-dev groups: - java - queries diff --git a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll index b86a4c542461..6978ca7e308d 100644 --- a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -218,6 +218,8 @@ module SummaryModelGeneratorInput implements SummaryModelGeneratorInputSig { ) } + int contentAccessPathLimitInternal() { result = 2 } + predicate isField(DataFlow::ContentSet c) { c instanceof DataFlowUtil::FieldContent or c instanceof DataFlowUtil::SyntheticFieldContent diff --git a/java/ql/test-kotlin1/library-tests/parameter-defaults/flowTest.ql b/java/ql/test-kotlin1/library-tests/parameter-defaults/flowTest.ql index da0fc33464bd..0bf36d842e14 100644 --- a/java/ql/test-kotlin1/library-tests/parameter-defaults/flowTest.ql +++ b/java/ql/test-kotlin1/library-tests/parameter-defaults/flowTest.ql @@ -25,9 +25,7 @@ module Config implements DataFlow::ConfigSig { module Flow = DataFlow::Global; -predicate isSunk(StringLiteral sl) { - exists(DataFlow::Node source | Flow::flow(source, _) and sl = source.asExpr()) -} +predicate isSunk(StringLiteral sl) { Flow::flowFromExpr(sl) } query predicate shouldBeSunkButIsnt(ShouldBeSunk src) { not isSunk(src) } diff --git a/java/ql/test-kotlin2/library-tests/parameter-defaults/flowTest.ql b/java/ql/test-kotlin2/library-tests/parameter-defaults/flowTest.ql index da0fc33464bd..0bf36d842e14 100644 --- a/java/ql/test-kotlin2/library-tests/parameter-defaults/flowTest.ql +++ b/java/ql/test-kotlin2/library-tests/parameter-defaults/flowTest.ql @@ -25,9 +25,7 @@ module Config implements DataFlow::ConfigSig { module Flow = DataFlow::Global; -predicate isSunk(StringLiteral sl) { - exists(DataFlow::Node source | Flow::flow(source, _) and sl = source.asExpr()) -} +predicate isSunk(StringLiteral sl) { Flow::flowFromExpr(sl) } query predicate shouldBeSunkButIsnt(ShouldBeSunk src) { not isSunk(src) } diff --git a/java/ql/test/library-tests/dataflow/ssa/A.java b/java/ql/test/library-tests/dataflow/ssa/A.java index 79303697d646..d7047bec276a 100644 --- a/java/ql/test/library-tests/dataflow/ssa/A.java +++ b/java/ql/test/library-tests/dataflow/ssa/A.java @@ -4,7 +4,13 @@ void sink(Object o) { } boolean isSafe(Object o) { return o == null; } - void foo() { + void assertSafe(Object o) { if (o != null) throw new RuntimeException(); } + + private boolean wrapIsSafe(Object o) { return isSafe(o); } + + private void wrapAssertSafe(Object o) { assertSafe(o); } + + void test1() { Object x = source(); if (!isSafe(x)) { x = null; @@ -21,4 +27,23 @@ void foo() { } sink(x); } + + void test2() { + Object x = source(); + assertSafe(x); + sink(x); + } + + void test3() { + Object x = source(); + if (wrapIsSafe(x)) { + sink(x); + } + } + + void test4() { + Object x = source(); + wrapAssertSafe(x); + sink(x); + } } diff --git a/java/ql/test/library-tests/dataflow/ssa/test.ql b/java/ql/test/library-tests/dataflow/ssa/test.ql index cb601dab5eb1..0bea0aa71a1f 100644 --- a/java/ql/test/library-tests/dataflow/ssa/test.ql +++ b/java/ql/test/library-tests/dataflow/ssa/test.ql @@ -10,6 +10,14 @@ private predicate isSafe(Guard g, Expr checked, boolean branch) { ) } +private predicate assertSafe(Guard g, Expr checked, GuardValue gv) { + exists(MethodCall mc | g = mc | + mc.getMethod().hasName("assertSafe") and + checked = mc.getAnArgument() and + gv.getDualValue().isThrowsException() + ) +} + module TestConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source.asExpr().(MethodCall).getMethod().hasName("source") @@ -21,6 +29,8 @@ module TestConfig implements DataFlow::ConfigSig { predicate isBarrier(DataFlow::Node node) { node = DataFlow::BarrierGuard::getABarrierNode() + or + node = DataFlow::BarrierGuardValue::getABarrierNode() } } diff --git a/java/ql/test/library-tests/frameworks/android/taint-database/flowSteps.ql b/java/ql/test/library-tests/frameworks/android/taint-database/flowSteps.ql index 5ca38c7e29b1..ae4f8ca0da02 100644 --- a/java/ql/test/library-tests/frameworks/android/taint-database/flowSteps.ql +++ b/java/ql/test/library-tests/frameworks/android/taint-database/flowSteps.ql @@ -20,7 +20,7 @@ module FlowStepTest implements TestSig { predicate hasActualResult(Location l, string element, string tag, string value) { tag = "taintReachesReturn" and value = "" and - exists(DataFlow::Node source | Flow::flow(source, _) | + exists(DataFlow::Node source | Flow::flowFrom(source) | l = source.getLocation() and element = source.toString() ) diff --git a/java/ql/test/library-tests/frameworks/android/taint-database/sinks.ql b/java/ql/test/library-tests/frameworks/android/taint-database/sinks.ql index ccdb96980092..58b749364d23 100644 --- a/java/ql/test/library-tests/frameworks/android/taint-database/sinks.ql +++ b/java/ql/test/library-tests/frameworks/android/taint-database/sinks.ql @@ -20,7 +20,7 @@ module SinkTest implements TestSig { predicate hasActualResult(Location l, string element, string tag, string value) { tag = "taintReachesSink" and value = "" and - exists(DataFlow::Node source | Flow::flow(source, _) | + exists(DataFlow::Node source | Flow::flowFrom(source) | l = source.getLocation() and element = source.toString() ) diff --git a/java/ql/test/query-tests/security/CWE-918/RequestForgery.expected b/java/ql/test/query-tests/security/CWE-918/RequestForgery.expected index b08273da0ca9..66dc968cb23b 100644 --- a/java/ql/test/query-tests/security/CWE-918/RequestForgery.expected +++ b/java/ql/test/query-tests/security/CWE-918/RequestForgery.expected @@ -228,30 +228,30 @@ | JdbcUrlSSRF.java:88:19:88:25 | jdbcUrl | JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) : String | JdbcUrlSSRF.java:88:19:88:25 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) | user-provided value | | ReactiveWebClientSSRF.java:16:52:16:54 | url | ReactiveWebClientSSRF.java:15:26:15:52 | getParameter(...) : String | ReactiveWebClientSSRF.java:16:52:16:54 | url | Potential server-side request forgery due to a $@. | ReactiveWebClientSSRF.java:15:26:15:52 | getParameter(...) | user-provided value | | ReactiveWebClientSSRF.java:35:30:35:32 | url | ReactiveWebClientSSRF.java:32:26:32:52 | getParameter(...) : String | ReactiveWebClientSSRF.java:35:30:35:32 | url | Potential server-side request forgery due to a $@. | ReactiveWebClientSSRF.java:32:26:32:52 | getParameter(...) | user-provided value | -| SanitizationTests.java:22:52:22:54 | uri | SanitizationTests.java:19:31:19:57 | getParameter(...) : String | SanitizationTests.java:22:52:22:54 | uri | Potential server-side request forgery due to a $@. | SanitizationTests.java:19:31:19:57 | getParameter(...) | user-provided value | -| SanitizationTests.java:23:25:23:25 | r | SanitizationTests.java:19:31:19:57 | getParameter(...) : String | SanitizationTests.java:23:25:23:25 | r | Potential server-side request forgery due to a $@. | SanitizationTests.java:19:31:19:57 | getParameter(...) | user-provided value | -| SanitizationTests.java:76:59:76:77 | new URI(...) | SanitizationTests.java:75:33:75:63 | getParameter(...) : String | SanitizationTests.java:76:59:76:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:75:33:75:63 | getParameter(...) | user-provided value | -| SanitizationTests.java:77:25:77:32 | unsafer3 | SanitizationTests.java:75:33:75:63 | getParameter(...) : String | SanitizationTests.java:77:25:77:32 | unsafer3 | Potential server-side request forgery due to a $@. | SanitizationTests.java:75:33:75:63 | getParameter(...) | user-provided value | -| SanitizationTests.java:80:59:80:77 | new URI(...) | SanitizationTests.java:79:49:79:79 | getParameter(...) : String | SanitizationTests.java:80:59:80:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:79:49:79:79 | getParameter(...) | user-provided value | -| SanitizationTests.java:81:25:81:32 | unsafer4 | SanitizationTests.java:79:49:79:79 | getParameter(...) : String | SanitizationTests.java:81:25:81:32 | unsafer4 | Potential server-side request forgery due to a $@. | SanitizationTests.java:79:49:79:79 | getParameter(...) | user-provided value | -| SanitizationTests.java:85:59:85:88 | new URI(...) | SanitizationTests.java:84:31:84:61 | getParameter(...) : String | SanitizationTests.java:85:59:85:88 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:84:31:84:61 | getParameter(...) | user-provided value | -| SanitizationTests.java:86:25:86:32 | unsafer5 | SanitizationTests.java:84:31:84:61 | getParameter(...) : String | SanitizationTests.java:86:25:86:32 | unsafer5 | Potential server-side request forgery due to a $@. | SanitizationTests.java:84:31:84:61 | getParameter(...) | user-provided value | -| SanitizationTests.java:90:60:90:89 | new URI(...) | SanitizationTests.java:88:58:88:86 | getParameter(...) : String | SanitizationTests.java:90:60:90:89 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:88:58:88:86 | getParameter(...) | user-provided value | -| SanitizationTests.java:91:25:91:33 | unsafer5a | SanitizationTests.java:88:58:88:86 | getParameter(...) : String | SanitizationTests.java:91:25:91:33 | unsafer5a | Potential server-side request forgery due to a $@. | SanitizationTests.java:88:58:88:86 | getParameter(...) | user-provided value | -| SanitizationTests.java:95:60:95:90 | new URI(...) | SanitizationTests.java:93:60:93:88 | getParameter(...) : String | SanitizationTests.java:95:60:95:90 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:93:60:93:88 | getParameter(...) | user-provided value | -| SanitizationTests.java:96:25:96:33 | unsafer5b | SanitizationTests.java:93:60:93:88 | getParameter(...) : String | SanitizationTests.java:96:25:96:33 | unsafer5b | Potential server-side request forgery due to a $@. | SanitizationTests.java:93:60:93:88 | getParameter(...) | user-provided value | -| SanitizationTests.java:100:60:100:90 | new URI(...) | SanitizationTests.java:98:77:98:105 | getParameter(...) : String | SanitizationTests.java:100:60:100:90 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:98:77:98:105 | getParameter(...) | user-provided value | -| SanitizationTests.java:101:25:101:33 | unsafer5c | SanitizationTests.java:98:77:98:105 | getParameter(...) : String | SanitizationTests.java:101:25:101:33 | unsafer5c | Potential server-side request forgery due to a $@. | SanitizationTests.java:98:77:98:105 | getParameter(...) | user-provided value | -| SanitizationTests.java:104:59:104:77 | new URI(...) | SanitizationTests.java:103:73:103:103 | getParameter(...) : String | SanitizationTests.java:104:59:104:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:103:73:103:103 | getParameter(...) | user-provided value | -| SanitizationTests.java:105:25:105:32 | unsafer6 | SanitizationTests.java:103:73:103:103 | getParameter(...) : String | SanitizationTests.java:105:25:105:32 | unsafer6 | Potential server-side request forgery due to a $@. | SanitizationTests.java:103:73:103:103 | getParameter(...) | user-provided value | -| SanitizationTests.java:108:59:108:77 | new URI(...) | SanitizationTests.java:107:56:107:86 | getParameter(...) : String | SanitizationTests.java:108:59:108:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:107:56:107:86 | getParameter(...) | user-provided value | -| SanitizationTests.java:109:25:109:32 | unsafer7 | SanitizationTests.java:107:56:107:86 | getParameter(...) : String | SanitizationTests.java:109:25:109:32 | unsafer7 | Potential server-side request forgery due to a $@. | SanitizationTests.java:107:56:107:86 | getParameter(...) | user-provided value | -| SanitizationTests.java:112:59:112:77 | new URI(...) | SanitizationTests.java:111:55:111:85 | getParameter(...) : String | SanitizationTests.java:112:59:112:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:111:55:111:85 | getParameter(...) | user-provided value | -| SanitizationTests.java:113:25:113:32 | unsafer8 | SanitizationTests.java:111:55:111:85 | getParameter(...) : String | SanitizationTests.java:113:25:113:32 | unsafer8 | Potential server-side request forgery due to a $@. | SanitizationTests.java:111:55:111:85 | getParameter(...) | user-provided value | -| SanitizationTests.java:116:59:116:77 | new URI(...) | SanitizationTests.java:115:33:115:63 | getParameter(...) : String | SanitizationTests.java:116:59:116:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:115:33:115:63 | getParameter(...) | user-provided value | -| SanitizationTests.java:117:25:117:32 | unsafer9 | SanitizationTests.java:115:33:115:63 | getParameter(...) : String | SanitizationTests.java:117:25:117:32 | unsafer9 | Potential server-side request forgery due to a $@. | SanitizationTests.java:115:33:115:63 | getParameter(...) | user-provided value | -| SanitizationTests.java:120:60:120:79 | new URI(...) | SanitizationTests.java:119:94:119:125 | getParameter(...) : String | SanitizationTests.java:120:60:120:79 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:119:94:119:125 | getParameter(...) | user-provided value | -| SanitizationTests.java:121:25:121:33 | unsafer10 | SanitizationTests.java:119:94:119:125 | getParameter(...) : String | SanitizationTests.java:121:25:121:33 | unsafer10 | Potential server-side request forgery due to a $@. | SanitizationTests.java:119:94:119:125 | getParameter(...) | user-provided value | +| SanitizationTests.java:24:52:24:54 | uri | SanitizationTests.java:21:31:21:57 | getParameter(...) : String | SanitizationTests.java:24:52:24:54 | uri | Potential server-side request forgery due to a $@. | SanitizationTests.java:21:31:21:57 | getParameter(...) | user-provided value | +| SanitizationTests.java:25:25:25:25 | r | SanitizationTests.java:21:31:21:57 | getParameter(...) : String | SanitizationTests.java:25:25:25:25 | r | Potential server-side request forgery due to a $@. | SanitizationTests.java:21:31:21:57 | getParameter(...) | user-provided value | +| SanitizationTests.java:78:59:78:77 | new URI(...) | SanitizationTests.java:77:33:77:63 | getParameter(...) : String | SanitizationTests.java:78:59:78:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:77:33:77:63 | getParameter(...) | user-provided value | +| SanitizationTests.java:79:25:79:32 | unsafer3 | SanitizationTests.java:77:33:77:63 | getParameter(...) : String | SanitizationTests.java:79:25:79:32 | unsafer3 | Potential server-side request forgery due to a $@. | SanitizationTests.java:77:33:77:63 | getParameter(...) | user-provided value | +| SanitizationTests.java:82:59:82:77 | new URI(...) | SanitizationTests.java:81:49:81:79 | getParameter(...) : String | SanitizationTests.java:82:59:82:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:81:49:81:79 | getParameter(...) | user-provided value | +| SanitizationTests.java:83:25:83:32 | unsafer4 | SanitizationTests.java:81:49:81:79 | getParameter(...) : String | SanitizationTests.java:83:25:83:32 | unsafer4 | Potential server-side request forgery due to a $@. | SanitizationTests.java:81:49:81:79 | getParameter(...) | user-provided value | +| SanitizationTests.java:87:59:87:88 | new URI(...) | SanitizationTests.java:86:31:86:61 | getParameter(...) : String | SanitizationTests.java:87:59:87:88 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:86:31:86:61 | getParameter(...) | user-provided value | +| SanitizationTests.java:88:25:88:32 | unsafer5 | SanitizationTests.java:86:31:86:61 | getParameter(...) : String | SanitizationTests.java:88:25:88:32 | unsafer5 | Potential server-side request forgery due to a $@. | SanitizationTests.java:86:31:86:61 | getParameter(...) | user-provided value | +| SanitizationTests.java:92:60:92:89 | new URI(...) | SanitizationTests.java:90:58:90:86 | getParameter(...) : String | SanitizationTests.java:92:60:92:89 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:90:58:90:86 | getParameter(...) | user-provided value | +| SanitizationTests.java:93:25:93:33 | unsafer5a | SanitizationTests.java:90:58:90:86 | getParameter(...) : String | SanitizationTests.java:93:25:93:33 | unsafer5a | Potential server-side request forgery due to a $@. | SanitizationTests.java:90:58:90:86 | getParameter(...) | user-provided value | +| SanitizationTests.java:97:60:97:90 | new URI(...) | SanitizationTests.java:95:60:95:88 | getParameter(...) : String | SanitizationTests.java:97:60:97:90 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:95:60:95:88 | getParameter(...) | user-provided value | +| SanitizationTests.java:98:25:98:33 | unsafer5b | SanitizationTests.java:95:60:95:88 | getParameter(...) : String | SanitizationTests.java:98:25:98:33 | unsafer5b | Potential server-side request forgery due to a $@. | SanitizationTests.java:95:60:95:88 | getParameter(...) | user-provided value | +| SanitizationTests.java:102:60:102:90 | new URI(...) | SanitizationTests.java:100:77:100:105 | getParameter(...) : String | SanitizationTests.java:102:60:102:90 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:100:77:100:105 | getParameter(...) | user-provided value | +| SanitizationTests.java:103:25:103:33 | unsafer5c | SanitizationTests.java:100:77:100:105 | getParameter(...) : String | SanitizationTests.java:103:25:103:33 | unsafer5c | Potential server-side request forgery due to a $@. | SanitizationTests.java:100:77:100:105 | getParameter(...) | user-provided value | +| SanitizationTests.java:106:59:106:77 | new URI(...) | SanitizationTests.java:105:73:105:103 | getParameter(...) : String | SanitizationTests.java:106:59:106:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:105:73:105:103 | getParameter(...) | user-provided value | +| SanitizationTests.java:107:25:107:32 | unsafer6 | SanitizationTests.java:105:73:105:103 | getParameter(...) : String | SanitizationTests.java:107:25:107:32 | unsafer6 | Potential server-side request forgery due to a $@. | SanitizationTests.java:105:73:105:103 | getParameter(...) | user-provided value | +| SanitizationTests.java:110:59:110:77 | new URI(...) | SanitizationTests.java:109:56:109:86 | getParameter(...) : String | SanitizationTests.java:110:59:110:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:109:56:109:86 | getParameter(...) | user-provided value | +| SanitizationTests.java:111:25:111:32 | unsafer7 | SanitizationTests.java:109:56:109:86 | getParameter(...) : String | SanitizationTests.java:111:25:111:32 | unsafer7 | Potential server-side request forgery due to a $@. | SanitizationTests.java:109:56:109:86 | getParameter(...) | user-provided value | +| SanitizationTests.java:114:59:114:77 | new URI(...) | SanitizationTests.java:113:55:113:85 | getParameter(...) : String | SanitizationTests.java:114:59:114:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:113:55:113:85 | getParameter(...) | user-provided value | +| SanitizationTests.java:115:25:115:32 | unsafer8 | SanitizationTests.java:113:55:113:85 | getParameter(...) : String | SanitizationTests.java:115:25:115:32 | unsafer8 | Potential server-side request forgery due to a $@. | SanitizationTests.java:113:55:113:85 | getParameter(...) | user-provided value | +| SanitizationTests.java:118:59:118:77 | new URI(...) | SanitizationTests.java:117:33:117:63 | getParameter(...) : String | SanitizationTests.java:118:59:118:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:117:33:117:63 | getParameter(...) | user-provided value | +| SanitizationTests.java:119:25:119:32 | unsafer9 | SanitizationTests.java:117:33:117:63 | getParameter(...) : String | SanitizationTests.java:119:25:119:32 | unsafer9 | Potential server-side request forgery due to a $@. | SanitizationTests.java:117:33:117:63 | getParameter(...) | user-provided value | +| SanitizationTests.java:122:60:122:79 | new URI(...) | SanitizationTests.java:121:94:121:125 | getParameter(...) : String | SanitizationTests.java:122:60:122:79 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:121:94:121:125 | getParameter(...) | user-provided value | +| SanitizationTests.java:123:25:123:33 | unsafer10 | SanitizationTests.java:121:94:121:125 | getParameter(...) : String | SanitizationTests.java:123:25:123:33 | unsafer10 | Potential server-side request forgery due to a $@. | SanitizationTests.java:121:94:121:125 | getParameter(...) | user-provided value | | SpringSSRF.java:32:39:32:59 | ... + ... | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:32:39:32:59 | ... + ... | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | | SpringSSRF.java:33:35:33:48 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:33:35:33:48 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | | SpringSSRF.java:34:34:34:47 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:34:34:34:47 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | @@ -665,118 +665,118 @@ edges | JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) : String | JdbcUrlSSRF.java:88:19:88:25 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:240 | | ReactiveWebClientSSRF.java:15:26:15:52 | getParameter(...) : String | ReactiveWebClientSSRF.java:16:52:16:54 | url | provenance | Src:MaD:277 Sink:MaD:274 | | ReactiveWebClientSSRF.java:32:26:32:52 | getParameter(...) : String | ReactiveWebClientSSRF.java:35:30:35:32 | url | provenance | Src:MaD:277 Sink:MaD:273 | -| SanitizationTests.java:19:23:19:58 | new URI(...) : URI | SanitizationTests.java:22:52:22:54 | uri | provenance | Sink:MaD:6 | -| SanitizationTests.java:19:23:19:58 | new URI(...) : URI | SanitizationTests.java:22:52:22:54 | uri : URI | provenance | | -| SanitizationTests.java:19:31:19:57 | getParameter(...) : String | SanitizationTests.java:19:23:19:58 | new URI(...) : URI | provenance | Src:MaD:277 Config | -| SanitizationTests.java:19:31:19:57 | getParameter(...) : String | SanitizationTests.java:19:23:19:58 | new URI(...) : URI | provenance | Src:MaD:277 MaD:285 | -| SanitizationTests.java:22:29:22:55 | newBuilder(...) : Builder | SanitizationTests.java:22:29:22:63 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:22:29:22:63 | build(...) : HttpRequest | SanitizationTests.java:23:25:23:25 | r | provenance | Sink:MaD:4 | -| SanitizationTests.java:22:52:22:54 | uri : URI | SanitizationTests.java:22:29:22:55 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:75:33:75:63 | getParameter(...) : String | SanitizationTests.java:76:67:76:76 | unsafeUri3 : String | provenance | Src:MaD:277 | -| SanitizationTests.java:76:36:76:78 | newBuilder(...) : Builder | SanitizationTests.java:76:36:76:86 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:76:36:76:86 | build(...) : HttpRequest | SanitizationTests.java:77:25:77:32 | unsafer3 | provenance | Sink:MaD:4 | -| SanitizationTests.java:76:59:76:77 | new URI(...) : URI | SanitizationTests.java:76:36:76:78 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:76:67:76:76 | unsafeUri3 : String | SanitizationTests.java:76:59:76:77 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:76:67:76:76 | unsafeUri3 : String | SanitizationTests.java:76:59:76:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:76:67:76:76 | unsafeUri3 : String | SanitizationTests.java:76:59:76:77 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:76:67:76:76 | unsafeUri3 : String | SanitizationTests.java:76:59:76:77 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:79:49:79:79 | getParameter(...) : String | SanitizationTests.java:80:67:80:76 | unsafeUri4 : String | provenance | Src:MaD:277 | -| SanitizationTests.java:80:36:80:78 | newBuilder(...) : Builder | SanitizationTests.java:80:36:80:86 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:80:36:80:86 | build(...) : HttpRequest | SanitizationTests.java:81:25:81:32 | unsafer4 | provenance | Sink:MaD:4 | -| SanitizationTests.java:80:59:80:77 | new URI(...) : URI | SanitizationTests.java:80:36:80:78 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:80:67:80:76 | unsafeUri4 : String | SanitizationTests.java:80:59:80:77 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:80:67:80:76 | unsafeUri4 : String | SanitizationTests.java:80:59:80:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:80:67:80:76 | unsafeUri4 : String | SanitizationTests.java:80:59:80:77 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:80:67:80:76 | unsafeUri4 : String | SanitizationTests.java:80:59:80:77 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:84:13:84:22 | unsafeUri5 [post update] : StringBuilder | SanitizationTests.java:85:67:85:76 | unsafeUri5 : StringBuilder | provenance | | -| SanitizationTests.java:84:31:84:61 | getParameter(...) : String | SanitizationTests.java:84:13:84:22 | unsafeUri5 [post update] : StringBuilder | provenance | Src:MaD:277 MaD:278 | -| SanitizationTests.java:85:36:85:89 | newBuilder(...) : Builder | SanitizationTests.java:85:36:85:97 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:85:36:85:97 | build(...) : HttpRequest | SanitizationTests.java:86:25:86:32 | unsafer5 | provenance | Sink:MaD:4 | -| SanitizationTests.java:85:59:85:88 | new URI(...) : URI | SanitizationTests.java:85:36:85:89 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:85:67:85:76 | unsafeUri5 : StringBuilder | SanitizationTests.java:85:67:85:87 | toString(...) : String | provenance | MaD:280 | -| SanitizationTests.java:85:67:85:87 | toString(...) : String | SanitizationTests.java:85:59:85:88 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:85:67:85:87 | toString(...) : String | SanitizationTests.java:85:59:85:88 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:85:67:85:87 | toString(...) : String | SanitizationTests.java:85:59:85:88 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:85:67:85:87 | toString(...) : String | SanitizationTests.java:85:59:85:88 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:88:40:88:87 | new StringBuilder(...) : StringBuilder | SanitizationTests.java:90:68:90:77 | unafeUri5a : StringBuilder | provenance | | -| SanitizationTests.java:88:58:88:86 | getParameter(...) : String | SanitizationTests.java:88:40:88:87 | new StringBuilder(...) : StringBuilder | provenance | Src:MaD:277 MaD:282 | -| SanitizationTests.java:90:37:90:90 | newBuilder(...) : Builder | SanitizationTests.java:90:37:90:98 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:90:37:90:98 | build(...) : HttpRequest | SanitizationTests.java:91:25:91:33 | unsafer5a | provenance | Sink:MaD:4 | -| SanitizationTests.java:90:60:90:89 | new URI(...) : URI | SanitizationTests.java:90:37:90:90 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:90:68:90:77 | unafeUri5a : StringBuilder | SanitizationTests.java:90:68:90:88 | toString(...) : String | provenance | MaD:280 | -| SanitizationTests.java:90:68:90:88 | toString(...) : String | SanitizationTests.java:90:60:90:89 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:90:68:90:88 | toString(...) : String | SanitizationTests.java:90:60:90:89 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:90:68:90:88 | toString(...) : String | SanitizationTests.java:90:60:90:89 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:90:68:90:88 | toString(...) : String | SanitizationTests.java:90:60:90:89 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:93:41:93:105 | append(...) : StringBuilder | SanitizationTests.java:95:68:95:78 | unsafeUri5b : StringBuilder | provenance | | -| SanitizationTests.java:93:42:93:89 | new StringBuilder(...) : StringBuilder | SanitizationTests.java:93:41:93:105 | append(...) : StringBuilder | provenance | MaD:279 | -| SanitizationTests.java:93:60:93:88 | getParameter(...) : String | SanitizationTests.java:93:42:93:89 | new StringBuilder(...) : StringBuilder | provenance | Src:MaD:277 MaD:282 | -| SanitizationTests.java:95:37:95:91 | newBuilder(...) : Builder | SanitizationTests.java:95:37:95:99 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:95:37:95:99 | build(...) : HttpRequest | SanitizationTests.java:96:25:96:33 | unsafer5b | provenance | Sink:MaD:4 | -| SanitizationTests.java:95:60:95:90 | new URI(...) : URI | SanitizationTests.java:95:37:95:91 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:95:68:95:78 | unsafeUri5b : StringBuilder | SanitizationTests.java:95:68:95:89 | toString(...) : String | provenance | MaD:280 | -| SanitizationTests.java:95:68:95:89 | toString(...) : String | SanitizationTests.java:95:60:95:90 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:95:68:95:89 | toString(...) : String | SanitizationTests.java:95:60:95:90 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:95:68:95:89 | toString(...) : String | SanitizationTests.java:95:60:95:90 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:95:68:95:89 | toString(...) : String | SanitizationTests.java:95:60:95:90 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:98:41:98:106 | append(...) : StringBuilder | SanitizationTests.java:100:68:100:78 | unsafeUri5c : StringBuilder | provenance | | -| SanitizationTests.java:98:77:98:105 | getParameter(...) : String | SanitizationTests.java:98:41:98:106 | append(...) : StringBuilder | provenance | Src:MaD:277 MaD:278+MaD:279 | -| SanitizationTests.java:100:37:100:91 | newBuilder(...) : Builder | SanitizationTests.java:100:37:100:99 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:100:37:100:99 | build(...) : HttpRequest | SanitizationTests.java:101:25:101:33 | unsafer5c | provenance | Sink:MaD:4 | -| SanitizationTests.java:100:60:100:90 | new URI(...) : URI | SanitizationTests.java:100:37:100:91 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:100:68:100:78 | unsafeUri5c : StringBuilder | SanitizationTests.java:100:68:100:89 | toString(...) : String | provenance | MaD:280 | -| SanitizationTests.java:100:68:100:89 | toString(...) : String | SanitizationTests.java:100:60:100:90 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:100:68:100:89 | toString(...) : String | SanitizationTests.java:100:60:100:90 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:100:68:100:89 | toString(...) : String | SanitizationTests.java:100:60:100:90 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:100:68:100:89 | toString(...) : String | SanitizationTests.java:100:60:100:90 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:103:33:103:104 | format(...) : String | SanitizationTests.java:104:67:104:76 | unsafeUri6 : String | provenance | | -| SanitizationTests.java:103:33:103:104 | new ..[] { .. } : Object[] [[]] : String | SanitizationTests.java:103:33:103:104 | format(...) : String | provenance | MaD:281 | -| SanitizationTests.java:103:73:103:103 | getParameter(...) : String | SanitizationTests.java:103:33:103:104 | new ..[] { .. } : Object[] [[]] : String | provenance | Src:MaD:277 | -| SanitizationTests.java:104:36:104:78 | newBuilder(...) : Builder | SanitizationTests.java:104:36:104:86 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:104:36:104:86 | build(...) : HttpRequest | SanitizationTests.java:105:25:105:32 | unsafer6 | provenance | Sink:MaD:4 | -| SanitizationTests.java:104:59:104:77 | new URI(...) : URI | SanitizationTests.java:104:36:104:78 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:104:67:104:76 | unsafeUri6 : String | SanitizationTests.java:104:59:104:77 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:104:67:104:76 | unsafeUri6 : String | SanitizationTests.java:104:59:104:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:104:67:104:76 | unsafeUri6 : String | SanitizationTests.java:104:59:104:77 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:104:67:104:76 | unsafeUri6 : String | SanitizationTests.java:104:59:104:77 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:107:33:107:110 | format(...) : String | SanitizationTests.java:108:67:108:76 | unsafeUri7 : String | provenance | | -| SanitizationTests.java:107:33:107:110 | new ..[] { .. } : Object[] [[]] : String | SanitizationTests.java:107:33:107:110 | format(...) : String | provenance | MaD:281 | -| SanitizationTests.java:107:56:107:86 | getParameter(...) : String | SanitizationTests.java:107:33:107:110 | new ..[] { .. } : Object[] [[]] : String | provenance | Src:MaD:277 | -| SanitizationTests.java:108:36:108:78 | newBuilder(...) : Builder | SanitizationTests.java:108:36:108:86 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:108:36:108:86 | build(...) : HttpRequest | SanitizationTests.java:109:25:109:32 | unsafer7 | provenance | Sink:MaD:4 | -| SanitizationTests.java:108:59:108:77 | new URI(...) : URI | SanitizationTests.java:108:36:108:78 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:108:67:108:76 | unsafeUri7 : String | SanitizationTests.java:108:59:108:77 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:108:67:108:76 | unsafeUri7 : String | SanitizationTests.java:108:59:108:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:108:67:108:76 | unsafeUri7 : String | SanitizationTests.java:108:59:108:77 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:108:67:108:76 | unsafeUri7 : String | SanitizationTests.java:108:59:108:77 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:111:33:111:110 | format(...) : String | SanitizationTests.java:112:67:112:76 | unsafeUri8 : String | provenance | | -| SanitizationTests.java:111:33:111:110 | new ..[] { .. } : Object[] [[]] : String | SanitizationTests.java:111:33:111:110 | format(...) : String | provenance | MaD:281 | -| SanitizationTests.java:111:55:111:85 | getParameter(...) : String | SanitizationTests.java:111:33:111:110 | new ..[] { .. } : Object[] [[]] : String | provenance | Src:MaD:277 | -| SanitizationTests.java:112:36:112:78 | newBuilder(...) : Builder | SanitizationTests.java:112:36:112:86 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:112:36:112:86 | build(...) : HttpRequest | SanitizationTests.java:113:25:113:32 | unsafer8 | provenance | Sink:MaD:4 | -| SanitizationTests.java:112:59:112:77 | new URI(...) : URI | SanitizationTests.java:112:36:112:78 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:112:67:112:76 | unsafeUri8 : String | SanitizationTests.java:112:59:112:77 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:112:67:112:76 | unsafeUri8 : String | SanitizationTests.java:112:59:112:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:112:67:112:76 | unsafeUri8 : String | SanitizationTests.java:112:59:112:77 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:112:67:112:76 | unsafeUri8 : String | SanitizationTests.java:112:59:112:77 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:115:33:115:63 | getParameter(...) : String | SanitizationTests.java:116:67:116:76 | unsafeUri9 : String | provenance | Src:MaD:277 | -| SanitizationTests.java:116:36:116:78 | newBuilder(...) : Builder | SanitizationTests.java:116:36:116:86 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:116:36:116:86 | build(...) : HttpRequest | SanitizationTests.java:117:25:117:32 | unsafer9 | provenance | Sink:MaD:4 | -| SanitizationTests.java:116:59:116:77 | new URI(...) : URI | SanitizationTests.java:116:36:116:78 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:116:67:116:76 | unsafeUri9 : String | SanitizationTests.java:116:59:116:77 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:116:67:116:76 | unsafeUri9 : String | SanitizationTests.java:116:59:116:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:116:67:116:76 | unsafeUri9 : String | SanitizationTests.java:116:59:116:77 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:116:67:116:76 | unsafeUri9 : String | SanitizationTests.java:116:59:116:77 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:119:34:119:126 | format(...) : String | SanitizationTests.java:120:68:120:78 | unsafeUri10 : String | provenance | | -| SanitizationTests.java:119:34:119:126 | new ..[] { .. } : Object[] [[]] : String | SanitizationTests.java:119:34:119:126 | format(...) : String | provenance | MaD:281 | -| SanitizationTests.java:119:94:119:125 | getParameter(...) : String | SanitizationTests.java:119:34:119:126 | new ..[] { .. } : Object[] [[]] : String | provenance | Src:MaD:277 | -| SanitizationTests.java:120:37:120:80 | newBuilder(...) : Builder | SanitizationTests.java:120:37:120:88 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:120:37:120:88 | build(...) : HttpRequest | SanitizationTests.java:121:25:121:33 | unsafer10 | provenance | Sink:MaD:4 | -| SanitizationTests.java:120:60:120:79 | new URI(...) : URI | SanitizationTests.java:120:37:120:80 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:120:68:120:78 | unsafeUri10 : String | SanitizationTests.java:120:60:120:79 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:120:68:120:78 | unsafeUri10 : String | SanitizationTests.java:120:60:120:79 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:120:68:120:78 | unsafeUri10 : String | SanitizationTests.java:120:60:120:79 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:120:68:120:78 | unsafeUri10 : String | SanitizationTests.java:120:60:120:79 | new URI(...) : URI | provenance | MaD:285 | +| SanitizationTests.java:21:23:21:58 | new URI(...) : URI | SanitizationTests.java:24:52:24:54 | uri | provenance | Sink:MaD:6 | +| SanitizationTests.java:21:23:21:58 | new URI(...) : URI | SanitizationTests.java:24:52:24:54 | uri : URI | provenance | | +| SanitizationTests.java:21:31:21:57 | getParameter(...) : String | SanitizationTests.java:21:23:21:58 | new URI(...) : URI | provenance | Src:MaD:277 Config | +| SanitizationTests.java:21:31:21:57 | getParameter(...) : String | SanitizationTests.java:21:23:21:58 | new URI(...) : URI | provenance | Src:MaD:277 MaD:285 | +| SanitizationTests.java:24:29:24:55 | newBuilder(...) : Builder | SanitizationTests.java:24:29:24:63 | build(...) : HttpRequest | provenance | MaD:283 | +| SanitizationTests.java:24:29:24:63 | build(...) : HttpRequest | SanitizationTests.java:25:25:25:25 | r | provenance | Sink:MaD:4 | +| SanitizationTests.java:24:52:24:54 | uri : URI | SanitizationTests.java:24:29:24:55 | newBuilder(...) : Builder | provenance | MaD:284 | +| SanitizationTests.java:77:33:77:63 | getParameter(...) : String | SanitizationTests.java:78:67:78:76 | unsafeUri3 : String | provenance | Src:MaD:277 | +| SanitizationTests.java:78:36:78:78 | newBuilder(...) : Builder | SanitizationTests.java:78:36:78:86 | build(...) : HttpRequest | provenance | MaD:283 | +| SanitizationTests.java:78:36:78:86 | build(...) : HttpRequest | SanitizationTests.java:79:25:79:32 | unsafer3 | provenance | Sink:MaD:4 | +| SanitizationTests.java:78:59:78:77 | new URI(...) : URI | SanitizationTests.java:78:36:78:78 | newBuilder(...) : Builder | provenance | MaD:284 | +| SanitizationTests.java:78:67:78:76 | unsafeUri3 : String | SanitizationTests.java:78:59:78:77 | new URI(...) | provenance | Config Sink:MaD:6 | +| SanitizationTests.java:78:67:78:76 | unsafeUri3 : String | SanitizationTests.java:78:59:78:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | +| SanitizationTests.java:78:67:78:76 | unsafeUri3 : String | SanitizationTests.java:78:59:78:77 | new URI(...) : URI | provenance | Config | +| SanitizationTests.java:78:67:78:76 | unsafeUri3 : String | SanitizationTests.java:78:59:78:77 | new URI(...) : URI | provenance | MaD:285 | +| SanitizationTests.java:81:49:81:79 | getParameter(...) : String | SanitizationTests.java:82:67:82:76 | unsafeUri4 : String | provenance | Src:MaD:277 | +| SanitizationTests.java:82:36:82:78 | newBuilder(...) : Builder | SanitizationTests.java:82:36:82:86 | build(...) : HttpRequest | provenance | MaD:283 | +| SanitizationTests.java:82:36:82:86 | build(...) : HttpRequest | SanitizationTests.java:83:25:83:32 | unsafer4 | provenance | Sink:MaD:4 | +| SanitizationTests.java:82:59:82:77 | new URI(...) : URI | SanitizationTests.java:82:36:82:78 | newBuilder(...) : Builder | provenance | MaD:284 | +| SanitizationTests.java:82:67:82:76 | unsafeUri4 : String | SanitizationTests.java:82:59:82:77 | new URI(...) | provenance | Config Sink:MaD:6 | +| SanitizationTests.java:82:67:82:76 | unsafeUri4 : String | SanitizationTests.java:82:59:82:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | +| SanitizationTests.java:82:67:82:76 | unsafeUri4 : String | SanitizationTests.java:82:59:82:77 | new URI(...) : URI | provenance | Config | +| SanitizationTests.java:82:67:82:76 | unsafeUri4 : String | SanitizationTests.java:82:59:82:77 | new URI(...) : URI | provenance | MaD:285 | +| SanitizationTests.java:86:13:86:22 | unsafeUri5 [post update] : StringBuilder | SanitizationTests.java:87:67:87:76 | unsafeUri5 : StringBuilder | provenance | | +| SanitizationTests.java:86:31:86:61 | getParameter(...) : String | SanitizationTests.java:86:13:86:22 | unsafeUri5 [post update] : StringBuilder | provenance | Src:MaD:277 MaD:278 | +| SanitizationTests.java:87:36:87:89 | newBuilder(...) : Builder | SanitizationTests.java:87:36:87:97 | build(...) : HttpRequest | provenance | MaD:283 | +| SanitizationTests.java:87:36:87:97 | build(...) : HttpRequest | SanitizationTests.java:88:25:88:32 | unsafer5 | provenance | Sink:MaD:4 | +| SanitizationTests.java:87:59:87:88 | new URI(...) : URI | SanitizationTests.java:87:36:87:89 | newBuilder(...) : Builder | provenance | MaD:284 | +| SanitizationTests.java:87:67:87:76 | unsafeUri5 : StringBuilder | SanitizationTests.java:87:67:87:87 | toString(...) : String | provenance | MaD:280 | +| SanitizationTests.java:87:67:87:87 | toString(...) : String | SanitizationTests.java:87:59:87:88 | new URI(...) | provenance | Config Sink:MaD:6 | +| SanitizationTests.java:87:67:87:87 | toString(...) : String | SanitizationTests.java:87:59:87:88 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | +| SanitizationTests.java:87:67:87:87 | toString(...) : String | SanitizationTests.java:87:59:87:88 | new URI(...) : URI | provenance | Config | +| SanitizationTests.java:87:67:87:87 | toString(...) : String | SanitizationTests.java:87:59:87:88 | new URI(...) : URI | provenance | MaD:285 | +| SanitizationTests.java:90:40:90:87 | new StringBuilder(...) : StringBuilder | SanitizationTests.java:92:68:92:77 | unafeUri5a : StringBuilder | provenance | | +| SanitizationTests.java:90:58:90:86 | getParameter(...) : String | SanitizationTests.java:90:40:90:87 | new StringBuilder(...) : StringBuilder | provenance | Src:MaD:277 MaD:282 | +| SanitizationTests.java:92:37:92:90 | newBuilder(...) : Builder | SanitizationTests.java:92:37:92:98 | build(...) : HttpRequest | provenance | MaD:283 | +| SanitizationTests.java:92:37:92:98 | build(...) : HttpRequest | SanitizationTests.java:93:25:93:33 | unsafer5a | provenance | Sink:MaD:4 | +| SanitizationTests.java:92:60:92:89 | new URI(...) : URI | SanitizationTests.java:92:37:92:90 | newBuilder(...) : Builder | provenance | MaD:284 | +| SanitizationTests.java:92:68:92:77 | unafeUri5a : StringBuilder | SanitizationTests.java:92:68:92:88 | toString(...) : String | provenance | MaD:280 | +| SanitizationTests.java:92:68:92:88 | toString(...) : String | SanitizationTests.java:92:60:92:89 | new URI(...) | provenance | Config Sink:MaD:6 | +| SanitizationTests.java:92:68:92:88 | toString(...) : String | SanitizationTests.java:92:60:92:89 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | +| SanitizationTests.java:92:68:92:88 | toString(...) : String | SanitizationTests.java:92:60:92:89 | new URI(...) : URI | provenance | Config | +| SanitizationTests.java:92:68:92:88 | toString(...) : String | SanitizationTests.java:92:60:92:89 | new URI(...) : URI | provenance | MaD:285 | +| SanitizationTests.java:95:41:95:105 | append(...) : StringBuilder | SanitizationTests.java:97:68:97:78 | unsafeUri5b : StringBuilder | provenance | | +| SanitizationTests.java:95:42:95:89 | new StringBuilder(...) : StringBuilder | SanitizationTests.java:95:41:95:105 | append(...) : StringBuilder | provenance | MaD:279 | +| SanitizationTests.java:95:60:95:88 | getParameter(...) : String | SanitizationTests.java:95:42:95:89 | new StringBuilder(...) : StringBuilder | provenance | Src:MaD:277 MaD:282 | +| SanitizationTests.java:97:37:97:91 | newBuilder(...) : Builder | SanitizationTests.java:97:37:97:99 | build(...) : HttpRequest | provenance | MaD:283 | +| SanitizationTests.java:97:37:97:99 | build(...) : HttpRequest | SanitizationTests.java:98:25:98:33 | unsafer5b | provenance | Sink:MaD:4 | +| SanitizationTests.java:97:60:97:90 | new URI(...) : URI | SanitizationTests.java:97:37:97:91 | newBuilder(...) : Builder | provenance | MaD:284 | +| SanitizationTests.java:97:68:97:78 | unsafeUri5b : StringBuilder | SanitizationTests.java:97:68:97:89 | toString(...) : String | provenance | MaD:280 | +| SanitizationTests.java:97:68:97:89 | toString(...) : String | SanitizationTests.java:97:60:97:90 | new URI(...) | provenance | Config Sink:MaD:6 | +| SanitizationTests.java:97:68:97:89 | toString(...) : String | SanitizationTests.java:97:60:97:90 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | +| SanitizationTests.java:97:68:97:89 | toString(...) : String | SanitizationTests.java:97:60:97:90 | new URI(...) : URI | provenance | Config | +| SanitizationTests.java:97:68:97:89 | toString(...) : String | SanitizationTests.java:97:60:97:90 | new URI(...) : URI | provenance | MaD:285 | +| SanitizationTests.java:100:41:100:106 | append(...) : StringBuilder | SanitizationTests.java:102:68:102:78 | unsafeUri5c : StringBuilder | provenance | | +| SanitizationTests.java:100:77:100:105 | getParameter(...) : String | SanitizationTests.java:100:41:100:106 | append(...) : StringBuilder | provenance | Src:MaD:277 MaD:278+MaD:279 | +| SanitizationTests.java:102:37:102:91 | newBuilder(...) : Builder | SanitizationTests.java:102:37:102:99 | build(...) : HttpRequest | provenance | MaD:283 | +| SanitizationTests.java:102:37:102:99 | build(...) : HttpRequest | SanitizationTests.java:103:25:103:33 | unsafer5c | provenance | Sink:MaD:4 | +| SanitizationTests.java:102:60:102:90 | new URI(...) : URI | SanitizationTests.java:102:37:102:91 | newBuilder(...) : Builder | provenance | MaD:284 | +| SanitizationTests.java:102:68:102:78 | unsafeUri5c : StringBuilder | SanitizationTests.java:102:68:102:89 | toString(...) : String | provenance | MaD:280 | +| SanitizationTests.java:102:68:102:89 | toString(...) : String | SanitizationTests.java:102:60:102:90 | new URI(...) | provenance | Config Sink:MaD:6 | +| SanitizationTests.java:102:68:102:89 | toString(...) : String | SanitizationTests.java:102:60:102:90 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | +| SanitizationTests.java:102:68:102:89 | toString(...) : String | SanitizationTests.java:102:60:102:90 | new URI(...) : URI | provenance | Config | +| SanitizationTests.java:102:68:102:89 | toString(...) : String | SanitizationTests.java:102:60:102:90 | new URI(...) : URI | provenance | MaD:285 | +| SanitizationTests.java:105:33:105:104 | format(...) : String | SanitizationTests.java:106:67:106:76 | unsafeUri6 : String | provenance | | +| SanitizationTests.java:105:33:105:104 | new ..[] { .. } : Object[] [[]] : String | SanitizationTests.java:105:33:105:104 | format(...) : String | provenance | MaD:281 | +| SanitizationTests.java:105:73:105:103 | getParameter(...) : String | SanitizationTests.java:105:33:105:104 | new ..[] { .. } : Object[] [[]] : String | provenance | Src:MaD:277 | +| SanitizationTests.java:106:36:106:78 | newBuilder(...) : Builder | SanitizationTests.java:106:36:106:86 | build(...) : HttpRequest | provenance | MaD:283 | +| SanitizationTests.java:106:36:106:86 | build(...) : HttpRequest | SanitizationTests.java:107:25:107:32 | unsafer6 | provenance | Sink:MaD:4 | +| SanitizationTests.java:106:59:106:77 | new URI(...) : URI | SanitizationTests.java:106:36:106:78 | newBuilder(...) : Builder | provenance | MaD:284 | +| SanitizationTests.java:106:67:106:76 | unsafeUri6 : String | SanitizationTests.java:106:59:106:77 | new URI(...) | provenance | Config Sink:MaD:6 | +| SanitizationTests.java:106:67:106:76 | unsafeUri6 : String | SanitizationTests.java:106:59:106:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | +| SanitizationTests.java:106:67:106:76 | unsafeUri6 : String | SanitizationTests.java:106:59:106:77 | new URI(...) : URI | provenance | Config | +| SanitizationTests.java:106:67:106:76 | unsafeUri6 : String | SanitizationTests.java:106:59:106:77 | new URI(...) : URI | provenance | MaD:285 | +| SanitizationTests.java:109:33:109:110 | format(...) : String | SanitizationTests.java:110:67:110:76 | unsafeUri7 : String | provenance | | +| SanitizationTests.java:109:33:109:110 | new ..[] { .. } : Object[] [[]] : String | SanitizationTests.java:109:33:109:110 | format(...) : String | provenance | MaD:281 | +| SanitizationTests.java:109:56:109:86 | getParameter(...) : String | SanitizationTests.java:109:33:109:110 | new ..[] { .. } : Object[] [[]] : String | provenance | Src:MaD:277 | +| SanitizationTests.java:110:36:110:78 | newBuilder(...) : Builder | SanitizationTests.java:110:36:110:86 | build(...) : HttpRequest | provenance | MaD:283 | +| SanitizationTests.java:110:36:110:86 | build(...) : HttpRequest | SanitizationTests.java:111:25:111:32 | unsafer7 | provenance | Sink:MaD:4 | +| SanitizationTests.java:110:59:110:77 | new URI(...) : URI | SanitizationTests.java:110:36:110:78 | newBuilder(...) : Builder | provenance | MaD:284 | +| SanitizationTests.java:110:67:110:76 | unsafeUri7 : String | SanitizationTests.java:110:59:110:77 | new URI(...) | provenance | Config Sink:MaD:6 | +| SanitizationTests.java:110:67:110:76 | unsafeUri7 : String | SanitizationTests.java:110:59:110:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | +| SanitizationTests.java:110:67:110:76 | unsafeUri7 : String | SanitizationTests.java:110:59:110:77 | new URI(...) : URI | provenance | Config | +| SanitizationTests.java:110:67:110:76 | unsafeUri7 : String | SanitizationTests.java:110:59:110:77 | new URI(...) : URI | provenance | MaD:285 | +| SanitizationTests.java:113:33:113:110 | format(...) : String | SanitizationTests.java:114:67:114:76 | unsafeUri8 : String | provenance | | +| SanitizationTests.java:113:33:113:110 | new ..[] { .. } : Object[] [[]] : String | SanitizationTests.java:113:33:113:110 | format(...) : String | provenance | MaD:281 | +| SanitizationTests.java:113:55:113:85 | getParameter(...) : String | SanitizationTests.java:113:33:113:110 | new ..[] { .. } : Object[] [[]] : String | provenance | Src:MaD:277 | +| SanitizationTests.java:114:36:114:78 | newBuilder(...) : Builder | SanitizationTests.java:114:36:114:86 | build(...) : HttpRequest | provenance | MaD:283 | +| SanitizationTests.java:114:36:114:86 | build(...) : HttpRequest | SanitizationTests.java:115:25:115:32 | unsafer8 | provenance | Sink:MaD:4 | +| SanitizationTests.java:114:59:114:77 | new URI(...) : URI | SanitizationTests.java:114:36:114:78 | newBuilder(...) : Builder | provenance | MaD:284 | +| SanitizationTests.java:114:67:114:76 | unsafeUri8 : String | SanitizationTests.java:114:59:114:77 | new URI(...) | provenance | Config Sink:MaD:6 | +| SanitizationTests.java:114:67:114:76 | unsafeUri8 : String | SanitizationTests.java:114:59:114:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | +| SanitizationTests.java:114:67:114:76 | unsafeUri8 : String | SanitizationTests.java:114:59:114:77 | new URI(...) : URI | provenance | Config | +| SanitizationTests.java:114:67:114:76 | unsafeUri8 : String | SanitizationTests.java:114:59:114:77 | new URI(...) : URI | provenance | MaD:285 | +| SanitizationTests.java:117:33:117:63 | getParameter(...) : String | SanitizationTests.java:118:67:118:76 | unsafeUri9 : String | provenance | Src:MaD:277 | +| SanitizationTests.java:118:36:118:78 | newBuilder(...) : Builder | SanitizationTests.java:118:36:118:86 | build(...) : HttpRequest | provenance | MaD:283 | +| SanitizationTests.java:118:36:118:86 | build(...) : HttpRequest | SanitizationTests.java:119:25:119:32 | unsafer9 | provenance | Sink:MaD:4 | +| SanitizationTests.java:118:59:118:77 | new URI(...) : URI | SanitizationTests.java:118:36:118:78 | newBuilder(...) : Builder | provenance | MaD:284 | +| SanitizationTests.java:118:67:118:76 | unsafeUri9 : String | SanitizationTests.java:118:59:118:77 | new URI(...) | provenance | Config Sink:MaD:6 | +| SanitizationTests.java:118:67:118:76 | unsafeUri9 : String | SanitizationTests.java:118:59:118:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | +| SanitizationTests.java:118:67:118:76 | unsafeUri9 : String | SanitizationTests.java:118:59:118:77 | new URI(...) : URI | provenance | Config | +| SanitizationTests.java:118:67:118:76 | unsafeUri9 : String | SanitizationTests.java:118:59:118:77 | new URI(...) : URI | provenance | MaD:285 | +| SanitizationTests.java:121:34:121:126 | format(...) : String | SanitizationTests.java:122:68:122:78 | unsafeUri10 : String | provenance | | +| SanitizationTests.java:121:34:121:126 | new ..[] { .. } : Object[] [[]] : String | SanitizationTests.java:121:34:121:126 | format(...) : String | provenance | MaD:281 | +| SanitizationTests.java:121:94:121:125 | getParameter(...) : String | SanitizationTests.java:121:34:121:126 | new ..[] { .. } : Object[] [[]] : String | provenance | Src:MaD:277 | +| SanitizationTests.java:122:37:122:80 | newBuilder(...) : Builder | SanitizationTests.java:122:37:122:88 | build(...) : HttpRequest | provenance | MaD:283 | +| SanitizationTests.java:122:37:122:88 | build(...) : HttpRequest | SanitizationTests.java:123:25:123:33 | unsafer10 | provenance | Sink:MaD:4 | +| SanitizationTests.java:122:60:122:79 | new URI(...) : URI | SanitizationTests.java:122:37:122:80 | newBuilder(...) : Builder | provenance | MaD:284 | +| SanitizationTests.java:122:68:122:78 | unsafeUri10 : String | SanitizationTests.java:122:60:122:79 | new URI(...) | provenance | Config Sink:MaD:6 | +| SanitizationTests.java:122:68:122:78 | unsafeUri10 : String | SanitizationTests.java:122:60:122:79 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | +| SanitizationTests.java:122:68:122:78 | unsafeUri10 : String | SanitizationTests.java:122:60:122:79 | new URI(...) : URI | provenance | Config | +| SanitizationTests.java:122:68:122:78 | unsafeUri10 : String | SanitizationTests.java:122:60:122:79 | new URI(...) : URI | provenance | MaD:285 | | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:32:39:32:59 | ... + ... | provenance | Src:MaD:277 Sink:MaD:264 | | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:33:35:33:48 | fooResourceUrl | provenance | Src:MaD:277 Sink:MaD:262 | | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:34:34:34:47 | fooResourceUrl | provenance | Src:MaD:277 Sink:MaD:263 | @@ -1580,107 +1580,107 @@ nodes | ReactiveWebClientSSRF.java:16:52:16:54 | url | semmle.label | url | | ReactiveWebClientSSRF.java:32:26:32:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | | ReactiveWebClientSSRF.java:35:30:35:32 | url | semmle.label | url | -| SanitizationTests.java:19:23:19:58 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:19:31:19:57 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:22:29:22:55 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:22:29:22:63 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:22:52:22:54 | uri | semmle.label | uri | -| SanitizationTests.java:22:52:22:54 | uri : URI | semmle.label | uri : URI | -| SanitizationTests.java:23:25:23:25 | r | semmle.label | r | -| SanitizationTests.java:75:33:75:63 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:76:36:76:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:76:36:76:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:76:59:76:77 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:76:59:76:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:76:67:76:76 | unsafeUri3 : String | semmle.label | unsafeUri3 : String | -| SanitizationTests.java:77:25:77:32 | unsafer3 | semmle.label | unsafer3 | -| SanitizationTests.java:79:49:79:79 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:80:36:80:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:80:36:80:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:80:59:80:77 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:80:59:80:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:80:67:80:76 | unsafeUri4 : String | semmle.label | unsafeUri4 : String | -| SanitizationTests.java:81:25:81:32 | unsafer4 | semmle.label | unsafer4 | -| SanitizationTests.java:84:13:84:22 | unsafeUri5 [post update] : StringBuilder | semmle.label | unsafeUri5 [post update] : StringBuilder | -| SanitizationTests.java:84:31:84:61 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:85:36:85:89 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:85:36:85:97 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:85:59:85:88 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:85:59:85:88 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:85:67:85:76 | unsafeUri5 : StringBuilder | semmle.label | unsafeUri5 : StringBuilder | -| SanitizationTests.java:85:67:85:87 | toString(...) : String | semmle.label | toString(...) : String | -| SanitizationTests.java:86:25:86:32 | unsafer5 | semmle.label | unsafer5 | -| SanitizationTests.java:88:40:88:87 | new StringBuilder(...) : StringBuilder | semmle.label | new StringBuilder(...) : StringBuilder | -| SanitizationTests.java:88:58:88:86 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:90:37:90:90 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:90:37:90:98 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:90:60:90:89 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:90:60:90:89 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:90:68:90:77 | unafeUri5a : StringBuilder | semmle.label | unafeUri5a : StringBuilder | -| SanitizationTests.java:90:68:90:88 | toString(...) : String | semmle.label | toString(...) : String | -| SanitizationTests.java:91:25:91:33 | unsafer5a | semmle.label | unsafer5a | -| SanitizationTests.java:93:41:93:105 | append(...) : StringBuilder | semmle.label | append(...) : StringBuilder | -| SanitizationTests.java:93:42:93:89 | new StringBuilder(...) : StringBuilder | semmle.label | new StringBuilder(...) : StringBuilder | -| SanitizationTests.java:93:60:93:88 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:95:37:95:91 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:95:37:95:99 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:95:60:95:90 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:95:60:95:90 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:95:68:95:78 | unsafeUri5b : StringBuilder | semmle.label | unsafeUri5b : StringBuilder | -| SanitizationTests.java:95:68:95:89 | toString(...) : String | semmle.label | toString(...) : String | -| SanitizationTests.java:96:25:96:33 | unsafer5b | semmle.label | unsafer5b | -| SanitizationTests.java:98:41:98:106 | append(...) : StringBuilder | semmle.label | append(...) : StringBuilder | -| SanitizationTests.java:98:77:98:105 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:100:37:100:91 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:100:37:100:99 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:100:60:100:90 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:100:60:100:90 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:100:68:100:78 | unsafeUri5c : StringBuilder | semmle.label | unsafeUri5c : StringBuilder | -| SanitizationTests.java:100:68:100:89 | toString(...) : String | semmle.label | toString(...) : String | -| SanitizationTests.java:101:25:101:33 | unsafer5c | semmle.label | unsafer5c | -| SanitizationTests.java:103:33:103:104 | format(...) : String | semmle.label | format(...) : String | -| SanitizationTests.java:103:33:103:104 | new ..[] { .. } : Object[] [[]] : String | semmle.label | new ..[] { .. } : Object[] [[]] : String | -| SanitizationTests.java:103:73:103:103 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:104:36:104:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:104:36:104:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:104:59:104:77 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:104:59:104:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:104:67:104:76 | unsafeUri6 : String | semmle.label | unsafeUri6 : String | -| SanitizationTests.java:105:25:105:32 | unsafer6 | semmle.label | unsafer6 | -| SanitizationTests.java:107:33:107:110 | format(...) : String | semmle.label | format(...) : String | -| SanitizationTests.java:107:33:107:110 | new ..[] { .. } : Object[] [[]] : String | semmle.label | new ..[] { .. } : Object[] [[]] : String | -| SanitizationTests.java:107:56:107:86 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:108:36:108:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:108:36:108:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:108:59:108:77 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:108:59:108:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:108:67:108:76 | unsafeUri7 : String | semmle.label | unsafeUri7 : String | -| SanitizationTests.java:109:25:109:32 | unsafer7 | semmle.label | unsafer7 | -| SanitizationTests.java:111:33:111:110 | format(...) : String | semmle.label | format(...) : String | -| SanitizationTests.java:111:33:111:110 | new ..[] { .. } : Object[] [[]] : String | semmle.label | new ..[] { .. } : Object[] [[]] : String | -| SanitizationTests.java:111:55:111:85 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:112:36:112:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:112:36:112:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:112:59:112:77 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:112:59:112:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:112:67:112:76 | unsafeUri8 : String | semmle.label | unsafeUri8 : String | -| SanitizationTests.java:113:25:113:32 | unsafer8 | semmle.label | unsafer8 | -| SanitizationTests.java:115:33:115:63 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:116:36:116:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:116:36:116:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:116:59:116:77 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:116:59:116:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:116:67:116:76 | unsafeUri9 : String | semmle.label | unsafeUri9 : String | -| SanitizationTests.java:117:25:117:32 | unsafer9 | semmle.label | unsafer9 | -| SanitizationTests.java:119:34:119:126 | format(...) : String | semmle.label | format(...) : String | -| SanitizationTests.java:119:34:119:126 | new ..[] { .. } : Object[] [[]] : String | semmle.label | new ..[] { .. } : Object[] [[]] : String | -| SanitizationTests.java:119:94:119:125 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:120:37:120:80 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:120:37:120:88 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:120:60:120:79 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:120:60:120:79 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:120:68:120:78 | unsafeUri10 : String | semmle.label | unsafeUri10 : String | -| SanitizationTests.java:121:25:121:33 | unsafer10 | semmle.label | unsafer10 | +| SanitizationTests.java:21:23:21:58 | new URI(...) : URI | semmle.label | new URI(...) : URI | +| SanitizationTests.java:21:31:21:57 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| SanitizationTests.java:24:29:24:55 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | +| SanitizationTests.java:24:29:24:63 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | +| SanitizationTests.java:24:52:24:54 | uri | semmle.label | uri | +| SanitizationTests.java:24:52:24:54 | uri : URI | semmle.label | uri : URI | +| SanitizationTests.java:25:25:25:25 | r | semmle.label | r | +| SanitizationTests.java:77:33:77:63 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| SanitizationTests.java:78:36:78:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | +| SanitizationTests.java:78:36:78:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | +| SanitizationTests.java:78:59:78:77 | new URI(...) | semmle.label | new URI(...) | +| SanitizationTests.java:78:59:78:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | +| SanitizationTests.java:78:67:78:76 | unsafeUri3 : String | semmle.label | unsafeUri3 : String | +| SanitizationTests.java:79:25:79:32 | unsafer3 | semmle.label | unsafer3 | +| SanitizationTests.java:81:49:81:79 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| SanitizationTests.java:82:36:82:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | +| SanitizationTests.java:82:36:82:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | +| SanitizationTests.java:82:59:82:77 | new URI(...) | semmle.label | new URI(...) | +| SanitizationTests.java:82:59:82:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | +| SanitizationTests.java:82:67:82:76 | unsafeUri4 : String | semmle.label | unsafeUri4 : String | +| SanitizationTests.java:83:25:83:32 | unsafer4 | semmle.label | unsafer4 | +| SanitizationTests.java:86:13:86:22 | unsafeUri5 [post update] : StringBuilder | semmle.label | unsafeUri5 [post update] : StringBuilder | +| SanitizationTests.java:86:31:86:61 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| SanitizationTests.java:87:36:87:89 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | +| SanitizationTests.java:87:36:87:97 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | +| SanitizationTests.java:87:59:87:88 | new URI(...) | semmle.label | new URI(...) | +| SanitizationTests.java:87:59:87:88 | new URI(...) : URI | semmle.label | new URI(...) : URI | +| SanitizationTests.java:87:67:87:76 | unsafeUri5 : StringBuilder | semmle.label | unsafeUri5 : StringBuilder | +| SanitizationTests.java:87:67:87:87 | toString(...) : String | semmle.label | toString(...) : String | +| SanitizationTests.java:88:25:88:32 | unsafer5 | semmle.label | unsafer5 | +| SanitizationTests.java:90:40:90:87 | new StringBuilder(...) : StringBuilder | semmle.label | new StringBuilder(...) : StringBuilder | +| SanitizationTests.java:90:58:90:86 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| SanitizationTests.java:92:37:92:90 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | +| SanitizationTests.java:92:37:92:98 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | +| SanitizationTests.java:92:60:92:89 | new URI(...) | semmle.label | new URI(...) | +| SanitizationTests.java:92:60:92:89 | new URI(...) : URI | semmle.label | new URI(...) : URI | +| SanitizationTests.java:92:68:92:77 | unafeUri5a : StringBuilder | semmle.label | unafeUri5a : StringBuilder | +| SanitizationTests.java:92:68:92:88 | toString(...) : String | semmle.label | toString(...) : String | +| SanitizationTests.java:93:25:93:33 | unsafer5a | semmle.label | unsafer5a | +| SanitizationTests.java:95:41:95:105 | append(...) : StringBuilder | semmle.label | append(...) : StringBuilder | +| SanitizationTests.java:95:42:95:89 | new StringBuilder(...) : StringBuilder | semmle.label | new StringBuilder(...) : StringBuilder | +| SanitizationTests.java:95:60:95:88 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| SanitizationTests.java:97:37:97:91 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | +| SanitizationTests.java:97:37:97:99 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | +| SanitizationTests.java:97:60:97:90 | new URI(...) | semmle.label | new URI(...) | +| SanitizationTests.java:97:60:97:90 | new URI(...) : URI | semmle.label | new URI(...) : URI | +| SanitizationTests.java:97:68:97:78 | unsafeUri5b : StringBuilder | semmle.label | unsafeUri5b : StringBuilder | +| SanitizationTests.java:97:68:97:89 | toString(...) : String | semmle.label | toString(...) : String | +| SanitizationTests.java:98:25:98:33 | unsafer5b | semmle.label | unsafer5b | +| SanitizationTests.java:100:41:100:106 | append(...) : StringBuilder | semmle.label | append(...) : StringBuilder | +| SanitizationTests.java:100:77:100:105 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| SanitizationTests.java:102:37:102:91 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | +| SanitizationTests.java:102:37:102:99 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | +| SanitizationTests.java:102:60:102:90 | new URI(...) | semmle.label | new URI(...) | +| SanitizationTests.java:102:60:102:90 | new URI(...) : URI | semmle.label | new URI(...) : URI | +| SanitizationTests.java:102:68:102:78 | unsafeUri5c : StringBuilder | semmle.label | unsafeUri5c : StringBuilder | +| SanitizationTests.java:102:68:102:89 | toString(...) : String | semmle.label | toString(...) : String | +| SanitizationTests.java:103:25:103:33 | unsafer5c | semmle.label | unsafer5c | +| SanitizationTests.java:105:33:105:104 | format(...) : String | semmle.label | format(...) : String | +| SanitizationTests.java:105:33:105:104 | new ..[] { .. } : Object[] [[]] : String | semmle.label | new ..[] { .. } : Object[] [[]] : String | +| SanitizationTests.java:105:73:105:103 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| SanitizationTests.java:106:36:106:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | +| SanitizationTests.java:106:36:106:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | +| SanitizationTests.java:106:59:106:77 | new URI(...) | semmle.label | new URI(...) | +| SanitizationTests.java:106:59:106:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | +| SanitizationTests.java:106:67:106:76 | unsafeUri6 : String | semmle.label | unsafeUri6 : String | +| SanitizationTests.java:107:25:107:32 | unsafer6 | semmle.label | unsafer6 | +| SanitizationTests.java:109:33:109:110 | format(...) : String | semmle.label | format(...) : String | +| SanitizationTests.java:109:33:109:110 | new ..[] { .. } : Object[] [[]] : String | semmle.label | new ..[] { .. } : Object[] [[]] : String | +| SanitizationTests.java:109:56:109:86 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| SanitizationTests.java:110:36:110:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | +| SanitizationTests.java:110:36:110:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | +| SanitizationTests.java:110:59:110:77 | new URI(...) | semmle.label | new URI(...) | +| SanitizationTests.java:110:59:110:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | +| SanitizationTests.java:110:67:110:76 | unsafeUri7 : String | semmle.label | unsafeUri7 : String | +| SanitizationTests.java:111:25:111:32 | unsafer7 | semmle.label | unsafer7 | +| SanitizationTests.java:113:33:113:110 | format(...) : String | semmle.label | format(...) : String | +| SanitizationTests.java:113:33:113:110 | new ..[] { .. } : Object[] [[]] : String | semmle.label | new ..[] { .. } : Object[] [[]] : String | +| SanitizationTests.java:113:55:113:85 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| SanitizationTests.java:114:36:114:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | +| SanitizationTests.java:114:36:114:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | +| SanitizationTests.java:114:59:114:77 | new URI(...) | semmle.label | new URI(...) | +| SanitizationTests.java:114:59:114:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | +| SanitizationTests.java:114:67:114:76 | unsafeUri8 : String | semmle.label | unsafeUri8 : String | +| SanitizationTests.java:115:25:115:32 | unsafer8 | semmle.label | unsafer8 | +| SanitizationTests.java:117:33:117:63 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| SanitizationTests.java:118:36:118:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | +| SanitizationTests.java:118:36:118:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | +| SanitizationTests.java:118:59:118:77 | new URI(...) | semmle.label | new URI(...) | +| SanitizationTests.java:118:59:118:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | +| SanitizationTests.java:118:67:118:76 | unsafeUri9 : String | semmle.label | unsafeUri9 : String | +| SanitizationTests.java:119:25:119:32 | unsafer9 | semmle.label | unsafer9 | +| SanitizationTests.java:121:34:121:126 | format(...) : String | semmle.label | format(...) : String | +| SanitizationTests.java:121:34:121:126 | new ..[] { .. } : Object[] [[]] : String | semmle.label | new ..[] { .. } : Object[] [[]] : String | +| SanitizationTests.java:121:94:121:125 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| SanitizationTests.java:122:37:122:80 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | +| SanitizationTests.java:122:37:122:88 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | +| SanitizationTests.java:122:60:122:79 | new URI(...) | semmle.label | new URI(...) | +| SanitizationTests.java:122:60:122:79 | new URI(...) : URI | semmle.label | new URI(...) : URI | +| SanitizationTests.java:122:68:122:78 | unsafeUri10 : String | semmle.label | unsafeUri10 : String | +| SanitizationTests.java:123:25:123:33 | unsafer10 | semmle.label | unsafer10 | | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | semmle.label | getParameter(...) : String | | SpringSSRF.java:32:39:32:59 | ... + ... | semmle.label | ... + ... | | SpringSSRF.java:33:35:33:48 | fooResourceUrl | semmle.label | fooResourceUrl | diff --git a/java/ql/test/query-tests/security/CWE-918/SanitizationTests.java b/java/ql/test/query-tests/security/CWE-918/SanitizationTests.java index f32de324a1de..4da70e8dd751 100644 --- a/java/ql/test/query-tests/security/CWE-918/SanitizationTests.java +++ b/java/ql/test/query-tests/security/CWE-918/SanitizationTests.java @@ -2,6 +2,8 @@ import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; +import java.util.regex.Pattern; +import java.util.regex.Matcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; @@ -126,11 +128,25 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) HttpRequest r10 = HttpRequest.newBuilder(new URI(param10)).build(); client.send(r10, null); } - + String param11 = request.getParameter("uri11"); validate(param11); HttpRequest r11 = HttpRequest.newBuilder(new URI(param11)).build(); client.send(r11, null); + + String param12 = request.getParameter("uri12"); + if (Pattern.matches("[a-zA-Z0-9_-]+", param12)) { + HttpRequest r12 = HttpRequest.newBuilder(new URI(param12)).build(); + client.send(r12, null); + } + + Pattern pattern = Pattern.compile("[a-zA-Z0-9_-]+"); + String param13 = request.getParameter("uri13"); + Matcher matcher = pattern.matcher(param13); + if (matcher.matches()) { + HttpRequest r13 = HttpRequest.newBuilder(new URI(param13)).build(); + client.send(r13, null); + } } catch (Exception e) { // TODO: handle exception } diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index f9beb4db97c4..b36b8f521a07 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.6.18 + +No user-facing changes. + ## 2.6.17 No user-facing changes. diff --git a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll index 5e194b3fc3a5..86f9d4133d88 100644 --- a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll +++ b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll @@ -1,7 +1,7 @@ /** * Provides classes and predicates for the 'js/useless-expression' query. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/LanguageFeatures/UnusedIndexVariable.qll b/javascript/ql/lib/LanguageFeatures/UnusedIndexVariable.qll index e8b235eca9b0..c9905d98fccc 100644 --- a/javascript/ql/lib/LanguageFeatures/UnusedIndexVariable.qll +++ b/javascript/ql/lib/LanguageFeatures/UnusedIndexVariable.qll @@ -1,7 +1,7 @@ /** * Provides a predicate for identifying unused index variables in loops. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/change-notes/released/2.6.18.md b/javascript/ql/lib/change-notes/released/2.6.18.md new file mode 100644 index 000000000000..d04860dce6b7 --- /dev/null +++ b/javascript/ql/lib/change-notes/released/2.6.18.md @@ -0,0 +1,3 @@ +## 2.6.18 + +No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 93b62e82ca21..ce85aee60d13 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.6.17 +lastReleaseVersion: 2.6.18 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index c060406705c8..88072819279f 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.6.17 +version: 2.6.19-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/lib/semmle/javascript/AMD.qll b/javascript/ql/lib/semmle/javascript/AMD.qll index e66a04ce4ecd..479be828f926 100644 --- a/javascript/ql/lib/semmle/javascript/AMD.qll +++ b/javascript/ql/lib/semmle/javascript/AMD.qll @@ -2,7 +2,7 @@ * Provides classes for working with * [Asynchronous Module Definitions](https://github.com/amdjs/amdjs-api/wiki/AMD). */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/AST.qll b/javascript/ql/lib/semmle/javascript/AST.qll index 0e6330605ba5..c37a4e938a23 100644 --- a/javascript/ql/lib/semmle/javascript/AST.qll +++ b/javascript/ql/lib/semmle/javascript/AST.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with the AST-based representation of JavaScript programs. */ -overlay[local] +overlay[local?] module; import javascript @@ -477,7 +477,7 @@ module AST { DataFlow::AnalyzedNode analyze() { result = DataFlow::valueNode(this).analyze() } /** Gets the data flow node associated with this program element. */ - overlay[caller] + overlay[caller?] pragma[inline] DataFlow::ValueNode flow() { result = DataFlow::valueNode(this) } diff --git a/javascript/ql/lib/semmle/javascript/CFG.qll b/javascript/ql/lib/semmle/javascript/CFG.qll index 2270ddfeaaf3..f7943647d77b 100644 --- a/javascript/ql/lib/semmle/javascript/CFG.qll +++ b/javascript/ql/lib/semmle/javascript/CFG.qll @@ -272,7 +272,7 @@ * Note that the `import` statement as a whole is part of the CFG of the body, while its single * import specifier `x as y` forms part of the preamble. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Classes.qll b/javascript/ql/lib/semmle/javascript/Classes.qll index 2485553370c6..7f6ea5ba4925 100644 --- a/javascript/ql/lib/semmle/javascript/Classes.qll +++ b/javascript/ql/lib/semmle/javascript/Classes.qll @@ -4,7 +4,7 @@ * Class declarations and class expressions are modeled by (QL) classes `ClassDeclaration` * and `ClassExpression`, respectively, which are both subclasses of `ClassDefinition`. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Closure.qll b/javascript/ql/lib/semmle/javascript/Closure.qll index fd13023b2e6e..930e94a77d77 100644 --- a/javascript/ql/lib/semmle/javascript/Closure.qll +++ b/javascript/ql/lib/semmle/javascript/Closure.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with the Closure-Library module system. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Comments.qll b/javascript/ql/lib/semmle/javascript/Comments.qll index 46ce8b8a4ba9..6365127cad01 100644 --- a/javascript/ql/lib/semmle/javascript/Comments.qll +++ b/javascript/ql/lib/semmle/javascript/Comments.qll @@ -1,5 +1,5 @@ /** Provides classes for working with JavaScript comments. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Constants.qll b/javascript/ql/lib/semmle/javascript/Constants.qll index b0b4a6c03eec..acf154346cb6 100644 --- a/javascript/ql/lib/semmle/javascript/Constants.qll +++ b/javascript/ql/lib/semmle/javascript/Constants.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with expressions that evaluate to constant values. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/DefUse.qll b/javascript/ql/lib/semmle/javascript/DefUse.qll index 95cf57d543d2..60e0a728691d 100644 --- a/javascript/ql/lib/semmle/javascript/DefUse.qll +++ b/javascript/ql/lib/semmle/javascript/DefUse.qll @@ -1,5 +1,5 @@ /** Provides classes and predicates for working with variable definitions and uses. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/E4X.qll b/javascript/ql/lib/semmle/javascript/E4X.qll index ce917c48cff3..4fef3ba2389c 100644 --- a/javascript/ql/lib/semmle/javascript/E4X.qll +++ b/javascript/ql/lib/semmle/javascript/E4X.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with E4X. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/ES2015Modules.qll b/javascript/ql/lib/semmle/javascript/ES2015Modules.qll index 9f37e3082b89..3710942e9e47 100644 --- a/javascript/ql/lib/semmle/javascript/ES2015Modules.qll +++ b/javascript/ql/lib/semmle/javascript/ES2015Modules.qll @@ -1,5 +1,5 @@ /** Provides classes for working with ECMAScript 2015 modules. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Errors.qll b/javascript/ql/lib/semmle/javascript/Errors.qll index 518b76b53461..9015e89efbf4 100644 --- a/javascript/ql/lib/semmle/javascript/Errors.qll +++ b/javascript/ql/lib/semmle/javascript/Errors.qll @@ -1,5 +1,5 @@ /** Provides classes for working with syntax errors. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Expr.qll b/javascript/ql/lib/semmle/javascript/Expr.qll index b46faf7e2b79..008cc1283770 100644 --- a/javascript/ql/lib/semmle/javascript/Expr.qll +++ b/javascript/ql/lib/semmle/javascript/Expr.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with expressions. */ -overlay[local] +overlay[local?] module; import javascript @@ -253,7 +253,7 @@ class Expr extends @expr, ExprOrStmt, ExprOrType, AST::ValueNode { * Gets the data-flow node where exceptions thrown by this expression will * propagate if this expression causes an exception to be thrown. */ - overlay[caller] + overlay[caller?] pragma[inline] DataFlow::Node getExceptionTarget() { result = getCatchParameterFromStmt(getRawEnclosingStmt(this)) @@ -271,7 +271,7 @@ private DataFlow::Node getCatchParameterFromStmt(Stmt stmt) { DataFlow::parameterNode(stmt.getEnclosingTryCatchStmt().getACatchClause().getAParameter()) } -overlay[caller] +overlay[caller?] pragma[inline] private Stmt getRawEnclosingStmt(Expr e) { // For performance reasons, we need the enclosing statement without overrides diff --git a/javascript/ql/lib/semmle/javascript/Extend.qll b/javascript/ql/lib/semmle/javascript/Extend.qll index e59c11d225ee..b871a74a03b7 100644 --- a/javascript/ql/lib/semmle/javascript/Extend.qll +++ b/javascript/ql/lib/semmle/javascript/Extend.qll @@ -1,7 +1,7 @@ /** * Provides classes for reasoning about `extend`-like functions. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Externs.qll b/javascript/ql/lib/semmle/javascript/Externs.qll index f894107528c4..22d6d03d7dd0 100644 --- a/javascript/ql/lib/semmle/javascript/Externs.qll +++ b/javascript/ql/lib/semmle/javascript/Externs.qll @@ -36,7 +36,7 @@ * Array.prototype.length; * */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Files.qll b/javascript/ql/lib/semmle/javascript/Files.qll index 8cc14ca0492b..556d25911f11 100644 --- a/javascript/ql/lib/semmle/javascript/Files.qll +++ b/javascript/ql/lib/semmle/javascript/Files.qll @@ -1,5 +1,5 @@ /** Provides classes for working with files and folders. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Functions.qll b/javascript/ql/lib/semmle/javascript/Functions.qll index 9b1f98c3d0b6..186ef1bc0289 100644 --- a/javascript/ql/lib/semmle/javascript/Functions.qll +++ b/javascript/ql/lib/semmle/javascript/Functions.qll @@ -1,5 +1,5 @@ /** Provides classes for working with functions. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll b/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll index 53e5a779a9b5..7b3004dbde43 100644 --- a/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll +++ b/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll @@ -1,7 +1,7 @@ /** * Provides predicates for associating qualified names with data flow nodes. */ -overlay[local] +overlay[local?] module; import javascript @@ -357,7 +357,7 @@ module AccessPath { * Gets a variable that is relevant for the computations in the `GetLaterAccess` module. * This predicate restricts as much as it can, but without depending on `getAVariableRef`. */ - overlay[caller] + overlay[caller?] pragma[inline] private SsaVariable getARelevantVariableSimple() { // The variable might be used where `getLaterBaseAccess()` is called. @@ -409,7 +409,7 @@ module AccessPath { * } * ``` */ - overlay[caller] + overlay[caller?] pragma[inline] DataFlow::Node getAReferenceTo(Root root, string path) { path = fromReference(result, root) and @@ -433,7 +433,7 @@ module AccessPath { * })(NS = NS || {}); * ``` */ - overlay[caller] + overlay[caller?] pragma[inline] DataFlow::Node getAReferenceTo(string path) { path = fromReference(result, DataFlow::globalAccessPathRootPseudoNode()) @@ -455,7 +455,7 @@ module AccessPath { * } * ``` */ - overlay[caller] + overlay[caller?] pragma[inline] DataFlow::Node getAnAssignmentTo(Root root, string path) { path = fromRhs(result, root) and @@ -477,7 +477,7 @@ module AccessPath { * })(foo = foo || {}); * ``` */ - overlay[caller] + overlay[caller?] pragma[inline] DataFlow::Node getAnAssignmentTo(string path) { path = fromRhs(result, DataFlow::globalAccessPathRootPseudoNode()) @@ -488,7 +488,7 @@ module AccessPath { * * See `getAReferenceTo` and `getAnAssignmentTo` for more details. */ - overlay[caller] + overlay[caller?] pragma[inline] DataFlow::Node getAReferenceOrAssignmentTo(string path) { result = getAReferenceTo(path) @@ -501,7 +501,7 @@ module AccessPath { * * See `getAReferenceTo` and `getAnAssignmentTo` for more details. */ - overlay[caller] + overlay[caller?] pragma[inline] DataFlow::Node getAReferenceOrAssignmentTo(Root root, string path) { result = getAReferenceTo(root, path) @@ -530,7 +530,7 @@ module AccessPath { /** * Gets a `SourceNode` that refers to the same value or access path as the given node. */ - overlay[caller] + overlay[caller?] pragma[inline] DataFlow::SourceNode getAnAliasedSourceNode(DataFlow::Node node) { exists(DataFlow::SourceNode root, string accessPath | diff --git a/javascript/ql/lib/semmle/javascript/HTML.qll b/javascript/ql/lib/semmle/javascript/HTML.qll index 8f70150963ef..fa3deaf661f2 100644 --- a/javascript/ql/lib/semmle/javascript/HTML.qll +++ b/javascript/ql/lib/semmle/javascript/HTML.qll @@ -1,5 +1,5 @@ /** Provides classes for working with HTML documents. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/JSDoc.qll b/javascript/ql/lib/semmle/javascript/JSDoc.qll index f63e24d9c6c0..48d2a984ec43 100644 --- a/javascript/ql/lib/semmle/javascript/JSDoc.qll +++ b/javascript/ql/lib/semmle/javascript/JSDoc.qll @@ -1,5 +1,5 @@ /** Provides classes for working with JSDoc comments. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/JSON.qll b/javascript/ql/lib/semmle/javascript/JSON.qll index ca322bacd467..ba5b42ba1ee7 100644 --- a/javascript/ql/lib/semmle/javascript/JSON.qll +++ b/javascript/ql/lib/semmle/javascript/JSON.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with JSON data. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/JSX.qll b/javascript/ql/lib/semmle/javascript/JSX.qll index d182f1553543..ab9a4339bf75 100644 --- a/javascript/ql/lib/semmle/javascript/JSX.qll +++ b/javascript/ql/lib/semmle/javascript/JSX.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with JSX code. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Lines.qll b/javascript/ql/lib/semmle/javascript/Lines.qll index 272be691498b..e0f675aa6e08 100644 --- a/javascript/ql/lib/semmle/javascript/Lines.qll +++ b/javascript/ql/lib/semmle/javascript/Lines.qll @@ -4,7 +4,7 @@ * This information is only available for snapshots that have been extracted with * the `--extract-program-text` flag. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Locations.qll b/javascript/ql/lib/semmle/javascript/Locations.qll index 1c48a3adbd3f..4aa93dd69377 100644 --- a/javascript/ql/lib/semmle/javascript/Locations.qll +++ b/javascript/ql/lib/semmle/javascript/Locations.qll @@ -1,5 +1,5 @@ /** Provides classes for working with locations and program elements that have locations. */ -overlay[local] +overlay[local?] module; import javascript @@ -32,7 +32,7 @@ final class Location extends @location_default { int getNumLines() { result = this.getEndLine() - this.getStartLine() + 1 } /** Holds if this location starts before location `that`. */ - overlay[caller] + overlay[caller?] pragma[inline] predicate startsBefore(Location that) { exists(string f, int sl1, int sc1, int sl2, int sc2 | @@ -46,7 +46,7 @@ final class Location extends @location_default { } /** Holds if this location ends after location `that`. */ - overlay[caller] + overlay[caller?] pragma[inline] predicate endsAfter(Location that) { exists(string f, int el1, int ec1, int el2, int ec2 | diff --git a/javascript/ql/lib/semmle/javascript/Modules.qll b/javascript/ql/lib/semmle/javascript/Modules.qll index bc69695121e7..9bd9ce434517 100644 --- a/javascript/ql/lib/semmle/javascript/Modules.qll +++ b/javascript/ql/lib/semmle/javascript/Modules.qll @@ -3,7 +3,7 @@ * ECMAScript 2015-style modules, and the older CommonJS and AMD-style * modules. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/NodeJS.qll b/javascript/ql/lib/semmle/javascript/NodeJS.qll index dfc2dd15ad36..0fbd8d79a749 100644 --- a/javascript/ql/lib/semmle/javascript/NodeJS.qll +++ b/javascript/ql/lib/semmle/javascript/NodeJS.qll @@ -17,7 +17,7 @@ private import semmle.javascript.dataflow.internal.DataFlowNode * process.stdout.write(fs.readFileSync(process.argv[i], 'utf8')); * ``` */ -overlay[local] +overlay[local?] class NodeModule extends Module { NodeModule() { is_module(this) and @@ -234,7 +234,7 @@ predicate findNodeModulesFolder(Folder f, Folder nodeModules, int distance) { /** * A Node.js `require` variable. */ -overlay[local] +overlay[local?] private class RequireVariable extends Variable { RequireVariable() { this = any(ModuleScope m).getVariable("require") @@ -247,7 +247,7 @@ private class RequireVariable extends Variable { } } -overlay[local] +overlay[local?] private predicate isModuleModule(EarlyStageNode nd) { exists(ImportDeclaration imp | imp.getRawImportPath() = "module" | nd = TDestructuredModuleImportNode(imp) @@ -261,7 +261,7 @@ private predicate isModuleModule(EarlyStageNode nd) { ) } -overlay[local] +overlay[local?] private predicate isCreateRequire(EarlyStageNode nd) { exists(PropAccess prop | isModuleModule(TValueNode(prop.getBase())) and @@ -291,7 +291,7 @@ private predicate isCreateRequire(EarlyStageNode nd) { /** * Holds if `nd` may refer to `require`, either directly or modulo local data flow. */ -overlay[local] +overlay[local?] cached private predicate isRequire(EarlyStageNode nd) { exists(VarAccess access | @@ -334,7 +334,7 @@ private predicate isRequire(EarlyStageNode nd) { * require('fs') * ``` */ -overlay[local] +overlay[local?] class Require extends CallExpr, Import { Require() { isRequire(TValueNode(this.getCallee())) } diff --git a/javascript/ql/lib/semmle/javascript/Promises.qll b/javascript/ql/lib/semmle/javascript/Promises.qll index f373ca87d39a..6868505b22a7 100644 --- a/javascript/ql/lib/semmle/javascript/Promises.qll +++ b/javascript/ql/lib/semmle/javascript/Promises.qll @@ -186,13 +186,13 @@ module Promises { /** * Gets the pseudo-field used to describe resolved values in a promise. */ - overlay[local] + overlay[local?] string valueProp() { result = "$PromiseResolveField$" } /** * Gets the pseudo-field used to describe rejected values in a promise. */ - overlay[local] + overlay[local?] string errorProp() { result = "$PromiseRejectField$" } /** A property set containing the pseudo-properites of a promise object. */ diff --git a/javascript/ql/lib/semmle/javascript/Regexp.qll b/javascript/ql/lib/semmle/javascript/Regexp.qll index db779e600d67..c42df3939c22 100644 --- a/javascript/ql/lib/semmle/javascript/Regexp.qll +++ b/javascript/ql/lib/semmle/javascript/Regexp.qll @@ -4,7 +4,7 @@ * Regular expression literals are represented as an abstract syntax tree of regular expression * terms. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/SSA.qll b/javascript/ql/lib/semmle/javascript/SSA.qll index 52486a7b7e3b..04d08c2343f6 100644 --- a/javascript/ql/lib/semmle/javascript/SSA.qll +++ b/javascript/ql/lib/semmle/javascript/SSA.qll @@ -73,7 +73,7 @@ * expression in `k` induces a re-capture of `x` to reflect the fact that `x` * is incremented between the two `console.log` calls. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Stmt.qll b/javascript/ql/lib/semmle/javascript/Stmt.qll index f97b07ac8e94..95ae6f5be597 100644 --- a/javascript/ql/lib/semmle/javascript/Stmt.qll +++ b/javascript/ql/lib/semmle/javascript/Stmt.qll @@ -1,5 +1,5 @@ /** Provides classes for working with statements. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Templates.qll b/javascript/ql/lib/semmle/javascript/Templates.qll index 1b3db059226b..d6eaef945894 100644 --- a/javascript/ql/lib/semmle/javascript/Templates.qll +++ b/javascript/ql/lib/semmle/javascript/Templates.qll @@ -1,5 +1,5 @@ /** Provides classes for working with ECMAScript 2015-style template expressions. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Tokens.qll b/javascript/ql/lib/semmle/javascript/Tokens.qll index 4e1c63440b5b..cb55a8296e6d 100644 --- a/javascript/ql/lib/semmle/javascript/Tokens.qll +++ b/javascript/ql/lib/semmle/javascript/Tokens.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with the token-based representation of JavaScript programs. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll b/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll index 50201363bea1..dacc3913e658 100644 --- a/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll +++ b/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll @@ -1,7 +1,7 @@ /** * Provides classes for reasoning about type annotations independently of dialect. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/TypeScript.qll b/javascript/ql/lib/semmle/javascript/TypeScript.qll index b9d6ea0af983..7772ff3e21ab 100644 --- a/javascript/ql/lib/semmle/javascript/TypeScript.qll +++ b/javascript/ql/lib/semmle/javascript/TypeScript.qll @@ -1,4 +1,4 @@ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Variables.qll b/javascript/ql/lib/semmle/javascript/Variables.qll index 5fa7473c3043..aa97233af49b 100644 --- a/javascript/ql/lib/semmle/javascript/Variables.qll +++ b/javascript/ql/lib/semmle/javascript/Variables.qll @@ -1,5 +1,5 @@ /** Provides classes for modeling program variables. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/XML.qll b/javascript/ql/lib/semmle/javascript/XML.qll index ca401bd3f4be..e4073362fc6f 100644 --- a/javascript/ql/lib/semmle/javascript/XML.qll +++ b/javascript/ql/lib/semmle/javascript/XML.qll @@ -1,7 +1,7 @@ /** * Provides classes and predicates for working with XML files and their content. */ -overlay[local] +overlay[local?] module; import semmle.files.FileSystem diff --git a/javascript/ql/lib/semmle/javascript/YAML.qll b/javascript/ql/lib/semmle/javascript/YAML.qll index 01473226b44a..21b0825c8617 100644 --- a/javascript/ql/lib/semmle/javascript/YAML.qll +++ b/javascript/ql/lib/semmle/javascript/YAML.qll @@ -4,7 +4,7 @@ * YAML documents are represented as abstract syntax trees whose nodes * are either YAML values or alias nodes referring to another YAML value. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/dataflow/AbstractValues.qll b/javascript/ql/lib/semmle/javascript/dataflow/AbstractValues.qll index c5d9993dbb75..8692f1b6ff31 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/AbstractValues.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/AbstractValues.qll @@ -37,7 +37,7 @@ * they represent; additionally, indefinite abstract values record * the source of imprecision that caused them to arise. */ -overlay[local] +overlay[local?] module; private import javascript diff --git a/javascript/ql/lib/semmle/javascript/dataflow/AdditionalFlowSteps.qll b/javascript/ql/lib/semmle/javascript/dataflow/AdditionalFlowSteps.qll index 83d523e07094..3b59fc529520 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/AdditionalFlowSteps.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/AdditionalFlowSteps.qll @@ -33,7 +33,7 @@ private import semmle.javascript.internal.CachedStages * Note: For performance reasons, all subclasses of this class should be part * of the standard library. Use `isAdditionalFlowStep` for query-specific flow steps. */ -overlay[local] +overlay[local?] class AdditionalFlowStep extends Unit { /** * Holds if `pred` → `succ` should be considered a value-preserving data flow edge.f diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Configuration.qll b/javascript/ql/lib/semmle/javascript/dataflow/Configuration.qll index 3b4a6be84d03..ffbb9e497b04 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Configuration.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Configuration.qll @@ -625,19 +625,19 @@ abstract deprecated class LabeledBarrierGuardNode extends BarrierGuardNode { * * For use with load/store steps in `DataFlow::SharedFlowStep` and TypeTracking. */ -overlay[local] +overlay[local?] module PseudoProperties { /** Holds if `s` is a pseudo-property. */ bindingset[s] - overlay[caller] + overlay[caller?] predicate isPseudoProperty(string s) { s.matches("$%$") } bindingset[s] - overlay[caller] + overlay[caller?] private string pseudoProperty(string s) { result = "$" + s + "$" } bindingset[s, v] - overlay[caller] + overlay[caller?] private string pseudoProperty(string s, string v) { result = "$" + s + "|" + v + "$" } /** @@ -684,7 +684,7 @@ module PseudoProperties { * Gets a pseudo-property for the location of a map value where the key is `key`. * The string value of the `key` is encoded in the result, and there is only a result if the string value of `key` is known. */ - overlay[caller] + overlay[caller?] pragma[inline] string mapValueKnownKey(DataFlow::Node key) { result = mapValueKey(any(string s | key.mayHaveStringValue(s))) @@ -694,20 +694,20 @@ module PseudoProperties { * Gets a pseudo-property for the location of a map value where the key is `key`. */ bindingset[key] - overlay[caller] + overlay[caller?] string mapValueKey(string key) { result = pseudoProperty("mapValue", key) } /** * Holds if `prop` equals `mapValueKey(key)` for some value of `key`. */ bindingset[prop] - overlay[caller] + overlay[caller?] predicate isMapValueKey(string prop) { prop.matches("$mapValue|%$") } /** * Gets a pseudo-property for the location of a map value where the key is `key`. */ - overlay[caller] + overlay[caller?] pragma[inline] string mapValue(DataFlow::Node key) { result = mapValueKnownKey(key) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/CustomAbstractValueDefinitions.qll b/javascript/ql/lib/semmle/javascript/dataflow/CustomAbstractValueDefinitions.qll index 3c12284d77b5..e4cc05595ec3 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/CustomAbstractValueDefinitions.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/CustomAbstractValueDefinitions.qll @@ -7,7 +7,7 @@ * For performance reasons, all subclasses of `CustomAbstractValueDefinition` * should be part of the standard library. */ -overlay[local] +overlay[local?] module; private import javascript diff --git a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll index d7fa6ba27623..a24d7976b3d6 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll @@ -17,7 +17,7 @@ * Flow through global variables, object properties or function calls is not * modeled (except for immediately invoked functions as explained above). */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/dataflow/FlowSummary.qll b/javascript/ql/lib/semmle/javascript/dataflow/FlowSummary.qll index 13aa5628111c..c4661b321ea6 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/FlowSummary.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/FlowSummary.qll @@ -1,5 +1,5 @@ /** Provides classes and predicates for defining flow summaries. */ -overlay[local] +overlay[local?] module; private import javascript diff --git a/javascript/ql/lib/semmle/javascript/dataflow/InferredTypes.qll b/javascript/ql/lib/semmle/javascript/dataflow/InferredTypes.qll index 48c21d41d75d..cfce0fd20cd5 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/InferredTypes.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/InferredTypes.qll @@ -1,4 +1,4 @@ -overlay[local] +overlay[local?] module; /** diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll b/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll index aa12cfe18648..d854dfc3f628 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll @@ -3,7 +3,7 @@ * as nodes corresponding to function definitions or nodes corresponding to * parameters. */ -overlay[local] +overlay[local?] module; private import javascript diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Refinements.qll b/javascript/ql/lib/semmle/javascript/dataflow/Refinements.qll index b1302df6fbc7..2fa76caed79a 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Refinements.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Refinements.qll @@ -27,7 +27,7 @@ * so the refinement can evaluate to both `true` and `false` for the same * candidate value. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll b/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll index 85a8a163cba4..55614388e7bd 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll @@ -5,7 +5,7 @@ * Note that unlike `TypeTracking.qll`, this library only performs * local tracking within a function. */ -overlay[local] +overlay[local?] module; private import javascript diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/AbstractValuesImpl.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/AbstractValuesImpl.qll index 97daed1f30a6..65f0d24e48df 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/AbstractValuesImpl.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/AbstractValuesImpl.qll @@ -3,7 +3,7 @@ * * Provides a representation for abstract values. */ -overlay[local] +overlay[local?] module; private import javascript diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/AccessPaths.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/AccessPaths.qll index b7538c7ffbf0..bd9928105178 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/AccessPaths.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/AccessPaths.qll @@ -14,7 +14,7 @@ * to the same value have the same access paths, so access paths are neither sound nor * complete as an approximation of expression semantics. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/AdditionalFlowInternal.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/AdditionalFlowInternal.qll index dfa924699ba5..ed07ffa73955 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/AdditionalFlowInternal.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/AdditionalFlowInternal.qll @@ -5,7 +5,7 @@ private import semmle.javascript.dataflow.internal.DataFlowPrivate /** * Gets a data-flow node synthesized using `AdditionalFlowInternal#needsSynthesizedNode`. */ -overlay[local] +overlay[local?] DataFlow::Node getSynthesizedNode(AstNode node, string tag) { result = TGenericSynthesizedNode(node, tag, _) } @@ -13,7 +13,7 @@ DataFlow::Node getSynthesizedNode(AstNode node, string tag) { /** * An extension to `AdditionalFlowStep` with additional internal-only predicates. */ -overlay[local] +overlay[local?] class AdditionalFlowInternal extends DataFlow::AdditionalFlowStep { /** * Holds if a data-flow node should be synthesized for the pair `(node, tag)`. diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/Contents.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/Contents.qll index d29a450274e9..787a766c897e 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/Contents.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/Contents.qll @@ -1,4 +1,4 @@ -overlay[local] +overlay[local?] module; private import javascript @@ -337,14 +337,14 @@ module Public { /** * A content set containing only the given content. */ - overlay[caller] + overlay[caller?] pragma[inline] ContentSet singleton(Content content) { result.asSingleton() = content } /** * A content set corresponding to the given property name. */ - overlay[caller] + overlay[caller?] pragma[inline] ContentSet property(PropertyName name) { result.asSingleton().asPropertyName() = name } @@ -405,7 +405,7 @@ module Public { * If `bound` is too large, it is truncated to the greatest lower bound we can represent. */ bindingset[bound] - overlay[caller] + overlay[caller?] ContentSet arrayElementLowerBoundFromInt(int bound) { result = arrayElementLowerBound(bound.minimum(getMaxPreciseArrayIndex() + 1)) } @@ -416,7 +416,7 @@ module Public { * If `n` is too large, it is truncated to the greatest lower bound we can represent. */ bindingset[n] - overlay[caller] + overlay[caller?] ContentSet arrayElementFromInt(int n) { result = arrayElementKnown(n) or @@ -456,7 +456,7 @@ module Public { * If `key` is not one of the keys we track precisely, this is mapped to the unknown key instead. */ bindingset[key] - overlay[caller] + overlay[caller?] ContentSet mapValueFromKey(string key) { result = mapValueWithKnownKey(key) or @@ -519,7 +519,7 @@ module Public { * are mapped to their corresponding content sets (which are no longer seen as property names). */ bindingset[propertyName] - overlay[caller] + overlay[caller?] ContentSet fromLegacyProperty(string propertyName) { result = fromLegacyPseudoProperty(propertyName) or diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowNode.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowNode.qll index 4a354e1f7593..315c8706bc00 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowNode.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowNode.qll @@ -3,7 +3,7 @@ * * Contains the raw data type underlying `DataFlow::Node`. */ -overlay[local] +overlay[local?] module; private import javascript diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll index 24549e7f1e6b..f8836e51ad91 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll @@ -1,4 +1,4 @@ -overlay[local] +overlay[local?] module; private import javascript @@ -1108,7 +1108,7 @@ DataFlowCallable viableImplInCallContext(DataFlowCall call, DataFlowCall ctx) { } bindingset[node, fun] -overlay[caller] +overlay[caller?] pragma[inline_late] private predicate sameContainerAsEnclosingContainer(Node node, Function fun) { node.getContainer() = fun.getEnclosingContainer() @@ -1517,7 +1517,7 @@ private Node getPostUpdateForStore(Node base) { } /** Gets node to target with a store to the given `base` object.. */ -overlay[caller] +overlay[caller?] pragma[inline] private Node getStoreTarget(DataFlow::Node base) { result = getPostUpdateForStore(base) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll index 2d199887296b..7102e3c6a534 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll @@ -524,7 +524,7 @@ private module CachedSteps { /** * Holds if there is a step from `pred` to `succ` through a call to an identity function. */ - overlay[local] + overlay[local?] cached predicate identityFunctionStep(DataFlow::Node pred, DataFlow::CallNode succ) { exists(DataFlow::GlobalVarRefNode global | diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll index 509aa79eda8c..fe7bab98341a 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll @@ -1,7 +1,7 @@ /** * Provides JS specific classes and predicates for defining flow summaries. */ -overlay[local] +overlay[local?] module; private import javascript diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableCapture.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableCapture.qll index 62892d7e5dbd..1799bc416ee5 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableCapture.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableCapture.qll @@ -1,4 +1,4 @@ -overlay[local] +overlay[local?] module; private import javascript as js diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableOrThis.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableOrThis.qll index 8a3b79a420fe..96964110e11d 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableOrThis.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableOrThis.qll @@ -1,4 +1,4 @@ -overlay[local] +overlay[local?] module; private import javascript diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll index edea8ed6c387..7b479ac475b6 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll @@ -3,7 +3,7 @@ * * JavaScript's old SSA library is still responsible for the ordinary SSA flow. */ -overlay[local] +overlay[local?] module; private import javascript as js diff --git a/javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll b/javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll index beb601dcfb9e..944256bd4569 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll @@ -15,7 +15,7 @@ private import AngularJS /** * Holds if `nd` is a reference to the `angular` variable. */ -overlay[local] +overlay[local?] DataFlow::SourceNode angular() { // either as a global result = DataFlow::globalVarRef("angular") diff --git a/javascript/ql/lib/semmle/javascript/frameworks/LazyCache.qll b/javascript/ql/lib/semmle/javascript/frameworks/LazyCache.qll index e8b389e91ad5..e239c79b852f 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/LazyCache.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/LazyCache.qll @@ -1,7 +1,7 @@ /** * Models imports through the NPM `lazy-cache` package. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll b/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll index fe07e4f19678..74808368c718 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll @@ -9,7 +9,7 @@ module LodashUnderscore { /** * A data flow node that accesses a given member of `lodash` or `underscore`. */ - overlay[local] + overlay[local?] abstract class Member extends DataFlow::SourceNode { /** Gets the name of the accessed member. */ abstract string getName(); @@ -18,7 +18,7 @@ module LodashUnderscore { /** * An import of `lodash` or `underscore` accessing a given member of that package. */ - overlay[local] + overlay[local?] private class DefaultMember extends Member { string name; @@ -41,14 +41,14 @@ module LodashUnderscore { * In addition to normal imports, this supports per-method imports such as `require("lodash.map")` and `require("lodash/map")`. * In addition, the global variable `_` is assumed to refer to `lodash` or `underscore`. */ - overlay[local] + overlay[local?] DataFlow::SourceNode member(string name) { result.(Member).getName() = name } /** * Holds if `name` is the name of a member exported from the `lodash` package * which has a corresponding `lodash.xxx` NPM package. */ - overlay[local] + overlay[local?] private predicate isLodashMember(string name) { // Can be generated using Object.keys(require('lodash')) name = @@ -185,7 +185,7 @@ module LodashUnderscore { } } - overlay[local] + overlay[local?] private class LodashEach extends DataFlow::SummarizedCallable { LodashEach() { this = "_.each-like" } @@ -201,7 +201,7 @@ module LodashUnderscore { } } - overlay[local] + overlay[local?] private class LodashMap extends DataFlow::SummarizedCallable { LodashMap() { this = "_.map" } @@ -220,7 +220,7 @@ module LodashUnderscore { } } - overlay[local] + overlay[local?] private class LodashFlatMap extends DataFlow::SummarizedCallable { LodashFlatMap() { this = "_.flatMap" } @@ -242,7 +242,7 @@ module LodashUnderscore { } } - overlay[local] + overlay[local?] private class LodashFlatMapDeep extends DataFlow::SummarizedCallable { LodashFlatMapDeep() { this = "_.flatMapDeep" } @@ -266,7 +266,7 @@ module LodashUnderscore { } } - overlay[local] + overlay[local?] private class LodashReduce extends DataFlow::SummarizedCallable { LodashReduce() { this = "_.reduce-like" } @@ -285,7 +285,7 @@ module LodashUnderscore { } } - overlay[local] + overlay[local?] private class LoashSortBy extends DataFlow::SummarizedCallable { LoashSortBy() { this = "_.sortBy-like" } @@ -303,7 +303,7 @@ module LodashUnderscore { } } - overlay[local] + overlay[local?] private class LodashMinMaxBy extends DataFlow::SummarizedCallable { LodashMinMaxBy() { this = "_.minBy / _.maxBy" } @@ -317,7 +317,7 @@ module LodashUnderscore { } } - overlay[local] + overlay[local?] private class LodashPartition extends DataFlow::SummarizedCallable { LodashPartition() { this = "_.partition" } @@ -331,7 +331,7 @@ module LodashUnderscore { } } - overlay[local] + overlay[local?] private class UnderscoreMapObject extends DataFlow::SummarizedCallable { UnderscoreMapObject() { this = "_.mapObject" } @@ -352,7 +352,7 @@ module LodashUnderscore { } } - overlay[local] + overlay[local?] private class LodashTap extends DataFlow::SummarizedCallable { LodashTap() { this = "_.tap" } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll index 89d436bb64c7..b6506ddd648d 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll @@ -8,17 +8,17 @@ import semmle.javascript.security.SensitiveActions private import semmle.javascript.dataflow.internal.PreCallGraphStep module NodeJSLib { - overlay[local] + overlay[local?] private GlobalVariable processVariable() { variables(result, "process", any(GlobalScope sc)) } - overlay[local] + overlay[local?] pragma[nomagic] private GlobalVarAccess processExprInTopLevel(TopLevel tl) { result = processVariable().getAnAccess() and tl = result.getTopLevel() } - overlay[local] + overlay[local?] pragma[nomagic] private GlobalVarAccess processExprInNodeModule() { result = processExprInTopLevel(any(NodeModule m)) @@ -28,7 +28,7 @@ module NodeJSLib { * An access to the global `process` variable in a Node.js module, interpreted as * an import of the `process` module. */ - overlay[local] + overlay[local?] private class ImplicitProcessImport extends DataFlow::ModuleImportNode::Range { ImplicitProcessImport() { this = DataFlow::exprNode(processExprInNodeModule()) } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/PropertyProjection.qll b/javascript/ql/lib/semmle/javascript/frameworks/PropertyProjection.qll index c0188361e72a..957121da5af1 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/PropertyProjection.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/PropertyProjection.qll @@ -4,7 +4,7 @@ * Subclass `PropertyProjection` to refine the behavior of the analysis on existing property projections. * Subclass `CustomPropertyProjection` to introduce new kinds of property projections. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Templating.qll b/javascript/ql/lib/semmle/javascript/frameworks/Templating.qll index f1f91785329c..d63bafe7b6f3 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Templating.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Templating.qll @@ -1,7 +1,7 @@ /** * Provides predicates for working with templating libraries. */ -overlay[local] +overlay[local?] module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/frameworks/UriLibraries.qll b/javascript/ql/lib/semmle/javascript/frameworks/UriLibraries.qll index 9097497b4f07..03887819b252 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/UriLibraries.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/UriLibraries.qll @@ -422,7 +422,7 @@ private module ClosureLibraryUri { } } -overlay[local] +overlay[local?] private class QueryStringStringification extends DataFlow::SummarizedCallable { QueryStringStringification() { this = "query-string stringification" } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll index 9e7f94c139b7..5d65f901d22d 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll @@ -48,7 +48,7 @@ private class ThreatModelSourceFromDataExtension extends ThreatModelSource::Rang } } -overlay[local] +overlay[local?] private class SummarizedCallableFromModel extends DataFlow::SummarizedCallable { string type; string path; diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll index 2074b18600dc..3fb76f76f70a 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll @@ -41,7 +41,7 @@ class Location = JS::Location; * The model generator must explicitly generate the step between `(package)` and `(package).foo`, for example. */ bindingset[rawType] -overlay[caller] +overlay[caller?] predicate parseTypeString(string rawType, string package, string qualifiedName) { exists(string regexp | regexp = "('[^']+'|[^.]+)(.*)" and @@ -56,7 +56,7 @@ predicate parseTypeString(string rawType, string package, string qualifiedName) /** * Holds if models describing `package` may be relevant for the analysis of this database. */ -overlay[local] +overlay[local?] predicate isPackageUsed(string package) { package = "global" or @@ -70,7 +70,7 @@ predicate isPackageUsed(string package) { } bindingset[type] -overlay[local] +overlay[local?] predicate isTypeUsed(string type) { exists(string package | parseTypeString(type, package, _) and @@ -82,10 +82,10 @@ predicate isTypeUsed(string type) { * Holds if `type` can be obtained from an instance of `otherType` due to * language semantics modeled by `getExtraNodeFromType`. */ -overlay[local] +overlay[local?] predicate hasImplicitTypeModel(string type, string otherType) { none() } -overlay[local] +overlay[local?] pragma[nomagic] private predicate parseRelevantTypeString(string rawType, string package, string qualifiedName) { isRelevantFullPath(rawType, _) and diff --git a/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll b/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll index d422c960a8fc..e0324bf5a6bf 100644 --- a/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll +++ b/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll @@ -2,7 +2,7 @@ * Provides classes for working with basic blocks, and predicates for computing * liveness information for local variables. */ -overlay[local] +overlay[local?] module; import javascript @@ -320,7 +320,7 @@ module Public { /** * Holds if this basic block strictly dominates `bb`. */ - overlay[caller] + overlay[caller?] pragma[inline] predicate strictlyDominates(ReachableBasicBlock bb) { this = immediateDominator+(bb) } @@ -329,14 +329,14 @@ module Public { * * This predicate is reflexive: each reachable basic block dominates itself. */ - overlay[caller] + overlay[caller?] pragma[inline] predicate dominates(ReachableBasicBlock bb) { this = immediateDominator*(bb) } /** * Holds if this basic block strictly post-dominates `bb`. */ - overlay[caller] + overlay[caller?] pragma[inline] predicate strictlyPostDominates(ReachableBasicBlock bb) { this = immediatePostDominator+(bb) } @@ -345,7 +345,7 @@ module Public { * * This predicate is reflexive: each reachable basic block post-dominates itself. */ - overlay[caller] + overlay[caller?] pragma[inline] predicate postDominates(ReachableBasicBlock bb) { this = immediatePostDominator*(bb) } } diff --git a/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll b/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll index 17aa82ced6cf..eab6b76b031e 100644 --- a/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll +++ b/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll @@ -40,7 +40,7 @@ module Stages { /** * The `ast` stage. */ - overlay[local] + overlay[local?] cached module Ast { /** @@ -85,7 +85,7 @@ module Stages { /** * The `basicblocks` stage. */ - overlay[local] + overlay[local?] cached module BasicBlocks { /** @@ -112,7 +112,7 @@ module Stages { /** * The part of data flow computed before flow summary nodes. */ - overlay[local] + overlay[local?] cached module EarlyDataFlowStage { /** @@ -137,7 +137,7 @@ module Stages { /** * The `dataflow` stage. */ - overlay[local] + overlay[local?] cached module DataFlowStage { /** diff --git a/javascript/ql/lib/semmle/javascript/internal/Overlay.qll b/javascript/ql/lib/semmle/javascript/internal/Overlay.qll index d1ca1f2b0da4..db3dc8ac6bf6 100644 --- a/javascript/ql/lib/semmle/javascript/internal/Overlay.qll +++ b/javascript/ql/lib/semmle/javascript/internal/Overlay.qll @@ -2,10 +2,10 @@ private import javascript private import OverlayXml /** Holds if the database is an overlay. */ -overlay[local] +overlay[local?] private predicate isOverlay() { databaseMetadata("isOverlay", "true") } -overlay[local] +overlay[local?] private string getFileFromEntity(@locatable node) { exists(@location loc | hasLocation(node, loc) @@ -19,11 +19,11 @@ private string getFileFromEntity(@locatable node) { } /** Holds if `file` was changed or deleted in the overlay. */ -overlay[local] +overlay[local?] private predicate discardFile(string file) { isOverlay() and overlayChangedFiles(file) } /** Holds if `node` is in the `file` and is part of the overlay base database. */ -overlay[local] +overlay[local?] private predicate discardableEntity(string file, @locatable node) { not isOverlay() and file = getFileFromEntity(node) } @@ -34,7 +34,7 @@ private predicate discardEntity(@locatable node) { exists(string file | discardableEntity(file, node) and discardFile(file)) } -overlay[local] +overlay[local?] private string getFileFromLocation(@location loc) { exists(@file file | locations_default(loc, file, _, _, _, _) and @@ -43,7 +43,7 @@ private string getFileFromLocation(@location loc) { } /** Holds if `loc` is in the `file` and is part of the overlay base database. */ -overlay[local] +overlay[local?] private predicate discardableLocation(string file, @location node) { not isOverlay() and file = getFileFromLocation(node) } diff --git a/javascript/ql/lib/semmle/javascript/internal/StmtContainers.qll b/javascript/ql/lib/semmle/javascript/internal/StmtContainers.qll index 741575c3242c..65984e2eb9b5 100644 --- a/javascript/ql/lib/semmle/javascript/internal/StmtContainers.qll +++ b/javascript/ql/lib/semmle/javascript/internal/StmtContainers.qll @@ -4,7 +4,7 @@ * Provides predicates and classes for relating nodes to their * enclosing `StmtContainer`. */ -overlay[local] +overlay[local?] module; private import javascript @@ -48,7 +48,7 @@ class NodeInStmtContainer extends Locatable, @node_in_stmt_container { /** * Gets the function or toplevel to which this node belongs. */ - overlay[caller] + overlay[caller?] pragma[inline] final StmtContainer getContainer() { result = getStmtContainer(this) } } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/ExternalAPIUsedWithUntrustedDataQuery.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/ExternalAPIUsedWithUntrustedDataQuery.qll index 7972c379e874..7a9360447562 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/ExternalAPIUsedWithUntrustedDataQuery.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/ExternalAPIUsedWithUntrustedDataQuery.qll @@ -97,7 +97,7 @@ class ExternalApiDataNode extends DataFlow::Node instanceof Sink { } /** A node representing untrusted data being passed to an external API. */ class UntrustedExternalApiDataNode extends ExternalApiDataNode { - UntrustedExternalApiDataNode() { ExternalAPIUsedWithUntrustedDataFlow::flow(_, this) } + UntrustedExternalApiDataNode() { ExternalAPIUsedWithUntrustedDataFlow::flowTo(this) } /** Gets a source of untrusted data which is passed to this external API data node. */ DataFlow::Node getAnUntrustedSource() { ExternalAPIUsedWithUntrustedDataFlow::flow(result, this) } @@ -110,7 +110,7 @@ private newtype TExternalApi = /** An external API sink with `name`. */ MkExternalApiNode(string name) { exists(Sink sink | - ExternalAPIUsedWithUntrustedDataFlow::flow(_, sink) and + ExternalAPIUsedWithUntrustedDataFlow::flowTo(sink) and name = sink.getApiName() ) } diff --git a/javascript/ql/lib/utils/test/InlineSummaries.qll b/javascript/ql/lib/utils/test/InlineSummaries.qll index 0366736eaf66..1633e056b7f1 100644 --- a/javascript/ql/lib/utils/test/InlineSummaries.qll +++ b/javascript/ql/lib/utils/test/InlineSummaries.qll @@ -1,7 +1,7 @@ import javascript import semmle.javascript.dataflow.FlowSummary -overlay[local] +overlay[local?] class MkSummary extends SummarizedCallable { private CallExpr mkSummary; diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 166ee6e7c294..11b27f044cf1 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.2.3 + +No user-facing changes. + ## 2.2.2 No user-facing changes. diff --git a/javascript/ql/src/change-notes/released/2.2.3.md b/javascript/ql/src/change-notes/released/2.2.3.md new file mode 100644 index 000000000000..1db16246c5a7 --- /dev/null +++ b/javascript/ql/src/change-notes/released/2.2.3.md @@ -0,0 +1,3 @@ +## 2.2.3 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 31b4d2fab768..5ee5c5be7fc0 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.2.2 +lastReleaseVersion: 2.2.3 diff --git a/javascript/ql/src/experimental/Security/CWE-347/decodeJwtWithoutVerification.ql b/javascript/ql/src/experimental/Security/CWE-347/decodeJwtWithoutVerification.ql index 429744bbbd1d..259d27227a38 100644 --- a/javascript/ql/src/experimental/Security/CWE-347/decodeJwtWithoutVerification.ql +++ b/javascript/ql/src/experimental/Security/CWE-347/decodeJwtWithoutVerification.ql @@ -36,6 +36,6 @@ import UnverifiedDecodeFlow::PathGraph from UnverifiedDecodeFlow::PathNode source, UnverifiedDecodeFlow::PathNode sink where UnverifiedDecodeFlow::flowPath(source, sink) and - not VerifiedDecodeFlow::flow(source.getNode(), _) + not VerifiedDecodeFlow::flowFrom(source.getNode()) select source.getNode(), source, sink, "Decoding JWT $@.", sink.getNode(), "without signature verification" diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index ef0b626731de..1ef59ad1834d 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 2.2.2 +version: 2.2.4-dev groups: - javascript - queries diff --git a/javascript/ql/test/library-tests/FlowSummary/test.ql b/javascript/ql/test/library-tests/FlowSummary/test.ql index 0e40dcdadb09..147908706c80 100644 --- a/javascript/ql/test/library-tests/FlowSummary/test.ql +++ b/javascript/ql/test/library-tests/FlowSummary/test.ql @@ -32,5 +32,5 @@ class BasicBarrierGuard extends DataFlow::CallNode { deprecated class ConsistencyConfig extends ConsistencyConfiguration { ConsistencyConfig() { this = "ConsistencyConfig" } - override DataFlow::Node getAnAlert() { Flow::flow(_, result) } + override DataFlow::Node getAnAlert() { Flow::flowTo(result) } } diff --git a/javascript/ql/test/tutorials/Introducing the JavaScript libraries/query17.qll b/javascript/ql/test/tutorials/Introducing the JavaScript libraries/query17.qll index e6dff623e97c..e0a5ac34a91f 100644 --- a/javascript/ql/test/tutorials/Introducing the JavaScript libraries/query17.qll +++ b/javascript/ql/test/tutorials/Introducing the JavaScript libraries/query17.qll @@ -14,7 +14,7 @@ predicate passwordVarAssign(Variable v, DataFlow::Node nd) { module PasswordFlow = DataFlow::Global; query predicate test_query17(DataFlow::Node sink, string res) { - exists(Variable v | PasswordFlow::flow(_, sink) and passwordVarAssign(v, sink) | + exists(Variable v | PasswordFlow::flowTo(sink) and passwordVarAssign(v, sink) | res = "Password variable " + v.toString() + " is assigned a constant string." ) } diff --git a/misc/bazel/csharp.bzl b/misc/bazel/csharp.bzl index 7a3179096276..0cf2e30d0de7 100644 --- a/misc/bazel/csharp.bzl +++ b/misc/bazel/csharp.bzl @@ -2,7 +2,7 @@ load("@rules_dotnet//dotnet:defs.bzl", "csharp_binary", "csharp_library", "cshar load("@rules_pkg//pkg:mappings.bzl", "strip_prefix") load("//misc/bazel:pkg.bzl", "codeql_pkg_files") -TARGET_FRAMEWORK = "net9.0" +TARGET_FRAMEWORK = "net10.0" def _gen_assembly_info(name): assembly_info_gen = name + "-assembly-info" diff --git a/misc/bazel/registry/modules/rules_dotnet/0.19.2-codeql.1/MODULE.bazel b/misc/bazel/registry/modules/rules_dotnet/0.19.2-codeql.1/MODULE.bazel deleted file mode 100644 index ba047f282b08..000000000000 --- a/misc/bazel/registry/modules/rules_dotnet/0.19.2-codeql.1/MODULE.bazel +++ /dev/null @@ -1,57 +0,0 @@ -"rules_dotnet" - -module( - name = "rules_dotnet", - version = "0.19.2-codeql.1", - bazel_compatibility = [">=7.0.0"], - compatibility_level = 0, -) - -dotnet = use_extension("@rules_dotnet//dotnet:extensions.bzl", "dotnet") -dotnet.toolchain(dotnet_version = "9.0.300") -use_repo(dotnet, "dotnet_toolchains") - -register_toolchains("@dotnet_toolchains//:all") - -paket2bazel_dependencies_extension = use_extension("//dotnet:paket.paket2bazel_dependencies_extension.bzl", "paket2bazel_dependencies_extension") -use_repo(paket2bazel_dependencies_extension, "paket.paket2bazel_dependencies") - -rules_dotnet_nuget_packages_extension = use_extension("//dotnet:paket.rules_dotnet_nuget_packages_extension.bzl", "rules_dotnet_nuget_packages_extension") -use_repo(rules_dotnet_nuget_packages_extension, "paket.rules_dotnet_nuget_packages") - -targeting_packs_extension = use_extension("//dotnet/private/sdk/targeting_packs:dotnet.targeting_packs_extension.bzl", "targeting_packs_extension") -use_repo(targeting_packs_extension, "dotnet.targeting_packs") - -runtime_packs_extension = use_extension("//dotnet/private/sdk/runtime_packs:dotnet.runtime_packs_extension.bzl", "runtime_packs_extension") -use_repo(runtime_packs_extension, "dotnet.runtime_packs") - -apphost_packs_extension = use_extension("//dotnet/private/sdk/apphost_packs:dotnet.apphost_packs_extension.bzl", "apphost_packs_extension") -use_repo(apphost_packs_extension, "dotnet.apphost_packs") - -bazel_dep(name = "bazel_skylib", version = "1.7.1") -bazel_dep(name = "platforms", version = "1.0.0") -bazel_dep(name = "aspect_bazel_lib", version = "2.19.4") -bazel_dep(name = "rules_shell", version = "0.5.0") - -# Dev dependencies -bazel_dep(name = "stardoc", version = "0.8.0", dev_dependency = True) -bazel_dep(name = "rules_pkg", version = "1.1.0", dev_dependency = True) -bazel_dep(name = "gazelle", version = "0.44.0", dev_dependency = True, repo_name = "bazel_gazelle") -bazel_dep(name = "bazel_skylib_gazelle_plugin", version = "1.7.1", dev_dependency = True) -bazel_dep(name = "rules_cc", version = "0.1.2", dev_dependency = True) -bazel_dep(name = "rules_testing", version = "0.8.0", dev_dependency = True) -bazel_dep(name = "bazel_ci_rules", version = "1.0.0", dev_dependency = True) -bazel_dep(name = "dotnet_test_resources_other_repo", version = "", dev_dependency = True) -local_path_override( - module_name = "dotnet_test_resources_other_repo", - path = "dotnet/private/tests/resources/other_repo", -) - -rules_dotnet_dev_nuget_packages_extension = use_extension("//dotnet:paket.rules_dotnet_dev_nuget_packages_extension.bzl", "rules_dotnet_dev_nuget_packages_extension", dev_dependency = True) -use_repo(rules_dotnet_dev_nuget_packages_extension, "paket.rules_dotnet_dev_nuget_packages") - -rules_dotnet_nuget_resource_assemblies_tests_extension = use_extension("//dotnet:paket.rules_dotnet_nuget_resource_assemblies_tests_extension.bzl", "rules_dotnet_nuget_resource_assemblies_tests_extension", dev_dependency = True) -use_repo(rules_dotnet_nuget_resource_assemblies_tests_extension, "paket.rules_dotnet_nuget_resource_assemblies_tests") - -internal_dev_deps = use_extension("//dotnet:internal_dev_deps.bzl", "internal_dev_deps", dev_dependency = True) -use_repo(internal_dev_deps, "buildkite_config") diff --git a/misc/bazel/registry/modules/rules_dotnet/0.21.5-codeql.1/MODULE.bazel b/misc/bazel/registry/modules/rules_dotnet/0.21.5-codeql.1/MODULE.bazel new file mode 100644 index 000000000000..caaf52f2b9b9 --- /dev/null +++ b/misc/bazel/registry/modules/rules_dotnet/0.21.5-codeql.1/MODULE.bazel @@ -0,0 +1,71 @@ +"rules_dotnet" + +module( + name = "rules_dotnet", + version = "0.21.5-codeql.1", + bazel_compatibility = [">=8.0.0"], + compatibility_level = 0, +) + +dotnet = use_extension("@rules_dotnet//dotnet:extensions.bzl", "dotnet") +dotnet.toolchain(dotnet_version = "10.0.100") +dotnet.toolchain( + name = "dotnet_apphost", + dotnet_version = "10.0.100", +) +use_repo(dotnet, "dotnet_toolchains") + +# These toolchains are used to build the apphost shimmer +use_repo(dotnet, "dotnet_apphost_x86_64-unknown-linux-gnu") +use_repo(dotnet, "dotnet_apphost_arm64-unknown-linux-gnu") +use_repo(dotnet, "dotnet_apphost_aarch64-apple-darwin") +use_repo(dotnet, "dotnet_apphost_x86_64-apple-darwin") +use_repo(dotnet, "dotnet_apphost_x86_64-pc-windows-msvc") +use_repo(dotnet, "dotnet_apphost_arm64-pc-windows-msvc") + +register_toolchains("@dotnet_toolchains//:all") + +paket2bazel_dependencies_extension = use_extension("@rules_dotnet//dotnet:paket.paket2bazel_dependencies_extension.bzl", "paket2bazel_dependencies_extension") +use_repo(paket2bazel_dependencies_extension, "paket.paket2bazel_dependencies") + +rules_dotnet_nuget_packages_extension = use_extension("@rules_dotnet//dotnet:paket.rules_dotnet_nuget_packages_extension.bzl", "rules_dotnet_nuget_packages_extension") +use_repo(rules_dotnet_nuget_packages_extension, "paket.rules_dotnet_nuget_packages") + +targeting_packs_extension = use_extension("@rules_dotnet//dotnet/private/sdk/targeting_packs:dotnet.targeting_packs_extension.bzl", "targeting_packs_extension") +use_repo(targeting_packs_extension, "dotnet.targeting_packs") + +runtime_packs_extension = use_extension("@rules_dotnet//dotnet/private/sdk/runtime_packs:dotnet.runtime_packs_extension.bzl", "runtime_packs_extension") +use_repo(runtime_packs_extension, "dotnet.runtime_packs") + +apphost_packs_extension = use_extension("@rules_dotnet//dotnet/private/sdk/apphost_packs:dotnet.apphost_packs_extension.bzl", "apphost_packs_extension") +use_repo(apphost_packs_extension, "dotnet.apphost_packs") + +bazel_dep(name = "bazel_skylib", version = "1.7.1") +bazel_dep(name = "platforms", version = "1.0.0") +bazel_dep(name = "bazel_lib", version = "3.0.0") +bazel_dep(name = "rules_shell", version = "0.5.0") + +# Dev dependencies +bazel_dep(name = "rules_pkg", version = "1.1.0", dev_dependency = True) +bazel_dep(name = "gazelle", version = "0.44.0", dev_dependency = True, repo_name = "bazel_gazelle") +bazel_dep(name = "bazel_skylib_gazelle_plugin", version = "1.7.1", dev_dependency = True) +bazel_dep(name = "rules_cc", version = "0.1.2", dev_dependency = True) +bazel_dep(name = "rules_testing", version = "0.8.0", dev_dependency = True) +bazel_dep(name = "bazel_ci_rules", version = "1.0.0", dev_dependency = True) +bazel_dep(name = "dotnet_test_resources_other_repo", version = "", dev_dependency = True) +local_path_override( + module_name = "dotnet_test_resources_other_repo", + path = "dotnet/private/tests/resources/other_repo", +) + +rules_dotnet_dev_nuget_packages_extension = use_extension("@rules_dotnet//dotnet:paket.rules_dotnet_dev_nuget_packages_extension.bzl", "rules_dotnet_dev_nuget_packages_extension", dev_dependency = True) +use_repo(rules_dotnet_dev_nuget_packages_extension, "paket.rules_dotnet_dev_nuget_packages") + +rules_dotnet_nuget_resource_assemblies_tests_extension = use_extension("@rules_dotnet//dotnet:paket.rules_dotnet_nuget_resource_assemblies_tests_extension.bzl", "rules_dotnet_nuget_resource_assemblies_tests_extension", dev_dependency = True) +use_repo(rules_dotnet_nuget_resource_assemblies_tests_extension, "paket.rules_dotnet_nuget_resource_assemblies_tests") + +internal_dev_deps = use_extension("@rules_dotnet//dotnet:internal_dev_deps.bzl", "internal_dev_deps", dev_dependency = True) +use_repo(internal_dev_deps, "buildkite_config") + +rules_dotnet_nuget_tool_tests_extension = use_extension("@rules_dotnet//dotnet:paket.rules_dotnet_nuget_tool_tests_extension.bzl", "rules_dotnet_nuget_tool_tests_extension", dev_dependency = True) +use_repo(rules_dotnet_nuget_tool_tests_extension, "paket.rules_dotnet_nuget_tool_tests") diff --git a/misc/bazel/registry/modules/rules_dotnet/0.19.2-codeql.1/patches/revert_additional_files_in_nuget_archive.patch b/misc/bazel/registry/modules/rules_dotnet/0.21.5-codeql.1/patches/revert_additional_files_in_nuget_archive.patch similarity index 100% rename from misc/bazel/registry/modules/rules_dotnet/0.19.2-codeql.1/patches/revert_additional_files_in_nuget_archive.patch rename to misc/bazel/registry/modules/rules_dotnet/0.21.5-codeql.1/patches/revert_additional_files_in_nuget_archive.patch diff --git a/misc/bazel/registry/modules/rules_dotnet/0.19.2-codeql.1/source.json b/misc/bazel/registry/modules/rules_dotnet/0.21.5-codeql.1/source.json similarity index 57% rename from misc/bazel/registry/modules/rules_dotnet/0.19.2-codeql.1/source.json rename to misc/bazel/registry/modules/rules_dotnet/0.21.5-codeql.1/source.json index 928683521e25..aabd82d97c0b 100644 --- a/misc/bazel/registry/modules/rules_dotnet/0.19.2-codeql.1/source.json +++ b/misc/bazel/registry/modules/rules_dotnet/0.21.5-codeql.1/source.json @@ -1,7 +1,7 @@ { - "integrity": "sha256-6f9LidI9BUve7+TpoL1sh5GKC6sgLSYNImlVnVaiHEE=", - "strip_prefix": "rules_dotnet-0.19.2", - "url": "https://github.com/bazel-contrib/rules_dotnet/releases/download/v0.19.2/rules_dotnet-v0.19.2.tar.gz", + "integrity": "sha256-fgvSYSFAtQh+MuDzTji3iWR642WwefGCSzCLLUtZyFE=", + "strip_prefix": "rules_dotnet-0.21.5", + "url": "https://github.com/bazel-contrib/rules_dotnet/releases/download/v0.21.5/rules_dotnet-v0.21.5.tar.gz", "patches": { "revert_additional_files_in_nuget_archive.patch": "sha256-FzMKXeHVhIBXQRCNFB0EANDszgJc/BBaPgWCzkbW9Ck=" }, diff --git a/misc/bazel/registry/modules/rules_dotnet/metadata.json b/misc/bazel/registry/modules/rules_dotnet/metadata.json index 684babcda14b..ea34a05cfb68 100644 --- a/misc/bazel/registry/modules/rules_dotnet/metadata.json +++ b/misc/bazel/registry/modules/rules_dotnet/metadata.json @@ -13,7 +13,7 @@ "github:bazel-contrib/rules_dotnet" ], "versions": [ - "0.19.2-codeql.1" + "0.21.5-codeql.1" ], "yanked_versions": {} } diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 26ed76e0015e..5e5c3c37bae3 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.38 + +No user-facing changes. + ## 1.0.37 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.38.md b/misc/suite-helpers/change-notes/released/1.0.38.md new file mode 100644 index 000000000000..2c984549c5fb --- /dev/null +++ b/misc/suite-helpers/change-notes/released/1.0.38.md @@ -0,0 +1,3 @@ +## 1.0.38 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 9ad62b332475..b14e9763a8d4 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.37 +lastReleaseVersion: 1.0.38 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 02a91974fb62..3a79aea9f464 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.37 +version: 1.0.39-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/examples/snippets/call.ql b/python/ql/examples/snippets/call.ql index b326024a33c9..0c68bbd69b97 100644 --- a/python/ql/examples/snippets/call.ql +++ b/python/ql/examples/snippets/call.ql @@ -7,6 +7,7 @@ */ import python +private import LegacyPointsTo from Value len, CallNode call where len.getName() = "len" and len.getACall() = call diff --git a/python/ql/examples/snippets/extend_class.ql b/python/ql/examples/snippets/extend_class.ql index 805929ab709a..8efc1b8241a8 100644 --- a/python/ql/examples/snippets/extend_class.ql +++ b/python/ql/examples/snippets/extend_class.ql @@ -11,6 +11,7 @@ */ import python +private import LegacyPointsTo from ClassObject sub, ClassObject base where diff --git a/python/ql/examples/snippets/method_call.ql b/python/ql/examples/snippets/method_call.ql index f78a9e43be00..c331b7c8beff 100644 --- a/python/ql/examples/snippets/method_call.ql +++ b/python/ql/examples/snippets/method_call.ql @@ -7,6 +7,7 @@ */ import python +private import LegacyPointsTo from AstNode call, PythonFunctionValue method where diff --git a/python/ql/examples/snippets/mutualrecursion.ql b/python/ql/examples/snippets/mutualrecursion.ql index 0cd445b6e3bc..040dbae99d46 100644 --- a/python/ql/examples/snippets/mutualrecursion.ql +++ b/python/ql/examples/snippets/mutualrecursion.ql @@ -7,6 +7,7 @@ */ import python +private import LegacyPointsTo from FunctionObject m, FunctionObject n where m != n and m.getACallee() = n and n.getACallee() = m diff --git a/python/ql/examples/snippets/override_method.ql b/python/ql/examples/snippets/override_method.ql index 2b601d59df74..40c2eed85317 100644 --- a/python/ql/examples/snippets/override_method.ql +++ b/python/ql/examples/snippets/override_method.ql @@ -7,6 +7,7 @@ */ import python +private import LegacyPointsTo from FunctionObject override, FunctionObject base where diff --git a/python/ql/examples/snippets/recursion.ql b/python/ql/examples/snippets/recursion.ql index b986a265db5d..7e0770f3927c 100644 --- a/python/ql/examples/snippets/recursion.ql +++ b/python/ql/examples/snippets/recursion.ql @@ -7,6 +7,7 @@ */ import python +private import LegacyPointsTo from PythonFunctionValue f where f.getACall().getScope() = f.getScope() diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 94be3c9b8b19..17da65f262d4 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.0.3 + +No user-facing changes. + ## 5.0.2 No user-facing changes. diff --git a/python/ql/lib/LegacyPointsTo.qll b/python/ql/lib/LegacyPointsTo.qll index 3e6758546018..45f4a80e8d1c 100644 --- a/python/ql/lib/LegacyPointsTo.qll +++ b/python/ql/lib/LegacyPointsTo.qll @@ -20,8 +20,21 @@ */ private import python -private import semmle.python.pointsto.PointsTo -private import semmle.python.objects.Modules +import semmle.python.pointsto.Base +import semmle.python.pointsto.Context +import semmle.python.pointsto.PointsTo +import semmle.python.pointsto.PointsToContext +import semmle.python.objects.ObjectAPI +import semmle.python.objects.ObjectInternal +import semmle.python.types.Object +import semmle.python.types.ClassObject +import semmle.python.types.FunctionObject +import semmle.python.types.ModuleObject +import semmle.python.types.Exceptions +import semmle.python.types.Properties +import semmle.python.types.Descriptors +import semmle.python.SelfAttribute +import semmle.python.Metrics /** * An extension of `ControlFlowNode` that provides points-to predicates. @@ -93,6 +106,24 @@ class ControlFlowNodeWithPointsTo extends ControlFlowNode { // for that variable. exists(SsaVariable v | v.getAUse() = this | varHasCompletePointsToSet(v)) } + + /** Whether it is unlikely that this ControlFlowNode can be reached */ + predicate unlikelyReachable() { + not start_bb_likely_reachable(this.getBasicBlock()) + or + exists(BasicBlock b | + start_bb_likely_reachable(b) and + not end_bb_likely_reachable(b) and + // If there is an unlikely successor edge earlier in the BB + // than this node, then this node must be unreachable. + exists(ControlFlowNode p, int i, int j | + p.(RaisingNode).unlikelySuccessor(_) and + p = b.getNode(i) and + this = b.getNode(j) and + i < j + ) + ) + } } /** @@ -121,6 +152,45 @@ private predicate varHasCompletePointsToSet(SsaVariable var) { ) } +private predicate start_bb_likely_reachable(BasicBlock b) { + exists(Scope s | s.getEntryNode() = b.getNode(_)) + or + exists(BasicBlock pred | + pred = b.getAPredecessor() and + end_bb_likely_reachable(pred) and + not pred.getLastNode().(RaisingNode).unlikelySuccessor(b) + ) +} + +private predicate end_bb_likely_reachable(BasicBlock b) { + start_bb_likely_reachable(b) and + not exists(ControlFlowNode p, ControlFlowNode s | + p.(RaisingNode).unlikelySuccessor(s) and + p = b.getNode(_) and + s = b.getNode(_) and + not p = b.getLastNode() + ) +} + +/** + * An extension of `BasicBlock` that provides points-to related methods. + */ +class BasicBlockWithPointsTo extends BasicBlock { + /** + * Whether (as inferred by type inference) it is highly unlikely (or impossible) for control to flow from this to succ. + */ + predicate unlikelySuccessor(BasicBlockWithPointsTo succ) { + this.getLastNode().(RaisingNode).unlikelySuccessor(succ.firstNode()) + or + not end_bb_likely_reachable(this) and succ = this.getASuccessor() + } + + /** + * Whether (as inferred by type inference) this basic block is likely to be reachable. + */ + predicate likelyReachable() { start_bb_likely_reachable(this) } +} + /** * An extension of `Expr` that provides points-to predicates. */ @@ -208,3 +278,155 @@ class ModuleWithPointsTo extends Module { override string getAQlClass() { none() } } + +/** + * An extension of `Function` that provides points-to related methods. + */ +class FunctionWithPointsTo extends Function { + /** Gets the FunctionObject corresponding to this function */ + FunctionObject getFunctionObject() { result.getOrigin() = this.getDefinition() } + + override string getAQlClass() { none() } +} + +/** + * An extension of `Class` that provides points-to related methods. + */ +class ClassWithPointsTo extends Class { + /** Gets the ClassObject corresponding to this class */ + ClassObject getClassObject() { result.getOrigin() = this.getParent() } + + override string getAQlClass() { none() } +} + +/** Gets the `Object` corresponding to the immutable literal `l`. */ +Object getLiteralObject(ImmutableLiteral l) { + l instanceof IntegerLiteral and + ( + py_cobjecttypes(result, theIntType()) and py_cobjectnames(result, l.(Num).getN()) + or + py_cobjecttypes(result, theLongType()) and py_cobjectnames(result, l.(Num).getN()) + ) + or + l instanceof FloatLiteral and + py_cobjecttypes(result, theFloatType()) and + py_cobjectnames(result, l.(Num).getN()) + or + l instanceof ImaginaryLiteral and + py_cobjecttypes(result, theComplexType()) and + py_cobjectnames(result, l.(Num).getN()) + or + l instanceof NegativeIntegerLiteral and + ( + (py_cobjecttypes(result, theIntType()) or py_cobjecttypes(result, theLongType())) and + py_cobjectnames(result, "-" + l.(UnaryExpr).getOperand().(IntegerLiteral).getN()) + ) + or + l instanceof Bytes and + py_cobjecttypes(result, theBytesType()) and + py_cobjectnames(result, l.(Bytes).quotedString()) + or + l instanceof Unicode and + py_cobjecttypes(result, theUnicodeType()) and + py_cobjectnames(result, l.(Unicode).quotedString()) + or + l instanceof True and + name_consts(l, "True") and + result = theTrueObject() + or + l instanceof False and + name_consts(l, "False") and + result = theFalseObject() + or + l instanceof None and + name_consts(l, "None") and + result = theNoneObject() +} + +private predicate gettext_installed() { + // Good enough (and fast) approximation + exists(Module m | m.getName() = "gettext") +} + +private predicate builtin_constant(string name) { + exists(Object::builtin(name)) + or + name = "WindowsError" + or + name = "_" and gettext_installed() +} + +/** Whether this name is (almost) always defined, ie. it is a builtin or VM defined name */ +predicate globallyDefinedName(string name) { builtin_constant(name) or auto_name(name) } + +private predicate auto_name(string name) { + name = "__file__" or name = "__builtins__" or name = "__name__" +} + +/** An extension of `SsaVariable` that provides points-to related methods. */ +class SsaVariableWithPointsTo extends SsaVariable { + /** Gets an argument of the phi function defining this variable, pruned of unlikely edges. */ + SsaVariable getAPrunedPhiInput() { + result = this.getAPhiInput() and + exists(BasicBlock incoming | incoming = this.getPredecessorBlockForPhiArgument(result) | + not incoming.getLastNode().(RaisingNode).unlikelySuccessor(this.getDefinition()) + ) + } + + /** Gets the incoming edges for a Phi node, pruned of unlikely edges. */ + private BasicBlockWithPointsTo getAPrunedPredecessorBlockForPhi() { + result = this.getAPredecessorBlockForPhi() and + not result.unlikelySuccessor(this.getDefinition().getBasicBlock()) + } + + private predicate implicitlyDefined() { + not exists(this.getDefinition()) and + not py_ssa_phi(this, _) and + exists(GlobalVariable var | this.getVariable() = var | + globallyDefinedName(var.getId()) + or + var.getId() = "__path__" and var.getScope().(Module).isPackageInit() + ) + } + + /** Whether this variable may be undefined */ + predicate maybeUndefined() { + not exists(this.getDefinition()) and not py_ssa_phi(this, _) and not this.implicitlyDefined() + or + this.getDefinition().isDelete() + or + exists(SsaVariableWithPointsTo var | var = this.getAPrunedPhiInput() | var.maybeUndefined()) + or + /* + * For phi-nodes, there must be a corresponding phi-input for each control-flow + * predecessor. Otherwise, the variable will be undefined on that incoming edge. + * WARNING: the same phi-input may cover multiple predecessors, so this check + * cannot be done by counting. + */ + + exists(BasicBlock incoming | + reaches_end(incoming) and + incoming = this.getAPrunedPredecessorBlockForPhi() and + not this.getAPhiInput().getDefinition().getBasicBlock().dominates(incoming) + ) + } + + override string getAQlClass() { none() } +} + +private predicate reaches_end(BasicBlock b) { + not exits_early(b) and + ( + /* Entry point */ + not exists(BasicBlock prev | prev.getASuccessor() = b) + or + exists(BasicBlock prev | prev.getASuccessor() = b | reaches_end(prev)) + ) +} + +private predicate exits_early(BasicBlock b) { + exists(FunctionObject f | + f.neverReturns() and + f.getACall().getBasicBlock() = b + ) +} diff --git a/python/ql/lib/analysis/DefinitionTracking.qll b/python/ql/lib/analysis/DefinitionTracking.qll index 53f8e791cd8b..0d58bd69b7b6 100644 --- a/python/ql/lib/analysis/DefinitionTracking.qll +++ b/python/ql/lib/analysis/DefinitionTracking.qll @@ -4,7 +4,7 @@ import python private import LegacyPointsTo -import semmle.python.pointsto.PointsTo +private import semmle.python.types.ImportTime import IDEContextual private newtype TDefinition = diff --git a/python/ql/lib/change-notes/2025-11-22-tornado-websockets.md b/python/ql/lib/change-notes/2025-11-22-tornado-websockets.md new file mode 100644 index 000000000000..8ba2ef549eea --- /dev/null +++ b/python/ql/lib/change-notes/2025-11-22-tornado-websockets.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Additional models for remote flow sources for `tornado.websocket.WebSocketHandler` have been added. \ No newline at end of file diff --git a/python/ql/lib/change-notes/2025-11-26-model-ParseResult.md b/python/ql/lib/change-notes/2025-11-26-model-ParseResult.md new file mode 100644 index 000000000000..9d4616436133 --- /dev/null +++ b/python/ql/lib/change-notes/2025-11-26-model-ParseResult.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added taint flow model and type model for `urllib.parseurl`. \ No newline at end of file diff --git a/python/ql/lib/change-notes/2025-11-26-remove-top-level-points-to-import.md b/python/ql/lib/change-notes/2025-11-26-remove-top-level-points-to-import.md new file mode 100644 index 000000000000..7122c217c418 --- /dev/null +++ b/python/ql/lib/change-notes/2025-11-26-remove-top-level-points-to-import.md @@ -0,0 +1,7 @@ +--- +category: breaking +--- + +* All modules that depend on the points-to analysis have now been removed from the top level `python.qll` module. To access the points-to functionality, import the new `LegacyPointsTo` module. This also means that some predicates have been removed from various classes, for instance `Function.getFunctionObject()`. To access these predicates, import the `LegacyPointsTo` module and use the `FunctionWithPointsTo` class instead. Most cases follow this pattern, but there are a few exceptions: + * The `getLiteralObject` method on `ImmutableLiteral` subclasses has been replaced with a predicate `getLiteralObject(ImmutableLiteral l)` in the `LegacyPointsTo` module. + * The `getMetrics` method on `Function`, `Class`, and `Module` has been removed. To access metrics, import `LegacyPointsTo` and use the classes `FunctionMetrics`, etc. instead. diff --git a/python/ql/lib/change-notes/2025-11-26-socketio.md b/python/ql/lib/change-notes/2025-11-26-socketio.md new file mode 100644 index 000000000000..e58bec0bbc12 --- /dev/null +++ b/python/ql/lib/change-notes/2025-11-26-socketio.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Remote flow sources for the `python-socketio` package have been modeled. \ No newline at end of file diff --git a/python/ql/lib/change-notes/released/5.0.3.md b/python/ql/lib/change-notes/released/5.0.3.md new file mode 100644 index 000000000000..57074925279e --- /dev/null +++ b/python/ql/lib/change-notes/released/5.0.3.md @@ -0,0 +1,3 @@ +## 5.0.3 + +No user-facing changes. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 3940dee0f32d..6997554f6ddd 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.0.2 +lastReleaseVersion: 5.0.3 diff --git a/python/ql/lib/python.qll b/python/ql/lib/python.qll index b08f0ae35bb1..54306408a333 100644 --- a/python/ql/lib/python.qll +++ b/python/ql/lib/python.qll @@ -14,27 +14,27 @@ import semmle.python.Patterns import semmle.python.Keywords import semmle.python.Comprehensions import semmle.python.Flow -import semmle.python.Metrics +private import semmle.python.Metrics import semmle.python.Constants import semmle.python.Scope import semmle.python.Comment import semmle.python.GuardedControlFlow -import semmle.python.types.ImportTime -import semmle.python.types.Object -import semmle.python.types.ClassObject -import semmle.python.types.FunctionObject -import semmle.python.types.ModuleObject -import semmle.python.types.Version -import semmle.python.types.Descriptors +private import semmle.python.types.ImportTime +private import semmle.python.types.Object +private import semmle.python.types.ClassObject +private import semmle.python.types.FunctionObject +private import semmle.python.types.ModuleObject +private import semmle.python.types.Version +private import semmle.python.types.Descriptors import semmle.python.SSA -import semmle.python.SelfAttribute -import semmle.python.types.Properties +private import semmle.python.SelfAttribute +private import semmle.python.types.Properties import semmle.python.xml.XML import semmle.python.essa.Essa -import semmle.python.pointsto.Base -import semmle.python.pointsto.Context -import semmle.python.pointsto.CallGraph -import semmle.python.objects.ObjectAPI +private import semmle.python.pointsto.Base +private import semmle.python.pointsto.Context +private import semmle.python.pointsto.CallGraph +private import semmle.python.objects.ObjectAPI import semmle.python.Unit import site private import semmle.python.Overlay diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 2b22074c76d5..43e09a9cd094 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 5.0.2 +version: 5.0.4-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/lib/semmle/python/Class.qll b/python/ql/lib/semmle/python/Class.qll index 58a6504b547c..19b81e86a125 100644 --- a/python/ql/lib/semmle/python/Class.qll +++ b/python/ql/lib/semmle/python/Class.qll @@ -141,18 +141,12 @@ class Class extends Class_, Scope, AstNode { /** Gets the metaclass expression */ Expr getMetaClass() { result = this.getParent().getMetaClass() } - /** Gets the ClassObject corresponding to this class */ - ClassObject getClassObject() { result.getOrigin() = this.getParent() } - /** Gets the nth base of this class definition. */ Expr getBase(int index) { result = this.getParent().getBase(index) } /** Gets a base of this class definition. */ Expr getABase() { result = this.getParent().getABase() } - /** Gets the metrics for this class */ - ClassMetrics getMetrics() { result = this } - /** * Gets the qualified name for this class. * Should return the same name as the `__qualname__` attribute on classes in Python 3. diff --git a/python/ql/lib/semmle/python/Exprs.qll b/python/ql/lib/semmle/python/Exprs.qll index e5ee2bdb28c7..c374863d684e 100644 --- a/python/ql/lib/semmle/python/Exprs.qll +++ b/python/ql/lib/semmle/python/Exprs.qll @@ -240,17 +240,12 @@ class Bytes extends StringLiteral { /* syntax: b"hello" */ Bytes() { not this.isUnicode() } - override Object getLiteralObject() { - py_cobjecttypes(result, theBytesType()) and - py_cobjectnames(result, this.quotedString()) - } - /** * The extractor puts quotes into the name of each string (to prevent "0" clashing with 0). * The following predicate help us match up a string/byte literals in the source * which the equivalent object. */ - private string quotedString() { + string quotedString() { exists(string b_unquoted | b_unquoted = this.getS() | result = "b'" + b_unquoted + "'") } } @@ -266,8 +261,6 @@ class Ellipsis extends Ellipsis_ { * Consists of string (both unicode and byte) literals and numeric literals. */ abstract class ImmutableLiteral extends Expr { - abstract Object getLiteralObject(); - abstract boolean booleanValue(); } @@ -292,12 +285,6 @@ class IntegerLiteral extends Num { override string toString() { result = "IntegerLiteral" } - override Object getLiteralObject() { - py_cobjecttypes(result, theIntType()) and py_cobjectnames(result, this.getN()) - or - py_cobjecttypes(result, theLongType()) and py_cobjectnames(result, this.getN()) - } - override boolean booleanValue() { this.getValue() = 0 and result = false or @@ -317,10 +304,6 @@ class FloatLiteral extends Num { override string toString() { result = "FloatLiteral" } - override Object getLiteralObject() { - py_cobjecttypes(result, theFloatType()) and py_cobjectnames(result, this.getN()) - } - override boolean booleanValue() { this.getValue() = 0.0 and result = false or @@ -343,10 +326,6 @@ class ImaginaryLiteral extends Num { override string toString() { result = "ImaginaryLiteral" } - override Object getLiteralObject() { - py_cobjecttypes(result, theComplexType()) and py_cobjectnames(result, this.getN()) - } - override boolean booleanValue() { this.getValue() = 0.0 and result = false or @@ -365,11 +344,6 @@ class NegativeIntegerLiteral extends ImmutableLiteral, UnaryExpr { override boolean booleanValue() { result = this.getOperand().(IntegerLiteral).booleanValue() } - override Object getLiteralObject() { - (py_cobjecttypes(result, theIntType()) or py_cobjecttypes(result, theLongType())) and - py_cobjectnames(result, "-" + this.getOperand().(IntegerLiteral).getN()) - } - /** * Gets the (integer) value of this constant. Will not return a result if the value does not fit into * a 32 bit signed value @@ -385,11 +359,6 @@ class Unicode extends StringLiteral { /* syntax: "hello" */ Unicode() { this.isUnicode() } - override Object getLiteralObject() { - py_cobjecttypes(result, theUnicodeType()) and - py_cobjectnames(result, this.quotedString()) - } - /** * Gets the quoted representation fo this string. * @@ -593,12 +562,11 @@ class StringLiteral extends Str_, ImmutableLiteral { this.getText() != "" and result = true } - override Object getLiteralObject() { none() } - override string toString() { result = "StringLiteral" } } -private predicate name_consts(Name_ n, string id) { +/** Holds if `n` is a named constant (`True`, `False`, or `None`) with name `id`. */ +predicate name_consts(Name_ n, string id) { exists(Variable v | py_variables(v, n) and id = v.getId() | id = "True" or id = "False" or id = "None" ) @@ -627,8 +595,6 @@ class True extends BooleanLiteral { /* syntax: True */ True() { name_consts(this, "True") } - override Object getLiteralObject() { name_consts(this, "True") and result = theTrueObject() } - override boolean booleanValue() { result = true } } @@ -637,8 +603,6 @@ class False extends BooleanLiteral { /* syntax: False */ False() { name_consts(this, "False") } - override Object getLiteralObject() { name_consts(this, "False") and result = theFalseObject() } - override boolean booleanValue() { result = false } } @@ -647,8 +611,6 @@ class None extends NameConstant { /* syntax: None */ None() { name_consts(this, "None") } - override Object getLiteralObject() { name_consts(this, "None") and result = theNoneObject() } - override boolean booleanValue() { result = false } } diff --git a/python/ql/lib/semmle/python/Flow.qll b/python/ql/lib/semmle/python/Flow.qll index 496c1abc52a1..898cd566ab96 100644 --- a/python/ql/lib/semmle/python/Flow.qll +++ b/python/ql/lib/semmle/python/Flow.qll @@ -190,24 +190,6 @@ class ControlFlowNode extends @py_flow_node { /** Whether this node is a normal (non-exceptional) exit */ predicate isNormalExit() { py_scope_flow(this, _, 0) or py_scope_flow(this, _, 2) } - /** Whether it is unlikely that this ControlFlowNode can be reached */ - predicate unlikelyReachable() { - not start_bb_likely_reachable(this.getBasicBlock()) - or - exists(BasicBlock b | - start_bb_likely_reachable(b) and - not end_bb_likely_reachable(b) and - // If there is an unlikely successor edge earlier in the BB - // than this node, then this node must be unreachable. - exists(ControlFlowNode p, int i, int j | - p.(RaisingNode).unlikelySuccessor(_) and - p = b.getNode(i) and - this = b.getNode(j) and - i < j - ) - ) - } - /** Whether this strictly dominates other. */ pragma[inline] predicate strictlyDominates(ControlFlowNode other) { @@ -901,6 +883,58 @@ class StarredNode extends ControlFlowNode { ControlFlowNode getValue() { toAst(result) = toAst(this).(Starred).getValue() } } +/** The ControlFlowNode for an 'except' statement. */ +class ExceptFlowNode extends ControlFlowNode { + ExceptFlowNode() { this.getNode() instanceof ExceptStmt } + + /** + * Gets the type handled by this exception handler. + * `ExceptionType` in `except ExceptionType as e:` + */ + ControlFlowNode getType() { + exists(ExceptStmt ex | + this.getBasicBlock().dominates(result.getBasicBlock()) and + ex = this.getNode() and + result = ex.getType().getAFlowNode() + ) + } + + /** + * Gets the name assigned to the handled exception, if any. + * `e` in `except ExceptionType as e:` + */ + ControlFlowNode getName() { + exists(ExceptStmt ex | + this.getBasicBlock().dominates(result.getBasicBlock()) and + ex = this.getNode() and + result = ex.getName().getAFlowNode() + ) + } +} + +/** The ControlFlowNode for an 'except*' statement. */ +class ExceptGroupFlowNode extends ControlFlowNode { + ExceptGroupFlowNode() { this.getNode() instanceof ExceptGroupStmt } + + /** + * Gets the type handled by this exception handler. + * `ExceptionType` in `except* ExceptionType as e:` + */ + ControlFlowNode getType() { + this.getBasicBlock().dominates(result.getBasicBlock()) and + result = this.getNode().(ExceptGroupStmt).getType().getAFlowNode() + } + + /** + * Gets the name assigned to the handled exception, if any. + * `e` in `except* ExceptionType as e:` + */ + ControlFlowNode getName() { + this.getBasicBlock().dominates(result.getBasicBlock()) and + result = this.getNode().(ExceptGroupStmt).getName().getAFlowNode() + } +} + private module Scopes { private predicate fast_local(NameNode n) { exists(FastLocalVariable v | @@ -1004,7 +1038,8 @@ class BasicBlock extends @py_flow_node { ) } - private ControlFlowNode firstNode() { result = this } + /** Gets the first node in this basic block */ + ControlFlowNode firstNode() { result = this } /** Gets the last node in this basic block */ ControlFlowNode getLastNode() { @@ -1093,15 +1128,6 @@ class BasicBlock extends @py_flow_node { ) } - /** - * Whether (as inferred by type inference) it is highly unlikely (or impossible) for control to flow from this to succ. - */ - predicate unlikelySuccessor(BasicBlock succ) { - this.getLastNode().(RaisingNode).unlikelySuccessor(succ.firstNode()) - or - not end_bb_likely_reachable(this) and succ = this.getASuccessor() - } - /** Holds if this basic block strictly reaches the other. Is the start of other reachable from the end of this. */ cached predicate strictlyReaches(BasicBlock other) { @@ -1112,11 +1138,6 @@ class BasicBlock extends @py_flow_node { /** Holds if this basic block reaches the other. Is the start of other reachable from the end of this. */ predicate reaches(BasicBlock other) { this = other or this.strictlyReaches(other) } - /** - * Whether (as inferred by type inference) this basic block is likely to be reachable. - */ - predicate likelyReachable() { start_bb_likely_reachable(this) } - /** * Gets the `ConditionBlock`, if any, that controls this block and * does not control any other `ConditionBlock`s that control this block. @@ -1144,26 +1165,6 @@ class BasicBlock extends @py_flow_node { } } -private predicate start_bb_likely_reachable(BasicBlock b) { - exists(Scope s | s.getEntryNode() = b.getNode(_)) - or - exists(BasicBlock pred | - pred = b.getAPredecessor() and - end_bb_likely_reachable(pred) and - not pred.getLastNode().(RaisingNode).unlikelySuccessor(b) - ) -} - -private predicate end_bb_likely_reachable(BasicBlock b) { - start_bb_likely_reachable(b) and - not exists(ControlFlowNode p, ControlFlowNode s | - p.(RaisingNode).unlikelySuccessor(s) and - p = b.getNode(_) and - s = b.getNode(_) and - not p = b.getLastNode() - ) -} - private class ControlFlowNodeAlias = ControlFlowNode; final private class FinalBasicBlock = BasicBlock; diff --git a/python/ql/lib/semmle/python/Frameworks.qll b/python/ql/lib/semmle/python/Frameworks.qll index 955385141f7f..7694419b41d5 100644 --- a/python/ql/lib/semmle/python/Frameworks.qll +++ b/python/ql/lib/semmle/python/Frameworks.qll @@ -78,6 +78,7 @@ private import semmle.python.frameworks.Sanic private import semmle.python.frameworks.ServerLess private import semmle.python.frameworks.Setuptools private import semmle.python.frameworks.Simplejson +private import semmle.python.frameworks.Socketio private import semmle.python.frameworks.SqlAlchemy private import semmle.python.frameworks.Starlette private import semmle.python.frameworks.Stdlib diff --git a/python/ql/lib/semmle/python/Function.qll b/python/ql/lib/semmle/python/Function.qll index 589d7f471611..e15d28d3a12b 100644 --- a/python/ql/lib/semmle/python/Function.qll +++ b/python/ql/lib/semmle/python/Function.qll @@ -84,12 +84,6 @@ class Function extends Function_, Scope, AstNode { /** Gets the name used to define this function */ override string getName() { result = Function_.super.getName() } - /** Gets the metrics for this function */ - FunctionMetrics getMetrics() { result = this } - - /** Gets the FunctionObject corresponding to this function */ - FunctionObject getFunctionObject() { result.getOrigin() = this.getDefinition() } - /** * Whether this function is a procedure, that is, it has no explicit return statement and always returns None. * Note that generator and async functions are not procedures as they return generators and coroutines respectively. diff --git a/python/ql/lib/semmle/python/Metrics.qll b/python/ql/lib/semmle/python/Metrics.qll index dcc5cf959d93..4959a06317ff 100644 --- a/python/ql/lib/semmle/python/Metrics.qll +++ b/python/ql/lib/semmle/python/Metrics.qll @@ -29,9 +29,9 @@ class FunctionMetrics extends Function { */ int getCyclomaticComplexity() { exists(int e, int n | - n = count(BasicBlock b | b = this.getABasicBlock() and b.likelyReachable()) and + n = count(BasicBlockWithPointsTo b | b = this.getABasicBlock() and b.likelyReachable()) and e = - count(BasicBlock b1, BasicBlock b2 | + count(BasicBlockWithPointsTo b1, BasicBlockWithPointsTo b2 | b1 = this.getABasicBlock() and b1.likelyReachable() and b2 = this.getABasicBlock() and diff --git a/python/ql/lib/semmle/python/Module.qll b/python/ql/lib/semmle/python/Module.qll index 666217874b79..f22f0d6fe39f 100644 --- a/python/ql/lib/semmle/python/Module.qll +++ b/python/ql/lib/semmle/python/Module.qll @@ -86,9 +86,6 @@ class Module extends Module_, Scope, AstNode { result = this.getName().regexpReplaceAll("\\.[^.]*$", "") } - /** Gets the metrics for this module */ - ModuleMetrics getMetrics() { result = this } - string getAnImportedModuleName() { exists(Import i | i.getEnclosingModule() = this | result = i.getAnImportedModuleName()) or diff --git a/python/ql/lib/semmle/python/SSA.qll b/python/ql/lib/semmle/python/SSA.qll index 98cd39a4c43c..b71bd95de795 100644 --- a/python/ql/lib/semmle/python/SSA.qll +++ b/python/ql/lib/semmle/python/SSA.qll @@ -61,14 +61,6 @@ class SsaVariable extends @py_ssa_var { ) } - /** Gets an argument of the phi function defining this variable, pruned of unlikely edges. */ - SsaVariable getAPrunedPhiInput() { - result = this.getAPhiInput() and - exists(BasicBlock incoming | incoming = this.getPredecessorBlockForPhiArgument(result) | - not incoming.getLastNode().(RaisingNode).unlikelySuccessor(this.getDefinition()) - ) - } - /** Gets a variable that ultimately defines this variable and is not itself defined by another variable */ SsaVariable getAnUltimateDefinition() { result = this and not exists(this.getAPhiInput()) @@ -85,17 +77,11 @@ class SsaVariable extends @py_ssa_var { string getId() { result = this.getVariable().getId() } /** Gets the incoming edges for a Phi node. */ - private BasicBlock getAPredecessorBlockForPhi() { + BasicBlock getAPredecessorBlockForPhi() { exists(this.getAPhiInput()) and result.getASuccessor() = this.getDefinition().getBasicBlock() } - /** Gets the incoming edges for a Phi node, pruned of unlikely edges. */ - private BasicBlock getAPrunedPredecessorBlockForPhi() { - result = this.getAPredecessorBlockForPhi() and - not result.unlikelySuccessor(this.getDefinition().getBasicBlock()) - } - /** Whether it is possible to reach a use of this variable without passing a definition */ predicate reachableWithoutDefinition() { not exists(this.getDefinition()) and not py_ssa_phi(this, _) @@ -115,38 +101,6 @@ class SsaVariable extends @py_ssa_var { ) } - /** Whether this variable may be undefined */ - predicate maybeUndefined() { - not exists(this.getDefinition()) and not py_ssa_phi(this, _) and not this.implicitlyDefined() - or - this.getDefinition().isDelete() - or - exists(SsaVariable var | var = this.getAPrunedPhiInput() | var.maybeUndefined()) - or - /* - * For phi-nodes, there must be a corresponding phi-input for each control-flow - * predecessor. Otherwise, the variable will be undefined on that incoming edge. - * WARNING: the same phi-input may cover multiple predecessors, so this check - * cannot be done by counting. - */ - - exists(BasicBlock incoming | - reaches_end(incoming) and - incoming = this.getAPrunedPredecessorBlockForPhi() and - not this.getAPhiInput().getDefinition().getBasicBlock().dominates(incoming) - ) - } - - private predicate implicitlyDefined() { - not exists(this.getDefinition()) and - not py_ssa_phi(this, _) and - exists(GlobalVariable var | this.getVariable() = var | - globallyDefinedName(var.getId()) - or - var.getId() = "__path__" and var.getScope().(Module).isPackageInit() - ) - } - /** * Gets the global variable that is accessed if this local is undefined. * Only applies to local variables in class scopes. @@ -173,43 +127,6 @@ class SsaVariable extends @py_ssa_var { } } -private predicate reaches_end(BasicBlock b) { - not exits_early(b) and - ( - /* Entry point */ - not exists(BasicBlock prev | prev.getASuccessor() = b) - or - exists(BasicBlock prev | prev.getASuccessor() = b | reaches_end(prev)) - ) -} - -private predicate exits_early(BasicBlock b) { - exists(FunctionObject f | - f.neverReturns() and - f.getACall().getBasicBlock() = b - ) -} - -private predicate gettext_installed() { - // Good enough (and fast) approximation - exists(Module m | m.getName() = "gettext") -} - -private predicate builtin_constant(string name) { - exists(Object::builtin(name)) - or - name = "WindowsError" - or - name = "_" and gettext_installed() -} - -private predicate auto_name(string name) { - name = "__file__" or name = "__builtins__" or name = "__name__" -} - -/** Whether this name is (almost) always defined, ie. it is a builtin or VM defined name */ -predicate globallyDefinedName(string name) { builtin_constant(name) or auto_name(name) } - /** An SSA variable that is backed by a global variable */ class GlobalSsaVariable extends EssaVariable { GlobalSsaVariable() { this.getSourceVariable() instanceof GlobalVariable } diff --git a/python/ql/lib/semmle/python/SelfAttribute.qll b/python/ql/lib/semmle/python/SelfAttribute.qll index 01a110999baf..90ef2b38401a 100644 --- a/python/ql/lib/semmle/python/SelfAttribute.qll +++ b/python/ql/lib/semmle/python/SelfAttribute.qll @@ -5,6 +5,7 @@ import python private import semmle.python.pointsto.Filters +private import LegacyPointsTo /** * An attribute access where the left hand side of the attribute expression diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll b/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll index 42c0c862e89b..e9bcc5e67855 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll @@ -1,9 +1,10 @@ /** This module provides an API for attribute reads and writes. */ +private import python import DataFlowUtil import DataFlowPublic private import DataFlowPrivate -private import semmle.python.types.Builtins +private import semmle.python.dataflow.new.internal.Builtins /** * A data flow node that reads or writes an attribute of an object. @@ -134,8 +135,12 @@ private class BuiltInCallNode extends CallNode { BuiltInCallNode() { // TODO disallow instances where the name of the built-in may refer to an in-scope variable of that name. - exists(NameNode id | this.getFunction() = id and id.getId() = name and id.isGlobal()) and - name = any(Builtin b).getName() + exists(NameNode id | + name = Builtins::getBuiltinName() and + this.getFunction() = id and + id.getId() = name and + id.isGlobal() + ) } /** Gets the name of the built-in function that is called at this `CallNode` */ diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/ImportResolution.qll b/python/ql/lib/semmle/python/dataflow/new/internal/ImportResolution.qll index e1290b7758c4..f3943f53f860 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/ImportResolution.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/ImportResolution.qll @@ -9,6 +9,7 @@ private import semmle.python.dataflow.new.DataFlow private import semmle.python.dataflow.new.internal.ImportStar private import semmle.python.dataflow.new.TypeTracking private import semmle.python.dataflow.new.internal.DataFlowPrivate +private import semmle.python.essa.SsaDefinitions /** * Python modules and the way imports are resolved are... complicated. Here's a crash course in how diff --git a/python/ql/lib/semmle/python/dataflow/old/Configuration.qll b/python/ql/lib/semmle/python/dataflow/old/Configuration.qll index 7d03e6c562fa..f0e33169cf27 100644 --- a/python/ql/lib/semmle/python/dataflow/old/Configuration.qll +++ b/python/ql/lib/semmle/python/dataflow/old/Configuration.qll @@ -1,6 +1,6 @@ import python import semmle.python.dataflow.TaintTracking -private import semmle.python.objects.ObjectInternal +private import LegacyPointsTo private import semmle.python.dataflow.Implementation module TaintTracking { diff --git a/python/ql/lib/semmle/python/dataflow/old/Files.qll b/python/ql/lib/semmle/python/dataflow/old/Files.qll index 3439e559efa1..185377684452 100644 --- a/python/ql/lib/semmle/python/dataflow/old/Files.qll +++ b/python/ql/lib/semmle/python/dataflow/old/Files.qll @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo import semmle.python.dataflow.TaintTracking class OpenFile extends TaintKind { diff --git a/python/ql/lib/semmle/python/dataflow/old/Implementation.qll b/python/ql/lib/semmle/python/dataflow/old/Implementation.qll index 83476db803c6..18020c7d9ffa 100644 --- a/python/ql/lib/semmle/python/dataflow/old/Implementation.qll +++ b/python/ql/lib/semmle/python/dataflow/old/Implementation.qll @@ -1,7 +1,6 @@ import python private import LegacyPointsTo import semmle.python.dataflow.TaintTracking -private import semmle.python.objects.ObjectInternal private import semmle.python.pointsto.Filters as Filters import semmle.python.dataflow.Legacy @@ -257,7 +256,7 @@ class TaintTrackingImplementation extends string instanceof TaintTracking::Confi TaintKind kind, string edgeLabel ) { this.unprunedStep(src, node, context, path, kind, edgeLabel) and - node.getBasicBlock().likelyReachable() and + node.getBasicBlock().(BasicBlockWithPointsTo).likelyReachable() and not super.isBarrier(node) and ( not path = TNoAttribute() @@ -685,7 +684,9 @@ private class EssaTaintTracking extends string instanceof TaintTracking::Configu TaintTrackingNode src, PhiFunction defn, TaintTrackingContext context, AttributePath path, TaintKind kind ) { - exists(DataFlow::Node srcnode, BasicBlock pred, EssaVariable predvar, DataFlow::Node phi | + exists( + DataFlow::Node srcnode, BasicBlockWithPointsTo pred, EssaVariable predvar, DataFlow::Node phi + | src = TTaintTrackingNode_(srcnode, context, path, kind, this) and defn = phi.asVariable().getDefinition() and predvar = defn.getInput(pred) and diff --git a/python/ql/lib/semmle/python/dataflow/old/StateTracking.qll b/python/ql/lib/semmle/python/dataflow/old/StateTracking.qll index 2ca9be0dfb94..0eeb103ee552 100644 --- a/python/ql/lib/semmle/python/dataflow/old/StateTracking.qll +++ b/python/ql/lib/semmle/python/dataflow/old/StateTracking.qll @@ -9,9 +9,7 @@ */ import python -private import semmle.python.pointsto.PointsTo -private import semmle.python.pointsto.PointsToContext -private import semmle.python.objects.ObjectInternal +private import LegacyPointsTo /** A state that should be tracked. */ abstract class TrackableState extends string { diff --git a/python/ql/lib/semmle/python/dataflow/old/TaintTracking.qll b/python/ql/lib/semmle/python/dataflow/old/TaintTracking.qll index 15459a310438..8dfa344f458f 100644 --- a/python/ql/lib/semmle/python/dataflow/old/TaintTracking.qll +++ b/python/ql/lib/semmle/python/dataflow/old/TaintTracking.qll @@ -89,7 +89,6 @@ import python private import LegacyPointsTo private import semmle.python.pointsto.Filters as Filters -private import semmle.python.objects.ObjectInternal private import semmle.python.dataflow.Implementation import semmle.python.dataflow.Configuration diff --git a/python/ql/lib/semmle/python/dependencies/DependencyKind.qll b/python/ql/lib/semmle/python/dependencies/DependencyKind.qll index 2e4fab1af0b6..4ceda85ff417 100644 --- a/python/ql/lib/semmle/python/dependencies/DependencyKind.qll +++ b/python/ql/lib/semmle/python/dependencies/DependencyKind.qll @@ -1,4 +1,5 @@ import semmle.python.dependencies.Dependencies +private import LegacyPointsTo /** * A library describing an abstract mechanism for representing dependency categories. diff --git a/python/ql/lib/semmle/python/dependencies/TechInventory.qll b/python/ql/lib/semmle/python/dependencies/TechInventory.qll index 20a938b86d06..2c29a05c48b2 100644 --- a/python/ql/lib/semmle/python/dependencies/TechInventory.qll +++ b/python/ql/lib/semmle/python/dependencies/TechInventory.qll @@ -1,6 +1,7 @@ import python import semmle.python.dependencies.Dependencies import semmle.python.dependencies.DependencyKind +private import LegacyPointsTo /** * Combine the source-file and package into a single string: diff --git a/python/ql/lib/semmle/python/essa/Definitions.qll b/python/ql/lib/semmle/python/essa/Definitions.qll index 9c0df69c28e5..aca6991b9f69 100644 --- a/python/ql/lib/semmle/python/essa/Definitions.qll +++ b/python/ql/lib/semmle/python/essa/Definitions.qll @@ -1,5 +1,4 @@ import python - /* * Classification of variables. These should be non-overlapping and complete. * @@ -12,6 +11,9 @@ import python * Escaping globals -- Global variables that have definitions and at least one of those definitions is in another scope. */ +private import semmle.python.types.ImportTime +private import semmle.python.essa.SsaDefinitions + /** A source language variable, to be converted into a set of SSA variables. */ abstract class SsaSourceVariable extends @py_variable { SsaSourceVariable() { @@ -274,6 +276,17 @@ class ModuleVariable extends SsaSourceVariable instanceof GlobalVariable { override CallNode redefinedAtCallSite() { none() } } +/** Holds if `f` is an import of the form `from .[...] import ...` and the enclosing scope is an __init__ module */ +private predicate import_from_dot_in_init(ImportExprNode f) { + f.getScope() = any(Module m).getInitModule() and + ( + f.getNode().getLevel() = 1 and + not exists(f.getNode().getName()) + or + f.getNode().getImportedModuleName() = f.getEnclosingModule().getPackage().getName() + ) +} + class NonEscapingGlobalVariable extends ModuleVariable { NonEscapingGlobalVariable() { this instanceof GlobalVariable and diff --git a/python/ql/lib/semmle/python/essa/Essa.qll b/python/ql/lib/semmle/python/essa/Essa.qll index cf2aca1e2ac4..384bfd2f91fe 100644 --- a/python/ql/lib/semmle/python/essa/Essa.qll +++ b/python/ql/lib/semmle/python/essa/Essa.qll @@ -6,6 +6,7 @@ import python private import SsaCompute import semmle.python.essa.Definitions private import semmle.python.internal.CachedStages +private import semmle.python.essa.SsaDefinitions /** An (enhanced) SSA variable derived from `SsaSourceVariable`. */ class EssaVariable extends TEssaDefinition { diff --git a/python/ql/lib/semmle/python/essa/SsaDefinitions.qll b/python/ql/lib/semmle/python/essa/SsaDefinitions.qll index 0c1c8836f4e5..6c87af102fa9 100644 --- a/python/ql/lib/semmle/python/essa/SsaDefinitions.qll +++ b/python/ql/lib/semmle/python/essa/SsaDefinitions.qll @@ -6,6 +6,13 @@ import python private import semmle.python.internal.CachedStages +/** Hold if `expr` is a test (a branch) and `use` is within that test */ +predicate test_contains(ControlFlowNode expr, ControlFlowNode use) { + expr.getNode() instanceof Expr and + expr.isBranch() and + expr.getAChild*() = use +} + cached module SsaSource { /** Holds if `v` is used as the receiver in a method call. */ diff --git a/python/ql/lib/semmle/python/frameworks/Socketio.qll b/python/ql/lib/semmle/python/frameworks/Socketio.qll new file mode 100644 index 000000000000..4006dcfbe7d8 --- /dev/null +++ b/python/ql/lib/semmle/python/frameworks/Socketio.qll @@ -0,0 +1,119 @@ +/** + * Provides definitions and modeling for the `python-socketio` PyPI package. + * See https://python-socketio.readthedocs.io/en/stable/. + */ + +private import python +private import semmle.python.dataflow.new.TaintTracking +private import semmle.python.dataflow.new.RemoteFlowSources +private import semmle.python.Concepts +private import semmle.python.ApiGraphs +private import semmle.python.frameworks.internal.PoorMansFunctionResolution + +/** + * Provides models for the `python-socketio` PyPI package. + * See https://python-socketio.readthedocs.io/en/stable/. + */ +module SocketIO { + /** Provides models for socketio `Server` and `AsyncServer` classes. */ + module Server { + /** Gets an instance of a socketio `Server` or `AsyncServer`. */ + API::Node server() { + result = API::moduleImport("socketio").getMember(["Server", "AsyncServer"]).getAnInstance() + } + + /** Gets a decorator that indicates a socketio event handler. */ + private API::Node serverEventAnnotation() { + result = server().getMember("event") + or + result = server().getMember("on").getReturn() + } + + private class EventHandler extends Http::Server::RequestHandler::Range { + EventHandler() { + serverEventAnnotation().getAValueReachableFromSource().asExpr() = this.getADecorator() + or + exists(DataFlow::CallCfgNode c, DataFlow::Node arg | + c = server().getMember("on").getACall() + | + ( + arg = c.getArg(1) + or + arg = c.getArgByName("handler") + ) and + poorMansFunctionTracker(this) = arg + ) + } + + override Parameter getARoutedParameter() { + result = this.getAnArg() and + not result = this.getArg(0) // First parameter is `sid`, which is not a remote flow source as it cannot be controlled by the client. + } + + override string getFramework() { result = "socketio" } + } + + private class CallbackArgument extends DataFlow::Node { + CallbackArgument() { + exists(DataFlow::CallCfgNode c | + c = [server(), Namespace::instance()].getMember(["emit", "send"]).getACall() + | + this = c.getArgByName("callback") + ) + } + } + + private class CallbackHandler extends Http::Server::RequestHandler::Range { + CallbackHandler() { any(CallbackArgument ca) = poorMansFunctionTracker(this) } + + override Parameter getARoutedParameter() { result = this.getAnArg() } + + override string getFramework() { result = "socketio" } + } + + private class SocketIOCall extends RemoteFlowSource::Range { + SocketIOCall() { this = [server(), Namespace::instance()].getMember("call").getACall() } + + override string getSourceType() { result = "socketio call" } + } + } + + /** Provides modeling for socketio server Namespace/AsyncNamespace classes. */ + module Namespace { + /** Gets a reference to the `socketio.Namespace` or `socketio.AsyncNamespace` classes or any subclass. */ + API::Node subclassRef() { + result = + API::moduleImport("socketio").getMember(["Namespace", "AsyncNamespace"]).getASubclass*() + } + + /** Gets a reference to an instance of a subclass of `socketio.Namespace` or `socketio.AsyncNamespace`. */ + API::Node instance() { + result = subclassRef().getAnInstance() + or + result = subclassRef().getAMember().getSelfParameter() + } + + /** A socketio Namespace class. */ + class NamespaceClass extends Class { + NamespaceClass() { this.getABase() = subclassRef().asSource().asExpr() } + + /** Gets a handler for socketio events. */ + Function getAnEventHandler() { + result = this.getAMethod() and + result.getName().matches("on_%") + } + } + + private class NamespaceEventHandler extends Http::Server::RequestHandler::Range { + NamespaceEventHandler() { this = any(NamespaceClass nc).getAnEventHandler() } + + override Parameter getARoutedParameter() { + result = this.getAnArg() and + not result = this.getArg(0) and + not result = this.getArg(1) // First 2 parameters are `self` and `sid`. + } + + override string getFramework() { result = "socketio" } + } + } +} diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.model.yml b/python/ql/lib/semmle/python/frameworks/Stdlib.model.yml index cdbb451b673b..a01bf1b40ba6 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.model.yml +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.model.yml @@ -142,6 +142,8 @@ extensions: - ["typing", "Member[cast]", "Argument[1,val:]", "ReturnValue", "value"] # See https://docs.python.org/3/library/urllib.parse.html#urllib.parse.parse_qs - ["urllib", "Member[parse].Member[parse_qs]", "Argument[0,qs:]", "ReturnValue", "taint"] + # See https://docs.python.org/3/library/urllib.parse.html#urllib.parse.urlparse + - ["urllib", "Member[parse].Member[urlparse]", "Argument[0,urlstring:]", "ReturnValue", "taint"] # See https://docs.python.org/3/library/urllib.parse.html#urllib.parse.quote - ["urllib", "Member[parse].Member[quote]", "Argument[0,string:]", "ReturnValue", "taint"] # See https://docs.python.org/3/library/urllib.parse.html#urllib.parse.quote_plus @@ -181,7 +183,9 @@ extensions: - addsTo: pack: codeql/python-all extensible: typeModel - data: [] + data: + # See https://docs.python.org/3/library/urllib.parse.html#urllib.parse.urlparse + - ["urllib.parse.ParseResult~Subclass", 'urllib', 'Member[parse].Member[urlparse]'] - addsTo: pack: codeql/python-all diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index c6b671e8b781..143a575c6e9c 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -245,6 +245,67 @@ module Stdlib { } } + /** + * Provides models for the `urllib.parse.ParseResult` class + * + * See https://docs.python.org/3.9/library/urllib.parse.html#urllib.parse.ParseResult. + */ + module ParseResult { + /** Gets a reference to the `urllib.parse.ParseResult` class. */ + API::Node classRef() { + result = API::moduleImport("urllib").getMember("parse").getMember("ParseResult") + or + result = ModelOutput::getATypeNode("urllib.parse.ParseResult~Subclass").getASubclass*() + } + + /** + * A source of instances of `urllib.parse.ParseResult`, extend this class to model new instances. + * + * This can include instantiations of the class, return values from function + * calls, or a special parameter that will be set when functions are called by an external + * library. + * + * Use the predicate `ParseResult::instance()` to get references to instances of `urllib.parse.ParseResult`. + */ + abstract class InstanceSource extends DataFlow::LocalSourceNode { } + + /** A direct instantiation of `urllib.parse.ParseResult`. */ + private class ClassInstantiation extends InstanceSource, DataFlow::CallCfgNode { + ClassInstantiation() { this = classRef().getACall() } + } + + /** Gets a reference to an instance of `urllib.parse.ParseResult`. */ + private DataFlow::TypeTrackingNode instance(DataFlow::TypeTracker t) { + t.start() and + result instanceof InstanceSource + or + exists(DataFlow::TypeTracker t2 | result = instance(t2).track(t2, t)) + } + + /** Gets a reference to an instance of `urllib.parse.ParseResult`. */ + DataFlow::Node instance() { instance(DataFlow::TypeTracker::end()).flowsTo(result) } + + /** + * Taint propagation for `urllib.parse.ParseResult`. + */ + private class InstanceTaintSteps extends InstanceTaintStepsHelper { + InstanceTaintSteps() { this = "urllib.parse.ParseResult" } + + override DataFlow::Node getInstance() { result = instance() } + + override string getAttributeName() { + result in [ + "netloc", "path", "params", "query", "fragment", "username", "password", "hostname", + "port" + ] + } + + override string getMethodName() { none() } + + override string getAsyncMethodName() { none() } + } + } + // --------------------------------------------------------------------------- // logging // --------------------------------------------------------------------------- diff --git a/python/ql/lib/semmle/python/frameworks/Tornado.qll b/python/ql/lib/semmle/python/frameworks/Tornado.qll index 7cfe381b1f98..61cf7df316e7 100644 --- a/python/ql/lib/semmle/python/frameworks/Tornado.qll +++ b/python/ql/lib/semmle/python/frameworks/Tornado.qll @@ -135,6 +135,8 @@ module Tornado { API::Node subclassRef() { result = web().getMember("RequestHandler").getASubclass*() or + result = WebSocket::WebSocketHandler::subclassRef() + or result = ModelOutput::getATypeNode("tornado.web.RequestHandler~Subclass").getASubclass*() } @@ -428,6 +430,49 @@ module Tornado { } } } + + // --------------------------------------------------------------------------- + // tornado.websocket + // --------------------------------------------------------------------------- + /** Gets a reference to the `tornado.websocket` module. */ + API::Node websocket() { result = Tornado::tornado().getMember("websocket") } + + /** Provides models for the `tornado.websocket` module */ + module WebSocket { + /** + * Provides models for the `tornado.websocket.WebSocketHandler` class and subclasses. + * + * See https://www.tornadoweb.org/en/stable/websocket.html#tornado.websocket.WebSocketHandler. + */ + module WebSocketHandler { + /** Gets a reference to the `tornado.websocket.WebSocketHandler` class or any subclass. */ + API::Node subclassRef() { + result = websocket().getMember("WebSocketHandler").getASubclass*() + or + result = + ModelOutput::getATypeNode("tornado.websocket.WebSocketHandler~Subclass").getASubclass*() + } + + /** A subclass of `tornado.websocket.WebSocketHandler`. */ + class WebSocketHandlerClass extends Web::RequestHandler::RequestHandlerClass { + WebSocketHandlerClass() { this.getParent() = subclassRef().asSource().asExpr() } + + override Function getARequestHandler() { + result = super.getARequestHandler() + or + result = this.getAMethod() and + result.getName() = "open" + } + + /** Gets a function that could handle incoming WebSocket events, if any. */ + Function getAWebSocketEventHandler() { + result = this.getAMethod() and + result.getName() = + ["on_message", "on_close", "on_ping", "on_pong", "select_subprotocol", "check_origin"] + } + } + } + } } // --------------------------------------------------------------------------- @@ -542,6 +587,27 @@ module Tornado { override string getFramework() { result = "Tornado" } } + /** A request handler for WebSocket events. */ + private class TornadoWebSocketEventHandler extends Http::Server::RequestHandler::Range { + TornadoWebSocketEventHandler() { + exists(TornadoModule::WebSocket::WebSocketHandler::WebSocketHandlerClass cls | + cls.getAWebSocketEventHandler() = this + ) + } + + override Parameter getARoutedParameter() { + // The `open` method is handled as a normal request handler in `TornadoRouteSetup` or `TornadoRequestHandlerWithoutKnownRoute`. + // For other event handlers (such as `on_message`), all parameters should be remote flow sources, as they are not affected by routing. + result in [ + this.getArg(_), this.getArgByName(_), this.getVararg().(Parameter), + this.getKwarg().(Parameter) + ] and + not result = this.getArg(0) + } + + override string getFramework() { result = "Tornado" } + } + // --------------------------------------------------------------------------- // Response modeling // --------------------------------------------------------------------------- diff --git a/python/ql/lib/semmle/python/libraries/Zope.qll b/python/ql/lib/semmle/python/libraries/Zope.qll index fea3cecf4182..defea3e47204 100644 --- a/python/ql/lib/semmle/python/libraries/Zope.qll +++ b/python/ql/lib/semmle/python/libraries/Zope.qll @@ -1,7 +1,7 @@ /** Utilities for handling the zope libraries */ import python -private import semmle.python.pointsto.PointsTo +private import LegacyPointsTo /** A method that belongs to a sub-class of `zope.interface.Interface` */ class ZopeInterfaceMethodValue extends PythonFunctionValue { diff --git a/python/ql/lib/semmle/python/objects/Constants.qll b/python/ql/lib/semmle/python/objects/Constants.qll index 31b63399ff44..49221df5b67b 100644 --- a/python/ql/lib/semmle/python/objects/Constants.qll +++ b/python/ql/lib/semmle/python/objects/Constants.qll @@ -5,6 +5,7 @@ private import semmle.python.pointsto.PointsTo private import semmle.python.pointsto.MRO private import semmle.python.pointsto.PointsToContext private import semmle.python.types.Builtins +private import semmle.python.objects.ObjectAPI /** * A constant. diff --git a/python/ql/lib/semmle/python/objects/Descriptors.qll b/python/ql/lib/semmle/python/objects/Descriptors.qll index 2c18708e16a8..5cb855ee5cac 100644 --- a/python/ql/lib/semmle/python/objects/Descriptors.qll +++ b/python/ql/lib/semmle/python/objects/Descriptors.qll @@ -5,6 +5,7 @@ private import semmle.python.pointsto.PointsTo private import semmle.python.pointsto.PointsToContext private import semmle.python.pointsto.MRO private import semmle.python.types.Builtins +private import semmle.python.pointsto.Context /** A property object. */ class PropertyInternal extends ObjectInternal, TProperty { diff --git a/python/ql/lib/semmle/python/objects/Instances.qll b/python/ql/lib/semmle/python/objects/Instances.qll index 0b4187b69283..2ae00502902c 100644 --- a/python/ql/lib/semmle/python/objects/Instances.qll +++ b/python/ql/lib/semmle/python/objects/Instances.qll @@ -5,6 +5,8 @@ private import semmle.python.pointsto.PointsTo private import semmle.python.pointsto.MRO private import semmle.python.pointsto.PointsToContext private import semmle.python.types.Builtins +private import semmle.python.pointsto.Context +private import semmle.python.pointsto.Base /** A class representing instances */ abstract class InstanceObject extends ObjectInternal { diff --git a/python/ql/lib/semmle/python/objects/Modules.qll b/python/ql/lib/semmle/python/objects/Modules.qll index e523ad0b70a6..8c5653fa2a3e 100644 --- a/python/ql/lib/semmle/python/objects/Modules.qll +++ b/python/ql/lib/semmle/python/objects/Modules.qll @@ -5,6 +5,7 @@ private import semmle.python.pointsto.PointsTo private import semmle.python.pointsto.MRO private import semmle.python.pointsto.PointsToContext private import semmle.python.types.Builtins +private import semmle.python.types.ImportTime /** A class representing modules */ abstract class ModuleObjectInternal extends ObjectInternal { diff --git a/python/ql/lib/semmle/python/objects/ObjectAPI.qll b/python/ql/lib/semmle/python/objects/ObjectAPI.qll index 45247c5d9d44..a5d4d91cc7ab 100644 --- a/python/ql/lib/semmle/python/objects/ObjectAPI.qll +++ b/python/ql/lib/semmle/python/objects/ObjectAPI.qll @@ -6,9 +6,6 @@ import python private import LegacyPointsTo private import TObject -private import semmle.python.objects.ObjectInternal -private import semmle.python.pointsto.PointsTo -private import semmle.python.pointsto.PointsToContext private import semmle.python.pointsto.MRO private import semmle.python.types.Builtins diff --git a/python/ql/lib/semmle/python/objects/TObject.qll b/python/ql/lib/semmle/python/objects/TObject.qll index 12b4dc901c39..c041827ff5a9 100644 --- a/python/ql/lib/semmle/python/objects/TObject.qll +++ b/python/ql/lib/semmle/python/objects/TObject.qll @@ -6,6 +6,7 @@ private import semmle.python.objects.ObjectInternal private import semmle.python.pointsto.PointsTo private import semmle.python.pointsto.PointsToContext private import semmle.python.internal.CachedStages +private import semmle.python.pointsto.Context /** * Internal type backing `ObjectInternal` and `Value` diff --git a/python/ql/lib/semmle/python/pointsto/Base.qll b/python/ql/lib/semmle/python/pointsto/Base.qll index 56dc633eb9c8..bf159c4b559d 100644 --- a/python/ql/lib/semmle/python/pointsto/Base.qll +++ b/python/ql/lib/semmle/python/pointsto/Base.qll @@ -12,6 +12,8 @@ import python import semmle.python.essa.SsaDefinitions private import semmle.python.types.Builtins private import semmle.python.internal.CachedStages +private import semmle.python.types.Object +private import semmle.python.types.ClassObject /* * The following predicates exist in order to provide @@ -42,24 +44,6 @@ private predicate class_defines_name(Class cls, string name) { exists(SsaVariable var | name = var.getId() and var.getAUse() = cls.getANormalExit()) } -/** Hold if `expr` is a test (a branch) and `use` is within that test */ -predicate test_contains(ControlFlowNode expr, ControlFlowNode use) { - expr.getNode() instanceof Expr and - expr.isBranch() and - expr.getAChild*() = use -} - -/** Holds if `f` is an import of the form `from .[...] import ...` and the enclosing scope is an __init__ module */ -predicate import_from_dot_in_init(ImportExprNode f) { - f.getScope() = any(Module m).getInitModule() and - ( - f.getNode().getLevel() = 1 and - not exists(f.getNode().getName()) - or - f.getNode().getImportedModuleName() = f.getEnclosingModule().getPackage().getName() - ) -} - /** Gets the pseudo-object representing the value referred to by an undefined variable */ Object undefinedVariable() { py_special_objects(result, "_semmle_undefined_value") } diff --git a/python/ql/lib/semmle/python/pointsto/CallGraph.qll b/python/ql/lib/semmle/python/pointsto/CallGraph.qll index da2254395886..734a55402541 100644 --- a/python/ql/lib/semmle/python/pointsto/CallGraph.qll +++ b/python/ql/lib/semmle/python/pointsto/CallGraph.qll @@ -11,6 +11,8 @@ import python private import semmle.python.pointsto.PointsToContext +private import semmle.python.types.FunctionObject +private import semmle.python.pointsto.Context private newtype TTInvocation = TInvocation(FunctionObject f, Context c) { diff --git a/python/ql/lib/semmle/python/pointsto/PointsTo.qll b/python/ql/lib/semmle/python/pointsto/PointsTo.qll index 56e8f6d6a63e..66b82367de0f 100644 --- a/python/ql/lib/semmle/python/pointsto/PointsTo.qll +++ b/python/ql/lib/semmle/python/pointsto/PointsTo.qll @@ -6,7 +6,13 @@ private import semmle.python.pointsto.PointsToContext private import semmle.python.pointsto.MRO private import semmle.python.types.Builtins private import semmle.python.types.Extensions +private import semmle.python.pointsto.Context private import semmle.python.internal.CachedStages +private import semmle.python.types.Object +private import semmle.python.types.FunctionObject +private import semmle.python.types.ClassObject +private import semmle.python.pointsto.Base +private import semmle.python.types.ImportTime /* Use this version for speed */ class CfgOrigin extends @py_object { diff --git a/python/ql/lib/semmle/python/pointsto/PointsToContext.qll b/python/ql/lib/semmle/python/pointsto/PointsToContext.qll index d68ce93e5761..fb005b8f0466 100644 --- a/python/ql/lib/semmle/python/pointsto/PointsToContext.qll +++ b/python/ql/lib/semmle/python/pointsto/PointsToContext.qll @@ -1,6 +1,8 @@ import python private import semmle.python.pointsto.PointsTo private import semmle.python.objects.ObjectInternal +private import semmle.python.types.ImportTime +private import semmle.python.types.Version /* * A note on 'cost'. Cost doesn't represent the cost to compute, diff --git a/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryQuery.qll b/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryQuery.qll index e60afa470eca..304e6376d2c0 100644 --- a/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryQuery.qll +++ b/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryQuery.qll @@ -50,7 +50,7 @@ module FullServerSideRequestForgeryFlow = TaintTracking::Global 0 and type.getBaseType(i) = base and result = type.getBaseType(i - 1)) diff --git a/python/ql/src/Classes/MaybeUndefinedClassAttribute.ql b/python/ql/src/Classes/MaybeUndefinedClassAttribute.ql index 9818aaece3cd..6c4138f4f57d 100644 --- a/python/ql/src/Classes/MaybeUndefinedClassAttribute.ql +++ b/python/ql/src/Classes/MaybeUndefinedClassAttribute.ql @@ -12,6 +12,7 @@ import python import ClassAttributes +private import LegacyPointsTo predicate guarded_by_other_attribute(SelfAttributeRead a, CheckClass c) { c.sometimesDefines(a.getName()) and diff --git a/python/ql/src/Classes/MutatingDescriptor.ql b/python/ql/src/Classes/MutatingDescriptor.ql index afcbcc35bf21..b597de92d2e5 100644 --- a/python/ql/src/Classes/MutatingDescriptor.ql +++ b/python/ql/src/Classes/MutatingDescriptor.ql @@ -12,6 +12,7 @@ */ import python +private import LegacyPointsTo predicate mutates_descriptor(ClassObject cls, SelfAttributeStore s) { cls.isDescriptorType() and diff --git a/python/ql/src/Classes/OverwritingAttributeInSuperClass.ql b/python/ql/src/Classes/OverwritingAttributeInSuperClass.ql index 699e4387a144..89d33d548146 100644 --- a/python/ql/src/Classes/OverwritingAttributeInSuperClass.ql +++ b/python/ql/src/Classes/OverwritingAttributeInSuperClass.ql @@ -12,6 +12,7 @@ */ import python +private import LegacyPointsTo class InitCallStmt extends ExprStmt { InitCallStmt() { diff --git a/python/ql/src/Classes/PropertyInOldStyleClass.ql b/python/ql/src/Classes/PropertyInOldStyleClass.ql index 6e1b9a063c04..2fd7b1d14cf2 100644 --- a/python/ql/src/Classes/PropertyInOldStyleClass.ql +++ b/python/ql/src/Classes/PropertyInOldStyleClass.ql @@ -11,6 +11,7 @@ */ import python +private import LegacyPointsTo from PropertyObject prop, ClassObject cls where cls.declaredAttribute(_) = prop and not cls.failedInference() and not cls.isNewStyle() diff --git a/python/ql/src/Classes/ShouldBeContextManager.ql b/python/ql/src/Classes/ShouldBeContextManager.ql index 2423206e3cfc..6aec0f0e0ab0 100644 --- a/python/ql/src/Classes/ShouldBeContextManager.ql +++ b/python/ql/src/Classes/ShouldBeContextManager.ql @@ -14,6 +14,7 @@ */ import python +private import LegacyPointsTo from ClassValue c where not c.isBuiltin() and not c.isContextManager() and exists(c.declaredAttribute("__del__")) diff --git a/python/ql/src/Classes/SlotsInOldStyleClass.ql b/python/ql/src/Classes/SlotsInOldStyleClass.ql index bb229edc8d31..2f91a88cf64e 100644 --- a/python/ql/src/Classes/SlotsInOldStyleClass.ql +++ b/python/ql/src/Classes/SlotsInOldStyleClass.ql @@ -12,6 +12,7 @@ */ import python +private import LegacyPointsTo from ClassObject c where not c.isNewStyle() and c.declaresAttribute("__slots__") and not c.failedInference() diff --git a/python/ql/src/Classes/SuperInOldStyleClass.ql b/python/ql/src/Classes/SuperInOldStyleClass.ql index deba0889449e..a6a272b1b3b7 100644 --- a/python/ql/src/Classes/SuperInOldStyleClass.ql +++ b/python/ql/src/Classes/SuperInOldStyleClass.ql @@ -11,6 +11,7 @@ */ import python +private import LegacyPointsTo predicate uses_of_super_in_old_style_class(Call s) { exists(Function f, ClassObject c | diff --git a/python/ql/src/Classes/UndefinedClassAttribute.ql b/python/ql/src/Classes/UndefinedClassAttribute.ql index 748c46818208..38dcb9b4a7d7 100644 --- a/python/ql/src/Classes/UndefinedClassAttribute.ql +++ b/python/ql/src/Classes/UndefinedClassAttribute.ql @@ -12,6 +12,7 @@ import python import ClassAttributes +private import LegacyPointsTo predicate undefined_class_attribute(SelfAttributeRead a, CheckClass c, int line, string name) { name = a.getName() and diff --git a/python/ql/src/Classes/UselessClass.ql b/python/ql/src/Classes/UselessClass.ql index 7e33660dafc4..740c74bf96d9 100644 --- a/python/ql/src/Classes/UselessClass.ql +++ b/python/ql/src/Classes/UselessClass.ql @@ -13,6 +13,7 @@ */ import python +private import LegacyPointsTo predicate fewer_than_two_public_methods(Class cls, int methods) { (methods = 0 or methods = 1) and diff --git a/python/ql/src/Classes/WrongNameForArgumentInClassInstantiation.ql b/python/ql/src/Classes/WrongNameForArgumentInClassInstantiation.ql index 1de99ebdbf61..5b50855dcdf7 100644 --- a/python/ql/src/Classes/WrongNameForArgumentInClassInstantiation.ql +++ b/python/ql/src/Classes/WrongNameForArgumentInClassInstantiation.ql @@ -16,6 +16,7 @@ import python import Expressions.CallArgs +private import LegacyPointsTo from Call call, ClassValue cls, string name, FunctionValue init where diff --git a/python/ql/src/Classes/WrongNumberArgumentsInClassInstantiation.ql b/python/ql/src/Classes/WrongNumberArgumentsInClassInstantiation.ql index 8518905f3a90..263a1a336a1a 100644 --- a/python/ql/src/Classes/WrongNumberArgumentsInClassInstantiation.ql +++ b/python/ql/src/Classes/WrongNumberArgumentsInClassInstantiation.ql @@ -15,6 +15,7 @@ import python import Expressions.CallArgs +private import LegacyPointsTo from Call call, ClassValue cls, string too, string should, int limit, FunctionValue init where diff --git a/python/ql/src/Exceptions/IllegalExceptionHandlerType.ql b/python/ql/src/Exceptions/IllegalExceptionHandlerType.ql index 2bf97b469ee0..dc1c3f2fa359 100644 --- a/python/ql/src/Exceptions/IllegalExceptionHandlerType.ql +++ b/python/ql/src/Exceptions/IllegalExceptionHandlerType.ql @@ -12,8 +12,9 @@ */ import python +private import LegacyPointsTo -from ExceptFlowNode ex, Value t, ClassValue c, ControlFlowNode origin, string what +from ExceptFlowNodeWithPointsTo ex, Value t, ClassValue c, ControlFlowNode origin, string what where ex.handledException(t, c, origin) and ( diff --git a/python/ql/src/Exceptions/IllegalRaise.ql b/python/ql/src/Exceptions/IllegalRaise.ql index 04319e246ed1..f9f263552b18 100644 --- a/python/ql/src/Exceptions/IllegalRaise.ql +++ b/python/ql/src/Exceptions/IllegalRaise.ql @@ -14,6 +14,7 @@ import python import Raising import Exceptions.NotImplemented +private import LegacyPointsTo from Raise r, ClassValue t where diff --git a/python/ql/src/Expressions/ContainsNonContainer.ql b/python/ql/src/Expressions/ContainsNonContainer.ql index fd2123dd436e..de8c38795675 100644 --- a/python/ql/src/Expressions/ContainsNonContainer.ql +++ b/python/ql/src/Expressions/ContainsNonContainer.ql @@ -13,7 +13,6 @@ import python private import LegacyPointsTo -import semmle.python.pointsto.PointsTo predicate rhs_in_expr(ControlFlowNode rhs, Compare cmp) { exists(Cmpop op, int i | cmp.getOp(i) = op and cmp.getComparator(i) = rhs.getNode() | diff --git a/python/ql/src/Expressions/IsComparisons.qll b/python/ql/src/Expressions/IsComparisons.qll index 1ed4534bd234..cb052ceca765 100644 --- a/python/ql/src/Expressions/IsComparisons.qll +++ b/python/ql/src/Expressions/IsComparisons.qll @@ -2,7 +2,6 @@ import python private import LegacyPointsTo -private import semmle.python.objects.ObjectInternal /** Holds if the comparison `comp` uses `is` or `is not` (represented as `op`) to compare its `left` and `right` arguments. */ predicate comparison_using_is(Compare comp, ControlFlowNode left, Cmpop op, ControlFlowNode right) { diff --git a/python/ql/src/Expressions/NonPortableComparisonUsingIs.ql b/python/ql/src/Expressions/NonPortableComparisonUsingIs.ql index 894cc78c8f44..d705bea07658 100644 --- a/python/ql/src/Expressions/NonPortableComparisonUsingIs.ql +++ b/python/ql/src/Expressions/NonPortableComparisonUsingIs.ql @@ -13,6 +13,7 @@ import python import IsComparisons +private import LegacyPointsTo from Compare comp, Cmpop op, ClassValue c where diff --git a/python/ql/src/Expressions/RedundantComparison.qll b/python/ql/src/Expressions/RedundantComparison.qll index a0d4f906501a..dc40a89c784f 100644 --- a/python/ql/src/Expressions/RedundantComparison.qll +++ b/python/ql/src/Expressions/RedundantComparison.qll @@ -1,6 +1,7 @@ /** Helper functions for queries that test redundant comparisons. */ import python +private import LegacyPointsTo /** A comparison where the left and right hand sides appear to be identical. */ class RedundantComparison extends Compare { diff --git a/python/ql/src/Expressions/WrongNameForArgumentInCall.ql b/python/ql/src/Expressions/WrongNameForArgumentInCall.ql index 21403c51c610..f267df13e19a 100644 --- a/python/ql/src/Expressions/WrongNameForArgumentInCall.ql +++ b/python/ql/src/Expressions/WrongNameForArgumentInCall.ql @@ -16,6 +16,7 @@ import python import Expressions.CallArgs +private import LegacyPointsTo from Call call, FunctionObject func, string name where diff --git a/python/ql/src/Expressions/WrongNumberArgumentsForFormat.ql b/python/ql/src/Expressions/WrongNumberArgumentsForFormat.ql index d7b27e5c3d75..cf741d4cf64e 100644 --- a/python/ql/src/Expressions/WrongNumberArgumentsForFormat.ql +++ b/python/ql/src/Expressions/WrongNumberArgumentsForFormat.ql @@ -15,7 +15,6 @@ import python import LegacyPointsTo -import semmle.python.objects.ObjectInternal import semmle.python.strings predicate string_format(BinaryExpr operation, StringLiteral str, Value args, AstNode origin) { diff --git a/python/ql/src/Expressions/WrongNumberArgumentsInCall.ql b/python/ql/src/Expressions/WrongNumberArgumentsInCall.ql index bde54558c9bd..35d9341fb050 100644 --- a/python/ql/src/Expressions/WrongNumberArgumentsInCall.ql +++ b/python/ql/src/Expressions/WrongNumberArgumentsInCall.ql @@ -13,6 +13,7 @@ */ import python +private import LegacyPointsTo import CallArgs from Call call, FunctionValue func, string too, string should, int limit diff --git a/python/ql/src/Functions/ConsistentReturns.ql b/python/ql/src/Functions/ConsistentReturns.ql index 1bc7b5724b36..9beeafc63723 100644 --- a/python/ql/src/Functions/ConsistentReturns.ql +++ b/python/ql/src/Functions/ConsistentReturns.ql @@ -12,6 +12,7 @@ */ import python +private import LegacyPointsTo predicate explicitly_returns_non_none(Function func) { exists(Return return | @@ -21,7 +22,7 @@ predicate explicitly_returns_non_none(Function func) { } predicate has_implicit_return(Function func) { - exists(ControlFlowNode fallthru | + exists(ControlFlowNodeWithPointsTo fallthru | fallthru = func.getFallthroughNode() and not fallthru.unlikelyReachable() ) or diff --git a/python/ql/src/Functions/DeprecatedSliceMethod.ql b/python/ql/src/Functions/DeprecatedSliceMethod.ql index af596f704cd9..3e9cdb681d9a 100644 --- a/python/ql/src/Functions/DeprecatedSliceMethod.ql +++ b/python/ql/src/Functions/DeprecatedSliceMethod.ql @@ -10,6 +10,7 @@ */ import python +private import LegacyPointsTo predicate slice_method_name(string name) { name = "__getslice__" or name = "__setslice__" or name = "__delslice__" diff --git a/python/ql/src/Functions/IncorrectlyOverriddenMethod.ql b/python/ql/src/Functions/IncorrectlyOverriddenMethod.ql index a4e3bd6e0ce4..0a640d462397 100644 --- a/python/ql/src/Functions/IncorrectlyOverriddenMethod.ql +++ b/python/ql/src/Functions/IncorrectlyOverriddenMethod.ql @@ -14,6 +14,7 @@ import python import Expressions.CallArgs +private import LegacyPointsTo from Call call, FunctionValue func, FunctionValue overridden, string problem where diff --git a/python/ql/src/Functions/IncorrectlySpecifiedOverriddenMethod.ql b/python/ql/src/Functions/IncorrectlySpecifiedOverriddenMethod.ql index 6b31795d94ea..18cbddaff318 100644 --- a/python/ql/src/Functions/IncorrectlySpecifiedOverriddenMethod.ql +++ b/python/ql/src/Functions/IncorrectlySpecifiedOverriddenMethod.ql @@ -14,6 +14,7 @@ import python import Expressions.CallArgs +private import LegacyPointsTo from Call call, FunctionValue func, FunctionValue overriding, string problem where diff --git a/python/ql/src/Functions/IterReturnsNonIterator.ql b/python/ql/src/Functions/IterReturnsNonIterator.ql index 367332cf49a7..082347263147 100644 --- a/python/ql/src/Functions/IterReturnsNonIterator.ql +++ b/python/ql/src/Functions/IterReturnsNonIterator.ql @@ -12,6 +12,7 @@ */ import python +private import LegacyPointsTo from ClassValue iterable, FunctionValue iter, ClassValue iterator where diff --git a/python/ql/src/Functions/OverlyComplexDelMethod.ql b/python/ql/src/Functions/OverlyComplexDelMethod.ql index b93dc4af3c34..12776db1b60f 100644 --- a/python/ql/src/Functions/OverlyComplexDelMethod.ql +++ b/python/ql/src/Functions/OverlyComplexDelMethod.ql @@ -12,11 +12,12 @@ */ import python +private import LegacyPointsTo from FunctionValue method where exists(ClassValue c | c.declaredAttribute("__del__") = method and - method.getScope().getMetrics().getCyclomaticComplexity() > 3 + method.getScope().(FunctionMetrics).getCyclomaticComplexity() > 3 ) select method, "Overly complex '__del__' method." diff --git a/python/ql/src/Functions/ReturnValueIgnored.ql b/python/ql/src/Functions/ReturnValueIgnored.ql index d8f81534b8ad..3716b989d891 100644 --- a/python/ql/src/Functions/ReturnValueIgnored.ql +++ b/python/ql/src/Functions/ReturnValueIgnored.ql @@ -14,7 +14,7 @@ */ import python -import semmle.python.objects.Callables +private import LegacyPointsTo predicate meaningful_return_value(Expr val) { val instanceof Name diff --git a/python/ql/src/Imports/Cyclic.qll b/python/ql/src/Imports/Cyclic.qll index 720ea8f00481..ad24a08eddd3 100644 --- a/python/ql/src/Imports/Cyclic.qll +++ b/python/ql/src/Imports/Cyclic.qll @@ -1,5 +1,6 @@ import python private import LegacyPointsTo +private import semmle.python.types.ImportTime predicate is_import_time(Stmt s) { not s.getScope+() instanceof Function } diff --git a/python/ql/src/Imports/CyclicImport.ql b/python/ql/src/Imports/CyclicImport.ql index 9e4a153a110d..464d906db980 100644 --- a/python/ql/src/Imports/CyclicImport.ql +++ b/python/ql/src/Imports/CyclicImport.ql @@ -13,6 +13,7 @@ import python import Cyclic +private import LegacyPointsTo from ModuleValue m1, ModuleValue m2, Stmt imp where diff --git a/python/ql/src/Imports/ModuleImportsItself.ql b/python/ql/src/Imports/ModuleImportsItself.ql index 72d223da3dbb..97fb68791d1a 100644 --- a/python/ql/src/Imports/ModuleImportsItself.ql +++ b/python/ql/src/Imports/ModuleImportsItself.ql @@ -12,6 +12,7 @@ */ import python +private import LegacyPointsTo predicate modules_imports_itself(ImportingStmt i, ModuleValue m) { i.getEnclosingModule() = m.getScope() and diff --git a/python/ql/src/Imports/ModuleLevelCyclicImport.ql b/python/ql/src/Imports/ModuleLevelCyclicImport.ql index 7d9b0cc31c74..7910cb76823e 100644 --- a/python/ql/src/Imports/ModuleLevelCyclicImport.ql +++ b/python/ql/src/Imports/ModuleLevelCyclicImport.ql @@ -14,6 +14,7 @@ import python import Cyclic +private import LegacyPointsTo // This is a potentially crashing bug if // 1. the imports in the whole cycle are lexically outside a def (and so executed at import time) diff --git a/python/ql/src/Imports/UnintentionalImport.ql b/python/ql/src/Imports/UnintentionalImport.ql index 1faf3bb55f3d..db1775a0d41e 100644 --- a/python/ql/src/Imports/UnintentionalImport.ql +++ b/python/ql/src/Imports/UnintentionalImport.ql @@ -13,6 +13,8 @@ */ import python +private import LegacyPointsTo +private import semmle.python.types.ImportTime predicate import_star(ImportStar imp, ModuleValue exporter) { exporter.importedAs(imp.getImportedModuleName()) diff --git a/python/ql/src/Metrics/CLinesOfCode.ql b/python/ql/src/Metrics/CLinesOfCode.ql index c7b29615593c..66a107a521ff 100644 --- a/python/ql/src/Metrics/CLinesOfCode.ql +++ b/python/ql/src/Metrics/CLinesOfCode.ql @@ -10,6 +10,7 @@ */ import python +private import LegacyPointsTo -from Function f -select f, f.getMetrics().getNumberOfLinesOfCode() as n order by n desc +from FunctionMetrics f +select f, f.getNumberOfLinesOfCode() as n order by n desc diff --git a/python/ql/src/Metrics/ClassAfferentCoupling.ql b/python/ql/src/Metrics/ClassAfferentCoupling.ql index 295e8c61a6cb..3faf714d09c9 100644 --- a/python/ql/src/Metrics/ClassAfferentCoupling.ql +++ b/python/ql/src/Metrics/ClassAfferentCoupling.ql @@ -11,6 +11,7 @@ */ import python +private import LegacyPointsTo from ClassMetrics cls select cls, cls.getAfferentCoupling() as n order by n desc diff --git a/python/ql/src/Metrics/ClassEfferentCoupling.ql b/python/ql/src/Metrics/ClassEfferentCoupling.ql index d960c0142e3e..b4c5a29696bd 100644 --- a/python/ql/src/Metrics/ClassEfferentCoupling.ql +++ b/python/ql/src/Metrics/ClassEfferentCoupling.ql @@ -11,6 +11,7 @@ */ import python +private import LegacyPointsTo from ClassMetrics cls select cls, cls.getEfferentCoupling() as n order by n desc diff --git a/python/ql/src/Metrics/CommentRatio.ql b/python/ql/src/Metrics/CommentRatio.ql index 8ebb27cf304a..38394c1bf4fd 100644 --- a/python/ql/src/Metrics/CommentRatio.ql +++ b/python/ql/src/Metrics/CommentRatio.ql @@ -12,8 +12,10 @@ */ import python +private import LegacyPointsTo -from Module m, ModuleMetrics mm -where mm = m.getMetrics() and mm.getNumberOfLines() > 0 -select m, 100.0 * (mm.getNumberOfLinesOfComments().(float) / mm.getNumberOfLines().(float)) as ratio +from ModuleMetrics mm +where mm.getNumberOfLines() > 0 +select mm, + 100.0 * (mm.getNumberOfLinesOfComments().(float) / mm.getNumberOfLines().(float)) as ratio order by ratio desc diff --git a/python/ql/src/Metrics/CyclomaticComplexity.ql b/python/ql/src/Metrics/CyclomaticComplexity.ql index 1e332f4ec9f7..3d9ca10dd99b 100644 --- a/python/ql/src/Metrics/CyclomaticComplexity.ql +++ b/python/ql/src/Metrics/CyclomaticComplexity.ql @@ -13,7 +13,8 @@ */ import python +private import LegacyPointsTo -from Function func, int complexity -where complexity = func.getMetrics().getCyclomaticComplexity() +from FunctionMetrics func, int complexity +where complexity = func.getCyclomaticComplexity() select func, complexity order by complexity desc diff --git a/python/ql/src/Metrics/Dependencies/ExternalDependenciesSourceLinks.ql b/python/ql/src/Metrics/Dependencies/ExternalDependenciesSourceLinks.ql index 98bb4e63cc37..60dbcdcc7fcb 100644 --- a/python/ql/src/Metrics/Dependencies/ExternalDependenciesSourceLinks.ql +++ b/python/ql/src/Metrics/Dependencies/ExternalDependenciesSourceLinks.ql @@ -8,6 +8,7 @@ import python import semmle.python.dependencies.TechInventory +private import LegacyPointsTo /* * This query creates the source links for the ExternalDependencies.ql query. diff --git a/python/ql/src/Metrics/DirectImports.ql b/python/ql/src/Metrics/DirectImports.ql index 240cd65e687d..e383d4b36572 100644 --- a/python/ql/src/Metrics/DirectImports.ql +++ b/python/ql/src/Metrics/DirectImports.ql @@ -11,6 +11,7 @@ */ import python +private import LegacyPointsTo from ModuleValue m, int n where n = count(ModuleValue imp | imp = m.getAnImportedModule()) diff --git a/python/ql/src/Metrics/DocStringRatio.ql b/python/ql/src/Metrics/DocStringRatio.ql index a8cd8b8dc4e0..824ff5a35093 100644 --- a/python/ql/src/Metrics/DocStringRatio.ql +++ b/python/ql/src/Metrics/DocStringRatio.ql @@ -11,9 +11,10 @@ */ import python +private import LegacyPointsTo -from Module m, ModuleMetrics mm -where mm = m.getMetrics() and mm.getNumberOfLines() > 0 -select m, +from ModuleMetrics mm +where mm.getNumberOfLines() > 0 +select mm, 100.0 * (mm.getNumberOfLinesOfDocStrings().(float) / mm.getNumberOfLines().(float)) as ratio order by ratio desc diff --git a/python/ql/src/Metrics/FLines.ql b/python/ql/src/Metrics/FLines.ql index 340fb6f58ea0..dc5418711c9c 100644 --- a/python/ql/src/Metrics/FLines.ql +++ b/python/ql/src/Metrics/FLines.ql @@ -9,7 +9,8 @@ */ import python +private import LegacyPointsTo -from Module m, int n -where n = m.getMetrics().getNumberOfLines() +from ModuleMetrics m, int n +where n = m.getNumberOfLines() select m, n order by n desc diff --git a/python/ql/src/Metrics/FLinesOfCode.ql b/python/ql/src/Metrics/FLinesOfCode.ql index 84c952f92673..8159eb86c572 100644 --- a/python/ql/src/Metrics/FLinesOfCode.ql +++ b/python/ql/src/Metrics/FLinesOfCode.ql @@ -11,7 +11,8 @@ */ import python +private import LegacyPointsTo -from Module m, int n -where n = m.getMetrics().getNumberOfLinesOfCode() +from ModuleMetrics m, int n +where n = m.getNumberOfLinesOfCode() select m, n order by n desc diff --git a/python/ql/src/Metrics/FLinesOfComments.ql b/python/ql/src/Metrics/FLinesOfComments.ql index 18a234eef671..ac4b295003a1 100644 --- a/python/ql/src/Metrics/FLinesOfComments.ql +++ b/python/ql/src/Metrics/FLinesOfComments.ql @@ -10,8 +10,8 @@ */ import python +private import LegacyPointsTo -from Module m, int n -where - n = m.getMetrics().getNumberOfLinesOfComments() + m.getMetrics().getNumberOfLinesOfDocStrings() +from ModuleMetrics m, int n +where n = m.getNumberOfLinesOfComments() + m.getNumberOfLinesOfDocStrings() select m, n order by n desc diff --git a/python/ql/src/Metrics/FunctionNumberOfCalls.ql b/python/ql/src/Metrics/FunctionNumberOfCalls.ql index fb4dfe5a9d2e..60171c790bfb 100644 --- a/python/ql/src/Metrics/FunctionNumberOfCalls.ql +++ b/python/ql/src/Metrics/FunctionNumberOfCalls.ql @@ -9,6 +9,7 @@ */ import python +private import LegacyPointsTo from FunctionMetrics func select func, func.getNumberOfCalls() as n order by n desc diff --git a/python/ql/src/Metrics/FunctionStatementNestingDepth.ql b/python/ql/src/Metrics/FunctionStatementNestingDepth.ql index ab40cc6068dd..94f7e355750e 100644 --- a/python/ql/src/Metrics/FunctionStatementNestingDepth.ql +++ b/python/ql/src/Metrics/FunctionStatementNestingDepth.ql @@ -11,6 +11,7 @@ */ import python +private import LegacyPointsTo from FunctionMetrics func select func, func.getStatementNestingDepth() as n order by n desc diff --git a/python/ql/src/Metrics/History/HChurn.ql b/python/ql/src/Metrics/History/HChurn.ql index d6a8722e6e2b..dba288436709 100644 --- a/python/ql/src/Metrics/History/HChurn.ql +++ b/python/ql/src/Metrics/History/HChurn.ql @@ -10,8 +10,9 @@ import python import external.VCS +private import LegacyPointsTo -from Module m, int n +from ModuleMetrics m, int n where n = sum(Commit entry, int churn | @@ -19,5 +20,5 @@ where | churn ) and - exists(m.getMetrics().getNumberOfLinesOfCode()) + exists(m.getNumberOfLinesOfCode()) select m, n order by n desc diff --git a/python/ql/src/Metrics/History/HLinesAdded.ql b/python/ql/src/Metrics/History/HLinesAdded.ql index 3ecec917ab14..51a0af62460b 100644 --- a/python/ql/src/Metrics/History/HLinesAdded.ql +++ b/python/ql/src/Metrics/History/HLinesAdded.ql @@ -10,8 +10,9 @@ import python import external.VCS +private import LegacyPointsTo -from Module m, int n +from ModuleMetrics m, int n where n = sum(Commit entry, int churn | @@ -19,5 +20,5 @@ where | churn ) and - exists(m.getMetrics().getNumberOfLinesOfCode()) + exists(m.getNumberOfLinesOfCode()) select m, n order by n desc diff --git a/python/ql/src/Metrics/History/HLinesDeleted.ql b/python/ql/src/Metrics/History/HLinesDeleted.ql index ded74756d556..3016c9f128b2 100644 --- a/python/ql/src/Metrics/History/HLinesDeleted.ql +++ b/python/ql/src/Metrics/History/HLinesDeleted.ql @@ -10,8 +10,9 @@ import python import external.VCS +private import LegacyPointsTo -from Module m, int n +from ModuleMetrics m, int n where n = sum(Commit entry, int churn | @@ -19,5 +20,5 @@ where | churn ) and - exists(m.getMetrics().getNumberOfLinesOfCode()) + exists(m.getNumberOfLinesOfCode()) select m, n order by n desc diff --git a/python/ql/src/Metrics/History/HNumberOfAuthors.ql b/python/ql/src/Metrics/History/HNumberOfAuthors.ql index 15e679e58c55..ff00773d98ce 100644 --- a/python/ql/src/Metrics/History/HNumberOfAuthors.ql +++ b/python/ql/src/Metrics/History/HNumberOfAuthors.ql @@ -10,7 +10,8 @@ import python import external.VCS +private import LegacyPointsTo -from Module m -where exists(m.getMetrics().getNumberOfLinesOfCode()) +from ModuleMetrics m +where exists(m.getNumberOfLinesOfCode()) select m, count(Author author | author.getAnEditedFile() = m.getFile()) diff --git a/python/ql/src/Metrics/History/HNumberOfCoCommits.ql b/python/ql/src/Metrics/History/HNumberOfCoCommits.ql index afb62353a03b..4192ecf57acd 100644 --- a/python/ql/src/Metrics/History/HNumberOfCoCommits.ql +++ b/python/ql/src/Metrics/History/HNumberOfCoCommits.ql @@ -10,11 +10,12 @@ import python import external.VCS +private import LegacyPointsTo int committedFiles(Commit commit) { result = count(commit.getAnAffectedFile()) } -from Module m -where exists(m.getMetrics().getNumberOfLinesOfCode()) +from ModuleMetrics m +where exists(m.getNumberOfLinesOfCode()) select m, avg(Commit commit, int toAvg | commit.getAnAffectedFile() = m.getFile() and toAvg = committedFiles(commit) - 1 diff --git a/python/ql/src/Metrics/History/HNumberOfReCommits.ql b/python/ql/src/Metrics/History/HNumberOfReCommits.ql index 5df9194ee348..f12c51840dc9 100644 --- a/python/ql/src/Metrics/History/HNumberOfReCommits.ql +++ b/python/ql/src/Metrics/History/HNumberOfReCommits.ql @@ -10,6 +10,7 @@ import python import external.VCS +private import LegacyPointsTo predicate inRange(Commit first, Commit second) { first.getAnAffectedFile() = second.getAnAffectedFile() and @@ -29,6 +30,6 @@ int recommitsForFile(File f) { ) } -from Module m -where exists(m.getMetrics().getNumberOfLinesOfCode()) +from ModuleMetrics m +where exists(m.getNumberOfLinesOfCode()) select m, recommitsForFile(m.getFile()) diff --git a/python/ql/src/Metrics/History/HNumberOfRecentAuthors.ql b/python/ql/src/Metrics/History/HNumberOfRecentAuthors.ql index e04baa491f4c..9b787f529576 100644 --- a/python/ql/src/Metrics/History/HNumberOfRecentAuthors.ql +++ b/python/ql/src/Metrics/History/HNumberOfRecentAuthors.ql @@ -10,9 +10,10 @@ import python import external.VCS +private import LegacyPointsTo -from Module m -where exists(m.getMetrics().getNumberOfLinesOfCode()) +from ModuleMetrics m +where exists(m.getNumberOfLinesOfCode()) select m, count(Author author | exists(Commit e | diff --git a/python/ql/src/Metrics/History/HNumberOfRecentChangedFiles.ql b/python/ql/src/Metrics/History/HNumberOfRecentChangedFiles.ql index f0d8473b3024..501094907af0 100644 --- a/python/ql/src/Metrics/History/HNumberOfRecentChangedFiles.ql +++ b/python/ql/src/Metrics/History/HNumberOfRecentChangedFiles.ql @@ -10,11 +10,12 @@ import python import external.VCS +private import LegacyPointsTo -from Module m +from ModuleMetrics m where exists(Commit e | e.getAnAffectedFile() = m.getFile() and e.daysToNow() <= 180 and not artificialChange(e) ) and - exists(m.getMetrics().getNumberOfLinesOfCode()) + exists(m.getNumberOfLinesOfCode()) select m, 1 diff --git a/python/ql/src/Metrics/LackofCohesionInMethodsCK.ql b/python/ql/src/Metrics/LackofCohesionInMethodsCK.ql index c0ef582c32b6..f06b050827cd 100644 --- a/python/ql/src/Metrics/LackofCohesionInMethodsCK.ql +++ b/python/ql/src/Metrics/LackofCohesionInMethodsCK.ql @@ -9,6 +9,7 @@ */ import python +private import LegacyPointsTo from ClassMetrics cls select cls, cls.getLackOfCohesionCK() as n order by n desc diff --git a/python/ql/src/Metrics/LackofCohesionInMethodsHM.ql b/python/ql/src/Metrics/LackofCohesionInMethodsHM.ql index 5cc77ecfb4f7..1456b76b286f 100644 --- a/python/ql/src/Metrics/LackofCohesionInMethodsHM.ql +++ b/python/ql/src/Metrics/LackofCohesionInMethodsHM.ql @@ -9,6 +9,7 @@ */ import python +private import LegacyPointsTo from ClassMetrics cls select cls, cls.getLackOfCohesionHM() as n order by n desc diff --git a/python/ql/src/Metrics/ModuleAfferentCoupling.ql b/python/ql/src/Metrics/ModuleAfferentCoupling.ql index 7bf514337855..d61cc61e4daf 100644 --- a/python/ql/src/Metrics/ModuleAfferentCoupling.ql +++ b/python/ql/src/Metrics/ModuleAfferentCoupling.ql @@ -11,6 +11,7 @@ */ import python +private import LegacyPointsTo from ModuleMetrics m select m, m.getAfferentCoupling() as n order by n desc diff --git a/python/ql/src/Metrics/ModuleEfferentCoupling.ql b/python/ql/src/Metrics/ModuleEfferentCoupling.ql index 51fdcf5423b7..bfabf4b60128 100644 --- a/python/ql/src/Metrics/ModuleEfferentCoupling.ql +++ b/python/ql/src/Metrics/ModuleEfferentCoupling.ql @@ -11,6 +11,7 @@ */ import python +private import LegacyPointsTo from ModuleMetrics m select m, m.getEfferentCoupling() as n order by n desc diff --git a/python/ql/src/Metrics/NumberOfParametersWithoutDefault.ql b/python/ql/src/Metrics/NumberOfParametersWithoutDefault.ql index 00a4c1bf0db0..e5164499331c 100644 --- a/python/ql/src/Metrics/NumberOfParametersWithoutDefault.ql +++ b/python/ql/src/Metrics/NumberOfParametersWithoutDefault.ql @@ -11,6 +11,7 @@ */ import python +private import LegacyPointsTo from FunctionMetrics func select func, func.getNumberOfParametersWithoutDefault() as n order by n desc diff --git a/python/ql/src/Metrics/TransitiveImports.ql b/python/ql/src/Metrics/TransitiveImports.ql index a46a7a163029..364840fbcb9e 100644 --- a/python/ql/src/Metrics/TransitiveImports.ql +++ b/python/ql/src/Metrics/TransitiveImports.ql @@ -11,6 +11,7 @@ */ import python +private import LegacyPointsTo from ModuleValue m, int n where n = count(ModuleValue imp | imp = m.getAnImportedModule+() and imp != m) diff --git a/python/ql/src/Security/CWE-020-ExternalAPIs/ExternalAPIs.qll b/python/ql/src/Security/CWE-020-ExternalAPIs/ExternalAPIs.qll index 34649c0fb860..9c12845a0cad 100644 --- a/python/ql/src/Security/CWE-020-ExternalAPIs/ExternalAPIs.qll +++ b/python/ql/src/Security/CWE-020-ExternalAPIs/ExternalAPIs.qll @@ -182,7 +182,7 @@ module UntrustedDataToExternalApiFlow = TaintTracking::Global 2 and + (f.getNumberOfLinesOfCode() - count(f.getADecorator())) > 2 and not exists(PythonPropertyObject p | p.getGetter().getFunction() = f or p.getSetter().getFunction() = f diff --git a/python/ql/src/Statements/RedundantAssignment.ql b/python/ql/src/Statements/RedundantAssignment.ql index 357364c41b2f..a443e199b1ce 100644 --- a/python/ql/src/Statements/RedundantAssignment.ql +++ b/python/ql/src/Statements/RedundantAssignment.ql @@ -36,7 +36,7 @@ predicate same_value(Expr left, Expr right) { } predicate maybe_defined_in_outer_scope(Name n) { - exists(SsaVariable v | v.getAUse().getNode() = n | v.maybeUndefined()) + exists(SsaVariableWithPointsTo v | v.getAUse().getNode() = n | v.maybeUndefined()) } /* diff --git a/python/ql/src/Statements/SideEffectInAssert.ql b/python/ql/src/Statements/SideEffectInAssert.ql index 92cb95d702bf..902b6c4c9c16 100644 --- a/python/ql/src/Statements/SideEffectInAssert.ql +++ b/python/ql/src/Statements/SideEffectInAssert.ql @@ -13,6 +13,7 @@ */ import python +private import LegacyPointsTo predicate func_with_side_effects(Expr e) { exists(string name | name = e.(Attribute).getName() or name = e.(Name).getId() | diff --git a/python/ql/src/Statements/TopLevelPrint.ql b/python/ql/src/Statements/TopLevelPrint.ql index 2d481421b7e8..12095f7a484d 100644 --- a/python/ql/src/Statements/TopLevelPrint.ql +++ b/python/ql/src/Statements/TopLevelPrint.ql @@ -12,6 +12,7 @@ */ import python +private import LegacyPointsTo predicate main_eq_name(If i) { exists(Name n, StringLiteral m, Compare c | diff --git a/python/ql/src/Statements/UnnecessaryDelete.ql b/python/ql/src/Statements/UnnecessaryDelete.ql index 808a3f3a0d3d..c7b80ecc66ac 100644 --- a/python/ql/src/Statements/UnnecessaryDelete.ql +++ b/python/ql/src/Statements/UnnecessaryDelete.ql @@ -13,6 +13,7 @@ */ import python +private import LegacyPointsTo predicate isInsideLoop(AstNode node) { node.getParentNode() instanceof While diff --git a/python/ql/src/Summary/LinesOfCode.ql b/python/ql/src/Summary/LinesOfCode.ql index a07a896c4ca2..04cb33a34515 100644 --- a/python/ql/src/Summary/LinesOfCode.ql +++ b/python/ql/src/Summary/LinesOfCode.ql @@ -10,5 +10,6 @@ */ import python +private import LegacyPointsTo -select sum(Module m | | m.getMetrics().getNumberOfLinesOfCode()) +select sum(ModuleMetrics m | | m.getNumberOfLinesOfCode()) diff --git a/python/ql/src/Summary/LinesOfUserCode.ql b/python/ql/src/Summary/LinesOfUserCode.ql index f6d6f25872ff..f920ebb51f41 100644 --- a/python/ql/src/Summary/LinesOfUserCode.ql +++ b/python/ql/src/Summary/LinesOfUserCode.ql @@ -14,10 +14,11 @@ import python import semmle.python.filters.GeneratedCode +private import LegacyPointsTo -select sum(Module m | +select sum(ModuleMetrics m | exists(m.getFile().getRelativePath()) and not m.getFile() instanceof GeneratedFile | - m.getMetrics().getNumberOfLinesOfCode() + m.getNumberOfLinesOfCode() ) diff --git a/python/ql/src/Variables/Undefined.qll b/python/ql/src/Variables/Undefined.qll index 58deee4dc59f..42437a81340b 100644 --- a/python/ql/src/Variables/Undefined.qll +++ b/python/ql/src/Variables/Undefined.qll @@ -1,6 +1,7 @@ import python import Loop import semmle.python.dataflow.TaintTracking +private import LegacyPointsTo /** A marker for "uninitialized". */ class Uninitialized extends TaintKind { diff --git a/python/ql/src/Variables/UndefinedGlobal.ql b/python/ql/src/Variables/UndefinedGlobal.ql index 3ea1c0d38eb6..404ac64aa5a0 100644 --- a/python/ql/src/Variables/UndefinedGlobal.ql +++ b/python/ql/src/Variables/UndefinedGlobal.ql @@ -12,9 +12,9 @@ import python private import LegacyPointsTo +private import semmle.python.types.ImportTime import Variables.MonkeyPatched import Loop -import semmle.python.pointsto.PointsTo predicate guarded_against_name_error(Name u) { exists(Try t | t.getBody().getAnItem().contains(u) | @@ -62,7 +62,7 @@ predicate undefined_use_in_function(Name u) { not u.getEnclosingModule().(ImportTimeScope).definesName(u.getId()) and not exists(ModuleValue m | m.getScope() = u.getEnclosingModule() | m.hasAttribute(u.getId())) and not globallyDefinedName(u.getId()) and - not exists(SsaVariable var | var.getAUse().getNode() = u and not var.maybeUndefined()) and + not exists(SsaVariableWithPointsTo var | var.getAUse().getNode() = u and not var.maybeUndefined()) and not guarded_against_name_error(u) and not (u.getEnclosingModule().isPackageInit() and u.getId() = "__path__") } @@ -70,7 +70,7 @@ predicate undefined_use_in_function(Name u) { predicate undefined_use_in_class_or_module(Name u) { exists(GlobalVariable v | u.uses(v)) and not u.getScope().getScope*() instanceof Function and - exists(SsaVariable var | var.getAUse().getNode() = u | var.maybeUndefined()) and + exists(SsaVariableWithPointsTo var | var.getAUse().getNode() = u | var.maybeUndefined()) and not guarded_against_name_error(u) and not exists(ModuleValue m | m.getScope() = u.getEnclosingModule() | m.hasAttribute(u.getId())) and not (u.getEnclosingModule().isPackageInit() and u.getId() = "__path__") and diff --git a/python/ql/src/Variables/UndefinedPlaceHolder.ql b/python/ql/src/Variables/UndefinedPlaceHolder.ql index b0eeeda871ac..29f9b3a1a510 100644 --- a/python/ql/src/Variables/UndefinedPlaceHolder.ql +++ b/python/ql/src/Variables/UndefinedPlaceHolder.ql @@ -13,10 +13,14 @@ import python import Variables.MonkeyPatched +private import LegacyPointsTo +private import semmle.python.types.ImportTime /* Local variable part */ predicate initialized_as_local(PlaceHolder use) { - exists(SsaVariable l, Function f | f = use.getScope() and l.getAUse() = use.getAFlowNode() | + exists(SsaVariableWithPointsTo l, Function f | + f = use.getScope() and l.getAUse() = use.getAFlowNode() + | l.getVariable() instanceof LocalVariable and not l.maybeUndefined() ) diff --git a/python/ql/src/Variables/UninitializedLocal.ql b/python/ql/src/Variables/UninitializedLocal.ql index d4d94f5a4f37..48332e01af3c 100644 --- a/python/ql/src/Variables/UninitializedLocal.ql +++ b/python/ql/src/Variables/UninitializedLocal.ql @@ -14,7 +14,6 @@ import python private import LegacyPointsTo import Undefined -import semmle.python.pointsto.PointsTo predicate uninitialized_local(NameNode use) { exists(FastLocalVariable local | use.uses(local) or use.deletes(local) | diff --git a/python/ql/src/Variables/UnusedParameter.ql b/python/ql/src/Variables/UnusedParameter.ql index 7228974b7c73..1efb984fd0bb 100644 --- a/python/ql/src/Variables/UnusedParameter.ql +++ b/python/ql/src/Variables/UnusedParameter.ql @@ -14,6 +14,7 @@ import python import Definition +private import LegacyPointsTo predicate unused_parameter(FunctionValue f, LocalVariable v) { v.isParameter() and diff --git a/python/ql/src/analysis/CallGraphEfficiency.ql b/python/ql/src/analysis/CallGraphEfficiency.ql index 5e36823b8ac7..3990b68ecc69 100644 --- a/python/ql/src/analysis/CallGraphEfficiency.ql +++ b/python/ql/src/analysis/CallGraphEfficiency.ql @@ -4,8 +4,7 @@ */ import python -import semmle.python.pointsto.PointsTo -import semmle.python.pointsto.PointsToContext +private import LegacyPointsTo from int total_facts, int total_size, int depth, float efficiency where diff --git a/python/ql/src/analysis/CallGraphMarginalEfficiency.ql b/python/ql/src/analysis/CallGraphMarginalEfficiency.ql index 394bf379eeb0..f2e931c411c4 100644 --- a/python/ql/src/analysis/CallGraphMarginalEfficiency.ql +++ b/python/ql/src/analysis/CallGraphMarginalEfficiency.ql @@ -4,8 +4,7 @@ */ import python -import semmle.python.pointsto.PointsTo -import semmle.python.pointsto.PointsToContext +private import LegacyPointsTo from int total_facts, int total_size, int depth, float efficiency where diff --git a/python/ql/src/analysis/ContextEfficiency.ql b/python/ql/src/analysis/ContextEfficiency.ql index 205091ba1e32..76ca78fc867c 100644 --- a/python/ql/src/analysis/ContextEfficiency.ql +++ b/python/ql/src/analysis/ContextEfficiency.ql @@ -4,8 +4,7 @@ */ import python -import semmle.python.pointsto.PointsTo -import semmle.python.pointsto.PointsToContext +private import LegacyPointsTo from int total_facts, int total_size, int depth, float efficiency where diff --git a/python/ql/src/analysis/ContextMarginalEfficiency.ql b/python/ql/src/analysis/ContextMarginalEfficiency.ql index 755ccad683c6..c87de8c6ebe5 100644 --- a/python/ql/src/analysis/ContextMarginalEfficiency.ql +++ b/python/ql/src/analysis/ContextMarginalEfficiency.ql @@ -4,8 +4,7 @@ */ import python -import semmle.python.pointsto.PointsTo -import semmle.python.pointsto.PointsToContext +private import LegacyPointsTo int depth(ControlFlowNode f, Object value, ClassObject cls) { exists(PointsToContext ctx | diff --git a/python/ql/src/analysis/CrossProjectDefinitions.qll b/python/ql/src/analysis/CrossProjectDefinitions.qll index 84fd8215712a..64b30f566f15 100644 --- a/python/ql/src/analysis/CrossProjectDefinitions.qll +++ b/python/ql/src/analysis/CrossProjectDefinitions.qll @@ -3,7 +3,7 @@ */ import python -import semmle.python.pointsto.PointsTo +private import LegacyPointsTo private newtype TSymbol = TModule(Module m) or diff --git a/python/ql/src/analysis/Efficiency.ql b/python/ql/src/analysis/Efficiency.ql index 37cb5c973879..d8ed85f2a2bb 100644 --- a/python/ql/src/analysis/Efficiency.ql +++ b/python/ql/src/analysis/Efficiency.ql @@ -5,8 +5,6 @@ import python private import LegacyPointsTo -import semmle.python.pointsto.PointsTo -import semmle.python.pointsto.PointsToContext predicate trivial(ControlFlowNode f) { f.getNode() instanceof Parameter diff --git a/python/ql/src/analysis/FailedInference.ql b/python/ql/src/analysis/FailedInference.ql index 192cf696fbf1..feae8fdc5ee2 100644 --- a/python/ql/src/analysis/FailedInference.ql +++ b/python/ql/src/analysis/FailedInference.ql @@ -1,5 +1,5 @@ import python -import semmle.python.pointsto.PointsTo +private import LegacyPointsTo from ClassValue cls, string reason where Types::failedInference(cls, reason) diff --git a/python/ql/src/analysis/Summary.ql b/python/ql/src/analysis/Summary.ql index 630f4e2678bf..bad5070a9efc 100644 --- a/python/ql/src/analysis/Summary.ql +++ b/python/ql/src/analysis/Summary.ql @@ -3,6 +3,7 @@ */ import python +private import LegacyPointsTo from string key, string value where diff --git a/python/ql/src/analysis/TypeHierarchyFailure.ql b/python/ql/src/analysis/TypeHierarchyFailure.ql index c4c910057436..c6ad4be98226 100644 --- a/python/ql/src/analysis/TypeHierarchyFailure.ql +++ b/python/ql/src/analysis/TypeHierarchyFailure.ql @@ -8,6 +8,7 @@ */ import python +private import LegacyPointsTo from Class cls, string reason where exists(ClassObject c | c.getPyClass() = cls | c.failedInference(reason)) diff --git a/python/ql/src/change-notes/released/1.7.3.md b/python/ql/src/change-notes/released/1.7.3.md new file mode 100644 index 000000000000..a629082e2155 --- /dev/null +++ b/python/ql/src/change-notes/released/1.7.3.md @@ -0,0 +1,3 @@ +## 1.7.3 + +No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 39bbba86c198..9f9661b1e77a 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.2 +lastReleaseVersion: 1.7.3 diff --git a/python/ql/src/meta/alerts/RemoteFlowSourcesReach.ql b/python/ql/src/meta/alerts/RemoteFlowSourcesReach.ql index 7921121fb3a6..d6d91a888d40 100644 --- a/python/ql/src/meta/alerts/RemoteFlowSourcesReach.ql +++ b/python/ql/src/meta/alerts/RemoteFlowSourcesReach.ql @@ -38,5 +38,5 @@ module RemoteFlowSourceReachConfig implements DataFlow::ConfigSig { module RemoteFlowSourceReachFlow = TaintTracking::Global; from DataFlow::Node reachable -where RemoteFlowSourceReachFlow::flow(_, reachable) +where RemoteFlowSourceReachFlow::flowTo(reachable) select reachable, prettyNode(reachable) diff --git a/python/ql/src/meta/analysis-quality/CallGraphQuality.qll b/python/ql/src/meta/analysis-quality/CallGraphQuality.qll index a8e7a3b340ae..679b39ddc8d4 100644 --- a/python/ql/src/meta/analysis-quality/CallGraphQuality.qll +++ b/python/ql/src/meta/analysis-quality/CallGraphQuality.qll @@ -5,6 +5,7 @@ import python import meta.MetaMetrics +private import LegacyPointsTo newtype TTarget = TFunction(Function func) or diff --git a/python/ql/src/meta/debug/DebugStats.ql b/python/ql/src/meta/debug/DebugStats.ql index 5ebbe9639437..03ecaae27e2a 100644 --- a/python/ql/src/meta/debug/DebugStats.ql +++ b/python/ql/src/meta/debug/DebugStats.ql @@ -1,15 +1,15 @@ import python +private import LegacyPointsTo from string msg, int cnt, int sort where sort = 0 and msg = "Lines of code in DB" and - cnt = sum(Module m | | m.getMetrics().getNumberOfLinesOfCode()) + cnt = sum(ModuleMetrics m | | m.getNumberOfLinesOfCode()) or sort = 1 and msg = "Lines of code in repo" and - cnt = - sum(Module m | exists(m.getFile().getRelativePath()) | m.getMetrics().getNumberOfLinesOfCode()) + cnt = sum(ModuleMetrics m | exists(m.getFile().getRelativePath()) | m.getNumberOfLinesOfCode()) or sort = 2 and msg = "Files" and diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 700f98fc26c8..cc3a6b257400 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.7.2 +version: 1.7.4-dev groups: - python - queries diff --git a/python/ql/test/2/extractor-tests/import_depth/test.ql b/python/ql/test/2/extractor-tests/import_depth/test.ql index ef626455fad9..4f007e99468e 100644 --- a/python/ql/test/2/extractor-tests/import_depth/test.ql +++ b/python/ql/test/2/extractor-tests/import_depth/test.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ModuleObject m /* Exclude the builtins module as it has a different name under 2 and 3. */ diff --git a/python/ql/test/2/extractor-tests/normalise/Numbers.ql b/python/ql/test/2/extractor-tests/normalise/Numbers.ql index 2a7706002799..9447141ab6af 100644 --- a/python/ql/test/2/extractor-tests/normalise/Numbers.ql +++ b/python/ql/test/2/extractor-tests/normalise/Numbers.ql @@ -7,10 +7,11 @@ */ import python +private import LegacyPointsTo from NumericObject n where - exists(IntegerLiteral i | i.getLiteralObject() = n | + exists(IntegerLiteral i | getLiteralObject(i) = n | i.getEnclosingModule().getFile().getShortName() = "test.py" ) select n.toString(), n.repr() diff --git a/python/ql/test/2/extractor-tests/object_hash/Success.ql b/python/ql/test/2/extractor-tests/object_hash/Success.ql index 9cff9ee4b73a..55e38e56b934 100644 --- a/python/ql/test/2/extractor-tests/object_hash/Success.ql +++ b/python/ql/test/2/extractor-tests/object_hash/Success.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo where exists(theSysModuleObject()) select 1 diff --git a/python/ql/test/2/library-tests/ControlFlow/Exceptions/Handles.ql b/python/ql/test/2/library-tests/ControlFlow/Exceptions/Handles.ql index 620944de5b90..a8bc92db3317 100644 --- a/python/ql/test/2/library-tests/ControlFlow/Exceptions/Handles.ql +++ b/python/ql/test/2/library-tests/ControlFlow/Exceptions/Handles.ql @@ -1,5 +1,6 @@ import python +private import LegacyPointsTo -from ExceptFlowNode ex, Value val +from ExceptFlowNodeWithPointsTo ex, Value val where ex.handledException(val, _, _) select ex.getLocation().getStartLine(), ex.toString(), val.toString() diff --git a/python/ql/test/2/library-tests/ControlFlow/Exceptions/Known.ql b/python/ql/test/2/library-tests/ControlFlow/Exceptions/Known.ql index 56498054f51a..b773a172ee3d 100644 --- a/python/ql/test/2/library-tests/ControlFlow/Exceptions/Known.ql +++ b/python/ql/test/2/library-tests/ControlFlow/Exceptions/Known.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from RaisingNode r select r.getLocation().getStartLine(), r.toString(), r.getARaisedType().toString() diff --git a/python/ql/test/2/library-tests/ControlFlow/Exceptions/Likely.ql b/python/ql/test/2/library-tests/ControlFlow/Exceptions/Likely.ql index f8e4a4b7dacd..00cf5a7d2afc 100644 --- a/python/ql/test/2/library-tests/ControlFlow/Exceptions/Likely.ql +++ b/python/ql/test/2/library-tests/ControlFlow/Exceptions/Likely.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ControlFlowNode r, ControlFlowNode s where diff --git a/python/ql/test/2/library-tests/ControlFlow/Exceptions/Unknown.ql b/python/ql/test/2/library-tests/ControlFlow/Exceptions/Unknown.ql index 29bad86bf0f7..fe0fa6b01586 100644 --- a/python/ql/test/2/library-tests/ControlFlow/Exceptions/Unknown.ql +++ b/python/ql/test/2/library-tests/ControlFlow/Exceptions/Unknown.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from RaisingNode r where r.raisesUnknownType() diff --git a/python/ql/test/2/library-tests/PointsTo/import_time/Pruned.ql b/python/ql/test/2/library-tests/PointsTo/import_time/Pruned.ql index e77849860c7c..ba8df441caf4 100644 --- a/python/ql/test/2/library-tests/PointsTo/import_time/Pruned.ql +++ b/python/ql/test/2/library-tests/PointsTo/import_time/Pruned.ql @@ -1,6 +1,5 @@ import python -import semmle.python.pointsto.PointsTo -import semmle.python.pointsto.PointsToContext +private import LegacyPointsTo from ControlFlowNode f, Location l, Context c where diff --git a/python/ql/test/2/library-tests/PointsTo/metaclass/test.ql b/python/ql/test/2/library-tests/PointsTo/metaclass/test.ql index 68eec976105c..0644e4cdf74a 100644 --- a/python/ql/test/2/library-tests/PointsTo/metaclass/test.ql +++ b/python/ql/test/2/library-tests/PointsTo/metaclass/test.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls where not cls.isC() diff --git a/python/ql/test/2/library-tests/classes/attr/class_attr.ql b/python/ql/test/2/library-tests/classes/attr/class_attr.ql index 197ab1a1e5eb..1c9c5513a1d7 100644 --- a/python/ql/test/2/library-tests/classes/attr/class_attr.ql +++ b/python/ql/test/2/library-tests/classes/attr/class_attr.ql @@ -5,6 +5,7 @@ */ import python +private import LegacyPointsTo from ClassObject cls, int line, string name, Object obj where diff --git a/python/ql/test/2/library-tests/classes/attr/class_has_attr.ql b/python/ql/test/2/library-tests/classes/attr/class_has_attr.ql index be8272d1bd6b..24724f4d8593 100644 --- a/python/ql/test/2/library-tests/classes/attr/class_has_attr.ql +++ b/python/ql/test/2/library-tests/classes/attr/class_has_attr.ql @@ -5,6 +5,7 @@ */ import python +private import LegacyPointsTo from ClassObject cls, int line, string name where diff --git a/python/ql/test/2/library-tests/classes/attr/list_attr.ql b/python/ql/test/2/library-tests/classes/attr/list_attr.ql index c38694d58835..ad708711df47 100644 --- a/python/ql/test/2/library-tests/classes/attr/list_attr.ql +++ b/python/ql/test/2/library-tests/classes/attr/list_attr.ql @@ -5,6 +5,7 @@ */ import python +private import LegacyPointsTo from ClassObject cls, string name, Object what where diff --git a/python/ql/test/2/library-tests/classes/mro/mro.ql b/python/ql/test/2/library-tests/classes/mro/mro.ql index 0c4cf077adba..6a4d21921a1e 100644 --- a/python/ql/test/2/library-tests/classes/mro/mro.ql +++ b/python/ql/test/2/library-tests/classes/mro/mro.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls, ClassObject l, ClassObject r where diff --git a/python/ql/test/2/library-tests/modules/general/moduleobject_test.ql b/python/ql/test/2/library-tests/modules/general/moduleobject_test.ql index 50f79a57aedb..27394e03096c 100644 --- a/python/ql/test/2/library-tests/modules/general/moduleobject_test.ql +++ b/python/ql/test/2/library-tests/modules/general/moduleobject_test.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ModuleObject m, string name where m.getName() = "package" or m.getName() = "confused_elements" diff --git a/python/ql/test/2/library-tests/modules/package_members/module_attributes.ql b/python/ql/test/2/library-tests/modules/package_members/module_attributes.ql index 6c16450f3134..f7755b92e12a 100644 --- a/python/ql/test/2/library-tests/modules/package_members/module_attributes.ql +++ b/python/ql/test/2/library-tests/modules/package_members/module_attributes.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ModuleObject m, string name where not m.isC() diff --git a/python/ql/test/2/library-tests/modules/package_members/module_exports.ql b/python/ql/test/2/library-tests/modules/package_members/module_exports.ql index bcfc0c60bfb7..d04ef3bc9f31 100644 --- a/python/ql/test/2/library-tests/modules/package_members/module_exports.ql +++ b/python/ql/test/2/library-tests/modules/package_members/module_exports.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ModuleObject m, string name where not m.isC() and m.exports(name) diff --git a/python/ql/test/2/library-tests/modules/package_members/module_import_as.ql b/python/ql/test/2/library-tests/modules/package_members/module_import_as.ql index 50ded7b41244..97cc2e866652 100644 --- a/python/ql/test/2/library-tests/modules/package_members/module_import_as.ql +++ b/python/ql/test/2/library-tests/modules/package_members/module_import_as.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ModuleObject m, string name where not m.isC() and m.importedAs(name) diff --git a/python/ql/test/2/library-tests/modules/usage/ModuleUsage.ql b/python/ql/test/2/library-tests/modules/usage/ModuleUsage.ql index 5f776e2374e6..0469f804ab33 100644 --- a/python/ql/test/2/library-tests/modules/usage/ModuleUsage.ql +++ b/python/ql/test/2/library-tests/modules/usage/ModuleUsage.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ModuleValue mv, string usage where diff --git a/python/ql/test/2/library-tests/objects/Literals.ql b/python/ql/test/2/library-tests/objects/Literals.ql index a7f10b358ff1..d5aee013f251 100644 --- a/python/ql/test/2/library-tests/objects/Literals.ql +++ b/python/ql/test/2/library-tests/objects/Literals.ql @@ -1,5 +1,6 @@ /* Test that there are no literals that do not have a corresponding object. */ import python +private import LegacyPointsTo string repr(Expr e) { result = e.(Num).getN() or @@ -8,5 +9,5 @@ string repr(Expr e) { } from ImmutableLiteral l -where not exists(l.getLiteralObject()) +where not exists(getLiteralObject(l)) select l.getLocation().getStartLine(), repr(l) diff --git a/python/ql/test/2/library-tests/types/classes/mro_test.ql b/python/ql/test/2/library-tests/types/classes/mro_test.ql index fa2ac44d4d2a..8d68b5b08fe0 100644 --- a/python/ql/test/2/library-tests/types/classes/mro_test.ql +++ b/python/ql/test/2/library-tests/types/classes/mro_test.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls where not cls.isC() diff --git a/python/ql/test/2/library-tests/types/classes/new_style.ql b/python/ql/test/2/library-tests/types/classes/new_style.ql index 2af405653292..fdd8fac80a83 100644 --- a/python/ql/test/2/library-tests/types/classes/new_style.ql +++ b/python/ql/test/2/library-tests/types/classes/new_style.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls, string style where diff --git a/python/ql/test/2/library-tests/types/exceptions/ExitRaises.ql b/python/ql/test/2/library-tests/types/exceptions/ExitRaises.ql index 415db290a05d..5bf1ae1da00b 100644 --- a/python/ql/test/2/library-tests/types/exceptions/ExitRaises.ql +++ b/python/ql/test/2/library-tests/types/exceptions/ExitRaises.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from RaisingNode r, Scope s, ClassObject cls where r.viableExceptionalExit_objectapi(s, cls) diff --git a/python/ql/test/2/library-tests/types/exceptions/Raises.ql b/python/ql/test/2/library-tests/types/exceptions/Raises.ql index 2415c7079670..e4f9a6664d55 100644 --- a/python/ql/test/2/library-tests/types/exceptions/Raises.ql +++ b/python/ql/test/2/library-tests/types/exceptions/Raises.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from PyFunctionObject f, string type where diff --git a/python/ql/test/2/library-tests/types/functions/Calls.ql b/python/ql/test/2/library-tests/types/functions/Calls.ql index 6fc188753e55..5eaeb4559b0c 100644 --- a/python/ql/test/2/library-tests/types/functions/Calls.ql +++ b/python/ql/test/2/library-tests/types/functions/Calls.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from FunctionObject func, ControlFlowNode call where func.getACall() = call diff --git a/python/ql/test/2/library-tests/types/functions/Never.ql b/python/ql/test/2/library-tests/types/functions/Never.ql index 1e43ead7dce7..932121d058ea 100644 --- a/python/ql/test/2/library-tests/types/functions/Never.ql +++ b/python/ql/test/2/library-tests/types/functions/Never.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from FunctionObject func where func.neverReturns() diff --git a/python/ql/test/2/library-tests/types/functions/ReturnTypes.ql b/python/ql/test/2/library-tests/types/functions/ReturnTypes.ql index beb955e11881..d35deea34bfe 100644 --- a/python/ql/test/2/library-tests/types/functions/ReturnTypes.ql +++ b/python/ql/test/2/library-tests/types/functions/ReturnTypes.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from PyFunctionObject func, ClassObject ret_type where func.getAnInferredReturnType() = ret_type diff --git a/python/ql/test/2/library-tests/types/properties/BuiltinProperties.ql b/python/ql/test/2/library-tests/types/properties/BuiltinProperties.ql index 24766db9f2eb..9ab0b5e4bbdc 100644 --- a/python/ql/test/2/library-tests/types/properties/BuiltinProperties.ql +++ b/python/ql/test/2/library-tests/types/properties/BuiltinProperties.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls, string name, BuiltinPropertyObject p where diff --git a/python/ql/test/3/extractor-tests/import_depth/test.ql b/python/ql/test/3/extractor-tests/import_depth/test.ql index ef626455fad9..4f007e99468e 100644 --- a/python/ql/test/3/extractor-tests/import_depth/test.ql +++ b/python/ql/test/3/extractor-tests/import_depth/test.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ModuleObject m /* Exclude the builtins module as it has a different name under 2 and 3. */ diff --git a/python/ql/test/3/library-tests/ControlFlow/Exceptions/Handles.ql b/python/ql/test/3/library-tests/ControlFlow/Exceptions/Handles.ql index 620944de5b90..a8bc92db3317 100644 --- a/python/ql/test/3/library-tests/ControlFlow/Exceptions/Handles.ql +++ b/python/ql/test/3/library-tests/ControlFlow/Exceptions/Handles.ql @@ -1,5 +1,6 @@ import python +private import LegacyPointsTo -from ExceptFlowNode ex, Value val +from ExceptFlowNodeWithPointsTo ex, Value val where ex.handledException(val, _, _) select ex.getLocation().getStartLine(), ex.toString(), val.toString() diff --git a/python/ql/test/3/library-tests/ControlFlow/Exceptions/Known.ql b/python/ql/test/3/library-tests/ControlFlow/Exceptions/Known.ql index 56498054f51a..b773a172ee3d 100644 --- a/python/ql/test/3/library-tests/ControlFlow/Exceptions/Known.ql +++ b/python/ql/test/3/library-tests/ControlFlow/Exceptions/Known.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from RaisingNode r select r.getLocation().getStartLine(), r.toString(), r.getARaisedType().toString() diff --git a/python/ql/test/3/library-tests/ControlFlow/Exceptions/Likely.ql b/python/ql/test/3/library-tests/ControlFlow/Exceptions/Likely.ql index f8e4a4b7dacd..00cf5a7d2afc 100644 --- a/python/ql/test/3/library-tests/ControlFlow/Exceptions/Likely.ql +++ b/python/ql/test/3/library-tests/ControlFlow/Exceptions/Likely.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ControlFlowNode r, ControlFlowNode s where diff --git a/python/ql/test/3/library-tests/ControlFlow/Exceptions/Unknown.ql b/python/ql/test/3/library-tests/ControlFlow/Exceptions/Unknown.ql index 29bad86bf0f7..fe0fa6b01586 100644 --- a/python/ql/test/3/library-tests/ControlFlow/Exceptions/Unknown.ql +++ b/python/ql/test/3/library-tests/ControlFlow/Exceptions/Unknown.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from RaisingNode r where r.raisesUnknownType() diff --git a/python/ql/test/3/library-tests/PointsTo/consts/BooleanConstants.ql b/python/ql/test/3/library-tests/PointsTo/consts/BooleanConstants.ql index 4299e11d660f..242fb5bc781e 100644 --- a/python/ql/test/3/library-tests/PointsTo/consts/BooleanConstants.ql +++ b/python/ql/test/3/library-tests/PointsTo/consts/BooleanConstants.ql @@ -1,5 +1,5 @@ import python -import semmle.python.pointsto.PointsTo +private import LegacyPointsTo from ControlFlowNode f, Context c, boolean b where diff --git a/python/ql/test/3/library-tests/PointsTo/inheritance/Calls.ql b/python/ql/test/3/library-tests/PointsTo/inheritance/Calls.ql index f91d207fc708..3f111d6e08a8 100644 --- a/python/ql/test/3/library-tests/PointsTo/inheritance/Calls.ql +++ b/python/ql/test/3/library-tests/PointsTo/inheritance/Calls.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from Call c, FunctionObject f where f.getACall().getNode() = c diff --git a/python/ql/test/3/library-tests/PointsTo/metaclass/test.ql b/python/ql/test/3/library-tests/PointsTo/metaclass/test.ql index 68eec976105c..0644e4cdf74a 100644 --- a/python/ql/test/3/library-tests/PointsTo/metaclass/test.ql +++ b/python/ql/test/3/library-tests/PointsTo/metaclass/test.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls where not cls.isC() diff --git a/python/ql/test/3/library-tests/PointsTo/regressions/subprocess-assert/ClassValue.ql b/python/ql/test/3/library-tests/PointsTo/regressions/subprocess-assert/ClassValue.ql index bc666b4f2060..479ae6e59656 100644 --- a/python/ql/test/3/library-tests/PointsTo/regressions/subprocess-assert/ClassValue.ql +++ b/python/ql/test/3/library-tests/PointsTo/regressions/subprocess-assert/ClassValue.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo // as used in semmle.python.filters.Tests from ClassValue c, string base diff --git a/python/ql/test/3/library-tests/classes/attr/class_attr.ql b/python/ql/test/3/library-tests/classes/attr/class_attr.ql index 197ab1a1e5eb..1c9c5513a1d7 100644 --- a/python/ql/test/3/library-tests/classes/attr/class_attr.ql +++ b/python/ql/test/3/library-tests/classes/attr/class_attr.ql @@ -5,6 +5,7 @@ */ import python +private import LegacyPointsTo from ClassObject cls, int line, string name, Object obj where diff --git a/python/ql/test/3/library-tests/classes/attr/class_has_attr.ql b/python/ql/test/3/library-tests/classes/attr/class_has_attr.ql index be8272d1bd6b..24724f4d8593 100644 --- a/python/ql/test/3/library-tests/classes/attr/class_has_attr.ql +++ b/python/ql/test/3/library-tests/classes/attr/class_has_attr.ql @@ -5,6 +5,7 @@ */ import python +private import LegacyPointsTo from ClassObject cls, int line, string name where diff --git a/python/ql/test/3/library-tests/classes/meta/meta_obj.ql b/python/ql/test/3/library-tests/classes/meta/meta_obj.ql index e85127a9305f..af46400ce00d 100644 --- a/python/ql/test/3/library-tests/classes/meta/meta_obj.ql +++ b/python/ql/test/3/library-tests/classes/meta/meta_obj.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls where not cls.isC() diff --git a/python/ql/test/3/library-tests/classes/mro/mro.ql b/python/ql/test/3/library-tests/classes/mro/mro.ql index 576d6a75afde..86934f52c115 100644 --- a/python/ql/test/3/library-tests/classes/mro/mro.ql +++ b/python/ql/test/3/library-tests/classes/mro/mro.ql @@ -5,6 +5,7 @@ */ import python +private import LegacyPointsTo from ClassObject cls, ClassObject l, ClassObject r where diff --git a/python/ql/test/3/library-tests/classes/mro/mro_index.ql b/python/ql/test/3/library-tests/classes/mro/mro_index.ql index da40776044ee..6a65d27b716a 100644 --- a/python/ql/test/3/library-tests/classes/mro/mro_index.ql +++ b/python/ql/test/3/library-tests/classes/mro/mro_index.ql @@ -5,6 +5,7 @@ */ import python +private import LegacyPointsTo from ClassObject cls, ClassObject sup, int index where diff --git a/python/ql/test/3/library-tests/modules/general/moduleobject_test.ql b/python/ql/test/3/library-tests/modules/general/moduleobject_test.ql index a3a1ac6b1859..db5b72e4dc4a 100644 --- a/python/ql/test/3/library-tests/modules/general/moduleobject_test.ql +++ b/python/ql/test/3/library-tests/modules/general/moduleobject_test.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ModuleObject m, string name where not m.isC() and not m.getName() = "__future__" diff --git a/python/ql/test/3/library-tests/modules/package_members/module_attributes.ql b/python/ql/test/3/library-tests/modules/package_members/module_attributes.ql index 6c16450f3134..f7755b92e12a 100644 --- a/python/ql/test/3/library-tests/modules/package_members/module_attributes.ql +++ b/python/ql/test/3/library-tests/modules/package_members/module_attributes.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ModuleObject m, string name where not m.isC() diff --git a/python/ql/test/3/library-tests/modules/package_members/module_exports.ql b/python/ql/test/3/library-tests/modules/package_members/module_exports.ql index bcfc0c60bfb7..d04ef3bc9f31 100644 --- a/python/ql/test/3/library-tests/modules/package_members/module_exports.ql +++ b/python/ql/test/3/library-tests/modules/package_members/module_exports.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ModuleObject m, string name where not m.isC() and m.exports(name) diff --git a/python/ql/test/3/library-tests/modules/package_members/module_import_as.ql b/python/ql/test/3/library-tests/modules/package_members/module_import_as.ql index 50ded7b41244..97cc2e866652 100644 --- a/python/ql/test/3/library-tests/modules/package_members/module_import_as.ql +++ b/python/ql/test/3/library-tests/modules/package_members/module_import_as.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ModuleObject m, string name where not m.isC() and m.importedAs(name) diff --git a/python/ql/test/3/library-tests/modules/usage/ModuleUsage.ql b/python/ql/test/3/library-tests/modules/usage/ModuleUsage.ql index 5f776e2374e6..0469f804ab33 100644 --- a/python/ql/test/3/library-tests/modules/usage/ModuleUsage.ql +++ b/python/ql/test/3/library-tests/modules/usage/ModuleUsage.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ModuleValue mv, string usage where diff --git a/python/ql/test/3/library-tests/types/classes/mro_test.ql b/python/ql/test/3/library-tests/types/classes/mro_test.ql index 04b65ae2befb..4dc9bc153a27 100644 --- a/python/ql/test/3/library-tests/types/classes/mro_test.ql +++ b/python/ql/test/3/library-tests/types/classes/mro_test.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls, ClassObject sup where not cls.isC() diff --git a/python/ql/test/3/library-tests/types/exceptions/Raises.ql b/python/ql/test/3/library-tests/types/exceptions/Raises.ql index 2415c7079670..e4f9a6664d55 100644 --- a/python/ql/test/3/library-tests/types/exceptions/Raises.ql +++ b/python/ql/test/3/library-tests/types/exceptions/Raises.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from PyFunctionObject f, string type where diff --git a/python/ql/test/3/library-tests/types/exceptions/Viable.ql b/python/ql/test/3/library-tests/types/exceptions/Viable.ql index bf00a0675d63..589e2630bb91 100644 --- a/python/ql/test/3/library-tests/types/exceptions/Viable.ql +++ b/python/ql/test/3/library-tests/types/exceptions/Viable.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from RaisingNode r, ControlFlowNode n, ClassObject ex where r.viableExceptionEdge_objectapi(n, ex) diff --git a/python/ql/test/3/library-tests/types/functions/Calls.ql b/python/ql/test/3/library-tests/types/functions/Calls.ql index 6fc188753e55..5eaeb4559b0c 100644 --- a/python/ql/test/3/library-tests/types/functions/Calls.ql +++ b/python/ql/test/3/library-tests/types/functions/Calls.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from FunctionObject func, ControlFlowNode call where func.getACall() = call diff --git a/python/ql/test/3/library-tests/types/functions/Never.ql b/python/ql/test/3/library-tests/types/functions/Never.ql index 1e43ead7dce7..932121d058ea 100644 --- a/python/ql/test/3/library-tests/types/functions/Never.ql +++ b/python/ql/test/3/library-tests/types/functions/Never.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from FunctionObject func where func.neverReturns() diff --git a/python/ql/test/3/library-tests/types/functions/ReturnTypes.ql b/python/ql/test/3/library-tests/types/functions/ReturnTypes.ql index beb955e11881..d35deea34bfe 100644 --- a/python/ql/test/3/library-tests/types/functions/ReturnTypes.ql +++ b/python/ql/test/3/library-tests/types/functions/ReturnTypes.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from PyFunctionObject func, ClassObject ret_type where func.getAnInferredReturnType() = ret_type diff --git a/python/ql/test/3/library-tests/types/namespaces/NameSpace.ql b/python/ql/test/3/library-tests/types/namespaces/NameSpace.ql index 38241e8fabca..f41d977d47b4 100644 --- a/python/ql/test/3/library-tests/types/namespaces/NameSpace.ql +++ b/python/ql/test/3/library-tests/types/namespaces/NameSpace.ql @@ -6,6 +6,7 @@ */ import python +private import LegacyPointsTo from Scope s, string name, Object val where diff --git a/python/ql/test/3/library-tests/types/properties/BuiltinProperties.ql b/python/ql/test/3/library-tests/types/properties/BuiltinProperties.ql index 24766db9f2eb..9ab0b5e4bbdc 100644 --- a/python/ql/test/3/library-tests/types/properties/BuiltinProperties.ql +++ b/python/ql/test/3/library-tests/types/properties/BuiltinProperties.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls, string name, BuiltinPropertyObject p where diff --git a/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.ql b/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.ql index 1771727dbbca..5cdbd9e6a4e5 100644 --- a/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.ql +++ b/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.ql @@ -1,6 +1,7 @@ import python import utils.test.InlineExpectationsTest private import semmle.python.dataflow.new.internal.DataFlowDispatch as TT +private import LegacyPointsTo /** Holds when `call` is resolved to `callable` using points-to based call-graph. */ predicate pointsToCallEdge(CallNode call, Function callable) { diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected index 12d1b8282c73..87b07df086fa 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected @@ -1,23 +1,23 @@ edges | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:11:21:11:29 | ControlFlowNode for file_path | provenance | | | test.py:11:5:11:35 | ControlFlowNode for Attribute() | test.py:11:5:11:52 | ControlFlowNode for Attribute() | provenance | Config | -| test.py:11:21:11:29 | ControlFlowNode for file_path | test.py:11:5:11:35 | ControlFlowNode for Attribute() | provenance | MaD:85 | +| test.py:11:21:11:29 | ControlFlowNode for file_path | test.py:11:5:11:35 | ControlFlowNode for Attribute() | provenance | MaD:86 | | test.py:11:21:11:29 | ControlFlowNode for file_path | test.py:11:5:11:52 | ControlFlowNode for Attribute() | provenance | Config | | test.py:11:21:11:29 | ControlFlowNode for file_path | test.py:12:21:12:29 | ControlFlowNode for file_path | provenance | | | test.py:12:5:12:35 | ControlFlowNode for Attribute() | test.py:12:5:12:48 | ControlFlowNode for Attribute() | provenance | Config | -| test.py:12:21:12:29 | ControlFlowNode for file_path | test.py:12:5:12:35 | ControlFlowNode for Attribute() | provenance | MaD:85 | +| test.py:12:21:12:29 | ControlFlowNode for file_path | test.py:12:5:12:35 | ControlFlowNode for Attribute() | provenance | MaD:86 | | test.py:12:21:12:29 | ControlFlowNode for file_path | test.py:12:5:12:48 | ControlFlowNode for Attribute() | provenance | Config | | test.py:12:21:12:29 | ControlFlowNode for file_path | test.py:14:26:14:34 | ControlFlowNode for file_path | provenance | | | test.py:14:10:14:35 | ControlFlowNode for Attribute() | test.py:15:14:15:29 | ControlFlowNode for Attribute() | provenance | Config | -| test.py:14:26:14:34 | ControlFlowNode for file_path | test.py:14:10:14:35 | ControlFlowNode for Attribute() | provenance | MaD:85 | +| test.py:14:26:14:34 | ControlFlowNode for file_path | test.py:14:10:14:35 | ControlFlowNode for Attribute() | provenance | MaD:86 | | test.py:14:26:14:34 | ControlFlowNode for file_path | test.py:15:14:15:29 | ControlFlowNode for Attribute() | provenance | Config | | test.py:14:26:14:34 | ControlFlowNode for file_path | test.py:18:26:18:34 | ControlFlowNode for file_path | provenance | | | test.py:18:10:18:35 | ControlFlowNode for Attribute() | test.py:19:14:19:39 | ControlFlowNode for Attribute() | provenance | Config | -| test.py:18:26:18:34 | ControlFlowNode for file_path | test.py:18:10:18:35 | ControlFlowNode for Attribute() | provenance | MaD:85 | +| test.py:18:26:18:34 | ControlFlowNode for file_path | test.py:18:10:18:35 | ControlFlowNode for Attribute() | provenance | MaD:86 | | test.py:18:26:18:34 | ControlFlowNode for file_path | test.py:19:14:19:39 | ControlFlowNode for Attribute() | provenance | Config | | test.py:18:26:18:34 | ControlFlowNode for file_path | test.py:22:21:22:29 | ControlFlowNode for file_path | provenance | | | test.py:22:5:22:30 | ControlFlowNode for Attribute() | test.py:22:5:22:60 | ControlFlowNode for Attribute() | provenance | Config | -| test.py:22:21:22:29 | ControlFlowNode for file_path | test.py:22:5:22:30 | ControlFlowNode for Attribute() | provenance | MaD:85 | +| test.py:22:21:22:29 | ControlFlowNode for file_path | test.py:22:5:22:30 | ControlFlowNode for Attribute() | provenance | MaD:86 | | test.py:22:21:22:29 | ControlFlowNode for file_path | test.py:22:5:22:60 | ControlFlowNode for Attribute() | provenance | Config | | test.py:22:21:22:29 | ControlFlowNode for file_path | test.py:24:18:24:26 | ControlFlowNode for file_path | provenance | | | test.py:24:18:24:26 | ControlFlowNode for file_path | test.py:24:5:24:52 | ControlFlowNode for Attribute() | provenance | Config | diff --git a/python/ql/test/extractor-tests/double-import/ModuleNames.ql b/python/ql/test/extractor-tests/double-import/ModuleNames.ql index 54aa78e23a3e..6d25cf91f700 100644 --- a/python/ql/test/extractor-tests/double-import/ModuleNames.ql +++ b/python/ql/test/extractor-tests/double-import/ModuleNames.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from Container path, string name where exists(ModuleValue m | m.getPath() = path and m.getName() = name) diff --git a/python/ql/test/extractor-tests/unicode_decoding/test.ql b/python/ql/test/extractor-tests/unicode_decoding/test.ql index b2d51b10d224..4e0937a07c44 100644 --- a/python/ql/test/extractor-tests/unicode_decoding/test.ql +++ b/python/ql/test/extractor-tests/unicode_decoding/test.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from Object o, string s where diff --git a/python/ql/test/library-tests/ControlFlow/general/Comments.ql b/python/ql/test/library-tests/ControlFlow/general/Comments.ql index 71d00f1a8d48..7fe0545c795a 100644 --- a/python/ql/test/library-tests/ControlFlow/general/Comments.ql +++ b/python/ql/test/library-tests/ControlFlow/general/Comments.ql @@ -1,5 +1,6 @@ import python +private import LegacyPointsTo -from Module m, int n -where n = m.getMetrics().getNumberOfLinesOfComments() +from ModuleMetrics m, int n +where n = m.getNumberOfLinesOfComments() select m.toString(), n diff --git a/python/ql/test/library-tests/ControlFlow/general/Cyclo.ql b/python/ql/test/library-tests/ControlFlow/general/Cyclo.ql index fb801a29002d..a36375b7f3d7 100644 --- a/python/ql/test/library-tests/ControlFlow/general/Cyclo.ql +++ b/python/ql/test/library-tests/ControlFlow/general/Cyclo.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo -from Function func -select func.toString(), func.getMetrics().getCyclomaticComplexity() +from FunctionMetrics func +select func.toString(), func.getCyclomaticComplexity() diff --git a/python/ql/test/library-tests/ControlFlow/general/Lines.ql b/python/ql/test/library-tests/ControlFlow/general/Lines.ql index ca6e77155388..2e861691fbbb 100644 --- a/python/ql/test/library-tests/ControlFlow/general/Lines.ql +++ b/python/ql/test/library-tests/ControlFlow/general/Lines.ql @@ -1,8 +1,9 @@ import python +private import LegacyPointsTo from Scope s, int n where - exists(Function f | f = s | n = f.getMetrics().getNumberOfLines()) + exists(FunctionMetrics f | f = s | n = f.getNumberOfLines()) or - exists(Module m | m = s | n = m.getMetrics().getNumberOfLines()) + exists(ModuleMetrics m | m = s | n = m.getNumberOfLines()) select s.toString(), n diff --git a/python/ql/test/library-tests/ControlFlow/ssa/undefined/test.ql b/python/ql/test/library-tests/ControlFlow/ssa/undefined/test.ql index 41b08ec05918..c161c5d3f5e9 100644 --- a/python/ql/test/library-tests/ControlFlow/ssa/undefined/test.ql +++ b/python/ql/test/library-tests/ControlFlow/ssa/undefined/test.ql @@ -1,5 +1,6 @@ import python +private import LegacyPointsTo -from SsaVariable var +from SsaVariableWithPointsTo var where var.maybeUndefined() select var.getDefinition().getLocation().getStartLine(), var.toString() diff --git a/python/ql/test/library-tests/PointsTo/api/ClassValue.ql b/python/ql/test/library-tests/PointsTo/api/ClassValue.ql index 230cc487ea4a..65a4c73d4a6e 100644 --- a/python/ql/test/library-tests/PointsTo/api/ClassValue.ql +++ b/python/ql/test/library-tests/PointsTo/api/ClassValue.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassValue cls, string description where diff --git a/python/ql/test/library-tests/PointsTo/api/Constants.ql b/python/ql/test/library-tests/PointsTo/api/Constants.ql index 151f6b9ce9c9..a6072a1d8e8f 100644 --- a/python/ql/test/library-tests/PointsTo/api/Constants.ql +++ b/python/ql/test/library-tests/PointsTo/api/Constants.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from string txt, Value val where diff --git a/python/ql/test/library-tests/PointsTo/api/QualifedNames.ql b/python/ql/test/library-tests/PointsTo/api/QualifedNames.ql index daafad0492ba..c756265295bb 100644 --- a/python/ql/test/library-tests/PointsTo/api/QualifedNames.ql +++ b/python/ql/test/library-tests/PointsTo/api/QualifedNames.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from FunctionValue v, string name where diff --git a/python/ql/test/library-tests/PointsTo/api/Value.ql b/python/ql/test/library-tests/PointsTo/api/Value.ql index 9c6e07394611..fadf008f6ead 100644 --- a/python/ql/test/library-tests/PointsTo/api/Value.ql +++ b/python/ql/test/library-tests/PointsTo/api/Value.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from Value val, string name where diff --git a/python/ql/test/library-tests/PointsTo/calls/GetACall.ql b/python/ql/test/library-tests/PointsTo/calls/GetACall.ql index 84f2ab4fb4ae..8c6cc76c0310 100644 --- a/python/ql/test/library-tests/PointsTo/calls/GetACall.ql +++ b/python/ql/test/library-tests/PointsTo/calls/GetACall.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ControlFlowNode call, Value func where call = func.getACall() diff --git a/python/ql/test/library-tests/PointsTo/calls/getArgumentForCall.ql b/python/ql/test/library-tests/PointsTo/calls/getArgumentForCall.ql index 7c76b9e0ce50..d388f96783cb 100644 --- a/python/ql/test/library-tests/PointsTo/calls/getArgumentForCall.ql +++ b/python/ql/test/library-tests/PointsTo/calls/getArgumentForCall.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from CallNode call, CallableValue callable, int i select call.getLocation().getStartLine(), call.toString(), callable.toString(), i, diff --git a/python/ql/test/library-tests/PointsTo/calls/getNamedArgumentForCall.ql b/python/ql/test/library-tests/PointsTo/calls/getNamedArgumentForCall.ql index 4cb3fbdf3358..7fa39194debc 100644 --- a/python/ql/test/library-tests/PointsTo/calls/getNamedArgumentForCall.ql +++ b/python/ql/test/library-tests/PointsTo/calls/getNamedArgumentForCall.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from CallNode call, CallableValue callable, string name select call.getLocation().getStartLine(), call.toString(), callable.toString(), name, diff --git a/python/ql/test/library-tests/PointsTo/calls/getParameter.ql b/python/ql/test/library-tests/PointsTo/calls/getParameter.ql index 07f12cce36fa..1cabfeb45bc0 100644 --- a/python/ql/test/library-tests/PointsTo/calls/getParameter.ql +++ b/python/ql/test/library-tests/PointsTo/calls/getParameter.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from CallableValue callable, int i select callable.toString(), i, callable.getParameter(i).toString() diff --git a/python/ql/test/library-tests/PointsTo/calls/getParameterByName.ql b/python/ql/test/library-tests/PointsTo/calls/getParameterByName.ql index d4766b680f73..20c4c77f121e 100644 --- a/python/ql/test/library-tests/PointsTo/calls/getParameterByName.ql +++ b/python/ql/test/library-tests/PointsTo/calls/getParameterByName.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from CallableValue callable, string name select callable.toString(), name, callable.getParameterByName(name).toString() diff --git a/python/ql/test/library-tests/PointsTo/decorators/Values.ql b/python/ql/test/library-tests/PointsTo/decorators/Values.ql index fc7a08db20ba..fe4b6d080f4d 100644 --- a/python/ql/test/library-tests/PointsTo/decorators/Values.ql +++ b/python/ql/test/library-tests/PointsTo/decorators/Values.ql @@ -1,6 +1,5 @@ import python -import semmle.python.pointsto.PointsTo -import semmle.python.objects.ObjectInternal +private import LegacyPointsTo from NameNode f, Context ctx, ObjectInternal v where diff --git a/python/ql/test/library-tests/PointsTo/functions/Calls.ql b/python/ql/test/library-tests/PointsTo/functions/Calls.ql index 5bc29b5aaf3d..659ba4143f63 100644 --- a/python/ql/test/library-tests/PointsTo/functions/Calls.ql +++ b/python/ql/test/library-tests/PointsTo/functions/Calls.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from CallNode call, FunctionObject func, string kind where diff --git a/python/ql/test/library-tests/PointsTo/functions/NeverReturns.ql b/python/ql/test/library-tests/PointsTo/functions/NeverReturns.ql index c576651a8e63..0a20f8e1b1f8 100644 --- a/python/ql/test/library-tests/PointsTo/functions/NeverReturns.ql +++ b/python/ql/test/library-tests/PointsTo/functions/NeverReturns.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from FunctionObject f where f.neverReturns() diff --git a/python/ql/test/library-tests/PointsTo/functions/test.ql b/python/ql/test/library-tests/PointsTo/functions/test.ql index f85e95f5fe46..01f8416c8dc1 100644 --- a/python/ql/test/library-tests/PointsTo/functions/test.ql +++ b/python/ql/test/library-tests/PointsTo/functions/test.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from Call c, FunctionObject f where diff --git a/python/ql/test/library-tests/PointsTo/general/GlobalPointsTo.ql b/python/ql/test/library-tests/PointsTo/general/GlobalPointsTo.ql index e90674bab2e3..a0b7e8979f37 100644 --- a/python/ql/test/library-tests/PointsTo/general/GlobalPointsTo.ql +++ b/python/ql/test/library-tests/PointsTo/general/GlobalPointsTo.ql @@ -1,5 +1,6 @@ import python private import LegacyPointsTo +private import semmle.python.types.ImportTime import interesting from int line, ControlFlowNodeWithPointsTo f, Object o, ImportTimeScope n diff --git a/python/ql/test/library-tests/PointsTo/general/Util.qll b/python/ql/test/library-tests/PointsTo/general/Util.qll index 1c26d7d830b9..289e71a9e6c8 100644 --- a/python/ql/test/library-tests/PointsTo/general/Util.qll +++ b/python/ql/test/library-tests/PointsTo/general/Util.qll @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo string repr(Object o) { not o instanceof StringObject and not o = theBoundMethodType() and result = o.toString() diff --git a/python/ql/test/library-tests/PointsTo/global/Global.ql b/python/ql/test/library-tests/PointsTo/global/Global.ql index f9f52b12641f..4dc6d16d3797 100644 --- a/python/ql/test/library-tests/PointsTo/global/Global.ql +++ b/python/ql/test/library-tests/PointsTo/global/Global.ql @@ -1,7 +1,5 @@ import python -import semmle.python.pointsto.PointsTo -import semmle.python.pointsto.PointsToContext -import semmle.python.objects.ObjectInternal +private import LegacyPointsTo from ControlFlowNode f, PointsToContext ctx, Value obj, ControlFlowNode orig where diff --git a/python/ql/test/library-tests/PointsTo/inheritance/BaseTypes.ql b/python/ql/test/library-tests/PointsTo/inheritance/BaseTypes.ql index f1201eba0dcf..01f69d8bb12e 100644 --- a/python/ql/test/library-tests/PointsTo/inheritance/BaseTypes.ql +++ b/python/ql/test/library-tests/PointsTo/inheritance/BaseTypes.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls, ClassObject base, int n where diff --git a/python/ql/test/library-tests/PointsTo/inheritance/Calls.ql b/python/ql/test/library-tests/PointsTo/inheritance/Calls.ql index f91d207fc708..3f111d6e08a8 100644 --- a/python/ql/test/library-tests/PointsTo/inheritance/Calls.ql +++ b/python/ql/test/library-tests/PointsTo/inheritance/Calls.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from Call c, FunctionObject f where f.getACall().getNode() = c diff --git a/python/ql/test/library-tests/PointsTo/inheritance/Declares.ql b/python/ql/test/library-tests/PointsTo/inheritance/Declares.ql index a2c762be8600..2fe61ca2d7fe 100644 --- a/python/ql/test/library-tests/PointsTo/inheritance/Declares.ql +++ b/python/ql/test/library-tests/PointsTo/inheritance/Declares.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls, string name where class_declares_attribute(cls, name) diff --git a/python/ql/test/library-tests/PointsTo/inheritance/MetaClass.ql b/python/ql/test/library-tests/PointsTo/inheritance/MetaClass.ql index 0ca907821194..a487c16e953e 100644 --- a/python/ql/test/library-tests/PointsTo/inheritance/MetaClass.ql +++ b/python/ql/test/library-tests/PointsTo/inheritance/MetaClass.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls, ClassObject meta where diff --git a/python/ql/test/library-tests/PointsTo/inheritance/SuperTypes.ql b/python/ql/test/library-tests/PointsTo/inheritance/SuperTypes.ql index 338ea118ac17..c3156eb1fa0b 100644 --- a/python/ql/test/library-tests/PointsTo/inheritance/SuperTypes.ql +++ b/python/ql/test/library-tests/PointsTo/inheritance/SuperTypes.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls, ClassObject sup where diff --git a/python/ql/test/library-tests/PointsTo/metaclass/Failed.ql b/python/ql/test/library-tests/PointsTo/metaclass/Failed.ql index a5d2afd42418..4129c99666b0 100644 --- a/python/ql/test/library-tests/PointsTo/metaclass/Failed.ql +++ b/python/ql/test/library-tests/PointsTo/metaclass/Failed.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls, string reason where diff --git a/python/ql/test/library-tests/PointsTo/metaclass/Style.ql b/python/ql/test/library-tests/PointsTo/metaclass/Style.ql index f29ba3a8b7cf..7ab5b4a329f1 100644 --- a/python/ql/test/library-tests/PointsTo/metaclass/Style.ql +++ b/python/ql/test/library-tests/PointsTo/metaclass/Style.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls, string style where diff --git a/python/ql/test/library-tests/PointsTo/metaclass/test.ql b/python/ql/test/library-tests/PointsTo/metaclass/test.ql index d08f4e37fa67..471c01599d6f 100644 --- a/python/ql/test/library-tests/PointsTo/metaclass/test.ql +++ b/python/ql/test/library-tests/PointsTo/metaclass/test.ql @@ -1,5 +1,5 @@ import python -private import semmle.python.objects.ObjectInternal +private import LegacyPointsTo /** An unknown type. Not usually visible. */ class UnknownType extends UnknownClassInternal { diff --git a/python/ql/test/library-tests/PointsTo/new/Call.ql b/python/ql/test/library-tests/PointsTo/new/Call.ql index f014001f3152..e924398ca40d 100644 --- a/python/ql/test/library-tests/PointsTo/new/Call.ql +++ b/python/ql/test/library-tests/PointsTo/new/Call.ql @@ -1,5 +1,6 @@ import python import Util +private import LegacyPointsTo from ControlFlowNode call, FunctionObject func where call = func.getACall() diff --git a/python/ql/test/library-tests/PointsTo/new/ClassMethod.ql b/python/ql/test/library-tests/PointsTo/new/ClassMethod.ql index 17f73420e05e..9eac6e3fea29 100644 --- a/python/ql/test/library-tests/PointsTo/new/ClassMethod.ql +++ b/python/ql/test/library-tests/PointsTo/new/ClassMethod.ql @@ -1,5 +1,6 @@ import python import Util +private import LegacyPointsTo from ClassMethodObject cm, CallNode call where call = cm.getACall() diff --git a/python/ql/test/library-tests/PointsTo/new/NameSpace.ql b/python/ql/test/library-tests/PointsTo/new/NameSpace.ql index 5d099f78b614..6150b94aee1b 100644 --- a/python/ql/test/library-tests/PointsTo/new/NameSpace.ql +++ b/python/ql/test/library-tests/PointsTo/new/NameSpace.ql @@ -1,5 +1,6 @@ import python import Util +private import LegacyPointsTo from Scope s, string name, Object val where diff --git a/python/ql/test/library-tests/PointsTo/new/PointsToMissing.ql b/python/ql/test/library-tests/PointsTo/new/PointsToMissing.ql index 9e744591df23..271f35db9963 100644 --- a/python/ql/test/library-tests/PointsTo/new/PointsToMissing.ql +++ b/python/ql/test/library-tests/PointsTo/new/PointsToMissing.ql @@ -1,6 +1,6 @@ import python import Util -import semmle.python.pointsto.PointsTo +private import LegacyPointsTo /* This test should return _no_ results. */ predicate relevant_node(ControlFlowNode n) { diff --git a/python/ql/test/library-tests/PointsTo/new/PointsToUnknown.ql b/python/ql/test/library-tests/PointsTo/new/PointsToUnknown.ql index cb91e18dafe0..2526819b76ac 100644 --- a/python/ql/test/library-tests/PointsTo/new/PointsToUnknown.ql +++ b/python/ql/test/library-tests/PointsTo/new/PointsToUnknown.ql @@ -1,6 +1,6 @@ import python import Util -import semmle.python.pointsto.PointsTo +private import LegacyPointsTo from ControlFlowNode f, ControlFlowNode x where PointsTo::pointsTo(f, _, ObjectInternal::unknown(), x) diff --git a/python/ql/test/library-tests/PointsTo/new/PointsToWithContext.ql b/python/ql/test/library-tests/PointsTo/new/PointsToWithContext.ql index dbed1a9a7f6b..bad7589d0a20 100644 --- a/python/ql/test/library-tests/PointsTo/new/PointsToWithContext.ql +++ b/python/ql/test/library-tests/PointsTo/new/PointsToWithContext.ql @@ -1,7 +1,6 @@ import python import Util -import semmle.python.pointsto.PointsTo -import semmle.python.pointsto.PointsToContext +private import LegacyPointsTo from ControlFlowNode f, Object o, ClassObject c, ControlFlowNode x, PointsToContext ctx where PointsTo::points_to(f, ctx, o, c, x) diff --git a/python/ql/test/library-tests/PointsTo/new/PointsToWithType.ql b/python/ql/test/library-tests/PointsTo/new/PointsToWithType.ql index 5747ce18fd56..20a23abced7d 100644 --- a/python/ql/test/library-tests/PointsTo/new/PointsToWithType.ql +++ b/python/ql/test/library-tests/PointsTo/new/PointsToWithType.ql @@ -1,6 +1,6 @@ import python import Util -import semmle.python.pointsto.PointsTo +private import LegacyPointsTo from ControlFlowNode f, Object o, ClassObject c, ControlFlowNode x where PointsTo::points_to(f, _, o, c, x) diff --git a/python/ql/test/library-tests/PointsTo/new/Reachable.ql b/python/ql/test/library-tests/PointsTo/new/Reachable.ql index f8b2f0585eb9..2376f13c7521 100644 --- a/python/ql/test/library-tests/PointsTo/new/Reachable.ql +++ b/python/ql/test/library-tests/PointsTo/new/Reachable.ql @@ -1,5 +1,5 @@ import python -private import semmle.python.pointsto.PointsTo +private import LegacyPointsTo import Util from ControlFlowNode f, Context ctx diff --git a/python/ql/test/library-tests/PointsTo/new/SSA.ql b/python/ql/test/library-tests/PointsTo/new/SSA.ql index 7b41f3c427eb..c919e1d4856c 100644 --- a/python/ql/test/library-tests/PointsTo/new/SSA.ql +++ b/python/ql/test/library-tests/PointsTo/new/SSA.ql @@ -1,6 +1,5 @@ import python -private import semmle.python.pointsto.PointsTo -private import semmle.python.pointsto.PointsToContext +private import LegacyPointsTo import Util predicate ssa_variable_points_to( diff --git a/python/ql/test/library-tests/PointsTo/new/SourceEdgeDefinitions.ql b/python/ql/test/library-tests/PointsTo/new/SourceEdgeDefinitions.ql index 8cf0b4c15a6f..117afe8100ef 100644 --- a/python/ql/test/library-tests/PointsTo/new/SourceEdgeDefinitions.ql +++ b/python/ql/test/library-tests/PointsTo/new/SourceEdgeDefinitions.ql @@ -1,5 +1,4 @@ import python -import semmle.python.pointsto.PointsTo import Util from SsaSourceVariable var, ControlFlowNode use, BasicBlock pred diff --git a/python/ql/test/library-tests/PointsTo/new/SourceNodeDefinitions.ql b/python/ql/test/library-tests/PointsTo/new/SourceNodeDefinitions.ql index 77f6ab0923b7..2c5867f9c4f1 100644 --- a/python/ql/test/library-tests/PointsTo/new/SourceNodeDefinitions.ql +++ b/python/ql/test/library-tests/PointsTo/new/SourceNodeDefinitions.ql @@ -1,5 +1,4 @@ import python -import semmle.python.pointsto.PointsTo import Util from SsaSourceVariable var, ControlFlowNode defn, string kind diff --git a/python/ql/test/library-tests/PointsTo/new/SsaAttr.ql b/python/ql/test/library-tests/PointsTo/new/SsaAttr.ql index 67d85c2e3bd2..c9b136f0c02c 100644 --- a/python/ql/test/library-tests/PointsTo/new/SsaAttr.ql +++ b/python/ql/test/library-tests/PointsTo/new/SsaAttr.ql @@ -1,6 +1,5 @@ import python -private import semmle.python.pointsto.PointsTo -private import semmle.python.objects.ObjectInternal +private import LegacyPointsTo import Util from EssaVariable var, string name, ObjectInternal o, Context ctx diff --git a/python/ql/test/library-tests/PointsTo/new/SsaUses.ql b/python/ql/test/library-tests/PointsTo/new/SsaUses.ql index 2a8e8f1e7506..9a250b6610f2 100644 --- a/python/ql/test/library-tests/PointsTo/new/SsaUses.ql +++ b/python/ql/test/library-tests/PointsTo/new/SsaUses.ql @@ -1,5 +1,4 @@ import python -import semmle.python.pointsto.PointsTo import Util from EssaVariable var, ControlFlowNode use diff --git a/python/ql/test/library-tests/PointsTo/new/TestEvaluate.ql b/python/ql/test/library-tests/PointsTo/new/TestEvaluate.ql index d473e4e804a3..1132f04df070 100644 --- a/python/ql/test/library-tests/PointsTo/new/TestEvaluate.ql +++ b/python/ql/test/library-tests/PointsTo/new/TestEvaluate.ql @@ -1,6 +1,5 @@ import python -import semmle.python.pointsto.PointsTo -import semmle.python.pointsto.PointsToContext +private import LegacyPointsTo import Util from diff --git a/python/ql/test/library-tests/PointsTo/new/Util.qll b/python/ql/test/library-tests/PointsTo/new/Util.qll index b83ad89d1c80..23c5aa8df7c5 100644 --- a/python/ql/test/library-tests/PointsTo/new/Util.qll +++ b/python/ql/test/library-tests/PointsTo/new/Util.qll @@ -1,5 +1,5 @@ import python -import semmle.python.objects.ObjectInternal +private import LegacyPointsTo bindingset[which] string locate(Location l, string which) { diff --git a/python/ql/test/library-tests/PointsTo/new/VarUses.ql b/python/ql/test/library-tests/PointsTo/new/VarUses.ql index 58de54d7a3d8..50b07d03be0a 100644 --- a/python/ql/test/library-tests/PointsTo/new/VarUses.ql +++ b/python/ql/test/library-tests/PointsTo/new/VarUses.ql @@ -1,5 +1,5 @@ import python -import semmle.python.pointsto.PointsTo +private import LegacyPointsTo import Util from SsaSourceVariable var, ControlFlowNode use diff --git a/python/ql/test/library-tests/PointsTo/regressions/missing/metaclass/getACall.ql b/python/ql/test/library-tests/PointsTo/regressions/missing/metaclass/getACall.ql index e555c927d6ab..5ca3c9518d60 100644 --- a/python/ql/test/library-tests/PointsTo/regressions/missing/metaclass/getACall.ql +++ b/python/ql/test/library-tests/PointsTo/regressions/missing/metaclass/getACall.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from PythonFunctionValue func select func, func.getACall() diff --git a/python/ql/test/library-tests/PointsTo/regressions/wrong/module-imports/conflict-stdlib/LocalModuleWithRef.ql b/python/ql/test/library-tests/PointsTo/regressions/wrong/module-imports/conflict-stdlib/LocalModuleWithRef.ql index 5bdb99415b2a..f6bc97bf1f09 100644 --- a/python/ql/test/library-tests/PointsTo/regressions/wrong/module-imports/conflict-stdlib/LocalModuleWithRef.ql +++ b/python/ql/test/library-tests/PointsTo/regressions/wrong/module-imports/conflict-stdlib/LocalModuleWithRef.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ModuleValue mv, ControlFlowNode ref, string local_external where diff --git a/python/ql/test/library-tests/PointsTo/regressions/wrong/module-imports/conflict-stdlib/ModuleWithLocalRef.ql b/python/ql/test/library-tests/PointsTo/regressions/wrong/module-imports/conflict-stdlib/ModuleWithLocalRef.ql index 030211ba0bf7..1422d5731fdc 100644 --- a/python/ql/test/library-tests/PointsTo/regressions/wrong/module-imports/conflict-stdlib/ModuleWithLocalRef.ql +++ b/python/ql/test/library-tests/PointsTo/regressions/wrong/module-imports/conflict-stdlib/ModuleWithLocalRef.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ModuleValue mv, ControlFlowNode ref, string in_stdlib, string local_external, string is_missing where diff --git a/python/ql/test/library-tests/PointsTo/returns/Test.ql b/python/ql/test/library-tests/PointsTo/returns/Test.ql index 8546de90f246..928e4c9672f3 100644 --- a/python/ql/test/library-tests/PointsTo/returns/Test.ql +++ b/python/ql/test/library-tests/PointsTo/returns/Test.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from PyFunctionObject f select f.toString(), f.getAnInferredReturnType().toString() diff --git a/python/ql/test/library-tests/PointsTo/subclass/Checks.ql b/python/ql/test/library-tests/PointsTo/subclass/Checks.ql index a82002b1d5f8..f9deaabbc882 100644 --- a/python/ql/test/library-tests/PointsTo/subclass/Checks.ql +++ b/python/ql/test/library-tests/PointsTo/subclass/Checks.ql @@ -1,5 +1,5 @@ import python -import semmle.python.pointsto.PointsTo +private import LegacyPointsTo from Value sup, Value cls where Expressions::requireSubClass(cls, sup) diff --git a/python/ql/test/library-tests/attributes/SelfAttribute.ql b/python/ql/test/library-tests/attributes/SelfAttribute.ql index 669931212410..79ceff3a08ad 100644 --- a/python/ql/test/library-tests/attributes/SelfAttribute.ql +++ b/python/ql/test/library-tests/attributes/SelfAttribute.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from SelfAttributeRead sa, int line, string g, string l where diff --git a/python/ql/test/library-tests/classes/abstract/Abstract.ql b/python/ql/test/library-tests/classes/abstract/Abstract.ql index bd2f98034cb4..02c764211266 100644 --- a/python/ql/test/library-tests/classes/abstract/Abstract.ql +++ b/python/ql/test/library-tests/classes/abstract/Abstract.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls, string abstract where diff --git a/python/ql/test/library-tests/classes/attr/class_attr.ql b/python/ql/test/library-tests/classes/attr/class_attr.ql index 197ab1a1e5eb..1c9c5513a1d7 100644 --- a/python/ql/test/library-tests/classes/attr/class_attr.ql +++ b/python/ql/test/library-tests/classes/attr/class_attr.ql @@ -5,6 +5,7 @@ */ import python +private import LegacyPointsTo from ClassObject cls, int line, string name, Object obj where diff --git a/python/ql/test/library-tests/classes/attr/class_defined_attr.ql b/python/ql/test/library-tests/classes/attr/class_defined_attr.ql index d7583e689c4f..4fc6f7b67d2f 100644 --- a/python/ql/test/library-tests/classes/attr/class_defined_attr.ql +++ b/python/ql/test/library-tests/classes/attr/class_defined_attr.ql @@ -5,6 +5,7 @@ */ import python +private import LegacyPointsTo from ClassObject cls, int line, string name, Object obj where diff --git a/python/ql/test/library-tests/classes/attr/class_defines_attr.ql b/python/ql/test/library-tests/classes/attr/class_defines_attr.ql index 6b266a0d40ff..71dee836a9f6 100644 --- a/python/ql/test/library-tests/classes/attr/class_defines_attr.ql +++ b/python/ql/test/library-tests/classes/attr/class_defines_attr.ql @@ -5,6 +5,7 @@ */ import python +private import LegacyPointsTo from ClassObject cls, int line, string name where diff --git a/python/ql/test/library-tests/classes/attr/class_has_attr.ql b/python/ql/test/library-tests/classes/attr/class_has_attr.ql index be8272d1bd6b..24724f4d8593 100644 --- a/python/ql/test/library-tests/classes/attr/class_has_attr.ql +++ b/python/ql/test/library-tests/classes/attr/class_has_attr.ql @@ -5,6 +5,7 @@ */ import python +private import LegacyPointsTo from ClassObject cls, int line, string name where diff --git a/python/ql/test/library-tests/classes/attr/hash.ql b/python/ql/test/library-tests/classes/attr/hash.ql index 19ac8933f695..3708e62ccddc 100644 --- a/python/ql/test/library-tests/classes/attr/hash.ql +++ b/python/ql/test/library-tests/classes/attr/hash.ql @@ -5,6 +5,7 @@ */ import python +private import LegacyPointsTo from ClassObject cls, int line, Object obj where diff --git a/python/ql/test/library-tests/classes/mro/C3.ql b/python/ql/test/library-tests/classes/mro/C3.ql index 981a55893c2f..60b4b0c1e1be 100644 --- a/python/ql/test/library-tests/classes/mro/C3.ql +++ b/python/ql/test/library-tests/classes/mro/C3.ql @@ -1,5 +1,6 @@ import python import semmle.python.pointsto.MRO +private import LegacyPointsTo from ClassValue cls where not cls.isBuiltin() diff --git a/python/ql/test/library-tests/dependencies/Dependencies.ql b/python/ql/test/library-tests/dependencies/Dependencies.ql index 12378a567d2a..6f0f6cb3bb79 100644 --- a/python/ql/test/library-tests/dependencies/Dependencies.ql +++ b/python/ql/test/library-tests/dependencies/Dependencies.ql @@ -1,5 +1,6 @@ import python import semmle.python.dependencies.Dependencies +private import LegacyPointsTo from DependencyKind dk, AstNode src, Object target where dk.isADependency(src, target) diff --git a/python/ql/test/library-tests/descriptors/Descriptors.ql b/python/ql/test/library-tests/descriptors/Descriptors.ql index e577d47b4213..7a0f196f3f6e 100644 --- a/python/ql/test/library-tests/descriptors/Descriptors.ql +++ b/python/ql/test/library-tests/descriptors/Descriptors.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls, string kind where diff --git a/python/ql/test/library-tests/descriptors/Methods.ql b/python/ql/test/library-tests/descriptors/Methods.ql index 3761ec5f7b59..49c8a3bbbffb 100644 --- a/python/ql/test/library-tests/descriptors/Methods.ql +++ b/python/ql/test/library-tests/descriptors/Methods.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo int lineof(Object o) { result = o.getOrigin().getLocation().getStartLine() } diff --git a/python/ql/test/library-tests/descriptors/Properties.ql b/python/ql/test/library-tests/descriptors/Properties.ql index 29f9e2577a0b..349d0a242f90 100644 --- a/python/ql/test/library-tests/descriptors/Properties.ql +++ b/python/ql/test/library-tests/descriptors/Properties.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from PropertyValue p, string method_name, FunctionValue method where diff --git a/python/ql/test/library-tests/exceptions/Handles.ql b/python/ql/test/library-tests/exceptions/Handles.ql index 620944de5b90..a8bc92db3317 100644 --- a/python/ql/test/library-tests/exceptions/Handles.ql +++ b/python/ql/test/library-tests/exceptions/Handles.ql @@ -1,5 +1,6 @@ import python +private import LegacyPointsTo -from ExceptFlowNode ex, Value val +from ExceptFlowNodeWithPointsTo ex, Value val where ex.handledException(val, _, _) select ex.getLocation().getStartLine(), ex.toString(), val.toString() diff --git a/python/ql/test/library-tests/exceptions/Legal.ql b/python/ql/test/library-tests/exceptions/Legal.ql index bfe47717d232..5b10854c1e1f 100644 --- a/python/ql/test/library-tests/exceptions/Legal.ql +++ b/python/ql/test/library-tests/exceptions/Legal.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls, string legal where diff --git a/python/ql/test/library-tests/frameworks/socketio/ConceptsTest.expected b/python/ql/test/library-tests/frameworks/socketio/ConceptsTest.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/ql/test/library-tests/frameworks/socketio/ConceptsTest.ql b/python/ql/test/library-tests/frameworks/socketio/ConceptsTest.ql new file mode 100644 index 000000000000..b557a0bccb69 --- /dev/null +++ b/python/ql/test/library-tests/frameworks/socketio/ConceptsTest.ql @@ -0,0 +1,2 @@ +import python +import experimental.meta.ConceptsTest diff --git a/python/ql/test/library-tests/frameworks/socketio/InlineTaintTest.expected b/python/ql/test/library-tests/frameworks/socketio/InlineTaintTest.expected new file mode 100644 index 000000000000..020c338fd192 --- /dev/null +++ b/python/ql/test/library-tests/frameworks/socketio/InlineTaintTest.expected @@ -0,0 +1,3 @@ +argumentToEnsureNotTaintedNotMarkedAsSpurious +untaintedArgumentToEnsureTaintedNotMarkedAsMissing +testFailures diff --git a/python/ql/test/library-tests/frameworks/socketio/InlineTaintTest.ql b/python/ql/test/library-tests/frameworks/socketio/InlineTaintTest.ql new file mode 100644 index 000000000000..8524da5fe7db --- /dev/null +++ b/python/ql/test/library-tests/frameworks/socketio/InlineTaintTest.ql @@ -0,0 +1,2 @@ +import experimental.meta.InlineTaintTest +import MakeInlineTaintTest diff --git a/python/ql/test/library-tests/frameworks/socketio/taint_test.py b/python/ql/test/library-tests/frameworks/socketio/taint_test.py new file mode 100644 index 000000000000..07d109aa9a2f --- /dev/null +++ b/python/ql/test/library-tests/frameworks/socketio/taint_test.py @@ -0,0 +1,69 @@ +import sys +import socketio + +def ensure_tainted(*args): + print("tainted", args) + +def ensure_not_tainted(*args): + print("not tainted", args) + +sio = socketio.Server() + +@sio.event +def connect(sid, environ, auth): # $ requestHandler routedParameter=environ routedParameter=auth + ensure_not_tainted(sid) + ensure_tainted(environ, # $ tainted + auth) # $ tainted + +@sio.event +def event1(sid, data): # $ requestHandler routedParameter=data + ensure_not_tainted(sid) + ensure_tainted(data) # $ tainted + res = sio.call("e1", sid=sid) + ensure_tainted(res) # $ tainted + sio.emit("e2", "hi", to=sid, callback=lambda x: ensure_tainted(x)) # $ tainted $ requestHandler routedParameter=x + sio.send("hi", to=sid, callback=lambda x: ensure_tainted(x)) # $ tainted $ requestHandler routedParameter=x + +class MyNamespace(socketio.Namespace): + def on_event2(self, sid, data): # $ requestHandler routedParameter=data + ensure_not_tainted(self, sid) + ensure_tainted(data) # $ tainted + res = self.call("e1", sid=sid) + ensure_tainted(res) # $ tainted + self.emit("e2", "hi", to=sid, callback=lambda x: ensure_tainted(x)) # $ tainted $ requestHandler routedParameter=x + self.send("hi", to=sid, callback=lambda x: ensure_tainted(x)) # $ tainted $ requestHandler routedParameter=x + +sio.register_namespace(MyNamespace("/ns")) + +asio = socketio.AsyncServer(async_mode='asgi') + +@asio.event +async def event3(sid, data): # $ requestHandler routedParameter=data + ensure_not_tainted(sid) + ensure_tainted(data) # $ tainted + res = await asio.call("e1", sid=sid) + ensure_tainted(res) # $ tainted + await asio.emit("e2", "hi", to=sid, callback=lambda x: ensure_tainted(x)) # $ tainted $ requestHandler routedParameter=x + await asio.send("hi", to=sid, callback=lambda x: ensure_tainted(x)) # $ tainted $ requestHandler routedParameter=x + +class MyAsyncNamespace(socketio.AsyncNamespace): + async def on_event4(self, sid, data): # $ requestHandler routedParameter=data + ensure_not_tainted(self, sid) + ensure_tainted(data) # $ tainted + res = await self.call("e1", sid=sid) + ensure_tainted(res) # $ tainted + await self.emit("e2", "hi", to=sid, callback=lambda x: ensure_tainted(x)) # $ tainted $ requestHandler routedParameter=x + await self.send("hi", to=sid, callback=lambda x: ensure_tainted(x)) # $ tainted $ requestHandler routedParameter=x + +asio.register_namespace(MyAsyncNamespace("/ns")) + +if __name__ == "__main__": + + if "--async" in sys.argv: # $ threatModelSource[commandargs]=sys.argv + import uvicorn + app = socketio.ASGIApp(asio) + uvicorn.run(app, host='127.0.0.1', port=8000) + else: + import eventlet + app = socketio.WSGIApp(sio) + eventlet.wsgi.server(eventlet.listen(('', 8000)), app) \ No newline at end of file diff --git a/python/ql/test/library-tests/frameworks/socketio/test.py b/python/ql/test/library-tests/frameworks/socketio/test.py new file mode 100644 index 000000000000..f603edd3111f --- /dev/null +++ b/python/ql/test/library-tests/frameworks/socketio/test.py @@ -0,0 +1,29 @@ +import socketio + +sio = socketio.Server() + +@sio.on("connect") +def connect(sid, environ, auth): # $ requestHandler routedParameter=environ routedParameter=auth + print("connect", sid, environ, auth) + +@sio.on("event1") +def handle(sid, data): # $ requestHandler routedParameter=data + print("e1", sid, data) + +@sio.event +def event2(sid, data): # $ requestHandler routedParameter=data + print("e2", sid, data) + +def event3(sid, data): # $ requestHandler routedParameter=data + print("e3", sid, data) + +sio.on("event3", handler=event3) + +sio.on("event4", lambda sid,data: print("e4", sid, data)) # $ requestHandler routedParameter=data + + + +if __name__ == "__main__": + app = socketio.WSGIApp(sio) + import eventlet + eventlet.wsgi.server(eventlet.listen(('', 8000)), app) \ No newline at end of file diff --git a/python/ql/test/library-tests/frameworks/tornado/routing_test.py b/python/ql/test/library-tests/frameworks/tornado/routing_test.py index 2b596c20ce57..1cff63921dae 100644 --- a/python/ql/test/library-tests/frameworks/tornado/routing_test.py +++ b/python/ql/test/library-tests/frameworks/tornado/routing_test.py @@ -1,5 +1,6 @@ import tornado.web import tornado.routing +import tornado.websocket class FooHandler(tornado.web.RequestHandler): @@ -54,6 +55,26 @@ class PossiblyNotRouted(tornado.web.RequestHandler): def get(self): # $ requestHandler self.write("NotRouted") # $ HttpResponse +class WebSocket(tornado.websocket.WebSocketHandler): + def open(self, x): # $ requestHandler routedParameter=x + self.write_message("WebSocket open {}".format(x)) # $ MISSING: HttpResponse + + def on_message(self, data): # $ requestHandler routedParameter=data + self.write_message("WebSocket on_message {}".format(data)) # $ MISSING: HttpResponse + + def on_ping(self, data): # $ requestHandler routedParameter=data + print("ping", data) + + def on_pong(self, data): # $ requestHandler routedParameter=data + print("pong", data) + + def select_subprotocol(self, subs): # $ requestHandler routedParameter=subs + print("select_subprotocol", subs) + + def check_origin(self, origin): # $ requestHandler routedParameter=origin + print("check_origin", origin) + return True + def make_app(): # see https://www.tornadoweb.org/en/stable/routing.html for even more examples @@ -74,6 +95,7 @@ def make_app(): (tornado.routing.HostMatches(r"(localhost|127\.0\.0\.1)"), [ ("/only-localhost", OnlyLocalhost) # $ routeSetup="/only-localhost" ]), + (r"/websocket/([0-9]+)", WebSocket), # $ routeSetup="/websocket/([0-9]+)" ], debug=True, diff --git a/python/ql/test/library-tests/modules/duplicate_name/Modules.ql b/python/ql/test/library-tests/modules/duplicate_name/Modules.ql index a6477c7d6af0..af3df6f6eca6 100644 --- a/python/ql/test/library-tests/modules/duplicate_name/Modules.ql +++ b/python/ql/test/library-tests/modules/duplicate_name/Modules.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from string name, int mcnt where mcnt = strictcount(Module m | m.getName() = name) and mcnt > 1 diff --git a/python/ql/test/library-tests/objects/Literals.ql b/python/ql/test/library-tests/objects/Literals.ql index a7f10b358ff1..d5aee013f251 100644 --- a/python/ql/test/library-tests/objects/Literals.ql +++ b/python/ql/test/library-tests/objects/Literals.ql @@ -1,5 +1,6 @@ /* Test that there are no literals that do not have a corresponding object. */ import python +private import LegacyPointsTo string repr(Expr e) { result = e.(Num).getN() or @@ -8,5 +9,5 @@ string repr(Expr e) { } from ImmutableLiteral l -where not exists(l.getLiteralObject()) +where not exists(getLiteralObject(l)) select l.getLocation().getStartLine(), repr(l) diff --git a/python/ql/test/library-tests/objects/Name.ql b/python/ql/test/library-tests/objects/Name.ql index c274ed345541..e4bac8bba65c 100644 --- a/python/ql/test/library-tests/objects/Name.ql +++ b/python/ql/test/library-tests/objects/Name.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from Object o, string name where diff --git a/python/ql/test/library-tests/overrides/FunctionOverrides.ql b/python/ql/test/library-tests/overrides/FunctionOverrides.ql index c719006665d3..a30ca89d6cc9 100644 --- a/python/ql/test/library-tests/overrides/FunctionOverrides.ql +++ b/python/ql/test/library-tests/overrides/FunctionOverrides.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from PythonFunctionValue f, string overriding, string overridden where diff --git a/python/ql/test/library-tests/state_tracking/Test.ql b/python/ql/test/library-tests/state_tracking/Test.ql index a0a12e8615d2..706dc73191ae 100644 --- a/python/ql/test/library-tests/state_tracking/Test.ql +++ b/python/ql/test/library-tests/state_tracking/Test.ql @@ -1,5 +1,6 @@ import python import Lib +private import LegacyPointsTo from ControlFlowNode f, TrackableState state, Context ctx, boolean sense where diff --git a/python/ql/test/library-tests/taint/config/TaintLib.qll b/python/ql/test/library-tests/taint/config/TaintLib.qll index 35eebe8ffa6a..82bc4afa72e0 100644 --- a/python/ql/test/library-tests/taint/config/TaintLib.qll +++ b/python/ql/test/library-tests/taint/config/TaintLib.qll @@ -1,5 +1,6 @@ import python import semmle.python.dataflow.TaintTracking +private import LegacyPointsTo class SimpleTest extends TaintKind { SimpleTest() { this = "simple.test" } diff --git a/python/ql/test/library-tests/taint/config/TaintedArgument.ql b/python/ql/test/library-tests/taint/config/TaintedArgument.ql index b8753b3fe00d..e3689bca0d8e 100644 --- a/python/ql/test/library-tests/taint/config/TaintedArgument.ql +++ b/python/ql/test/library-tests/taint/config/TaintedArgument.ql @@ -2,6 +2,7 @@ import python import semmle.python.dataflow.TaintTracking import TaintLib import semmle.python.dataflow.Implementation +private import LegacyPointsTo from TaintTrackingImplementation config, TaintTrackingNode src, CallNode call, diff --git a/python/ql/test/library-tests/taint/general/ModuleAttribute.ql b/python/ql/test/library-tests/taint/general/ModuleAttribute.ql index 6a4349b41001..8da8cb5048ec 100644 --- a/python/ql/test/library-tests/taint/general/ModuleAttribute.ql +++ b/python/ql/test/library-tests/taint/general/ModuleAttribute.ql @@ -1,6 +1,7 @@ import python import semmle.python.dataflow.Implementation import TaintLib +private import LegacyPointsTo from ModuleValue m, string name, TaintedNode origin, TaintTrackingImplementation impl where impl.moduleAttributeTainted(m, name, origin) diff --git a/python/ql/test/library-tests/taint/general/TaintLib.qll b/python/ql/test/library-tests/taint/general/TaintLib.qll index af3799c3b95d..eb55093ad097 100644 --- a/python/ql/test/library-tests/taint/general/TaintLib.qll +++ b/python/ql/test/library-tests/taint/general/TaintLib.qll @@ -1,5 +1,6 @@ import python import semmle.python.dataflow.TaintTracking +private import LegacyPointsTo class SimpleTest extends TaintKind { SimpleTest() { this = "simple.test" } diff --git a/python/ql/test/library-tests/types/attributes/Test.ql b/python/ql/test/library-tests/types/attributes/Test.ql index 9e066a6414bd..ba2e8995dc21 100644 --- a/python/ql/test/library-tests/types/attributes/Test.ql +++ b/python/ql/test/library-tests/types/attributes/Test.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls, ClassObject start, string name, Object val where not name.substring(0, 2) = "__" and val = cls.lookupMro(start, name) diff --git a/python/ql/test/library-tests/types/classattr/ClassAttribute.ql b/python/ql/test/library-tests/types/classattr/ClassAttribute.ql index d0633a36e3a3..fc775ebf39ba 100644 --- a/python/ql/test/library-tests/types/classattr/ClassAttribute.ql +++ b/python/ql/test/library-tests/types/classattr/ClassAttribute.ql @@ -5,6 +5,7 @@ */ import python +private import LegacyPointsTo from ClassObject cls, string name, string kind where diff --git a/python/ql/test/library-tests/types/classattr/ClassMember.ql b/python/ql/test/library-tests/types/classattr/ClassMember.ql index d1e136a51084..54f1d1a5b02c 100644 --- a/python/ql/test/library-tests/types/classattr/ClassMember.ql +++ b/python/ql/test/library-tests/types/classattr/ClassMember.ql @@ -5,6 +5,7 @@ */ import python +private import LegacyPointsTo from ClassObject cls, string name, string kind, Object o where diff --git a/python/ql/test/library-tests/types/classattr/SpecialAttribute.ql b/python/ql/test/library-tests/types/classattr/SpecialAttribute.ql index dc21b250c1ec..375e9b9880e6 100644 --- a/python/ql/test/library-tests/types/classattr/SpecialAttribute.ql +++ b/python/ql/test/library-tests/types/classattr/SpecialAttribute.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls, string name, string kind, Object o where diff --git a/python/ql/test/library-tests/types/classes/FailedInference.ql b/python/ql/test/library-tests/types/classes/FailedInference.ql index 192cf696fbf1..feae8fdc5ee2 100644 --- a/python/ql/test/library-tests/types/classes/FailedInference.ql +++ b/python/ql/test/library-tests/types/classes/FailedInference.ql @@ -1,5 +1,5 @@ import python -import semmle.python.pointsto.PointsTo +private import LegacyPointsTo from ClassValue cls, string reason where Types::failedInference(cls, reason) diff --git a/python/ql/test/library-tests/types/classes/duplicate_base.ql b/python/ql/test/library-tests/types/classes/duplicate_base.ql index 47e975c45604..7a32b545ae0d 100644 --- a/python/ql/test/library-tests/types/classes/duplicate_base.ql +++ b/python/ql/test/library-tests/types/classes/duplicate_base.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ClassObject cls where cls.hasDuplicateBases() diff --git a/python/ql/test/library-tests/types/exceptions/ExitRaises.ql b/python/ql/test/library-tests/types/exceptions/ExitRaises.ql index 32ef268332c2..6ad248f66126 100644 --- a/python/ql/test/library-tests/types/exceptions/ExitRaises.ql +++ b/python/ql/test/library-tests/types/exceptions/ExitRaises.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from RaisingNode r, Scope s, ClassObject cls where r.viableExceptionalExit_objectapi(s, cls) diff --git a/python/ql/test/library-tests/types/exceptions/Handles.ql b/python/ql/test/library-tests/types/exceptions/Handles.ql index dfdf1f9d7b29..bec8767d6c5e 100644 --- a/python/ql/test/library-tests/types/exceptions/Handles.ql +++ b/python/ql/test/library-tests/types/exceptions/Handles.ql @@ -1,5 +1,6 @@ import python +private import LegacyPointsTo -from ExceptFlowNode n, ClassObject cls +from ExceptFlowNodeWithPointsTo n, ClassObject cls where n.handles_objectapi(cls) select n.getLocation().getStartLine(), cls.toString() diff --git a/python/ql/test/library-tests/types/exceptions/Impossible.ql b/python/ql/test/library-tests/types/exceptions/Impossible.ql index 787ba8898f95..acdcbb8e84fe 100644 --- a/python/ql/test/library-tests/types/exceptions/Impossible.ql +++ b/python/ql/test/library-tests/types/exceptions/Impossible.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from RaisingNode r, ControlFlowNode n, string kind where diff --git a/python/ql/test/library-tests/types/exceptions/LineRaises.ql b/python/ql/test/library-tests/types/exceptions/LineRaises.ql index de8b834e520b..94b54a27198a 100644 --- a/python/ql/test/library-tests/types/exceptions/LineRaises.ql +++ b/python/ql/test/library-tests/types/exceptions/LineRaises.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from RaisingNode r, string type where diff --git a/python/ql/test/library-tests/types/exceptions/Raises.ql b/python/ql/test/library-tests/types/exceptions/Raises.ql index 2415c7079670..e4f9a6664d55 100644 --- a/python/ql/test/library-tests/types/exceptions/Raises.ql +++ b/python/ql/test/library-tests/types/exceptions/Raises.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from PyFunctionObject f, string type where diff --git a/python/ql/test/library-tests/types/exceptions/Reraises.ql b/python/ql/test/library-tests/types/exceptions/Reraises.ql index 699eb325f8cc..8a6ade33d5ab 100644 --- a/python/ql/test/library-tests/types/exceptions/Reraises.ql +++ b/python/ql/test/library-tests/types/exceptions/Reraises.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from ReraisingNode r select r.getLocation().getStartLine(), r, r.getARaisedType().toString() diff --git a/python/ql/test/library-tests/types/exceptions/Viable.ql b/python/ql/test/library-tests/types/exceptions/Viable.ql index bf00a0675d63..589e2630bb91 100644 --- a/python/ql/test/library-tests/types/exceptions/Viable.ql +++ b/python/ql/test/library-tests/types/exceptions/Viable.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from RaisingNode r, ControlFlowNode n, ClassObject ex where r.viableExceptionEdge_objectapi(n, ex) diff --git a/python/ql/test/library-tests/types/properties/Deleters.ql b/python/ql/test/library-tests/types/properties/Deleters.ql index ad99ceb387df..ed98d02b3a85 100644 --- a/python/ql/test/library-tests/types/properties/Deleters.ql +++ b/python/ql/test/library-tests/types/properties/Deleters.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from PythonPropertyObject p select p.toString(), p.getDeleter().toString() diff --git a/python/ql/test/library-tests/types/properties/Getters.ql b/python/ql/test/library-tests/types/properties/Getters.ql index 5f232858696d..d8c54dbda097 100644 --- a/python/ql/test/library-tests/types/properties/Getters.ql +++ b/python/ql/test/library-tests/types/properties/Getters.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from PythonPropertyObject p select p.toString(), p.getGetter().toString() diff --git a/python/ql/test/library-tests/types/properties/PythonProperties.ql b/python/ql/test/library-tests/types/properties/PythonProperties.ql index 858326d6ac0c..4440c6df21e5 100644 --- a/python/ql/test/library-tests/types/properties/PythonProperties.ql +++ b/python/ql/test/library-tests/types/properties/PythonProperties.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from PythonPropertyObject p select p.toString() diff --git a/python/ql/test/library-tests/types/properties/Setters.ql b/python/ql/test/library-tests/types/properties/Setters.ql index 871e6f9145fb..5180f58552a4 100644 --- a/python/ql/test/library-tests/types/properties/Setters.ql +++ b/python/ql/test/library-tests/types/properties/Setters.ql @@ -1,4 +1,5 @@ import python +private import LegacyPointsTo from PythonPropertyObject p select p.toString(), p.getSetter().toString() diff --git a/python/ql/test/query-tests/Metrics/ratios/CodeRatio.ql b/python/ql/test/query-tests/Metrics/ratios/CodeRatio.ql index 745568f2405b..a5c563b1123c 100644 --- a/python/ql/test/query-tests/Metrics/ratios/CodeRatio.ql +++ b/python/ql/test/query-tests/Metrics/ratios/CodeRatio.ql @@ -1,6 +1,7 @@ import python +private import LegacyPointsTo -from Module m, ModuleMetrics mm -where mm = m.getMetrics() and mm.getNumberOfLines() > 0 -select m, 100.0 * (mm.getNumberOfLinesOfCode().(float) / mm.getNumberOfLines().(float)) as ratio +from ModuleMetrics mm +where mm.getNumberOfLines() > 0 +select mm, 100.0 * (mm.getNumberOfLinesOfCode().(float) / mm.getNumberOfLines().(float)) as ratio order by ratio desc diff --git a/python/ql/test/query-tests/Security/CWE-113-HeaderInjection/Tests1/HeaderInjection.expected b/python/ql/test/query-tests/Security/CWE-113-HeaderInjection/Tests1/HeaderInjection.expected index b5f4ff549c41..cea505fe39db 100644 --- a/python/ql/test/query-tests/Security/CWE-113-HeaderInjection/Tests1/HeaderInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-113-HeaderInjection/Tests1/HeaderInjection.expected @@ -11,6 +11,16 @@ edges | flask_tests.py:31:5:31:14 | ControlFlowNode for rfs_header | flask_tests.py:33:11:33:20 | ControlFlowNode for rfs_header | provenance | | | flask_tests.py:31:5:31:14 | ControlFlowNode for rfs_header | flask_tests.py:35:12:35:21 | ControlFlowNode for rfs_header | provenance | | | flask_tests.py:31:18:31:24 | ControlFlowNode for request | flask_tests.py:31:5:31:14 | ControlFlowNode for rfs_header | provenance | AdditionalTaintStep | +| http_test.py:5:16:5:19 | ControlFlowNode for self | http_test.py:6:45:6:53 | ControlFlowNode for Attribute | provenance | AdditionalTaintStep | +| http_test.py:6:9:6:19 | ControlFlowNode for parsed_path | http_test.py:7:40:7:56 | ControlFlowNode for Attribute | provenance | AdditionalTaintStep | +| http_test.py:6:23:6:54 | ControlFlowNode for Attribute() | http_test.py:6:9:6:19 | ControlFlowNode for parsed_path | provenance | | +| http_test.py:6:45:6:53 | ControlFlowNode for Attribute | http_test.py:6:23:6:54 | ControlFlowNode for Attribute() | provenance | MaD:77 | +| http_test.py:7:9:7:14 | ControlFlowNode for params | http_test.py:8:23:8:28 | ControlFlowNode for params | provenance | | +| http_test.py:7:18:7:57 | ControlFlowNode for Attribute() | http_test.py:7:9:7:14 | ControlFlowNode for params | provenance | | +| http_test.py:7:40:7:56 | ControlFlowNode for Attribute | http_test.py:7:18:7:57 | ControlFlowNode for Attribute() | provenance | MaD:76 | +| http_test.py:8:9:8:19 | ControlFlowNode for input_value | http_test.py:12:40:12:50 | ControlFlowNode for input_value | provenance | | +| http_test.py:8:23:8:28 | ControlFlowNode for params | http_test.py:8:23:8:47 | ControlFlowNode for Attribute() | provenance | dict.get | +| http_test.py:8:23:8:47 | ControlFlowNode for Attribute() | http_test.py:8:9:8:19 | ControlFlowNode for input_value | provenance | | | wsgiref_tests.py:4:14:4:20 | ControlFlowNode for environ | wsgiref_tests.py:6:5:6:10 | ControlFlowNode for h_name | provenance | | | wsgiref_tests.py:4:14:4:20 | ControlFlowNode for environ | wsgiref_tests.py:7:5:7:9 | ControlFlowNode for h_val | provenance | | | wsgiref_tests.py:6:5:6:10 | ControlFlowNode for h_name | wsgiref_tests.py:8:17:8:22 | ControlFlowNode for h_name | provenance | | @@ -28,6 +38,17 @@ nodes | flask_tests.py:31:18:31:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | flask_tests.py:33:11:33:20 | ControlFlowNode for rfs_header | semmle.label | ControlFlowNode for rfs_header | | flask_tests.py:35:12:35:21 | ControlFlowNode for rfs_header | semmle.label | ControlFlowNode for rfs_header | +| http_test.py:5:16:5:19 | ControlFlowNode for self | semmle.label | ControlFlowNode for self | +| http_test.py:6:9:6:19 | ControlFlowNode for parsed_path | semmle.label | ControlFlowNode for parsed_path | +| http_test.py:6:23:6:54 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| http_test.py:6:45:6:53 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| http_test.py:7:9:7:14 | ControlFlowNode for params | semmle.label | ControlFlowNode for params | +| http_test.py:7:18:7:57 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| http_test.py:7:40:7:56 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| http_test.py:8:9:8:19 | ControlFlowNode for input_value | semmle.label | ControlFlowNode for input_value | +| http_test.py:8:23:8:28 | ControlFlowNode for params | semmle.label | ControlFlowNode for params | +| http_test.py:8:23:8:47 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| http_test.py:12:40:12:50 | ControlFlowNode for input_value | semmle.label | ControlFlowNode for input_value | | wsgiref_tests.py:4:14:4:20 | ControlFlowNode for environ | semmle.label | ControlFlowNode for environ | | wsgiref_tests.py:6:5:6:10 | ControlFlowNode for h_name | semmle.label | ControlFlowNode for h_name | | wsgiref_tests.py:7:5:7:9 | ControlFlowNode for h_val | semmle.label | ControlFlowNode for h_val | @@ -39,5 +60,6 @@ subpaths | flask_tests.py:20:36:20:61 | ControlFlowNode for Subscript | flask_tests.py:1:29:1:35 | ControlFlowNode for ImportMember | flask_tests.py:20:36:20:61 | ControlFlowNode for Subscript | This HTTP header is constructed from a $@. | flask_tests.py:1:29:1:35 | ControlFlowNode for ImportMember | user-provided value | | flask_tests.py:33:11:33:20 | ControlFlowNode for rfs_header | flask_tests.py:1:29:1:35 | ControlFlowNode for ImportMember | flask_tests.py:33:11:33:20 | ControlFlowNode for rfs_header | This HTTP header is constructed from a $@. | flask_tests.py:1:29:1:35 | ControlFlowNode for ImportMember | user-provided value | | flask_tests.py:35:12:35:21 | ControlFlowNode for rfs_header | flask_tests.py:1:29:1:35 | ControlFlowNode for ImportMember | flask_tests.py:35:12:35:21 | ControlFlowNode for rfs_header | This HTTP header is constructed from a $@. | flask_tests.py:1:29:1:35 | ControlFlowNode for ImportMember | user-provided value | +| http_test.py:12:40:12:50 | ControlFlowNode for input_value | http_test.py:5:16:5:19 | ControlFlowNode for self | http_test.py:12:40:12:50 | ControlFlowNode for input_value | This HTTP header is constructed from a $@. | http_test.py:5:16:5:19 | ControlFlowNode for self | user-provided value | | wsgiref_tests.py:8:17:8:22 | ControlFlowNode for h_name | wsgiref_tests.py:4:14:4:20 | ControlFlowNode for environ | wsgiref_tests.py:8:17:8:22 | ControlFlowNode for h_name | This HTTP header is constructed from a $@. | wsgiref_tests.py:4:14:4:20 | ControlFlowNode for environ | user-provided value | | wsgiref_tests.py:8:42:8:46 | ControlFlowNode for h_val | wsgiref_tests.py:4:14:4:20 | ControlFlowNode for environ | wsgiref_tests.py:8:42:8:46 | ControlFlowNode for h_val | This HTTP header is constructed from a $@. | wsgiref_tests.py:4:14:4:20 | ControlFlowNode for environ | user-provided value | diff --git a/python/ql/test/query-tests/Security/CWE-113-HeaderInjection/Tests1/http_test.py b/python/ql/test/query-tests/Security/CWE-113-HeaderInjection/Tests1/http_test.py new file mode 100644 index 000000000000..cf46219fc59c --- /dev/null +++ b/python/ql/test/query-tests/Security/CWE-113-HeaderInjection/Tests1/http_test.py @@ -0,0 +1,22 @@ +from http.server import HTTPServer, BaseHTTPRequestHandler +import urllib.parse + +class VulnerableHandler(BaseHTTPRequestHandler): + def do_GET(self): + parsed_path = urllib.parse.urlparse(self.path) + params = urllib.parse.parse_qs(parsed_path.query) + input_value = params.get("input", [""])[0] + # Unsafe: Directly including user input in headers + self.send_response(200) + try: + self.send_header("X-Info", input_value) # BAD + except Exception as e: + print(f"[!] Header injection failed: {e}") + self.end_headers() + self.wfile.write(b"Hello world!") + + +# if __name__ == "__main__": +# print("Serving vulnerable app on http://127.0.0.1:8080") +# httpd = HTTPServer(("127.0.0.1", 8080), VulnerableHandler) +# httpd.serve_forever() diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index fcb8e3b2745c..7c3ccd16c8a1 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.1.6 + +No user-facing changes. + ## 5.1.5 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/released/5.1.6.md b/ruby/ql/lib/change-notes/released/5.1.6.md new file mode 100644 index 000000000000..74ba63bd37a6 --- /dev/null +++ b/ruby/ql/lib/change-notes/released/5.1.6.md @@ -0,0 +1,3 @@ +## 5.1.6 + +No user-facing changes. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index fee027332511..5ddeeed69fc2 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.1.5 +lastReleaseVersion: 5.1.6 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 116fa884b935..6cc2814827c2 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 5.1.5 +version: 5.1.7-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 24e725365af1..ab000feb4a38 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.5.3 + +No user-facing changes. + ## 1.5.2 No user-facing changes. diff --git a/ruby/ql/src/change-notes/released/1.5.3.md b/ruby/ql/src/change-notes/released/1.5.3.md new file mode 100644 index 000000000000..2e9bcb5e6636 --- /dev/null +++ b/ruby/ql/src/change-notes/released/1.5.3.md @@ -0,0 +1,3 @@ +## 1.5.3 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 7eb901bae56a..232224b0e267 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.2 +lastReleaseVersion: 1.5.3 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 0f86e449e820..833f85894e30 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.5.2 +version: 1.5.4-dev groups: - ruby - queries diff --git a/ruby/ql/src/queries/meta/TaintedNodes.ql b/ruby/ql/src/queries/meta/TaintedNodes.ql index 2ee6e83e0de2..1594c59d3b05 100644 --- a/ruby/ql/src/queries/meta/TaintedNodes.ql +++ b/ruby/ql/src/queries/meta/TaintedNodes.ql @@ -28,5 +28,5 @@ private module BasicTaintConfig implements DataFlow::ConfigSig { private module BasicTaintFlow = TaintTracking::Global; from DataFlow::Node node -where BasicTaintFlow::flow(_, node) +where BasicTaintFlow::flowTo(node) select node, "Tainted node" diff --git a/rust/downgrades/e54d01f67a416b3d6eb7b970f27295097f2cac7f/old.dbscheme b/rust/downgrades/e54d01f67a416b3d6eb7b970f27295097f2cac7f/old.dbscheme new file mode 100644 index 000000000000..e54d01f67a41 --- /dev/null +++ b/rust/downgrades/e54d01f67a416b3d6eb7b970f27295097f2cac7f/old.dbscheme @@ -0,0 +1,3624 @@ +// generated by codegen, do not edit + +// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Empty location -*/ + +empty_location( + int location: @location_default ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- Diagnostic messages: severity -*/ + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Database metadata -*/ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); + + +// from prefix.dbscheme +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_default ref +); + + +// from schema + +@element = + @extractor_step +| @locatable +| @named_crate +| @unextracted +; + +extractor_steps( + unique int id: @extractor_step, + string action: string ref, + int duration_ms: int ref +); + +#keyset[id] +extractor_step_files( + int id: @extractor_step ref, + int file: @file ref +); + +@locatable = + @ast_node +| @crate +; + +named_crates( + unique int id: @named_crate, + string name: string ref, + int crate: @crate ref +); + +@unextracted = + @missing +| @unimplemented +; + +@ast_node = + @abi +| @addressable +| @arg_list +| @asm_dir_spec +| @asm_operand +| @asm_operand_expr +| @asm_option +| @asm_piece +| @asm_reg_spec +| @assoc_item_list +| @attr +| @callable +| @expr +| @extern_item_list +| @field_list +| @for_binder +| @format_args_arg +| @generic_arg +| @generic_arg_list +| @generic_param +| @generic_param_list +| @item_list +| @label +| @let_else +| @macro_items +| @match_arm +| @match_arm_list +| @match_guard +| @meta +| @name +| @param_base +| @param_list +| @parenthesized_arg_list +| @pat +| @path +| @path_ast_node +| @path_segment +| @rename +| @ret_type_repr +| @return_type_syntax +| @source_file +| @stmt +| @stmt_list +| @struct_expr_field +| @struct_expr_field_list +| @struct_field +| @struct_pat_field +| @struct_pat_field_list +| @token +| @token_tree +| @tuple_field +| @type_bound +| @type_bound_list +| @type_repr +| @use_bound_generic_arg +| @use_bound_generic_args +| @use_tree +| @use_tree_list +| @variant_list +| @visibility +| @where_clause +| @where_pred +; + +crates( + unique int id: @crate +); + +#keyset[id] +crate_names( + int id: @crate ref, + string name: string ref +); + +#keyset[id] +crate_versions( + int id: @crate ref, + string version: string ref +); + +#keyset[id, index] +crate_cfg_options( + int id: @crate ref, + int index: int ref, + string cfg_option: string ref +); + +#keyset[id, index] +crate_named_dependencies( + int id: @crate ref, + int index: int ref, + int named_dependency: @named_crate ref +); + +missings( + unique int id: @missing +); + +unimplementeds( + unique int id: @unimplemented +); + +abis( + unique int id: @abi +); + +#keyset[id] +abi_abi_strings( + int id: @abi ref, + string abi_string: string ref +); + +@addressable = + @item +| @variant +; + +arg_lists( + unique int id: @arg_list +); + +#keyset[id, index] +arg_list_args( + int id: @arg_list ref, + int index: int ref, + int arg: @expr ref +); + +asm_dir_specs( + unique int id: @asm_dir_spec +); + +@asm_operand = + @asm_const +| @asm_label +| @asm_reg_operand +| @asm_sym +; + +asm_operand_exprs( + unique int id: @asm_operand_expr +); + +#keyset[id] +asm_operand_expr_in_exprs( + int id: @asm_operand_expr ref, + int in_expr: @expr ref +); + +#keyset[id] +asm_operand_expr_out_exprs( + int id: @asm_operand_expr ref, + int out_expr: @expr ref +); + +asm_options( + unique int id: @asm_option +); + +#keyset[id] +asm_option_is_raw( + int id: @asm_option ref +); + +@asm_piece = + @asm_clobber_abi +| @asm_operand_named +| @asm_options_list +; + +asm_reg_specs( + unique int id: @asm_reg_spec +); + +#keyset[id] +asm_reg_spec_identifiers( + int id: @asm_reg_spec ref, + int identifier: @name_ref ref +); + +assoc_item_lists( + unique int id: @assoc_item_list +); + +#keyset[id, index] +assoc_item_list_assoc_items( + int id: @assoc_item_list ref, + int index: int ref, + int assoc_item: @assoc_item ref +); + +#keyset[id, index] +assoc_item_list_attrs( + int id: @assoc_item_list ref, + int index: int ref, + int attr: @attr ref +); + +attrs( + unique int id: @attr +); + +#keyset[id] +attr_meta( + int id: @attr ref, + int meta: @meta ref +); + +@callable = + @closure_expr +| @function +; + +#keyset[id] +callable_param_lists( + int id: @callable ref, + int param_list: @param_list ref +); + +#keyset[id, index] +callable_attrs( + int id: @callable ref, + int index: int ref, + int attr: @attr ref +); + +@expr = + @array_expr_internal +| @asm_expr +| @await_expr +| @become_expr +| @binary_expr +| @break_expr +| @call_expr +| @cast_expr +| @closure_expr +| @continue_expr +| @field_expr +| @format_args_expr +| @if_expr +| @index_expr +| @labelable_expr +| @let_expr +| @literal_expr +| @macro_block_expr +| @macro_expr +| @match_expr +| @method_call_expr +| @offset_of_expr +| @paren_expr +| @path_expr_base +| @prefix_expr +| @range_expr +| @ref_expr +| @return_expr +| @struct_expr +| @try_expr +| @tuple_expr +| @underscore_expr +| @yeet_expr +| @yield_expr +; + +extern_item_lists( + unique int id: @extern_item_list +); + +#keyset[id, index] +extern_item_list_attrs( + int id: @extern_item_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +extern_item_list_extern_items( + int id: @extern_item_list ref, + int index: int ref, + int extern_item: @extern_item ref +); + +@field_list = + @struct_field_list +| @tuple_field_list +; + +for_binders( + unique int id: @for_binder +); + +#keyset[id] +for_binder_generic_param_lists( + int id: @for_binder ref, + int generic_param_list: @generic_param_list ref +); + +format_args_args( + unique int id: @format_args_arg +); + +#keyset[id] +format_args_arg_exprs( + int id: @format_args_arg ref, + int expr: @expr ref +); + +#keyset[id] +format_args_arg_names( + int id: @format_args_arg ref, + int name: @name ref +); + +@generic_arg = + @assoc_type_arg +| @const_arg +| @lifetime_arg +| @type_arg +; + +generic_arg_lists( + unique int id: @generic_arg_list +); + +#keyset[id, index] +generic_arg_list_generic_args( + int id: @generic_arg_list ref, + int index: int ref, + int generic_arg: @generic_arg ref +); + +@generic_param = + @const_param +| @lifetime_param +| @type_param +; + +generic_param_lists( + unique int id: @generic_param_list +); + +#keyset[id, index] +generic_param_list_generic_params( + int id: @generic_param_list ref, + int index: int ref, + int generic_param: @generic_param ref +); + +item_lists( + unique int id: @item_list +); + +#keyset[id, index] +item_list_attrs( + int id: @item_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +item_list_items( + int id: @item_list ref, + int index: int ref, + int item: @item ref +); + +labels( + unique int id: @label +); + +#keyset[id] +label_lifetimes( + int id: @label ref, + int lifetime: @lifetime ref +); + +let_elses( + unique int id: @let_else +); + +#keyset[id] +let_else_block_exprs( + int id: @let_else ref, + int block_expr: @block_expr ref +); + +macro_items( + unique int id: @macro_items +); + +#keyset[id, index] +macro_items_items( + int id: @macro_items ref, + int index: int ref, + int item: @item ref +); + +match_arms( + unique int id: @match_arm +); + +#keyset[id, index] +match_arm_attrs( + int id: @match_arm ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +match_arm_exprs( + int id: @match_arm ref, + int expr: @expr ref +); + +#keyset[id] +match_arm_guards( + int id: @match_arm ref, + int guard: @match_guard ref +); + +#keyset[id] +match_arm_pats( + int id: @match_arm ref, + int pat: @pat ref +); + +match_arm_lists( + unique int id: @match_arm_list +); + +#keyset[id, index] +match_arm_list_arms( + int id: @match_arm_list ref, + int index: int ref, + int arm: @match_arm ref +); + +#keyset[id, index] +match_arm_list_attrs( + int id: @match_arm_list ref, + int index: int ref, + int attr: @attr ref +); + +match_guards( + unique int id: @match_guard +); + +#keyset[id] +match_guard_conditions( + int id: @match_guard ref, + int condition: @expr ref +); + +meta( + unique int id: @meta +); + +#keyset[id] +meta_exprs( + int id: @meta ref, + int expr: @expr ref +); + +#keyset[id] +meta_is_unsafe( + int id: @meta ref +); + +#keyset[id] +meta_paths( + int id: @meta ref, + int path: @path ref +); + +#keyset[id] +meta_token_trees( + int id: @meta ref, + int token_tree: @token_tree ref +); + +names( + unique int id: @name +); + +#keyset[id] +name_texts( + int id: @name ref, + string text: string ref +); + +@param_base = + @param +| @self_param +; + +#keyset[id, index] +param_base_attrs( + int id: @param_base ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +param_base_type_reprs( + int id: @param_base ref, + int type_repr: @type_repr ref +); + +param_lists( + unique int id: @param_list +); + +#keyset[id, index] +param_list_params( + int id: @param_list ref, + int index: int ref, + int param: @param ref +); + +#keyset[id] +param_list_self_params( + int id: @param_list ref, + int self_param: @self_param ref +); + +parenthesized_arg_lists( + unique int id: @parenthesized_arg_list +); + +#keyset[id, index] +parenthesized_arg_list_type_args( + int id: @parenthesized_arg_list ref, + int index: int ref, + int type_arg: @type_arg ref +); + +@pat = + @box_pat +| @const_block_pat +| @ident_pat +| @literal_pat +| @macro_pat +| @or_pat +| @paren_pat +| @path_pat +| @range_pat +| @ref_pat +| @rest_pat +| @slice_pat +| @struct_pat +| @tuple_pat +| @tuple_struct_pat +| @wildcard_pat +; + +paths( + unique int id: @path +); + +#keyset[id] +path_qualifiers( + int id: @path ref, + int qualifier: @path ref +); + +#keyset[id] +path_segments_( + int id: @path ref, + int segment: @path_segment ref +); + +@path_ast_node = + @path_expr +| @path_pat +| @struct_expr +| @struct_pat +| @tuple_struct_pat +; + +#keyset[id] +path_ast_node_paths( + int id: @path_ast_node ref, + int path: @path ref +); + +path_segments( + unique int id: @path_segment +); + +#keyset[id] +path_segment_generic_arg_lists( + int id: @path_segment ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +path_segment_identifiers( + int id: @path_segment ref, + int identifier: @name_ref ref +); + +#keyset[id] +path_segment_parenthesized_arg_lists( + int id: @path_segment ref, + int parenthesized_arg_list: @parenthesized_arg_list ref +); + +#keyset[id] +path_segment_ret_types( + int id: @path_segment ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +path_segment_return_type_syntaxes( + int id: @path_segment ref, + int return_type_syntax: @return_type_syntax ref +); + +#keyset[id] +path_segment_type_reprs( + int id: @path_segment ref, + int type_repr: @type_repr ref +); + +#keyset[id] +path_segment_trait_type_reprs( + int id: @path_segment ref, + int trait_type_repr: @path_type_repr ref +); + +renames( + unique int id: @rename +); + +#keyset[id] +rename_names( + int id: @rename ref, + int name: @name ref +); + +ret_type_reprs( + unique int id: @ret_type_repr +); + +#keyset[id] +ret_type_repr_type_reprs( + int id: @ret_type_repr ref, + int type_repr: @type_repr ref +); + +return_type_syntaxes( + unique int id: @return_type_syntax +); + +source_files( + unique int id: @source_file +); + +#keyset[id, index] +source_file_attrs( + int id: @source_file ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +source_file_items( + int id: @source_file ref, + int index: int ref, + int item: @item ref +); + +@stmt = + @expr_stmt +| @item +| @let_stmt +; + +stmt_lists( + unique int id: @stmt_list +); + +#keyset[id, index] +stmt_list_attrs( + int id: @stmt_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +stmt_list_statements( + int id: @stmt_list ref, + int index: int ref, + int statement: @stmt ref +); + +#keyset[id] +stmt_list_tail_exprs( + int id: @stmt_list ref, + int tail_expr: @expr ref +); + +struct_expr_fields( + unique int id: @struct_expr_field +); + +#keyset[id, index] +struct_expr_field_attrs( + int id: @struct_expr_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_expr_field_exprs( + int id: @struct_expr_field ref, + int expr: @expr ref +); + +#keyset[id] +struct_expr_field_identifiers( + int id: @struct_expr_field ref, + int identifier: @name_ref ref +); + +struct_expr_field_lists( + unique int id: @struct_expr_field_list +); + +#keyset[id, index] +struct_expr_field_list_attrs( + int id: @struct_expr_field_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +struct_expr_field_list_fields( + int id: @struct_expr_field_list ref, + int index: int ref, + int field: @struct_expr_field ref +); + +#keyset[id] +struct_expr_field_list_spreads( + int id: @struct_expr_field_list ref, + int spread: @expr ref +); + +struct_fields( + unique int id: @struct_field +); + +#keyset[id, index] +struct_field_attrs( + int id: @struct_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_field_defaults( + int id: @struct_field ref, + int default: @expr ref +); + +#keyset[id] +struct_field_is_unsafe( + int id: @struct_field ref +); + +#keyset[id] +struct_field_names( + int id: @struct_field ref, + int name: @name ref +); + +#keyset[id] +struct_field_type_reprs( + int id: @struct_field ref, + int type_repr: @type_repr ref +); + +#keyset[id] +struct_field_visibilities( + int id: @struct_field ref, + int visibility: @visibility ref +); + +struct_pat_fields( + unique int id: @struct_pat_field +); + +#keyset[id, index] +struct_pat_field_attrs( + int id: @struct_pat_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_pat_field_identifiers( + int id: @struct_pat_field ref, + int identifier: @name_ref ref +); + +#keyset[id] +struct_pat_field_pats( + int id: @struct_pat_field ref, + int pat: @pat ref +); + +struct_pat_field_lists( + unique int id: @struct_pat_field_list +); + +#keyset[id, index] +struct_pat_field_list_fields( + int id: @struct_pat_field_list ref, + int index: int ref, + int field: @struct_pat_field ref +); + +#keyset[id] +struct_pat_field_list_rest_pats( + int id: @struct_pat_field_list ref, + int rest_pat: @rest_pat ref +); + +@token = + @comment +; + +token_trees( + unique int id: @token_tree +); + +tuple_fields( + unique int id: @tuple_field +); + +#keyset[id, index] +tuple_field_attrs( + int id: @tuple_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +tuple_field_type_reprs( + int id: @tuple_field ref, + int type_repr: @type_repr ref +); + +#keyset[id] +tuple_field_visibilities( + int id: @tuple_field ref, + int visibility: @visibility ref +); + +type_bounds( + unique int id: @type_bound +); + +#keyset[id] +type_bound_for_binders( + int id: @type_bound ref, + int for_binder: @for_binder ref +); + +#keyset[id] +type_bound_is_async( + int id: @type_bound ref +); + +#keyset[id] +type_bound_is_const( + int id: @type_bound ref +); + +#keyset[id] +type_bound_lifetimes( + int id: @type_bound ref, + int lifetime: @lifetime ref +); + +#keyset[id] +type_bound_type_reprs( + int id: @type_bound ref, + int type_repr: @type_repr ref +); + +#keyset[id] +type_bound_use_bound_generic_args( + int id: @type_bound ref, + int use_bound_generic_args: @use_bound_generic_args ref +); + +type_bound_lists( + unique int id: @type_bound_list +); + +#keyset[id, index] +type_bound_list_bounds( + int id: @type_bound_list ref, + int index: int ref, + int bound: @type_bound ref +); + +@type_repr = + @array_type_repr +| @dyn_trait_type_repr +| @fn_ptr_type_repr +| @for_type_repr +| @impl_trait_type_repr +| @infer_type_repr +| @macro_type_repr +| @never_type_repr +| @paren_type_repr +| @path_type_repr +| @ptr_type_repr +| @ref_type_repr +| @slice_type_repr +| @tuple_type_repr +; + +@use_bound_generic_arg = + @lifetime +| @name_ref +; + +use_bound_generic_args( + unique int id: @use_bound_generic_args +); + +#keyset[id, index] +use_bound_generic_args_use_bound_generic_args( + int id: @use_bound_generic_args ref, + int index: int ref, + int use_bound_generic_arg: @use_bound_generic_arg ref +); + +use_trees( + unique int id: @use_tree +); + +#keyset[id] +use_tree_is_glob( + int id: @use_tree ref +); + +#keyset[id] +use_tree_paths( + int id: @use_tree ref, + int path: @path ref +); + +#keyset[id] +use_tree_renames( + int id: @use_tree ref, + int rename: @rename ref +); + +#keyset[id] +use_tree_use_tree_lists( + int id: @use_tree ref, + int use_tree_list: @use_tree_list ref +); + +use_tree_lists( + unique int id: @use_tree_list +); + +#keyset[id, index] +use_tree_list_use_trees( + int id: @use_tree_list ref, + int index: int ref, + int use_tree: @use_tree ref +); + +variant_lists( + unique int id: @variant_list +); + +#keyset[id, index] +variant_list_variants( + int id: @variant_list ref, + int index: int ref, + int variant: @variant ref +); + +visibilities( + unique int id: @visibility +); + +#keyset[id] +visibility_paths( + int id: @visibility ref, + int path: @path ref +); + +where_clauses( + unique int id: @where_clause +); + +#keyset[id, index] +where_clause_predicates( + int id: @where_clause ref, + int index: int ref, + int predicate: @where_pred ref +); + +where_preds( + unique int id: @where_pred +); + +#keyset[id] +where_pred_for_binders( + int id: @where_pred ref, + int for_binder: @for_binder ref +); + +#keyset[id] +where_pred_lifetimes( + int id: @where_pred ref, + int lifetime: @lifetime ref +); + +#keyset[id] +where_pred_type_reprs( + int id: @where_pred ref, + int type_repr: @type_repr ref +); + +#keyset[id] +where_pred_type_bound_lists( + int id: @where_pred ref, + int type_bound_list: @type_bound_list ref +); + +array_expr_internals( + unique int id: @array_expr_internal +); + +#keyset[id, index] +array_expr_internal_attrs( + int id: @array_expr_internal ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +array_expr_internal_exprs( + int id: @array_expr_internal ref, + int index: int ref, + int expr: @expr ref +); + +#keyset[id] +array_expr_internal_is_semicolon( + int id: @array_expr_internal ref +); + +array_type_reprs( + unique int id: @array_type_repr +); + +#keyset[id] +array_type_repr_const_args( + int id: @array_type_repr ref, + int const_arg: @const_arg ref +); + +#keyset[id] +array_type_repr_element_type_reprs( + int id: @array_type_repr ref, + int element_type_repr: @type_repr ref +); + +asm_clobber_abis( + unique int id: @asm_clobber_abi +); + +asm_consts( + unique int id: @asm_const +); + +#keyset[id] +asm_const_exprs( + int id: @asm_const ref, + int expr: @expr ref +); + +#keyset[id] +asm_const_is_const( + int id: @asm_const ref +); + +asm_labels( + unique int id: @asm_label +); + +#keyset[id] +asm_label_block_exprs( + int id: @asm_label ref, + int block_expr: @block_expr ref +); + +asm_operand_nameds( + unique int id: @asm_operand_named +); + +#keyset[id] +asm_operand_named_asm_operands( + int id: @asm_operand_named ref, + int asm_operand: @asm_operand ref +); + +#keyset[id] +asm_operand_named_names( + int id: @asm_operand_named ref, + int name: @name ref +); + +asm_options_lists( + unique int id: @asm_options_list +); + +#keyset[id, index] +asm_options_list_asm_options( + int id: @asm_options_list ref, + int index: int ref, + int asm_option: @asm_option ref +); + +asm_reg_operands( + unique int id: @asm_reg_operand +); + +#keyset[id] +asm_reg_operand_asm_dir_specs( + int id: @asm_reg_operand ref, + int asm_dir_spec: @asm_dir_spec ref +); + +#keyset[id] +asm_reg_operand_asm_operand_exprs( + int id: @asm_reg_operand ref, + int asm_operand_expr: @asm_operand_expr ref +); + +#keyset[id] +asm_reg_operand_asm_reg_specs( + int id: @asm_reg_operand ref, + int asm_reg_spec: @asm_reg_spec ref +); + +asm_syms( + unique int id: @asm_sym +); + +#keyset[id] +asm_sym_paths( + int id: @asm_sym ref, + int path: @path ref +); + +assoc_type_args( + unique int id: @assoc_type_arg +); + +#keyset[id] +assoc_type_arg_const_args( + int id: @assoc_type_arg ref, + int const_arg: @const_arg ref +); + +#keyset[id] +assoc_type_arg_generic_arg_lists( + int id: @assoc_type_arg ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +assoc_type_arg_identifiers( + int id: @assoc_type_arg ref, + int identifier: @name_ref ref +); + +#keyset[id] +assoc_type_arg_param_lists( + int id: @assoc_type_arg ref, + int param_list: @param_list ref +); + +#keyset[id] +assoc_type_arg_ret_types( + int id: @assoc_type_arg ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +assoc_type_arg_return_type_syntaxes( + int id: @assoc_type_arg ref, + int return_type_syntax: @return_type_syntax ref +); + +#keyset[id] +assoc_type_arg_type_reprs( + int id: @assoc_type_arg ref, + int type_repr: @type_repr ref +); + +#keyset[id] +assoc_type_arg_type_bound_lists( + int id: @assoc_type_arg ref, + int type_bound_list: @type_bound_list ref +); + +await_exprs( + unique int id: @await_expr +); + +#keyset[id, index] +await_expr_attrs( + int id: @await_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +await_expr_exprs( + int id: @await_expr ref, + int expr: @expr ref +); + +become_exprs( + unique int id: @become_expr +); + +#keyset[id, index] +become_expr_attrs( + int id: @become_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +become_expr_exprs( + int id: @become_expr ref, + int expr: @expr ref +); + +binary_exprs( + unique int id: @binary_expr +); + +#keyset[id, index] +binary_expr_attrs( + int id: @binary_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +binary_expr_lhs( + int id: @binary_expr ref, + int lhs: @expr ref +); + +#keyset[id] +binary_expr_operator_names( + int id: @binary_expr ref, + string operator_name: string ref +); + +#keyset[id] +binary_expr_rhs( + int id: @binary_expr ref, + int rhs: @expr ref +); + +box_pats( + unique int id: @box_pat +); + +#keyset[id] +box_pat_pats( + int id: @box_pat ref, + int pat: @pat ref +); + +break_exprs( + unique int id: @break_expr +); + +#keyset[id, index] +break_expr_attrs( + int id: @break_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +break_expr_exprs( + int id: @break_expr ref, + int expr: @expr ref +); + +#keyset[id] +break_expr_lifetimes( + int id: @break_expr ref, + int lifetime: @lifetime ref +); + +call_exprs( + unique int id: @call_expr +); + +#keyset[id] +call_expr_arg_lists( + int id: @call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +call_expr_attrs( + int id: @call_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +call_expr_functions( + int id: @call_expr ref, + int function: @expr ref +); + +cast_exprs( + unique int id: @cast_expr +); + +#keyset[id, index] +cast_expr_attrs( + int id: @cast_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +cast_expr_exprs( + int id: @cast_expr ref, + int expr: @expr ref +); + +#keyset[id] +cast_expr_type_reprs( + int id: @cast_expr ref, + int type_repr: @type_repr ref +); + +closure_exprs( + unique int id: @closure_expr +); + +#keyset[id] +closure_expr_closure_bodies( + int id: @closure_expr ref, + int closure_body: @expr ref +); + +#keyset[id] +closure_expr_for_binders( + int id: @closure_expr ref, + int for_binder: @for_binder ref +); + +#keyset[id] +closure_expr_is_async( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_const( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_gen( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_move( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_static( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_ret_types( + int id: @closure_expr ref, + int ret_type: @ret_type_repr ref +); + +comments( + unique int id: @comment, + int parent: @ast_node ref, + string text: string ref +); + +const_args( + unique int id: @const_arg +); + +#keyset[id] +const_arg_exprs( + int id: @const_arg ref, + int expr: @expr ref +); + +const_block_pats( + unique int id: @const_block_pat +); + +#keyset[id] +const_block_pat_block_exprs( + int id: @const_block_pat ref, + int block_expr: @block_expr ref +); + +#keyset[id] +const_block_pat_is_const( + int id: @const_block_pat ref +); + +const_params( + unique int id: @const_param +); + +#keyset[id, index] +const_param_attrs( + int id: @const_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +const_param_default_vals( + int id: @const_param ref, + int default_val: @const_arg ref +); + +#keyset[id] +const_param_is_const( + int id: @const_param ref +); + +#keyset[id] +const_param_names( + int id: @const_param ref, + int name: @name ref +); + +#keyset[id] +const_param_type_reprs( + int id: @const_param ref, + int type_repr: @type_repr ref +); + +continue_exprs( + unique int id: @continue_expr +); + +#keyset[id, index] +continue_expr_attrs( + int id: @continue_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +continue_expr_lifetimes( + int id: @continue_expr ref, + int lifetime: @lifetime ref +); + +dyn_trait_type_reprs( + unique int id: @dyn_trait_type_repr +); + +#keyset[id] +dyn_trait_type_repr_type_bound_lists( + int id: @dyn_trait_type_repr ref, + int type_bound_list: @type_bound_list ref +); + +expr_stmts( + unique int id: @expr_stmt +); + +#keyset[id] +expr_stmt_exprs( + int id: @expr_stmt ref, + int expr: @expr ref +); + +field_exprs( + unique int id: @field_expr +); + +#keyset[id, index] +field_expr_attrs( + int id: @field_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +field_expr_containers( + int id: @field_expr ref, + int container: @expr ref +); + +#keyset[id] +field_expr_identifiers( + int id: @field_expr ref, + int identifier: @name_ref ref +); + +fn_ptr_type_reprs( + unique int id: @fn_ptr_type_repr +); + +#keyset[id] +fn_ptr_type_repr_abis( + int id: @fn_ptr_type_repr ref, + int abi: @abi ref +); + +#keyset[id] +fn_ptr_type_repr_is_async( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_is_const( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_is_unsafe( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_param_lists( + int id: @fn_ptr_type_repr ref, + int param_list: @param_list ref +); + +#keyset[id] +fn_ptr_type_repr_ret_types( + int id: @fn_ptr_type_repr ref, + int ret_type: @ret_type_repr ref +); + +for_type_reprs( + unique int id: @for_type_repr +); + +#keyset[id] +for_type_repr_for_binders( + int id: @for_type_repr ref, + int for_binder: @for_binder ref +); + +#keyset[id] +for_type_repr_type_reprs( + int id: @for_type_repr ref, + int type_repr: @type_repr ref +); + +format_args_exprs( + unique int id: @format_args_expr +); + +#keyset[id, index] +format_args_expr_args( + int id: @format_args_expr ref, + int index: int ref, + int arg: @format_args_arg ref +); + +#keyset[id, index] +format_args_expr_attrs( + int id: @format_args_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +format_args_expr_templates( + int id: @format_args_expr ref, + int template: @expr ref +); + +ident_pats( + unique int id: @ident_pat +); + +#keyset[id, index] +ident_pat_attrs( + int id: @ident_pat ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +ident_pat_is_mut( + int id: @ident_pat ref +); + +#keyset[id] +ident_pat_is_ref( + int id: @ident_pat ref +); + +#keyset[id] +ident_pat_names( + int id: @ident_pat ref, + int name: @name ref +); + +#keyset[id] +ident_pat_pats( + int id: @ident_pat ref, + int pat: @pat ref +); + +if_exprs( + unique int id: @if_expr +); + +#keyset[id, index] +if_expr_attrs( + int id: @if_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +if_expr_conditions( + int id: @if_expr ref, + int condition: @expr ref +); + +#keyset[id] +if_expr_elses( + int id: @if_expr ref, + int else: @expr ref +); + +#keyset[id] +if_expr_thens( + int id: @if_expr ref, + int then: @block_expr ref +); + +impl_trait_type_reprs( + unique int id: @impl_trait_type_repr +); + +#keyset[id] +impl_trait_type_repr_type_bound_lists( + int id: @impl_trait_type_repr ref, + int type_bound_list: @type_bound_list ref +); + +index_exprs( + unique int id: @index_expr +); + +#keyset[id, index] +index_expr_attrs( + int id: @index_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +index_expr_bases( + int id: @index_expr ref, + int base: @expr ref +); + +#keyset[id] +index_expr_indices( + int id: @index_expr ref, + int index: @expr ref +); + +infer_type_reprs( + unique int id: @infer_type_repr +); + +@item = + @adt +| @asm_expr +| @assoc_item +| @extern_block +| @extern_crate +| @extern_item +| @impl +| @macro_def +| @macro_rules +| @module +| @trait +| @trait_alias +| @use +; + +#keyset[id] +item_attribute_macro_expansions( + int id: @item ref, + int attribute_macro_expansion: @macro_items ref +); + +@labelable_expr = + @block_expr +| @looping_expr +; + +#keyset[id] +labelable_expr_labels( + int id: @labelable_expr ref, + int label: @label ref +); + +let_exprs( + unique int id: @let_expr +); + +#keyset[id, index] +let_expr_attrs( + int id: @let_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +let_expr_scrutinees( + int id: @let_expr ref, + int scrutinee: @expr ref +); + +#keyset[id] +let_expr_pats( + int id: @let_expr ref, + int pat: @pat ref +); + +let_stmts( + unique int id: @let_stmt +); + +#keyset[id, index] +let_stmt_attrs( + int id: @let_stmt ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +let_stmt_initializers( + int id: @let_stmt ref, + int initializer: @expr ref +); + +#keyset[id] +let_stmt_let_elses( + int id: @let_stmt ref, + int let_else: @let_else ref +); + +#keyset[id] +let_stmt_pats( + int id: @let_stmt ref, + int pat: @pat ref +); + +#keyset[id] +let_stmt_type_reprs( + int id: @let_stmt ref, + int type_repr: @type_repr ref +); + +lifetimes( + unique int id: @lifetime +); + +#keyset[id] +lifetime_texts( + int id: @lifetime ref, + string text: string ref +); + +lifetime_args( + unique int id: @lifetime_arg +); + +#keyset[id] +lifetime_arg_lifetimes( + int id: @lifetime_arg ref, + int lifetime: @lifetime ref +); + +lifetime_params( + unique int id: @lifetime_param +); + +#keyset[id, index] +lifetime_param_attrs( + int id: @lifetime_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +lifetime_param_lifetimes( + int id: @lifetime_param ref, + int lifetime: @lifetime ref +); + +#keyset[id] +lifetime_param_type_bound_lists( + int id: @lifetime_param ref, + int type_bound_list: @type_bound_list ref +); + +literal_exprs( + unique int id: @literal_expr +); + +#keyset[id, index] +literal_expr_attrs( + int id: @literal_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +literal_expr_text_values( + int id: @literal_expr ref, + string text_value: string ref +); + +literal_pats( + unique int id: @literal_pat +); + +#keyset[id] +literal_pat_literals( + int id: @literal_pat ref, + int literal: @literal_expr ref +); + +macro_block_exprs( + unique int id: @macro_block_expr +); + +#keyset[id, index] +macro_block_expr_statements( + int id: @macro_block_expr ref, + int index: int ref, + int statement: @stmt ref +); + +#keyset[id] +macro_block_expr_tail_exprs( + int id: @macro_block_expr ref, + int tail_expr: @expr ref +); + +macro_exprs( + unique int id: @macro_expr +); + +#keyset[id] +macro_expr_macro_calls( + int id: @macro_expr ref, + int macro_call: @macro_call ref +); + +macro_pats( + unique int id: @macro_pat +); + +#keyset[id] +macro_pat_macro_calls( + int id: @macro_pat ref, + int macro_call: @macro_call ref +); + +macro_type_reprs( + unique int id: @macro_type_repr +); + +#keyset[id] +macro_type_repr_macro_calls( + int id: @macro_type_repr ref, + int macro_call: @macro_call ref +); + +match_exprs( + unique int id: @match_expr +); + +#keyset[id, index] +match_expr_attrs( + int id: @match_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +match_expr_scrutinees( + int id: @match_expr ref, + int scrutinee: @expr ref +); + +#keyset[id] +match_expr_match_arm_lists( + int id: @match_expr ref, + int match_arm_list: @match_arm_list ref +); + +method_call_exprs( + unique int id: @method_call_expr +); + +#keyset[id] +method_call_expr_arg_lists( + int id: @method_call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +method_call_expr_attrs( + int id: @method_call_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +method_call_expr_generic_arg_lists( + int id: @method_call_expr ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +method_call_expr_identifiers( + int id: @method_call_expr ref, + int identifier: @name_ref ref +); + +#keyset[id] +method_call_expr_receivers( + int id: @method_call_expr ref, + int receiver: @expr ref +); + +name_refs( + unique int id: @name_ref +); + +#keyset[id] +name_ref_texts( + int id: @name_ref ref, + string text: string ref +); + +never_type_reprs( + unique int id: @never_type_repr +); + +offset_of_exprs( + unique int id: @offset_of_expr +); + +#keyset[id, index] +offset_of_expr_attrs( + int id: @offset_of_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +offset_of_expr_fields( + int id: @offset_of_expr ref, + int index: int ref, + int field: @name_ref ref +); + +#keyset[id] +offset_of_expr_type_reprs( + int id: @offset_of_expr ref, + int type_repr: @type_repr ref +); + +or_pats( + unique int id: @or_pat +); + +#keyset[id, index] +or_pat_pats( + int id: @or_pat ref, + int index: int ref, + int pat: @pat ref +); + +params( + unique int id: @param +); + +#keyset[id] +param_pats( + int id: @param ref, + int pat: @pat ref +); + +paren_exprs( + unique int id: @paren_expr +); + +#keyset[id, index] +paren_expr_attrs( + int id: @paren_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +paren_expr_exprs( + int id: @paren_expr ref, + int expr: @expr ref +); + +paren_pats( + unique int id: @paren_pat +); + +#keyset[id] +paren_pat_pats( + int id: @paren_pat ref, + int pat: @pat ref +); + +paren_type_reprs( + unique int id: @paren_type_repr +); + +#keyset[id] +paren_type_repr_type_reprs( + int id: @paren_type_repr ref, + int type_repr: @type_repr ref +); + +@path_expr_base = + @path_expr +; + +path_pats( + unique int id: @path_pat +); + +path_type_reprs( + unique int id: @path_type_repr +); + +#keyset[id] +path_type_repr_paths( + int id: @path_type_repr ref, + int path: @path ref +); + +prefix_exprs( + unique int id: @prefix_expr +); + +#keyset[id, index] +prefix_expr_attrs( + int id: @prefix_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +prefix_expr_exprs( + int id: @prefix_expr ref, + int expr: @expr ref +); + +#keyset[id] +prefix_expr_operator_names( + int id: @prefix_expr ref, + string operator_name: string ref +); + +ptr_type_reprs( + unique int id: @ptr_type_repr +); + +#keyset[id] +ptr_type_repr_is_const( + int id: @ptr_type_repr ref +); + +#keyset[id] +ptr_type_repr_is_mut( + int id: @ptr_type_repr ref +); + +#keyset[id] +ptr_type_repr_type_reprs( + int id: @ptr_type_repr ref, + int type_repr: @type_repr ref +); + +range_exprs( + unique int id: @range_expr +); + +#keyset[id, index] +range_expr_attrs( + int id: @range_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +range_expr_ends( + int id: @range_expr ref, + int end: @expr ref +); + +#keyset[id] +range_expr_operator_names( + int id: @range_expr ref, + string operator_name: string ref +); + +#keyset[id] +range_expr_starts( + int id: @range_expr ref, + int start: @expr ref +); + +range_pats( + unique int id: @range_pat +); + +#keyset[id] +range_pat_ends( + int id: @range_pat ref, + int end: @pat ref +); + +#keyset[id] +range_pat_operator_names( + int id: @range_pat ref, + string operator_name: string ref +); + +#keyset[id] +range_pat_starts( + int id: @range_pat ref, + int start: @pat ref +); + +ref_exprs( + unique int id: @ref_expr +); + +#keyset[id, index] +ref_expr_attrs( + int id: @ref_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +ref_expr_exprs( + int id: @ref_expr ref, + int expr: @expr ref +); + +#keyset[id] +ref_expr_is_const( + int id: @ref_expr ref +); + +#keyset[id] +ref_expr_is_mut( + int id: @ref_expr ref +); + +#keyset[id] +ref_expr_is_raw( + int id: @ref_expr ref +); + +ref_pats( + unique int id: @ref_pat +); + +#keyset[id] +ref_pat_is_mut( + int id: @ref_pat ref +); + +#keyset[id] +ref_pat_pats( + int id: @ref_pat ref, + int pat: @pat ref +); + +ref_type_reprs( + unique int id: @ref_type_repr +); + +#keyset[id] +ref_type_repr_is_mut( + int id: @ref_type_repr ref +); + +#keyset[id] +ref_type_repr_lifetimes( + int id: @ref_type_repr ref, + int lifetime: @lifetime ref +); + +#keyset[id] +ref_type_repr_type_reprs( + int id: @ref_type_repr ref, + int type_repr: @type_repr ref +); + +rest_pats( + unique int id: @rest_pat +); + +#keyset[id, index] +rest_pat_attrs( + int id: @rest_pat ref, + int index: int ref, + int attr: @attr ref +); + +return_exprs( + unique int id: @return_expr +); + +#keyset[id, index] +return_expr_attrs( + int id: @return_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +return_expr_exprs( + int id: @return_expr ref, + int expr: @expr ref +); + +self_params( + unique int id: @self_param +); + +#keyset[id] +self_param_is_ref( + int id: @self_param ref +); + +#keyset[id] +self_param_is_mut( + int id: @self_param ref +); + +#keyset[id] +self_param_lifetimes( + int id: @self_param ref, + int lifetime: @lifetime ref +); + +#keyset[id] +self_param_names( + int id: @self_param ref, + int name: @name ref +); + +slice_pats( + unique int id: @slice_pat +); + +#keyset[id, index] +slice_pat_pats( + int id: @slice_pat ref, + int index: int ref, + int pat: @pat ref +); + +slice_type_reprs( + unique int id: @slice_type_repr +); + +#keyset[id] +slice_type_repr_type_reprs( + int id: @slice_type_repr ref, + int type_repr: @type_repr ref +); + +struct_exprs( + unique int id: @struct_expr +); + +#keyset[id] +struct_expr_struct_expr_field_lists( + int id: @struct_expr ref, + int struct_expr_field_list: @struct_expr_field_list ref +); + +struct_field_lists( + unique int id: @struct_field_list +); + +#keyset[id, index] +struct_field_list_fields( + int id: @struct_field_list ref, + int index: int ref, + int field: @struct_field ref +); + +struct_pats( + unique int id: @struct_pat +); + +#keyset[id] +struct_pat_struct_pat_field_lists( + int id: @struct_pat ref, + int struct_pat_field_list: @struct_pat_field_list ref +); + +try_exprs( + unique int id: @try_expr +); + +#keyset[id, index] +try_expr_attrs( + int id: @try_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +try_expr_exprs( + int id: @try_expr ref, + int expr: @expr ref +); + +tuple_exprs( + unique int id: @tuple_expr +); + +#keyset[id, index] +tuple_expr_attrs( + int id: @tuple_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +tuple_expr_fields( + int id: @tuple_expr ref, + int index: int ref, + int field: @expr ref +); + +tuple_field_lists( + unique int id: @tuple_field_list +); + +#keyset[id, index] +tuple_field_list_fields( + int id: @tuple_field_list ref, + int index: int ref, + int field: @tuple_field ref +); + +tuple_pats( + unique int id: @tuple_pat +); + +#keyset[id, index] +tuple_pat_fields( + int id: @tuple_pat ref, + int index: int ref, + int field: @pat ref +); + +tuple_struct_pats( + unique int id: @tuple_struct_pat +); + +#keyset[id, index] +tuple_struct_pat_fields( + int id: @tuple_struct_pat ref, + int index: int ref, + int field: @pat ref +); + +tuple_type_reprs( + unique int id: @tuple_type_repr +); + +#keyset[id, index] +tuple_type_repr_fields( + int id: @tuple_type_repr ref, + int index: int ref, + int field: @type_repr ref +); + +type_args( + unique int id: @type_arg +); + +#keyset[id] +type_arg_type_reprs( + int id: @type_arg ref, + int type_repr: @type_repr ref +); + +type_params( + unique int id: @type_param +); + +#keyset[id, index] +type_param_attrs( + int id: @type_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +type_param_default_types( + int id: @type_param ref, + int default_type: @type_repr ref +); + +#keyset[id] +type_param_names( + int id: @type_param ref, + int name: @name ref +); + +#keyset[id] +type_param_type_bound_lists( + int id: @type_param ref, + int type_bound_list: @type_bound_list ref +); + +underscore_exprs( + unique int id: @underscore_expr +); + +#keyset[id, index] +underscore_expr_attrs( + int id: @underscore_expr ref, + int index: int ref, + int attr: @attr ref +); + +variants( + unique int id: @variant +); + +#keyset[id, index] +variant_attrs( + int id: @variant ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +variant_discriminants( + int id: @variant ref, + int discriminant: @expr ref +); + +#keyset[id] +variant_field_lists( + int id: @variant ref, + int field_list: @field_list ref +); + +#keyset[id] +variant_names( + int id: @variant ref, + int name: @name ref +); + +#keyset[id] +variant_visibilities( + int id: @variant ref, + int visibility: @visibility ref +); + +wildcard_pats( + unique int id: @wildcard_pat +); + +yeet_exprs( + unique int id: @yeet_expr +); + +#keyset[id, index] +yeet_expr_attrs( + int id: @yeet_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +yeet_expr_exprs( + int id: @yeet_expr ref, + int expr: @expr ref +); + +yield_exprs( + unique int id: @yield_expr +); + +#keyset[id, index] +yield_expr_attrs( + int id: @yield_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +yield_expr_exprs( + int id: @yield_expr ref, + int expr: @expr ref +); + +@adt = + @enum +| @struct +| @union +; + +#keyset[id, index] +adt_derive_macro_expansions( + int id: @adt ref, + int index: int ref, + int derive_macro_expansion: @macro_items ref +); + +asm_exprs( + unique int id: @asm_expr +); + +#keyset[id, index] +asm_expr_asm_pieces( + int id: @asm_expr ref, + int index: int ref, + int asm_piece: @asm_piece ref +); + +#keyset[id, index] +asm_expr_attrs( + int id: @asm_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +asm_expr_templates( + int id: @asm_expr ref, + int index: int ref, + int template: @expr ref +); + +@assoc_item = + @const +| @function +| @macro_call +| @type_alias +; + +block_exprs( + unique int id: @block_expr +); + +#keyset[id, index] +block_expr_attrs( + int id: @block_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +block_expr_is_async( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_const( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_gen( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_move( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_try( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_unsafe( + int id: @block_expr ref +); + +#keyset[id] +block_expr_stmt_lists( + int id: @block_expr ref, + int stmt_list: @stmt_list ref +); + +extern_blocks( + unique int id: @extern_block +); + +#keyset[id] +extern_block_abis( + int id: @extern_block ref, + int abi: @abi ref +); + +#keyset[id, index] +extern_block_attrs( + int id: @extern_block ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +extern_block_extern_item_lists( + int id: @extern_block ref, + int extern_item_list: @extern_item_list ref +); + +#keyset[id] +extern_block_is_unsafe( + int id: @extern_block ref +); + +extern_crates( + unique int id: @extern_crate +); + +#keyset[id, index] +extern_crate_attrs( + int id: @extern_crate ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +extern_crate_identifiers( + int id: @extern_crate ref, + int identifier: @name_ref ref +); + +#keyset[id] +extern_crate_renames( + int id: @extern_crate ref, + int rename: @rename ref +); + +#keyset[id] +extern_crate_visibilities( + int id: @extern_crate ref, + int visibility: @visibility ref +); + +@extern_item = + @function +| @macro_call +| @static +| @type_alias +; + +impls( + unique int id: @impl +); + +#keyset[id] +impl_assoc_item_lists( + int id: @impl ref, + int assoc_item_list: @assoc_item_list ref +); + +#keyset[id, index] +impl_attrs( + int id: @impl ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +impl_generic_param_lists( + int id: @impl ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +impl_is_const( + int id: @impl ref +); + +#keyset[id] +impl_is_default( + int id: @impl ref +); + +#keyset[id] +impl_is_unsafe( + int id: @impl ref +); + +#keyset[id] +impl_self_ties( + int id: @impl ref, + int self_ty: @type_repr ref +); + +#keyset[id] +impl_traits( + int id: @impl ref, + int trait: @type_repr ref +); + +#keyset[id] +impl_visibilities( + int id: @impl ref, + int visibility: @visibility ref +); + +#keyset[id] +impl_where_clauses( + int id: @impl ref, + int where_clause: @where_clause ref +); + +@looping_expr = + @for_expr +| @loop_expr +| @while_expr +; + +#keyset[id] +looping_expr_loop_bodies( + int id: @looping_expr ref, + int loop_body: @block_expr ref +); + +macro_defs( + unique int id: @macro_def +); + +#keyset[id] +macro_def_args( + int id: @macro_def ref, + int args: @token_tree ref +); + +#keyset[id, index] +macro_def_attrs( + int id: @macro_def ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_def_bodies( + int id: @macro_def ref, + int body: @token_tree ref +); + +#keyset[id] +macro_def_names( + int id: @macro_def ref, + int name: @name ref +); + +#keyset[id] +macro_def_visibilities( + int id: @macro_def ref, + int visibility: @visibility ref +); + +macro_rules( + unique int id: @macro_rules +); + +#keyset[id, index] +macro_rules_attrs( + int id: @macro_rules ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_rules_names( + int id: @macro_rules ref, + int name: @name ref +); + +#keyset[id] +macro_rules_token_trees( + int id: @macro_rules ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_rules_visibilities( + int id: @macro_rules ref, + int visibility: @visibility ref +); + +modules( + unique int id: @module +); + +#keyset[id, index] +module_attrs( + int id: @module ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +module_item_lists( + int id: @module ref, + int item_list: @item_list ref +); + +#keyset[id] +module_names( + int id: @module ref, + int name: @name ref +); + +#keyset[id] +module_visibilities( + int id: @module ref, + int visibility: @visibility ref +); + +path_exprs( + unique int id: @path_expr +); + +#keyset[id, index] +path_expr_attrs( + int id: @path_expr ref, + int index: int ref, + int attr: @attr ref +); + +traits( + unique int id: @trait +); + +#keyset[id] +trait_assoc_item_lists( + int id: @trait ref, + int assoc_item_list: @assoc_item_list ref +); + +#keyset[id, index] +trait_attrs( + int id: @trait ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +trait_generic_param_lists( + int id: @trait ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +trait_is_auto( + int id: @trait ref +); + +#keyset[id] +trait_is_unsafe( + int id: @trait ref +); + +#keyset[id] +trait_names( + int id: @trait ref, + int name: @name ref +); + +#keyset[id] +trait_type_bound_lists( + int id: @trait ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +trait_visibilities( + int id: @trait ref, + int visibility: @visibility ref +); + +#keyset[id] +trait_where_clauses( + int id: @trait ref, + int where_clause: @where_clause ref +); + +trait_aliases( + unique int id: @trait_alias +); + +#keyset[id, index] +trait_alias_attrs( + int id: @trait_alias ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +trait_alias_generic_param_lists( + int id: @trait_alias ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +trait_alias_names( + int id: @trait_alias ref, + int name: @name ref +); + +#keyset[id] +trait_alias_type_bound_lists( + int id: @trait_alias ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +trait_alias_visibilities( + int id: @trait_alias ref, + int visibility: @visibility ref +); + +#keyset[id] +trait_alias_where_clauses( + int id: @trait_alias ref, + int where_clause: @where_clause ref +); + +uses( + unique int id: @use +); + +#keyset[id, index] +use_attrs( + int id: @use ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +use_use_trees( + int id: @use ref, + int use_tree: @use_tree ref +); + +#keyset[id] +use_visibilities( + int id: @use ref, + int visibility: @visibility ref +); + +consts( + unique int id: @const +); + +#keyset[id, index] +const_attrs( + int id: @const ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +const_bodies( + int id: @const ref, + int body: @expr ref +); + +#keyset[id] +const_generic_param_lists( + int id: @const ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +const_is_const( + int id: @const ref +); + +#keyset[id] +const_is_default( + int id: @const ref +); + +#keyset[id] +const_names( + int id: @const ref, + int name: @name ref +); + +#keyset[id] +const_type_reprs( + int id: @const ref, + int type_repr: @type_repr ref +); + +#keyset[id] +const_visibilities( + int id: @const ref, + int visibility: @visibility ref +); + +#keyset[id] +const_where_clauses( + int id: @const ref, + int where_clause: @where_clause ref +); + +#keyset[id] +const_has_implementation( + int id: @const ref +); + +enums( + unique int id: @enum +); + +#keyset[id, index] +enum_attrs( + int id: @enum ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +enum_generic_param_lists( + int id: @enum ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +enum_names( + int id: @enum ref, + int name: @name ref +); + +#keyset[id] +enum_variant_lists( + int id: @enum ref, + int variant_list: @variant_list ref +); + +#keyset[id] +enum_visibilities( + int id: @enum ref, + int visibility: @visibility ref +); + +#keyset[id] +enum_where_clauses( + int id: @enum ref, + int where_clause: @where_clause ref +); + +for_exprs( + unique int id: @for_expr +); + +#keyset[id, index] +for_expr_attrs( + int id: @for_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +for_expr_iterables( + int id: @for_expr ref, + int iterable: @expr ref +); + +#keyset[id] +for_expr_pats( + int id: @for_expr ref, + int pat: @pat ref +); + +functions( + unique int id: @function +); + +#keyset[id] +function_abis( + int id: @function ref, + int abi: @abi ref +); + +#keyset[id] +function_function_bodies( + int id: @function ref, + int function_body: @block_expr ref +); + +#keyset[id] +function_generic_param_lists( + int id: @function ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +function_is_async( + int id: @function ref +); + +#keyset[id] +function_is_const( + int id: @function ref +); + +#keyset[id] +function_is_default( + int id: @function ref +); + +#keyset[id] +function_is_gen( + int id: @function ref +); + +#keyset[id] +function_is_unsafe( + int id: @function ref +); + +#keyset[id] +function_names( + int id: @function ref, + int name: @name ref +); + +#keyset[id] +function_ret_types( + int id: @function ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +function_visibilities( + int id: @function ref, + int visibility: @visibility ref +); + +#keyset[id] +function_where_clauses( + int id: @function ref, + int where_clause: @where_clause ref +); + +#keyset[id] +function_has_implementation( + int id: @function ref +); + +loop_exprs( + unique int id: @loop_expr +); + +#keyset[id, index] +loop_expr_attrs( + int id: @loop_expr ref, + int index: int ref, + int attr: @attr ref +); + +macro_calls( + unique int id: @macro_call +); + +#keyset[id, index] +macro_call_attrs( + int id: @macro_call ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_call_paths( + int id: @macro_call ref, + int path: @path ref +); + +#keyset[id] +macro_call_token_trees( + int id: @macro_call ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_call_macro_call_expansions( + int id: @macro_call ref, + int macro_call_expansion: @ast_node ref +); + +statics( + unique int id: @static +); + +#keyset[id, index] +static_attrs( + int id: @static ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +static_bodies( + int id: @static ref, + int body: @expr ref +); + +#keyset[id] +static_is_mut( + int id: @static ref +); + +#keyset[id] +static_is_static( + int id: @static ref +); + +#keyset[id] +static_is_unsafe( + int id: @static ref +); + +#keyset[id] +static_names( + int id: @static ref, + int name: @name ref +); + +#keyset[id] +static_type_reprs( + int id: @static ref, + int type_repr: @type_repr ref +); + +#keyset[id] +static_visibilities( + int id: @static ref, + int visibility: @visibility ref +); + +structs( + unique int id: @struct +); + +#keyset[id, index] +struct_attrs( + int id: @struct ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_field_lists_( + int id: @struct ref, + int field_list: @field_list ref +); + +#keyset[id] +struct_generic_param_lists( + int id: @struct ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +struct_names( + int id: @struct ref, + int name: @name ref +); + +#keyset[id] +struct_visibilities( + int id: @struct ref, + int visibility: @visibility ref +); + +#keyset[id] +struct_where_clauses( + int id: @struct ref, + int where_clause: @where_clause ref +); + +type_aliases( + unique int id: @type_alias +); + +#keyset[id, index] +type_alias_attrs( + int id: @type_alias ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +type_alias_generic_param_lists( + int id: @type_alias ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +type_alias_is_default( + int id: @type_alias ref +); + +#keyset[id] +type_alias_names( + int id: @type_alias ref, + int name: @name ref +); + +#keyset[id] +type_alias_type_reprs( + int id: @type_alias ref, + int type_repr: @type_repr ref +); + +#keyset[id] +type_alias_type_bound_lists( + int id: @type_alias ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +type_alias_visibilities( + int id: @type_alias ref, + int visibility: @visibility ref +); + +#keyset[id] +type_alias_where_clauses( + int id: @type_alias ref, + int where_clause: @where_clause ref +); + +unions( + unique int id: @union +); + +#keyset[id, index] +union_attrs( + int id: @union ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +union_generic_param_lists( + int id: @union ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +union_names( + int id: @union ref, + int name: @name ref +); + +#keyset[id] +union_struct_field_lists( + int id: @union ref, + int struct_field_list: @struct_field_list ref +); + +#keyset[id] +union_visibilities( + int id: @union ref, + int visibility: @visibility ref +); + +#keyset[id] +union_where_clauses( + int id: @union ref, + int where_clause: @where_clause ref +); + +while_exprs( + unique int id: @while_expr +); + +#keyset[id, index] +while_expr_attrs( + int id: @while_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +while_expr_conditions( + int id: @while_expr ref, + int condition: @expr ref +); diff --git a/rust/downgrades/e54d01f67a416b3d6eb7b970f27295097f2cac7f/rust.dbscheme b/rust/downgrades/e54d01f67a416b3d6eb7b970f27295097f2cac7f/rust.dbscheme new file mode 100644 index 000000000000..30a0713e5bf6 --- /dev/null +++ b/rust/downgrades/e54d01f67a416b3d6eb7b970f27295097f2cac7f/rust.dbscheme @@ -0,0 +1,3615 @@ +// generated by codegen, do not edit + +// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Empty location -*/ + +empty_location( + int location: @location_default ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- Diagnostic messages: severity -*/ + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Database metadata -*/ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); + + +// from prefix.dbscheme +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_default ref +); + + +// from schema + +@element = + @extractor_step +| @locatable +| @named_crate +| @unextracted +; + +extractor_steps( + unique int id: @extractor_step, + string action: string ref, + int duration_ms: int ref +); + +#keyset[id] +extractor_step_files( + int id: @extractor_step ref, + int file: @file ref +); + +@locatable = + @ast_node +| @crate +; + +named_crates( + unique int id: @named_crate, + string name: string ref, + int crate: @crate ref +); + +@unextracted = + @missing +| @unimplemented +; + +@ast_node = + @abi +| @addressable +| @arg_list +| @asm_dir_spec +| @asm_operand +| @asm_operand_expr +| @asm_option +| @asm_piece +| @asm_reg_spec +| @assoc_item_list +| @attr +| @callable +| @expr +| @extern_item_list +| @field_list +| @for_binder +| @format_args_arg +| @generic_arg +| @generic_arg_list +| @generic_param +| @generic_param_list +| @item_list +| @label +| @let_else +| @macro_items +| @match_arm +| @match_arm_list +| @match_guard +| @meta +| @name +| @param_base +| @param_list +| @parenthesized_arg_list +| @pat +| @path +| @path_ast_node +| @path_segment +| @rename +| @ret_type_repr +| @return_type_syntax +| @source_file +| @stmt +| @stmt_list +| @struct_expr_field +| @struct_expr_field_list +| @struct_field +| @struct_pat_field +| @struct_pat_field_list +| @token +| @token_tree +| @tuple_field +| @type_bound +| @type_bound_list +| @type_repr +| @use_bound_generic_arg +| @use_bound_generic_args +| @use_tree +| @use_tree_list +| @variant_list +| @visibility +| @where_clause +| @where_pred +; + +crates( + unique int id: @crate +); + +#keyset[id] +crate_names( + int id: @crate ref, + string name: string ref +); + +#keyset[id] +crate_versions( + int id: @crate ref, + string version: string ref +); + +#keyset[id, index] +crate_cfg_options( + int id: @crate ref, + int index: int ref, + string cfg_option: string ref +); + +#keyset[id, index] +crate_named_dependencies( + int id: @crate ref, + int index: int ref, + int named_dependency: @named_crate ref +); + +missings( + unique int id: @missing +); + +unimplementeds( + unique int id: @unimplemented +); + +abis( + unique int id: @abi +); + +#keyset[id] +abi_abi_strings( + int id: @abi ref, + string abi_string: string ref +); + +@addressable = + @item +| @variant +; + +arg_lists( + unique int id: @arg_list +); + +#keyset[id, index] +arg_list_args( + int id: @arg_list ref, + int index: int ref, + int arg: @expr ref +); + +asm_dir_specs( + unique int id: @asm_dir_spec +); + +@asm_operand = + @asm_const +| @asm_label +| @asm_reg_operand +| @asm_sym +; + +asm_operand_exprs( + unique int id: @asm_operand_expr +); + +#keyset[id] +asm_operand_expr_in_exprs( + int id: @asm_operand_expr ref, + int in_expr: @expr ref +); + +#keyset[id] +asm_operand_expr_out_exprs( + int id: @asm_operand_expr ref, + int out_expr: @expr ref +); + +asm_options( + unique int id: @asm_option +); + +#keyset[id] +asm_option_is_raw( + int id: @asm_option ref +); + +@asm_piece = + @asm_clobber_abi +| @asm_operand_named +| @asm_options_list +; + +asm_reg_specs( + unique int id: @asm_reg_spec +); + +#keyset[id] +asm_reg_spec_identifiers( + int id: @asm_reg_spec ref, + int identifier: @name_ref ref +); + +assoc_item_lists( + unique int id: @assoc_item_list +); + +#keyset[id, index] +assoc_item_list_assoc_items( + int id: @assoc_item_list ref, + int index: int ref, + int assoc_item: @assoc_item ref +); + +#keyset[id, index] +assoc_item_list_attrs( + int id: @assoc_item_list ref, + int index: int ref, + int attr: @attr ref +); + +attrs( + unique int id: @attr +); + +#keyset[id] +attr_meta( + int id: @attr ref, + int meta: @meta ref +); + +@callable = + @closure_expr +| @function +; + +#keyset[id] +callable_param_lists( + int id: @callable ref, + int param_list: @param_list ref +); + +#keyset[id, index] +callable_attrs( + int id: @callable ref, + int index: int ref, + int attr: @attr ref +); + +@expr = + @array_expr_internal +| @asm_expr +| @await_expr +| @become_expr +| @binary_expr +| @break_expr +| @call_expr_base +| @cast_expr +| @closure_expr +| @continue_expr +| @field_expr +| @format_args_expr +| @if_expr +| @index_expr +| @labelable_expr +| @let_expr +| @literal_expr +| @macro_block_expr +| @macro_expr +| @match_expr +| @offset_of_expr +| @paren_expr +| @path_expr_base +| @prefix_expr +| @range_expr +| @ref_expr +| @return_expr +| @struct_expr +| @try_expr +| @tuple_expr +| @underscore_expr +| @yeet_expr +| @yield_expr +; + +extern_item_lists( + unique int id: @extern_item_list +); + +#keyset[id, index] +extern_item_list_attrs( + int id: @extern_item_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +extern_item_list_extern_items( + int id: @extern_item_list ref, + int index: int ref, + int extern_item: @extern_item ref +); + +@field_list = + @struct_field_list +| @tuple_field_list +; + +for_binders( + unique int id: @for_binder +); + +#keyset[id] +for_binder_generic_param_lists( + int id: @for_binder ref, + int generic_param_list: @generic_param_list ref +); + +format_args_args( + unique int id: @format_args_arg +); + +#keyset[id] +format_args_arg_exprs( + int id: @format_args_arg ref, + int expr: @expr ref +); + +#keyset[id] +format_args_arg_names( + int id: @format_args_arg ref, + int name: @name ref +); + +@generic_arg = + @assoc_type_arg +| @const_arg +| @lifetime_arg +| @type_arg +; + +generic_arg_lists( + unique int id: @generic_arg_list +); + +#keyset[id, index] +generic_arg_list_generic_args( + int id: @generic_arg_list ref, + int index: int ref, + int generic_arg: @generic_arg ref +); + +@generic_param = + @const_param +| @lifetime_param +| @type_param +; + +generic_param_lists( + unique int id: @generic_param_list +); + +#keyset[id, index] +generic_param_list_generic_params( + int id: @generic_param_list ref, + int index: int ref, + int generic_param: @generic_param ref +); + +item_lists( + unique int id: @item_list +); + +#keyset[id, index] +item_list_attrs( + int id: @item_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +item_list_items( + int id: @item_list ref, + int index: int ref, + int item: @item ref +); + +labels( + unique int id: @label +); + +#keyset[id] +label_lifetimes( + int id: @label ref, + int lifetime: @lifetime ref +); + +let_elses( + unique int id: @let_else +); + +#keyset[id] +let_else_block_exprs( + int id: @let_else ref, + int block_expr: @block_expr ref +); + +macro_items( + unique int id: @macro_items +); + +#keyset[id, index] +macro_items_items( + int id: @macro_items ref, + int index: int ref, + int item: @item ref +); + +match_arms( + unique int id: @match_arm +); + +#keyset[id, index] +match_arm_attrs( + int id: @match_arm ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +match_arm_exprs( + int id: @match_arm ref, + int expr: @expr ref +); + +#keyset[id] +match_arm_guards( + int id: @match_arm ref, + int guard: @match_guard ref +); + +#keyset[id] +match_arm_pats( + int id: @match_arm ref, + int pat: @pat ref +); + +match_arm_lists( + unique int id: @match_arm_list +); + +#keyset[id, index] +match_arm_list_arms( + int id: @match_arm_list ref, + int index: int ref, + int arm: @match_arm ref +); + +#keyset[id, index] +match_arm_list_attrs( + int id: @match_arm_list ref, + int index: int ref, + int attr: @attr ref +); + +match_guards( + unique int id: @match_guard +); + +#keyset[id] +match_guard_conditions( + int id: @match_guard ref, + int condition: @expr ref +); + +meta( + unique int id: @meta +); + +#keyset[id] +meta_exprs( + int id: @meta ref, + int expr: @expr ref +); + +#keyset[id] +meta_is_unsafe( + int id: @meta ref +); + +#keyset[id] +meta_paths( + int id: @meta ref, + int path: @path ref +); + +#keyset[id] +meta_token_trees( + int id: @meta ref, + int token_tree: @token_tree ref +); + +names( + unique int id: @name +); + +#keyset[id] +name_texts( + int id: @name ref, + string text: string ref +); + +@param_base = + @param +| @self_param +; + +#keyset[id, index] +param_base_attrs( + int id: @param_base ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +param_base_type_reprs( + int id: @param_base ref, + int type_repr: @type_repr ref +); + +param_lists( + unique int id: @param_list +); + +#keyset[id, index] +param_list_params( + int id: @param_list ref, + int index: int ref, + int param: @param ref +); + +#keyset[id] +param_list_self_params( + int id: @param_list ref, + int self_param: @self_param ref +); + +parenthesized_arg_lists( + unique int id: @parenthesized_arg_list +); + +#keyset[id, index] +parenthesized_arg_list_type_args( + int id: @parenthesized_arg_list ref, + int index: int ref, + int type_arg: @type_arg ref +); + +@pat = + @box_pat +| @const_block_pat +| @ident_pat +| @literal_pat +| @macro_pat +| @or_pat +| @paren_pat +| @path_pat +| @range_pat +| @ref_pat +| @rest_pat +| @slice_pat +| @struct_pat +| @tuple_pat +| @tuple_struct_pat +| @wildcard_pat +; + +paths( + unique int id: @path +); + +#keyset[id] +path_qualifiers( + int id: @path ref, + int qualifier: @path ref +); + +#keyset[id] +path_segments_( + int id: @path ref, + int segment: @path_segment ref +); + +@path_ast_node = + @path_expr +| @path_pat +| @struct_expr +| @struct_pat +| @tuple_struct_pat +; + +#keyset[id] +path_ast_node_paths( + int id: @path_ast_node ref, + int path: @path ref +); + +path_segments( + unique int id: @path_segment +); + +#keyset[id] +path_segment_generic_arg_lists( + int id: @path_segment ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +path_segment_identifiers( + int id: @path_segment ref, + int identifier: @name_ref ref +); + +#keyset[id] +path_segment_parenthesized_arg_lists( + int id: @path_segment ref, + int parenthesized_arg_list: @parenthesized_arg_list ref +); + +#keyset[id] +path_segment_ret_types( + int id: @path_segment ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +path_segment_return_type_syntaxes( + int id: @path_segment ref, + int return_type_syntax: @return_type_syntax ref +); + +#keyset[id] +path_segment_type_reprs( + int id: @path_segment ref, + int type_repr: @type_repr ref +); + +#keyset[id] +path_segment_trait_type_reprs( + int id: @path_segment ref, + int trait_type_repr: @path_type_repr ref +); + +renames( + unique int id: @rename +); + +#keyset[id] +rename_names( + int id: @rename ref, + int name: @name ref +); + +ret_type_reprs( + unique int id: @ret_type_repr +); + +#keyset[id] +ret_type_repr_type_reprs( + int id: @ret_type_repr ref, + int type_repr: @type_repr ref +); + +return_type_syntaxes( + unique int id: @return_type_syntax +); + +source_files( + unique int id: @source_file +); + +#keyset[id, index] +source_file_attrs( + int id: @source_file ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +source_file_items( + int id: @source_file ref, + int index: int ref, + int item: @item ref +); + +@stmt = + @expr_stmt +| @item +| @let_stmt +; + +stmt_lists( + unique int id: @stmt_list +); + +#keyset[id, index] +stmt_list_attrs( + int id: @stmt_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +stmt_list_statements( + int id: @stmt_list ref, + int index: int ref, + int statement: @stmt ref +); + +#keyset[id] +stmt_list_tail_exprs( + int id: @stmt_list ref, + int tail_expr: @expr ref +); + +struct_expr_fields( + unique int id: @struct_expr_field +); + +#keyset[id, index] +struct_expr_field_attrs( + int id: @struct_expr_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_expr_field_exprs( + int id: @struct_expr_field ref, + int expr: @expr ref +); + +#keyset[id] +struct_expr_field_identifiers( + int id: @struct_expr_field ref, + int identifier: @name_ref ref +); + +struct_expr_field_lists( + unique int id: @struct_expr_field_list +); + +#keyset[id, index] +struct_expr_field_list_attrs( + int id: @struct_expr_field_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +struct_expr_field_list_fields( + int id: @struct_expr_field_list ref, + int index: int ref, + int field: @struct_expr_field ref +); + +#keyset[id] +struct_expr_field_list_spreads( + int id: @struct_expr_field_list ref, + int spread: @expr ref +); + +struct_fields( + unique int id: @struct_field +); + +#keyset[id, index] +struct_field_attrs( + int id: @struct_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_field_defaults( + int id: @struct_field ref, + int default: @expr ref +); + +#keyset[id] +struct_field_is_unsafe( + int id: @struct_field ref +); + +#keyset[id] +struct_field_names( + int id: @struct_field ref, + int name: @name ref +); + +#keyset[id] +struct_field_type_reprs( + int id: @struct_field ref, + int type_repr: @type_repr ref +); + +#keyset[id] +struct_field_visibilities( + int id: @struct_field ref, + int visibility: @visibility ref +); + +struct_pat_fields( + unique int id: @struct_pat_field +); + +#keyset[id, index] +struct_pat_field_attrs( + int id: @struct_pat_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_pat_field_identifiers( + int id: @struct_pat_field ref, + int identifier: @name_ref ref +); + +#keyset[id] +struct_pat_field_pats( + int id: @struct_pat_field ref, + int pat: @pat ref +); + +struct_pat_field_lists( + unique int id: @struct_pat_field_list +); + +#keyset[id, index] +struct_pat_field_list_fields( + int id: @struct_pat_field_list ref, + int index: int ref, + int field: @struct_pat_field ref +); + +#keyset[id] +struct_pat_field_list_rest_pats( + int id: @struct_pat_field_list ref, + int rest_pat: @rest_pat ref +); + +@token = + @comment +; + +token_trees( + unique int id: @token_tree +); + +tuple_fields( + unique int id: @tuple_field +); + +#keyset[id, index] +tuple_field_attrs( + int id: @tuple_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +tuple_field_type_reprs( + int id: @tuple_field ref, + int type_repr: @type_repr ref +); + +#keyset[id] +tuple_field_visibilities( + int id: @tuple_field ref, + int visibility: @visibility ref +); + +type_bounds( + unique int id: @type_bound +); + +#keyset[id] +type_bound_for_binders( + int id: @type_bound ref, + int for_binder: @for_binder ref +); + +#keyset[id] +type_bound_is_async( + int id: @type_bound ref +); + +#keyset[id] +type_bound_is_const( + int id: @type_bound ref +); + +#keyset[id] +type_bound_lifetimes( + int id: @type_bound ref, + int lifetime: @lifetime ref +); + +#keyset[id] +type_bound_type_reprs( + int id: @type_bound ref, + int type_repr: @type_repr ref +); + +#keyset[id] +type_bound_use_bound_generic_args( + int id: @type_bound ref, + int use_bound_generic_args: @use_bound_generic_args ref +); + +type_bound_lists( + unique int id: @type_bound_list +); + +#keyset[id, index] +type_bound_list_bounds( + int id: @type_bound_list ref, + int index: int ref, + int bound: @type_bound ref +); + +@type_repr = + @array_type_repr +| @dyn_trait_type_repr +| @fn_ptr_type_repr +| @for_type_repr +| @impl_trait_type_repr +| @infer_type_repr +| @macro_type_repr +| @never_type_repr +| @paren_type_repr +| @path_type_repr +| @ptr_type_repr +| @ref_type_repr +| @slice_type_repr +| @tuple_type_repr +; + +@use_bound_generic_arg = + @lifetime +| @name_ref +; + +use_bound_generic_args( + unique int id: @use_bound_generic_args +); + +#keyset[id, index] +use_bound_generic_args_use_bound_generic_args( + int id: @use_bound_generic_args ref, + int index: int ref, + int use_bound_generic_arg: @use_bound_generic_arg ref +); + +use_trees( + unique int id: @use_tree +); + +#keyset[id] +use_tree_is_glob( + int id: @use_tree ref +); + +#keyset[id] +use_tree_paths( + int id: @use_tree ref, + int path: @path ref +); + +#keyset[id] +use_tree_renames( + int id: @use_tree ref, + int rename: @rename ref +); + +#keyset[id] +use_tree_use_tree_lists( + int id: @use_tree ref, + int use_tree_list: @use_tree_list ref +); + +use_tree_lists( + unique int id: @use_tree_list +); + +#keyset[id, index] +use_tree_list_use_trees( + int id: @use_tree_list ref, + int index: int ref, + int use_tree: @use_tree ref +); + +variant_lists( + unique int id: @variant_list +); + +#keyset[id, index] +variant_list_variants( + int id: @variant_list ref, + int index: int ref, + int variant: @variant ref +); + +visibilities( + unique int id: @visibility +); + +#keyset[id] +visibility_paths( + int id: @visibility ref, + int path: @path ref +); + +where_clauses( + unique int id: @where_clause +); + +#keyset[id, index] +where_clause_predicates( + int id: @where_clause ref, + int index: int ref, + int predicate: @where_pred ref +); + +where_preds( + unique int id: @where_pred +); + +#keyset[id] +where_pred_for_binders( + int id: @where_pred ref, + int for_binder: @for_binder ref +); + +#keyset[id] +where_pred_lifetimes( + int id: @where_pred ref, + int lifetime: @lifetime ref +); + +#keyset[id] +where_pred_type_reprs( + int id: @where_pred ref, + int type_repr: @type_repr ref +); + +#keyset[id] +where_pred_type_bound_lists( + int id: @where_pred ref, + int type_bound_list: @type_bound_list ref +); + +array_expr_internals( + unique int id: @array_expr_internal +); + +#keyset[id, index] +array_expr_internal_attrs( + int id: @array_expr_internal ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +array_expr_internal_exprs( + int id: @array_expr_internal ref, + int index: int ref, + int expr: @expr ref +); + +#keyset[id] +array_expr_internal_is_semicolon( + int id: @array_expr_internal ref +); + +array_type_reprs( + unique int id: @array_type_repr +); + +#keyset[id] +array_type_repr_const_args( + int id: @array_type_repr ref, + int const_arg: @const_arg ref +); + +#keyset[id] +array_type_repr_element_type_reprs( + int id: @array_type_repr ref, + int element_type_repr: @type_repr ref +); + +asm_clobber_abis( + unique int id: @asm_clobber_abi +); + +asm_consts( + unique int id: @asm_const +); + +#keyset[id] +asm_const_exprs( + int id: @asm_const ref, + int expr: @expr ref +); + +#keyset[id] +asm_const_is_const( + int id: @asm_const ref +); + +asm_labels( + unique int id: @asm_label +); + +#keyset[id] +asm_label_block_exprs( + int id: @asm_label ref, + int block_expr: @block_expr ref +); + +asm_operand_nameds( + unique int id: @asm_operand_named +); + +#keyset[id] +asm_operand_named_asm_operands( + int id: @asm_operand_named ref, + int asm_operand: @asm_operand ref +); + +#keyset[id] +asm_operand_named_names( + int id: @asm_operand_named ref, + int name: @name ref +); + +asm_options_lists( + unique int id: @asm_options_list +); + +#keyset[id, index] +asm_options_list_asm_options( + int id: @asm_options_list ref, + int index: int ref, + int asm_option: @asm_option ref +); + +asm_reg_operands( + unique int id: @asm_reg_operand +); + +#keyset[id] +asm_reg_operand_asm_dir_specs( + int id: @asm_reg_operand ref, + int asm_dir_spec: @asm_dir_spec ref +); + +#keyset[id] +asm_reg_operand_asm_operand_exprs( + int id: @asm_reg_operand ref, + int asm_operand_expr: @asm_operand_expr ref +); + +#keyset[id] +asm_reg_operand_asm_reg_specs( + int id: @asm_reg_operand ref, + int asm_reg_spec: @asm_reg_spec ref +); + +asm_syms( + unique int id: @asm_sym +); + +#keyset[id] +asm_sym_paths( + int id: @asm_sym ref, + int path: @path ref +); + +assoc_type_args( + unique int id: @assoc_type_arg +); + +#keyset[id] +assoc_type_arg_const_args( + int id: @assoc_type_arg ref, + int const_arg: @const_arg ref +); + +#keyset[id] +assoc_type_arg_generic_arg_lists( + int id: @assoc_type_arg ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +assoc_type_arg_identifiers( + int id: @assoc_type_arg ref, + int identifier: @name_ref ref +); + +#keyset[id] +assoc_type_arg_param_lists( + int id: @assoc_type_arg ref, + int param_list: @param_list ref +); + +#keyset[id] +assoc_type_arg_ret_types( + int id: @assoc_type_arg ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +assoc_type_arg_return_type_syntaxes( + int id: @assoc_type_arg ref, + int return_type_syntax: @return_type_syntax ref +); + +#keyset[id] +assoc_type_arg_type_reprs( + int id: @assoc_type_arg ref, + int type_repr: @type_repr ref +); + +#keyset[id] +assoc_type_arg_type_bound_lists( + int id: @assoc_type_arg ref, + int type_bound_list: @type_bound_list ref +); + +await_exprs( + unique int id: @await_expr +); + +#keyset[id, index] +await_expr_attrs( + int id: @await_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +await_expr_exprs( + int id: @await_expr ref, + int expr: @expr ref +); + +become_exprs( + unique int id: @become_expr +); + +#keyset[id, index] +become_expr_attrs( + int id: @become_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +become_expr_exprs( + int id: @become_expr ref, + int expr: @expr ref +); + +binary_exprs( + unique int id: @binary_expr +); + +#keyset[id, index] +binary_expr_attrs( + int id: @binary_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +binary_expr_lhs( + int id: @binary_expr ref, + int lhs: @expr ref +); + +#keyset[id] +binary_expr_operator_names( + int id: @binary_expr ref, + string operator_name: string ref +); + +#keyset[id] +binary_expr_rhs( + int id: @binary_expr ref, + int rhs: @expr ref +); + +box_pats( + unique int id: @box_pat +); + +#keyset[id] +box_pat_pats( + int id: @box_pat ref, + int pat: @pat ref +); + +break_exprs( + unique int id: @break_expr +); + +#keyset[id, index] +break_expr_attrs( + int id: @break_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +break_expr_exprs( + int id: @break_expr ref, + int expr: @expr ref +); + +#keyset[id] +break_expr_lifetimes( + int id: @break_expr ref, + int lifetime: @lifetime ref +); + +@call_expr_base = + @call_expr +| @method_call_expr +; + +#keyset[id] +call_expr_base_arg_lists( + int id: @call_expr_base ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +call_expr_base_attrs( + int id: @call_expr_base ref, + int index: int ref, + int attr: @attr ref +); + +cast_exprs( + unique int id: @cast_expr +); + +#keyset[id, index] +cast_expr_attrs( + int id: @cast_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +cast_expr_exprs( + int id: @cast_expr ref, + int expr: @expr ref +); + +#keyset[id] +cast_expr_type_reprs( + int id: @cast_expr ref, + int type_repr: @type_repr ref +); + +closure_exprs( + unique int id: @closure_expr +); + +#keyset[id] +closure_expr_closure_bodies( + int id: @closure_expr ref, + int closure_body: @expr ref +); + +#keyset[id] +closure_expr_for_binders( + int id: @closure_expr ref, + int for_binder: @for_binder ref +); + +#keyset[id] +closure_expr_is_async( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_const( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_gen( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_move( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_static( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_ret_types( + int id: @closure_expr ref, + int ret_type: @ret_type_repr ref +); + +comments( + unique int id: @comment, + int parent: @ast_node ref, + string text: string ref +); + +const_args( + unique int id: @const_arg +); + +#keyset[id] +const_arg_exprs( + int id: @const_arg ref, + int expr: @expr ref +); + +const_block_pats( + unique int id: @const_block_pat +); + +#keyset[id] +const_block_pat_block_exprs( + int id: @const_block_pat ref, + int block_expr: @block_expr ref +); + +#keyset[id] +const_block_pat_is_const( + int id: @const_block_pat ref +); + +const_params( + unique int id: @const_param +); + +#keyset[id, index] +const_param_attrs( + int id: @const_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +const_param_default_vals( + int id: @const_param ref, + int default_val: @const_arg ref +); + +#keyset[id] +const_param_is_const( + int id: @const_param ref +); + +#keyset[id] +const_param_names( + int id: @const_param ref, + int name: @name ref +); + +#keyset[id] +const_param_type_reprs( + int id: @const_param ref, + int type_repr: @type_repr ref +); + +continue_exprs( + unique int id: @continue_expr +); + +#keyset[id, index] +continue_expr_attrs( + int id: @continue_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +continue_expr_lifetimes( + int id: @continue_expr ref, + int lifetime: @lifetime ref +); + +dyn_trait_type_reprs( + unique int id: @dyn_trait_type_repr +); + +#keyset[id] +dyn_trait_type_repr_type_bound_lists( + int id: @dyn_trait_type_repr ref, + int type_bound_list: @type_bound_list ref +); + +expr_stmts( + unique int id: @expr_stmt +); + +#keyset[id] +expr_stmt_exprs( + int id: @expr_stmt ref, + int expr: @expr ref +); + +field_exprs( + unique int id: @field_expr +); + +#keyset[id, index] +field_expr_attrs( + int id: @field_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +field_expr_containers( + int id: @field_expr ref, + int container: @expr ref +); + +#keyset[id] +field_expr_identifiers( + int id: @field_expr ref, + int identifier: @name_ref ref +); + +fn_ptr_type_reprs( + unique int id: @fn_ptr_type_repr +); + +#keyset[id] +fn_ptr_type_repr_abis( + int id: @fn_ptr_type_repr ref, + int abi: @abi ref +); + +#keyset[id] +fn_ptr_type_repr_is_async( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_is_const( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_is_unsafe( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_param_lists( + int id: @fn_ptr_type_repr ref, + int param_list: @param_list ref +); + +#keyset[id] +fn_ptr_type_repr_ret_types( + int id: @fn_ptr_type_repr ref, + int ret_type: @ret_type_repr ref +); + +for_type_reprs( + unique int id: @for_type_repr +); + +#keyset[id] +for_type_repr_for_binders( + int id: @for_type_repr ref, + int for_binder: @for_binder ref +); + +#keyset[id] +for_type_repr_type_reprs( + int id: @for_type_repr ref, + int type_repr: @type_repr ref +); + +format_args_exprs( + unique int id: @format_args_expr +); + +#keyset[id, index] +format_args_expr_args( + int id: @format_args_expr ref, + int index: int ref, + int arg: @format_args_arg ref +); + +#keyset[id, index] +format_args_expr_attrs( + int id: @format_args_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +format_args_expr_templates( + int id: @format_args_expr ref, + int template: @expr ref +); + +ident_pats( + unique int id: @ident_pat +); + +#keyset[id, index] +ident_pat_attrs( + int id: @ident_pat ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +ident_pat_is_mut( + int id: @ident_pat ref +); + +#keyset[id] +ident_pat_is_ref( + int id: @ident_pat ref +); + +#keyset[id] +ident_pat_names( + int id: @ident_pat ref, + int name: @name ref +); + +#keyset[id] +ident_pat_pats( + int id: @ident_pat ref, + int pat: @pat ref +); + +if_exprs( + unique int id: @if_expr +); + +#keyset[id, index] +if_expr_attrs( + int id: @if_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +if_expr_conditions( + int id: @if_expr ref, + int condition: @expr ref +); + +#keyset[id] +if_expr_elses( + int id: @if_expr ref, + int else: @expr ref +); + +#keyset[id] +if_expr_thens( + int id: @if_expr ref, + int then: @block_expr ref +); + +impl_trait_type_reprs( + unique int id: @impl_trait_type_repr +); + +#keyset[id] +impl_trait_type_repr_type_bound_lists( + int id: @impl_trait_type_repr ref, + int type_bound_list: @type_bound_list ref +); + +index_exprs( + unique int id: @index_expr +); + +#keyset[id, index] +index_expr_attrs( + int id: @index_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +index_expr_bases( + int id: @index_expr ref, + int base: @expr ref +); + +#keyset[id] +index_expr_indices( + int id: @index_expr ref, + int index: @expr ref +); + +infer_type_reprs( + unique int id: @infer_type_repr +); + +@item = + @adt +| @asm_expr +| @assoc_item +| @extern_block +| @extern_crate +| @extern_item +| @impl +| @macro_def +| @macro_rules +| @module +| @trait +| @trait_alias +| @use +; + +#keyset[id] +item_attribute_macro_expansions( + int id: @item ref, + int attribute_macro_expansion: @macro_items ref +); + +@labelable_expr = + @block_expr +| @looping_expr +; + +#keyset[id] +labelable_expr_labels( + int id: @labelable_expr ref, + int label: @label ref +); + +let_exprs( + unique int id: @let_expr +); + +#keyset[id, index] +let_expr_attrs( + int id: @let_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +let_expr_scrutinees( + int id: @let_expr ref, + int scrutinee: @expr ref +); + +#keyset[id] +let_expr_pats( + int id: @let_expr ref, + int pat: @pat ref +); + +let_stmts( + unique int id: @let_stmt +); + +#keyset[id, index] +let_stmt_attrs( + int id: @let_stmt ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +let_stmt_initializers( + int id: @let_stmt ref, + int initializer: @expr ref +); + +#keyset[id] +let_stmt_let_elses( + int id: @let_stmt ref, + int let_else: @let_else ref +); + +#keyset[id] +let_stmt_pats( + int id: @let_stmt ref, + int pat: @pat ref +); + +#keyset[id] +let_stmt_type_reprs( + int id: @let_stmt ref, + int type_repr: @type_repr ref +); + +lifetimes( + unique int id: @lifetime +); + +#keyset[id] +lifetime_texts( + int id: @lifetime ref, + string text: string ref +); + +lifetime_args( + unique int id: @lifetime_arg +); + +#keyset[id] +lifetime_arg_lifetimes( + int id: @lifetime_arg ref, + int lifetime: @lifetime ref +); + +lifetime_params( + unique int id: @lifetime_param +); + +#keyset[id, index] +lifetime_param_attrs( + int id: @lifetime_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +lifetime_param_lifetimes( + int id: @lifetime_param ref, + int lifetime: @lifetime ref +); + +#keyset[id] +lifetime_param_type_bound_lists( + int id: @lifetime_param ref, + int type_bound_list: @type_bound_list ref +); + +literal_exprs( + unique int id: @literal_expr +); + +#keyset[id, index] +literal_expr_attrs( + int id: @literal_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +literal_expr_text_values( + int id: @literal_expr ref, + string text_value: string ref +); + +literal_pats( + unique int id: @literal_pat +); + +#keyset[id] +literal_pat_literals( + int id: @literal_pat ref, + int literal: @literal_expr ref +); + +macro_block_exprs( + unique int id: @macro_block_expr +); + +#keyset[id, index] +macro_block_expr_statements( + int id: @macro_block_expr ref, + int index: int ref, + int statement: @stmt ref +); + +#keyset[id] +macro_block_expr_tail_exprs( + int id: @macro_block_expr ref, + int tail_expr: @expr ref +); + +macro_exprs( + unique int id: @macro_expr +); + +#keyset[id] +macro_expr_macro_calls( + int id: @macro_expr ref, + int macro_call: @macro_call ref +); + +macro_pats( + unique int id: @macro_pat +); + +#keyset[id] +macro_pat_macro_calls( + int id: @macro_pat ref, + int macro_call: @macro_call ref +); + +macro_type_reprs( + unique int id: @macro_type_repr +); + +#keyset[id] +macro_type_repr_macro_calls( + int id: @macro_type_repr ref, + int macro_call: @macro_call ref +); + +match_exprs( + unique int id: @match_expr +); + +#keyset[id, index] +match_expr_attrs( + int id: @match_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +match_expr_scrutinees( + int id: @match_expr ref, + int scrutinee: @expr ref +); + +#keyset[id] +match_expr_match_arm_lists( + int id: @match_expr ref, + int match_arm_list: @match_arm_list ref +); + +name_refs( + unique int id: @name_ref +); + +#keyset[id] +name_ref_texts( + int id: @name_ref ref, + string text: string ref +); + +never_type_reprs( + unique int id: @never_type_repr +); + +offset_of_exprs( + unique int id: @offset_of_expr +); + +#keyset[id, index] +offset_of_expr_attrs( + int id: @offset_of_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +offset_of_expr_fields( + int id: @offset_of_expr ref, + int index: int ref, + int field: @name_ref ref +); + +#keyset[id] +offset_of_expr_type_reprs( + int id: @offset_of_expr ref, + int type_repr: @type_repr ref +); + +or_pats( + unique int id: @or_pat +); + +#keyset[id, index] +or_pat_pats( + int id: @or_pat ref, + int index: int ref, + int pat: @pat ref +); + +params( + unique int id: @param +); + +#keyset[id] +param_pats( + int id: @param ref, + int pat: @pat ref +); + +paren_exprs( + unique int id: @paren_expr +); + +#keyset[id, index] +paren_expr_attrs( + int id: @paren_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +paren_expr_exprs( + int id: @paren_expr ref, + int expr: @expr ref +); + +paren_pats( + unique int id: @paren_pat +); + +#keyset[id] +paren_pat_pats( + int id: @paren_pat ref, + int pat: @pat ref +); + +paren_type_reprs( + unique int id: @paren_type_repr +); + +#keyset[id] +paren_type_repr_type_reprs( + int id: @paren_type_repr ref, + int type_repr: @type_repr ref +); + +@path_expr_base = + @path_expr +; + +path_pats( + unique int id: @path_pat +); + +path_type_reprs( + unique int id: @path_type_repr +); + +#keyset[id] +path_type_repr_paths( + int id: @path_type_repr ref, + int path: @path ref +); + +prefix_exprs( + unique int id: @prefix_expr +); + +#keyset[id, index] +prefix_expr_attrs( + int id: @prefix_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +prefix_expr_exprs( + int id: @prefix_expr ref, + int expr: @expr ref +); + +#keyset[id] +prefix_expr_operator_names( + int id: @prefix_expr ref, + string operator_name: string ref +); + +ptr_type_reprs( + unique int id: @ptr_type_repr +); + +#keyset[id] +ptr_type_repr_is_const( + int id: @ptr_type_repr ref +); + +#keyset[id] +ptr_type_repr_is_mut( + int id: @ptr_type_repr ref +); + +#keyset[id] +ptr_type_repr_type_reprs( + int id: @ptr_type_repr ref, + int type_repr: @type_repr ref +); + +range_exprs( + unique int id: @range_expr +); + +#keyset[id, index] +range_expr_attrs( + int id: @range_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +range_expr_ends( + int id: @range_expr ref, + int end: @expr ref +); + +#keyset[id] +range_expr_operator_names( + int id: @range_expr ref, + string operator_name: string ref +); + +#keyset[id] +range_expr_starts( + int id: @range_expr ref, + int start: @expr ref +); + +range_pats( + unique int id: @range_pat +); + +#keyset[id] +range_pat_ends( + int id: @range_pat ref, + int end: @pat ref +); + +#keyset[id] +range_pat_operator_names( + int id: @range_pat ref, + string operator_name: string ref +); + +#keyset[id] +range_pat_starts( + int id: @range_pat ref, + int start: @pat ref +); + +ref_exprs( + unique int id: @ref_expr +); + +#keyset[id, index] +ref_expr_attrs( + int id: @ref_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +ref_expr_exprs( + int id: @ref_expr ref, + int expr: @expr ref +); + +#keyset[id] +ref_expr_is_const( + int id: @ref_expr ref +); + +#keyset[id] +ref_expr_is_mut( + int id: @ref_expr ref +); + +#keyset[id] +ref_expr_is_raw( + int id: @ref_expr ref +); + +ref_pats( + unique int id: @ref_pat +); + +#keyset[id] +ref_pat_is_mut( + int id: @ref_pat ref +); + +#keyset[id] +ref_pat_pats( + int id: @ref_pat ref, + int pat: @pat ref +); + +ref_type_reprs( + unique int id: @ref_type_repr +); + +#keyset[id] +ref_type_repr_is_mut( + int id: @ref_type_repr ref +); + +#keyset[id] +ref_type_repr_lifetimes( + int id: @ref_type_repr ref, + int lifetime: @lifetime ref +); + +#keyset[id] +ref_type_repr_type_reprs( + int id: @ref_type_repr ref, + int type_repr: @type_repr ref +); + +rest_pats( + unique int id: @rest_pat +); + +#keyset[id, index] +rest_pat_attrs( + int id: @rest_pat ref, + int index: int ref, + int attr: @attr ref +); + +return_exprs( + unique int id: @return_expr +); + +#keyset[id, index] +return_expr_attrs( + int id: @return_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +return_expr_exprs( + int id: @return_expr ref, + int expr: @expr ref +); + +self_params( + unique int id: @self_param +); + +#keyset[id] +self_param_is_ref( + int id: @self_param ref +); + +#keyset[id] +self_param_is_mut( + int id: @self_param ref +); + +#keyset[id] +self_param_lifetimes( + int id: @self_param ref, + int lifetime: @lifetime ref +); + +#keyset[id] +self_param_names( + int id: @self_param ref, + int name: @name ref +); + +slice_pats( + unique int id: @slice_pat +); + +#keyset[id, index] +slice_pat_pats( + int id: @slice_pat ref, + int index: int ref, + int pat: @pat ref +); + +slice_type_reprs( + unique int id: @slice_type_repr +); + +#keyset[id] +slice_type_repr_type_reprs( + int id: @slice_type_repr ref, + int type_repr: @type_repr ref +); + +struct_exprs( + unique int id: @struct_expr +); + +#keyset[id] +struct_expr_struct_expr_field_lists( + int id: @struct_expr ref, + int struct_expr_field_list: @struct_expr_field_list ref +); + +struct_field_lists( + unique int id: @struct_field_list +); + +#keyset[id, index] +struct_field_list_fields( + int id: @struct_field_list ref, + int index: int ref, + int field: @struct_field ref +); + +struct_pats( + unique int id: @struct_pat +); + +#keyset[id] +struct_pat_struct_pat_field_lists( + int id: @struct_pat ref, + int struct_pat_field_list: @struct_pat_field_list ref +); + +try_exprs( + unique int id: @try_expr +); + +#keyset[id, index] +try_expr_attrs( + int id: @try_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +try_expr_exprs( + int id: @try_expr ref, + int expr: @expr ref +); + +tuple_exprs( + unique int id: @tuple_expr +); + +#keyset[id, index] +tuple_expr_attrs( + int id: @tuple_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +tuple_expr_fields( + int id: @tuple_expr ref, + int index: int ref, + int field: @expr ref +); + +tuple_field_lists( + unique int id: @tuple_field_list +); + +#keyset[id, index] +tuple_field_list_fields( + int id: @tuple_field_list ref, + int index: int ref, + int field: @tuple_field ref +); + +tuple_pats( + unique int id: @tuple_pat +); + +#keyset[id, index] +tuple_pat_fields( + int id: @tuple_pat ref, + int index: int ref, + int field: @pat ref +); + +tuple_struct_pats( + unique int id: @tuple_struct_pat +); + +#keyset[id, index] +tuple_struct_pat_fields( + int id: @tuple_struct_pat ref, + int index: int ref, + int field: @pat ref +); + +tuple_type_reprs( + unique int id: @tuple_type_repr +); + +#keyset[id, index] +tuple_type_repr_fields( + int id: @tuple_type_repr ref, + int index: int ref, + int field: @type_repr ref +); + +type_args( + unique int id: @type_arg +); + +#keyset[id] +type_arg_type_reprs( + int id: @type_arg ref, + int type_repr: @type_repr ref +); + +type_params( + unique int id: @type_param +); + +#keyset[id, index] +type_param_attrs( + int id: @type_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +type_param_default_types( + int id: @type_param ref, + int default_type: @type_repr ref +); + +#keyset[id] +type_param_names( + int id: @type_param ref, + int name: @name ref +); + +#keyset[id] +type_param_type_bound_lists( + int id: @type_param ref, + int type_bound_list: @type_bound_list ref +); + +underscore_exprs( + unique int id: @underscore_expr +); + +#keyset[id, index] +underscore_expr_attrs( + int id: @underscore_expr ref, + int index: int ref, + int attr: @attr ref +); + +variants( + unique int id: @variant +); + +#keyset[id, index] +variant_attrs( + int id: @variant ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +variant_discriminants( + int id: @variant ref, + int discriminant: @expr ref +); + +#keyset[id] +variant_field_lists( + int id: @variant ref, + int field_list: @field_list ref +); + +#keyset[id] +variant_names( + int id: @variant ref, + int name: @name ref +); + +#keyset[id] +variant_visibilities( + int id: @variant ref, + int visibility: @visibility ref +); + +wildcard_pats( + unique int id: @wildcard_pat +); + +yeet_exprs( + unique int id: @yeet_expr +); + +#keyset[id, index] +yeet_expr_attrs( + int id: @yeet_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +yeet_expr_exprs( + int id: @yeet_expr ref, + int expr: @expr ref +); + +yield_exprs( + unique int id: @yield_expr +); + +#keyset[id, index] +yield_expr_attrs( + int id: @yield_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +yield_expr_exprs( + int id: @yield_expr ref, + int expr: @expr ref +); + +@adt = + @enum +| @struct +| @union +; + +#keyset[id, index] +adt_derive_macro_expansions( + int id: @adt ref, + int index: int ref, + int derive_macro_expansion: @macro_items ref +); + +asm_exprs( + unique int id: @asm_expr +); + +#keyset[id, index] +asm_expr_asm_pieces( + int id: @asm_expr ref, + int index: int ref, + int asm_piece: @asm_piece ref +); + +#keyset[id, index] +asm_expr_attrs( + int id: @asm_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +asm_expr_templates( + int id: @asm_expr ref, + int index: int ref, + int template: @expr ref +); + +@assoc_item = + @const +| @function +| @macro_call +| @type_alias +; + +block_exprs( + unique int id: @block_expr +); + +#keyset[id, index] +block_expr_attrs( + int id: @block_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +block_expr_is_async( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_const( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_gen( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_move( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_try( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_unsafe( + int id: @block_expr ref +); + +#keyset[id] +block_expr_stmt_lists( + int id: @block_expr ref, + int stmt_list: @stmt_list ref +); + +call_exprs( + unique int id: @call_expr +); + +#keyset[id] +call_expr_functions( + int id: @call_expr ref, + int function: @expr ref +); + +extern_blocks( + unique int id: @extern_block +); + +#keyset[id] +extern_block_abis( + int id: @extern_block ref, + int abi: @abi ref +); + +#keyset[id, index] +extern_block_attrs( + int id: @extern_block ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +extern_block_extern_item_lists( + int id: @extern_block ref, + int extern_item_list: @extern_item_list ref +); + +#keyset[id] +extern_block_is_unsafe( + int id: @extern_block ref +); + +extern_crates( + unique int id: @extern_crate +); + +#keyset[id, index] +extern_crate_attrs( + int id: @extern_crate ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +extern_crate_identifiers( + int id: @extern_crate ref, + int identifier: @name_ref ref +); + +#keyset[id] +extern_crate_renames( + int id: @extern_crate ref, + int rename: @rename ref +); + +#keyset[id] +extern_crate_visibilities( + int id: @extern_crate ref, + int visibility: @visibility ref +); + +@extern_item = + @function +| @macro_call +| @static +| @type_alias +; + +impls( + unique int id: @impl +); + +#keyset[id] +impl_assoc_item_lists( + int id: @impl ref, + int assoc_item_list: @assoc_item_list ref +); + +#keyset[id, index] +impl_attrs( + int id: @impl ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +impl_generic_param_lists( + int id: @impl ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +impl_is_const( + int id: @impl ref +); + +#keyset[id] +impl_is_default( + int id: @impl ref +); + +#keyset[id] +impl_is_unsafe( + int id: @impl ref +); + +#keyset[id] +impl_self_ties( + int id: @impl ref, + int self_ty: @type_repr ref +); + +#keyset[id] +impl_traits( + int id: @impl ref, + int trait: @type_repr ref +); + +#keyset[id] +impl_visibilities( + int id: @impl ref, + int visibility: @visibility ref +); + +#keyset[id] +impl_where_clauses( + int id: @impl ref, + int where_clause: @where_clause ref +); + +@looping_expr = + @for_expr +| @loop_expr +| @while_expr +; + +#keyset[id] +looping_expr_loop_bodies( + int id: @looping_expr ref, + int loop_body: @block_expr ref +); + +macro_defs( + unique int id: @macro_def +); + +#keyset[id] +macro_def_args( + int id: @macro_def ref, + int args: @token_tree ref +); + +#keyset[id, index] +macro_def_attrs( + int id: @macro_def ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_def_bodies( + int id: @macro_def ref, + int body: @token_tree ref +); + +#keyset[id] +macro_def_names( + int id: @macro_def ref, + int name: @name ref +); + +#keyset[id] +macro_def_visibilities( + int id: @macro_def ref, + int visibility: @visibility ref +); + +macro_rules( + unique int id: @macro_rules +); + +#keyset[id, index] +macro_rules_attrs( + int id: @macro_rules ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_rules_names( + int id: @macro_rules ref, + int name: @name ref +); + +#keyset[id] +macro_rules_token_trees( + int id: @macro_rules ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_rules_visibilities( + int id: @macro_rules ref, + int visibility: @visibility ref +); + +method_call_exprs( + unique int id: @method_call_expr +); + +#keyset[id] +method_call_expr_generic_arg_lists( + int id: @method_call_expr ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +method_call_expr_identifiers( + int id: @method_call_expr ref, + int identifier: @name_ref ref +); + +#keyset[id] +method_call_expr_receivers( + int id: @method_call_expr ref, + int receiver: @expr ref +); + +modules( + unique int id: @module +); + +#keyset[id, index] +module_attrs( + int id: @module ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +module_item_lists( + int id: @module ref, + int item_list: @item_list ref +); + +#keyset[id] +module_names( + int id: @module ref, + int name: @name ref +); + +#keyset[id] +module_visibilities( + int id: @module ref, + int visibility: @visibility ref +); + +path_exprs( + unique int id: @path_expr +); + +#keyset[id, index] +path_expr_attrs( + int id: @path_expr ref, + int index: int ref, + int attr: @attr ref +); + +traits( + unique int id: @trait +); + +#keyset[id] +trait_assoc_item_lists( + int id: @trait ref, + int assoc_item_list: @assoc_item_list ref +); + +#keyset[id, index] +trait_attrs( + int id: @trait ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +trait_generic_param_lists( + int id: @trait ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +trait_is_auto( + int id: @trait ref +); + +#keyset[id] +trait_is_unsafe( + int id: @trait ref +); + +#keyset[id] +trait_names( + int id: @trait ref, + int name: @name ref +); + +#keyset[id] +trait_type_bound_lists( + int id: @trait ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +trait_visibilities( + int id: @trait ref, + int visibility: @visibility ref +); + +#keyset[id] +trait_where_clauses( + int id: @trait ref, + int where_clause: @where_clause ref +); + +trait_aliases( + unique int id: @trait_alias +); + +#keyset[id, index] +trait_alias_attrs( + int id: @trait_alias ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +trait_alias_generic_param_lists( + int id: @trait_alias ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +trait_alias_names( + int id: @trait_alias ref, + int name: @name ref +); + +#keyset[id] +trait_alias_type_bound_lists( + int id: @trait_alias ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +trait_alias_visibilities( + int id: @trait_alias ref, + int visibility: @visibility ref +); + +#keyset[id] +trait_alias_where_clauses( + int id: @trait_alias ref, + int where_clause: @where_clause ref +); + +uses( + unique int id: @use +); + +#keyset[id, index] +use_attrs( + int id: @use ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +use_use_trees( + int id: @use ref, + int use_tree: @use_tree ref +); + +#keyset[id] +use_visibilities( + int id: @use ref, + int visibility: @visibility ref +); + +consts( + unique int id: @const +); + +#keyset[id, index] +const_attrs( + int id: @const ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +const_bodies( + int id: @const ref, + int body: @expr ref +); + +#keyset[id] +const_generic_param_lists( + int id: @const ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +const_is_const( + int id: @const ref +); + +#keyset[id] +const_is_default( + int id: @const ref +); + +#keyset[id] +const_names( + int id: @const ref, + int name: @name ref +); + +#keyset[id] +const_type_reprs( + int id: @const ref, + int type_repr: @type_repr ref +); + +#keyset[id] +const_visibilities( + int id: @const ref, + int visibility: @visibility ref +); + +#keyset[id] +const_where_clauses( + int id: @const ref, + int where_clause: @where_clause ref +); + +#keyset[id] +const_has_implementation( + int id: @const ref +); + +enums( + unique int id: @enum +); + +#keyset[id, index] +enum_attrs( + int id: @enum ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +enum_generic_param_lists( + int id: @enum ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +enum_names( + int id: @enum ref, + int name: @name ref +); + +#keyset[id] +enum_variant_lists( + int id: @enum ref, + int variant_list: @variant_list ref +); + +#keyset[id] +enum_visibilities( + int id: @enum ref, + int visibility: @visibility ref +); + +#keyset[id] +enum_where_clauses( + int id: @enum ref, + int where_clause: @where_clause ref +); + +for_exprs( + unique int id: @for_expr +); + +#keyset[id, index] +for_expr_attrs( + int id: @for_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +for_expr_iterables( + int id: @for_expr ref, + int iterable: @expr ref +); + +#keyset[id] +for_expr_pats( + int id: @for_expr ref, + int pat: @pat ref +); + +functions( + unique int id: @function +); + +#keyset[id] +function_abis( + int id: @function ref, + int abi: @abi ref +); + +#keyset[id] +function_function_bodies( + int id: @function ref, + int function_body: @block_expr ref +); + +#keyset[id] +function_generic_param_lists( + int id: @function ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +function_is_async( + int id: @function ref +); + +#keyset[id] +function_is_const( + int id: @function ref +); + +#keyset[id] +function_is_default( + int id: @function ref +); + +#keyset[id] +function_is_gen( + int id: @function ref +); + +#keyset[id] +function_is_unsafe( + int id: @function ref +); + +#keyset[id] +function_names( + int id: @function ref, + int name: @name ref +); + +#keyset[id] +function_ret_types( + int id: @function ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +function_visibilities( + int id: @function ref, + int visibility: @visibility ref +); + +#keyset[id] +function_where_clauses( + int id: @function ref, + int where_clause: @where_clause ref +); + +#keyset[id] +function_has_implementation( + int id: @function ref +); + +loop_exprs( + unique int id: @loop_expr +); + +#keyset[id, index] +loop_expr_attrs( + int id: @loop_expr ref, + int index: int ref, + int attr: @attr ref +); + +macro_calls( + unique int id: @macro_call +); + +#keyset[id, index] +macro_call_attrs( + int id: @macro_call ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_call_paths( + int id: @macro_call ref, + int path: @path ref +); + +#keyset[id] +macro_call_token_trees( + int id: @macro_call ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_call_macro_call_expansions( + int id: @macro_call ref, + int macro_call_expansion: @ast_node ref +); + +statics( + unique int id: @static +); + +#keyset[id, index] +static_attrs( + int id: @static ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +static_bodies( + int id: @static ref, + int body: @expr ref +); + +#keyset[id] +static_is_mut( + int id: @static ref +); + +#keyset[id] +static_is_static( + int id: @static ref +); + +#keyset[id] +static_is_unsafe( + int id: @static ref +); + +#keyset[id] +static_names( + int id: @static ref, + int name: @name ref +); + +#keyset[id] +static_type_reprs( + int id: @static ref, + int type_repr: @type_repr ref +); + +#keyset[id] +static_visibilities( + int id: @static ref, + int visibility: @visibility ref +); + +structs( + unique int id: @struct +); + +#keyset[id, index] +struct_attrs( + int id: @struct ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_field_lists_( + int id: @struct ref, + int field_list: @field_list ref +); + +#keyset[id] +struct_generic_param_lists( + int id: @struct ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +struct_names( + int id: @struct ref, + int name: @name ref +); + +#keyset[id] +struct_visibilities( + int id: @struct ref, + int visibility: @visibility ref +); + +#keyset[id] +struct_where_clauses( + int id: @struct ref, + int where_clause: @where_clause ref +); + +type_aliases( + unique int id: @type_alias +); + +#keyset[id, index] +type_alias_attrs( + int id: @type_alias ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +type_alias_generic_param_lists( + int id: @type_alias ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +type_alias_is_default( + int id: @type_alias ref +); + +#keyset[id] +type_alias_names( + int id: @type_alias ref, + int name: @name ref +); + +#keyset[id] +type_alias_type_reprs( + int id: @type_alias ref, + int type_repr: @type_repr ref +); + +#keyset[id] +type_alias_type_bound_lists( + int id: @type_alias ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +type_alias_visibilities( + int id: @type_alias ref, + int visibility: @visibility ref +); + +#keyset[id] +type_alias_where_clauses( + int id: @type_alias ref, + int where_clause: @where_clause ref +); + +unions( + unique int id: @union +); + +#keyset[id, index] +union_attrs( + int id: @union ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +union_generic_param_lists( + int id: @union ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +union_names( + int id: @union ref, + int name: @name ref +); + +#keyset[id] +union_struct_field_lists( + int id: @union ref, + int struct_field_list: @struct_field_list ref +); + +#keyset[id] +union_visibilities( + int id: @union ref, + int visibility: @visibility ref +); + +#keyset[id] +union_where_clauses( + int id: @union ref, + int where_clause: @where_clause ref +); + +while_exprs( + unique int id: @while_expr +); + +#keyset[id, index] +while_expr_attrs( + int id: @while_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +while_expr_conditions( + int id: @while_expr ref, + int condition: @expr ref +); diff --git a/rust/downgrades/e54d01f67a416b3d6eb7b970f27295097f2cac7f/upgrade.properties b/rust/downgrades/e54d01f67a416b3d6eb7b970f27295097f2cac7f/upgrade.properties new file mode 100644 index 000000000000..d753a48ad740 --- /dev/null +++ b/rust/downgrades/e54d01f67a416b3d6eb7b970f27295097f2cac7f/upgrade.properties @@ -0,0 +1,10 @@ +description: Added the `@call_expr_base` union type +compatibility: backwards + +call_expr_arg_lists.rel: delete +call_expr_attrs.rel: delete +method_call_expr_arg_lists.rel: delete +method_call_expr_attrs.rel: delete + +call_expr_base_arg_lists.rel: run upgrade.ql call_expr_base_arg_lists +call_expr_base_attrs.rel: run upgrade.ql call_expr_base_attrs \ No newline at end of file diff --git a/rust/downgrades/e54d01f67a416b3d6eb7b970f27295097f2cac7f/upgrade.ql b/rust/downgrades/e54d01f67a416b3d6eb7b970f27295097f2cac7f/upgrade.ql new file mode 100644 index 000000000000..0ebeae260386 --- /dev/null +++ b/rust/downgrades/e54d01f67a416b3d6eb7b970f27295097f2cac7f/upgrade.ql @@ -0,0 +1,19 @@ +class Element extends @element { + string toString() { none() } +} + +class ArgList extends Element, @arg_list { } + +class Attr extends Element, @attr { } + +query predicate call_expr_base_arg_lists(Element c, ArgList l) { + call_expr_base_arg_lists(c, l) + or + method_call_expr_arg_lists(c, l) +} + +query predicate call_expr_base_attrs(Element c, int i, Attr a) { + call_expr_attrs(c, i, a) + or + method_call_expr_attrs(c, i, a) +} diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index fa35ec65d4c5..578b21fc992b 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs 460e827738766301a137f1750be7cd3016e6b7e4e487c6c95972bd3e1d21b814 460e827738766301a137f1750be7cd3016e6b7e4e487c6c95972bd3e1d21b814 +top.rs b829c8ab9ec5ff07b997b9ee0b2c333d63e24eddcf7c5fc2b95a9a7f17a84a69 b829c8ab9ec5ff07b997b9ee0b2c333d63e24eddcf7c5fc2b95a9a7f17a84a69 diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index 3c4b51c78e6a..510f6579d407 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -4315,44 +4315,66 @@ impl From> for trap::Label { } #[derive(Debug)] -pub struct CallExprBase { - _unused: () +pub struct CallExpr { + pub id: trap::TrapId, + pub arg_list: Option>, + pub attrs: Vec>, + pub function: Option>, } -impl trap::TrapClass for CallExprBase { - fn class_name() -> &'static str { "CallExprBase" } +impl trap::TrapEntry for CallExpr { + fn extract_id(&mut self) -> trap::TrapId { + std::mem::replace(&mut self.id, trap::TrapId::Star) + } + + fn emit(self, id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("call_exprs", vec![id.into()]); + if let Some(v) = self.arg_list { + out.add_tuple("call_expr_arg_lists", vec![id.into(), v.into()]); + } + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("call_expr_attrs", vec![id.into(), i.into(), v.into()]); + } + if let Some(v) = self.function { + out.add_tuple("call_expr_functions", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for CallExpr { + fn class_name() -> &'static str { "CallExpr" } } -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme CallExprBase is a subclass of Expr +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Expr unsafe { Self::from_untyped(value.as_untyped()) } } } -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme CallExprBase is a subclass of AstNode +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of AstNode unsafe { Self::from_untyped(value.as_untyped()) } } } -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme CallExprBase is a subclass of Locatable +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Locatable unsafe { Self::from_untyped(value.as_untyped()) } } } -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme CallExprBase is a subclass of Element +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Element unsafe { Self::from_untyped(value.as_untyped()) } @@ -6430,6 +6452,81 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct MethodCallExpr { + pub id: trap::TrapId, + pub arg_list: Option>, + pub attrs: Vec>, + pub generic_arg_list: Option>, + pub identifier: Option>, + pub receiver: Option>, +} + +impl trap::TrapEntry for MethodCallExpr { + fn extract_id(&mut self) -> trap::TrapId { + std::mem::replace(&mut self.id, trap::TrapId::Star) + } + + fn emit(self, id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("method_call_exprs", vec![id.into()]); + if let Some(v) = self.arg_list { + out.add_tuple("method_call_expr_arg_lists", vec![id.into(), v.into()]); + } + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("method_call_expr_attrs", vec![id.into(), i.into(), v.into()]); + } + if let Some(v) = self.generic_arg_list { + out.add_tuple("method_call_expr_generic_arg_lists", vec![id.into(), v.into()]); + } + if let Some(v) = self.identifier { + out.add_tuple("method_call_expr_identifiers", vec![id.into(), v.into()]); + } + if let Some(v) = self.receiver { + out.add_tuple("method_call_expr_receivers", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for MethodCallExpr { + fn class_name() -> &'static str { "MethodCallExpr" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Expr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct NameRef { pub id: trap::TrapId, @@ -9242,82 +9339,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct CallExpr { - pub id: trap::TrapId, - pub arg_list: Option>, - pub attrs: Vec>, - pub function: Option>, -} - -impl trap::TrapEntry for CallExpr { - fn extract_id(&mut self) -> trap::TrapId { - std::mem::replace(&mut self.id, trap::TrapId::Star) - } - - fn emit(self, id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("call_exprs", vec![id.into()]); - if let Some(v) = self.arg_list { - out.add_tuple("call_expr_base_arg_lists", vec![id.into(), v.into()]); - } - for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("call_expr_base_attrs", vec![id.into(), i.into(), v.into()]); - } - if let Some(v) = self.function { - out.add_tuple("call_expr_functions", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for CallExpr { - fn class_name() -> &'static str { "CallExpr" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of CallExprBase - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Expr - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct ExternBlock { pub id: trap::TrapId, @@ -9908,90 +9929,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct MethodCallExpr { - pub id: trap::TrapId, - pub arg_list: Option>, - pub attrs: Vec>, - pub generic_arg_list: Option>, - pub identifier: Option>, - pub receiver: Option>, -} - -impl trap::TrapEntry for MethodCallExpr { - fn extract_id(&mut self) -> trap::TrapId { - std::mem::replace(&mut self.id, trap::TrapId::Star) - } - - fn emit(self, id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("method_call_exprs", vec![id.into()]); - if let Some(v) = self.arg_list { - out.add_tuple("call_expr_base_arg_lists", vec![id.into(), v.into()]); - } - for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("call_expr_base_attrs", vec![id.into(), i.into(), v.into()]); - } - if let Some(v) = self.generic_arg_list { - out.add_tuple("method_call_expr_generic_arg_lists", vec![id.into(), v.into()]); - } - if let Some(v) = self.identifier { - out.add_tuple("method_call_expr_identifiers", vec![id.into(), v.into()]); - } - if let Some(v) = self.receiver { - out.add_tuple("method_call_expr_receivers", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for MethodCallExpr { - fn class_name() -> &'static str { "MethodCallExpr" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of CallExprBase - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Expr - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct Module { pub id: trap::TrapId, diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index fc9e0d0f30c5..7def99275cf8 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -1,4 +1,4 @@ -lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll 11c7521ec2231a4d0447f30fc3d0bb14aebb659bd8cf75935af1050673a3b1d6 d0a77b572a032e43f1c47622315c0cdfe17e68c2b057534b9322fc528029fb40 +lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll 1eac5a95247dec5cf51a453788b5bdebcf612590014b1e28f6b6f7e841c96a20 d4d8c9664ca406c3fd14d96a488eea97c42401e2791f41d7248ee5d3f299805c lib/codeql/rust/elements/Abi.qll 485a2e79f6f7bfd1c02a6e795a71e62dede3c3e150149d5f8f18b761253b7208 6159ba175e7ead0dd2e3f2788f49516c306ee11b1a443bd4bdc00b7017d559bd lib/codeql/rust/elements/Addressable.qll 13011bfd2e1556694c3d440cc34af8527da4df49ad92b62f2939d3699ff2cea5 ddb25935f7553a1a384b1abe2e4b4fa90ab50b952dadec32fd867afcb054f4be lib/codeql/rust/elements/Adt.qll c2afed4ac2e17039ccd98f74ea22111f4d765c4e232c50ccd3128da0d26da837 1380bde2eb667c6ec2ef5f8710aa24e926851c9e321ebc72ba514fa92c369dc3 @@ -32,8 +32,7 @@ lib/codeql/rust/elements/BinaryExpr.qll 394522da3bc3a716fc7bc40c3560143ca840f5d2 lib/codeql/rust/elements/BlockExpr.qll b5cf57119b15f27d0bc258dfa375b0ef2730c157870ff543f0dc7a8cfe514182 f6a01999606b010c81ef9c6ff1385e6640632b6f5ce067ffeb0ef0af0a0aeb92 lib/codeql/rust/elements/BoxPat.qll 1b2c3fff171aa6aa238c9460b122f26c79e04577cea67fa856de99842ba873d4 0caf8d23ed6e0997a6b8751def27641582151fba6e24fccf798712a4690b42f1 lib/codeql/rust/elements/BreakExpr.qll 7ca3807a20e9a9a988d1fd7abebf240325ed422fcb45c719ba46272f031f94db dffb7379d3f3ba220acfbd05eb7bb6cfd9cfda211e9c8b1f5240ca5fa61be3fc -lib/codeql/rust/elements/CallExpr.qll f336500ca7a611b164d48b90e80edb0c0d3816792b0ececce659ac1ff1ffeb3e f99a9c55466418ef53860c44d9f2d6161af4b492178ddd9e5870dff742b70ae5 -lib/codeql/rust/elements/CallExprBase.qll 2846202b5208b541977500286951d96487bf555838c6c16cdd006a71e383745a c789d412bf099c624329379e0c7d94fa0d23ae2edea7a25a2ea0f3c0042ccf62 +lib/codeql/rust/elements/CallExpr.qll ee3997f265dc1b6b2fc7134548dd88d509b6bcbc26cf65061a31980f9900ae26 7e86e0ab24ce78c3f592a5614eac083d00f331664f021a438f74e2e0785f4609 lib/codeql/rust/elements/Callable.qll 08a46e987b8fde29069795a536fcd1ad1a96f60341f72293e4d07e20334d554f cfc2be9287000718e5ff3c2a35bb45ffc93fd36d97f2e034888e9aa2ae9af555 lib/codeql/rust/elements/CastExpr.qll 2fe1f36ba31fa29de309baf0a665cfcae67b61c73345e8f9bbd41e8c235fec45 c5b4c1e9dc24eb2357799defcb2df25989075e3a80e8663b74204a1c1b70e29a lib/codeql/rust/elements/ClosureExpr.qll 69e0b7a7c7a4c348fcada5ad4da22dd2f51747109f856be239cede315a56d695 93400650282e2d4e682b826e9f5f844aa893dda126548e41ea1c703d2bf209ca @@ -103,7 +102,7 @@ lib/codeql/rust/elements/MatchArmList.qll f221c5e344814fa44db06ab897afdc249e8e88 lib/codeql/rust/elements/MatchExpr.qll e9ef1664f020823b6f4bb72d906a9dc0c1ee6432d4a9a13f7dbdbab2b2b1ee4d 38d71e5c487abcb5682293c573343be66e499a6e131bb630604c120d34b7777b lib/codeql/rust/elements/MatchGuard.qll 58256689a90f24b16401543452c2a32f00d619ddac6c0fe8b65a8cd3e46401bb 8efb2ac03c69a9db687e382331085d7a6cfbf8eca559174ba2727a9549ec7ddd lib/codeql/rust/elements/Meta.qll b17d7bf605bd0cf4f6d6c6cf4f39a16cfc431d256d45b93663a7569181d36168 815cdfef06231de4b4b1c85e321b8ccb3e22379e5a4e111df9cc9ca6be593841 -lib/codeql/rust/elements/MethodCallExpr.qll 91b411e0fb1a0547dcad8726db460dccc61bed972741598d5cb3740593fe75a7 538d23b6db115bb699389d29a1829bb0449c08424a1fff80377828eb7ceb2563 +lib/codeql/rust/elements/MethodCallExpr.qll 914633f304c587addced988a7f161a1a4b3297ce370f6a959b7a042b1c04dace 289a0854d6323df915ee5f268523ee597ba20a37c646bbb2a79c9ed1f7aa2260 lib/codeql/rust/elements/Missing.qll 70e6ac9790314752849c9888443c98223ccfc93a193998b7ce350b2c6ebe8ea4 e2f0623511acaa76b091f748d417714137a8b94f1f2bdbbd177f1c682c786dad lib/codeql/rust/elements/Module.qll 0bc85019177709256f8078d9de2a36f62f848d476225bff7bba1e35f249875c7 3fbb70e0c417a644dd0cada2c364c6e6876cfa16f37960e219c87e49c966c94e lib/codeql/rust/elements/Name.qll af41479d4260fe931d46154dda15484e4733c952b98f0e370106e6e9e8ce398b e188a0d0309dd1b684c0cb88df435b38e306eb94d6b66a2b748e75252f15e095 @@ -160,8 +159,8 @@ lib/codeql/rust/elements/Trait.qll f78a917c2f2e5a0dfcd7c36e95ad67b1fa218484ee509 lib/codeql/rust/elements/TraitAlias.qll 1d82d043f24dbac04baa7aa3882c6884b8ffbc5d9b97669ce8efb7e2c8d3d2c8 505ba5426e87b3c49721f440fbc9ad6b0e7d89d1b1a51ca3fa3a6cc2d36f8b82 lib/codeql/rust/elements/TryExpr.qll cb452f53292a1396139f64a35f05bb11501f6b363f8affc9f2d5f1945ad4a647 d60ad731bfe256d0f0b688bdc31708759a3d990c11dee4f1d85ccc0d9e07bec9 lib/codeql/rust/elements/TupleExpr.qll 1b1be270198f9d3db1c28c4caaa4a7fe9b5ae14651f1a10e2891a7d78d6ad18b 4f585aa684dfbff753e342903ddd60ee4d7c374b8bddeb645784d10903c90ae0 -lib/codeql/rust/elements/TupleField.qll e20a991f7f1322cc7c05b2a8946d5017edb119812efa3e44daa94a5dff2d0c7b 8c25c9577fef8b5b9a4b285ceb7cfffcd8d89448035b1967cd7fda1503adfe13 -lib/codeql/rust/elements/TupleFieldList.qll b67cd2dec918d09e582467e5db7a38c8fa18350af591b43a1b450cd2026dbb67 22fdd1e77c16e3be4627ee7a45985b94785492d36056eeeff2c94b43450b48c8 +lib/codeql/rust/elements/TupleField.qll 8d6288fd79959d5ef3732397c0a05a47fcb09091383058d1dba7268a950f8c32 1518cdd0fd9746d09fcdbecabc2a3ce6b36b6d983883850beed3f55c2bdf2c16 +lib/codeql/rust/elements/TupleFieldList.qll 2fa47599f78aa4639a40239cf49bc2f97d84118125b949c71fec4390589caaf0 3f71a86e38bdc6fe9f0c082a43d763c4f34b4bdab99c383cdc5d8b59e887cee0 lib/codeql/rust/elements/TuplePat.qll 028cdea43868b0fdd2fc4c31ff25b6bbb40813e8aaccf72186051a280db7632e 38c56187971671e6a9dd0c6ccccb2ee4470aa82852110c6b89884496eb4abc64 lib/codeql/rust/elements/TupleStructPat.qll da398a23eb616bf7dd586b2a87f4ab00f28623418f081cd7b1cc3de497ef1819 6573bf3f8501c30af3aeb23d96db9f5bea7ab73e2b7ef3473095c03e96c20a5c lib/codeql/rust/elements/TupleTypeRepr.qll 1ac5abf6281ea31680a4098407fbe55459d08f92a50dec20d1f8b93d498eee41 6d9625cce4e4abf6b6e6c22e47880fbd23740d07b621137bd7fa0a2ee13badd9 @@ -406,7 +405,7 @@ lib/codeql/rust/elements/internal/TupleExprConstructor.qll 71c38786723225d3d9039 lib/codeql/rust/elements/internal/TupleExprImpl.qll daabbc7dd36c615cdd8d3b59e06f4992a302b26554115711f733508836887abe 4c43a26e5f8b68d9d032bb5cd0af88cf9ac9b4b4e40af47dc85dd931ce9db6f8 lib/codeql/rust/elements/internal/TupleFieldConstructor.qll 89d3cf2540235044ed5a89706cfbdebc5cdf9180fd5b6d3376c79a1b2c0430c0 16861fe089aac8e42a5a90d81dd48d5015391d0a06c78ca02bd876d65378699f lib/codeql/rust/elements/internal/TupleFieldListConstructor.qll 4335ba2061b6e4968db9ec05c0b4d3e6a564db89a2df69e036f317672a7900b1 0b8dded875dbf696cf588e8c21acc27332a2ff66ced7bfabdfc1ad621991f888 -lib/codeql/rust/elements/internal/TupleFieldListImpl.qll 74869e92a3cbdd7895adaaa418d29d5e97387daf46c17315f219ad967af15d76 5815e4b37db958663df1f6fedc9667a11b261c9c2133e3f983a3aedc452c01fc +lib/codeql/rust/elements/internal/TupleFieldListImpl.qll 2e5141d5894d1cebadef9cd3afe7585779327c4e24390201e1ef05a29401caf8 bbfa1e0b513393012bf2ae43a3aa0e33fce6ea4d110d1be0f039562071f3c547 lib/codeql/rust/elements/internal/TuplePatConstructor.qll 2a5e83ad5b8713a732e610128aeddf14e9b344402d6cf30ff0b43aa39e838418 6d467f7141307523994f03ed7b8e8b1a5bcf860963c9934b90e54582ea38096a lib/codeql/rust/elements/internal/TupleStructPatConstructor.qll 9d68f67a17a5cec0e78907a53eccfa7696be5b0571da4b486c8184274e56344a 3ffa29f546cd6c644be4fecc7415477a3a4dc00d69b8764be9119abe4c6d8b9e lib/codeql/rust/elements/internal/TupleTypeReprConstructor.qll 80c31c25fd27e330690fb500d757a4bbd33f226186d88ea73bfe4cf29a7db508 d572a72fa361990a3d0a3f9b81d1e966e2ba1ac0a60314ec824c1b8b2814c857 @@ -434,7 +433,6 @@ lib/codeql/rust/elements/internal/VariantConstructor.qll 0297d4a9a9b32448d6d6063 lib/codeql/rust/elements/internal/VariantListConstructor.qll c841fb345eb46ea3978a0ed7a689f8955efc9178044b140b74d98a6bcd0c926a c9e52d112abdba2b60013fa01a944c8770766bf7368f9878e6b13daaa4eed446 lib/codeql/rust/elements/internal/VariantListImpl.qll 4ceeda617696eb547c707589ba26103cf4c5c3d889955531be24cbf224e79dff 4258196c126fd2fad0e18068cb3d570a67034a8b26e2f13f8223d7f1a246d1a4 lib/codeql/rust/elements/internal/VisibilityConstructor.qll 1fd30663d87945f08d15cfaca54f586a658f26b7a98ea45ac73a35d36d4f65d0 6ddaf11742cc8fbbe03af2aa578394041ae077911e62d2fa6c885ae0543ba53a -lib/codeql/rust/elements/internal/VisibilityImpl.qll 85c1e75d6a7f9246cfef5c261e2aea40891c016724de49b3d6632623ccc30dcf 278be4648a8aefb0d926480c4d98e1605196ad64d1e4dbad42aa58499e6d485d lib/codeql/rust/elements/internal/WhereClauseConstructor.qll 6d6f0f0376cf45fac37ea0c7c4345d08718d2a3d6d913e591de1de9e640317c9 ff690f3d4391e5f1fae6e9014365810105e8befe9d6b52a82625994319af9ffd lib/codeql/rust/elements/internal/WhereClauseImpl.qll 006e330df395183d15896e5f81128e24b8274d849fe45afb5040444e4b764226 ed5e8317b5f33104e5c322588dc400755c8852bbb77ef835177b13af7480fd43 lib/codeql/rust/elements/internal/WherePredConstructor.qll f331c37085792a01159e8c218e9ef827e80e99b7c3d5978b6489808f05bd11f8 179cad3e4c5aaaf27755891694ef3569322fcf34c5290e6af49e5b5e3f8aa732 @@ -479,8 +477,7 @@ lib/codeql/rust/elements/internal/generated/BinaryExpr.qll 64e9bd9c571edd6e5f3e7 lib/codeql/rust/elements/internal/generated/BlockExpr.qll 5a5ddbe34bc478a7bd9b0d07d3b6f017c2d1f20581d859251a963314e6514d1f 9804c30b8b279038b864c52557535f854bd012bacdfe8e5840f1f777c74e52df lib/codeql/rust/elements/internal/generated/BoxPat.qll 597bed52f7489e0addce3266f7bee5be7c53d2d1263eceec3a252d041ca0908f b8ccf363ca5f1a988547caf1fd266a55aec7cbf8623578deea99765d264b0151 lib/codeql/rust/elements/internal/generated/BreakExpr.qll 0f428a8b2f4209b134c2ffc3e1c93c30bc6b0e9c9172f140cefa88c1f77d8690 957b39f38ff6befe9061f55bc0b403c2f1c366dd0cf63b874bae6f8216576d76 -lib/codeql/rust/elements/internal/generated/CallExpr.qll f1b8dae487077cc9d1dccf8c3cd61fd17afe860585f17ce8b860be4859be7ca4 6034fc03778e38802cdf3a6e460364b74e92912622581b31e6179951022bbbd6 -lib/codeql/rust/elements/internal/generated/CallExprBase.qll 2268e01d65015014c05166161bb28e5a1e78164d525ca16fc1e3106866cf231d b2f9b912153ba4d3e3612df4f74ac0e83077c31d5b31383bd277974081417a56 +lib/codeql/rust/elements/internal/generated/CallExpr.qll 6096035ba2ef1ce3e6254d5b8497dcb6cd7570253423c778a9dd7e158f928644 e56caf9ba094ddfc4952ed5072c5f6f139db8029fa6bd6328d1a118e96a1d5fe lib/codeql/rust/elements/internal/generated/Callable.qll 12368b998c771c6b80f54123cea4d3600af7432ab34c9e571bc0bf3894ceb17e 273a9fd9cdae56cf2edbdc9c49b15da49cd5ad04be70acbbe2475c9c50200183 lib/codeql/rust/elements/internal/generated/CastExpr.qll ddc20054b0b339ad4d40298f3461490d25d00af87c876da5ffbc6a11c0832295 f4247307afcd74d80e926f29f8c57e78c50800984483e6b6003a44681e4a71f3 lib/codeql/rust/elements/internal/generated/ClosureExpr.qll 818aff75d86821c670d8ba0720c3270681b3e070140a9c41beab2a811b43eee6 9bf2d1d38f6c4a99d7c058f8ed096141f5ba6a75d2d26a464f0d65ed4e554222 @@ -551,7 +548,7 @@ lib/codeql/rust/elements/internal/generated/MatchArmList.qll 12d969ecb267a749918 lib/codeql/rust/elements/internal/generated/MatchExpr.qll b686842e7000fd61e3a0598bf245fb4e18167b99eca9162fdfdff0b0963def22 00f1743b1b0f1a92c5a687f5260fda02d80cc5871694cad0d5e7d94bac7fe977 lib/codeql/rust/elements/internal/generated/MatchGuard.qll 58fa1d6979ef22de2bd68574c7ffcf4a021d7543445f68834d879ff8cee3abcb 072f22a7929df3c0e764b2a770b4cdf03504b3053067d9b9008d6655fb5837e1 lib/codeql/rust/elements/internal/generated/Meta.qll 15e98e8d38f5618b7053057a629b135aae5e105fbf72731833a644fb695244c0 2977b6a0781c89383e87c595b14a39851f27b2508296f3e77466eea44c916188 -lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll 0cd0f84147e5f3887d609cc58246eb493d3461aee00ff37e7d26282c835f73af 6f4c5dc1decbce54fc12300d34798b890a85129208b25565130205c9d8ee2e29 +lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll ffce98a6a1921822b12ead721cff0878553eb3e049c5d2184a7abce32b6615b4 d1408a0f47ee5764fe7b484494daf6e1f99b1c6a505274c48545b3e650ef8baf lib/codeql/rust/elements/internal/generated/Missing.qll 16735d91df04a4e1ae52fae25db5f59a044e540755734bbab46b5fbb0fe6b0bd 28ca4e49fb7e6b4734be2f2f69e7c224c570344cc160ef80c5a5cd413e750dad lib/codeql/rust/elements/internal/generated/Module.qll ebae5d8963c9fd569c0fbad1d7770abd3fd2479437f236cbce0505ba9f9af52c fa3c382115fed18a26f1a755d8749a201b9489f82c09448a88fb8e9e1435fe5f lib/codeql/rust/elements/internal/generated/Name.qll e6bd6240a051383a52b21ab539bc204ce7bcd51a1a4379e497dff008d4eef5b4 578a3b45e70f519d57b3e3a3450f6272716c849940daee49889717c7aaa85fc9 @@ -566,7 +563,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll eaa0cd4402d3665013d47e lib/codeql/rust/elements/internal/generated/ParenExpr.qll 812d2ff65079277f39f15c084657a955a960a7c1c0e96dd60472a58d56b945eb eb8c607f43e1fcbb41f37a10de203a1db806690e10ff4f04d48ed874189cb0eb lib/codeql/rust/elements/internal/generated/ParenPat.qll 24f9dc7fce75827d6fddb856cd48f80168143151b27295c0bab6db5a06567a09 ebadbc6f5498e9ed754b39893ce0763840409a0721036a25b56e1ead7dcc09aa lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 03f5c5b96a37adeb845352d7fcea3e098da9050e534972d14ac0f70d60a2d776 ed3d6e5d02086523087adebce4e89e35461eb95f2a66d1d4100fe23fc691b126 -lib/codeql/rust/elements/internal/generated/ParentChild.qll f04ca3d02170f7e532a480cc81748cf04f1b022d5e0e32ffcdf0f15c8f1961aa 999104d69a5435c9cab594e04b82ed26ae38b1b1d2ac1dbbb315a433c586f941 +lib/codeql/rust/elements/internal/generated/ParentChild.qll 8a6e4335bcf6f7d72f5ed6ffba5448ae88b00323fe7dac6f406c8746c03ef2dc 867a0fb166b53d7a8218a02d671f117ba7ea4e67cb16abeea6e746dc5823b85e lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll d901fdc8142a5b8847cc98fc2afcfd16428b8ace4fbffb457e761b5fd3901a77 5dbb0aea5a13f937da666ccb042494af8f11e776ade1459d16b70a4dd193f9fb lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 9b12afb46fc5a9ad3a811b05472621bbecccb900c47504feb7f29d96b28421ca bcacbffc36fb3e0c9b26523b5963af0ffa9fd6b19f00a2a31bdb2316071546bd @@ -581,7 +578,7 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 8d0ea4f6c7f8203340bf lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9 -lib/codeql/rust/elements/internal/generated/Raw.qll 14758dc2e2a9af251f24e24516eab0fc95d334c1da06f418ea5da3c5521642c9 a8b6637f57293a85714cc8761f8fd1e23780d58f3873acaa3c77acd9cbfcf19f +lib/codeql/rust/elements/internal/generated/Raw.qll f207067167f8597ddf6de483372fc9e281d1661d3fc0a5da0d6d6bd7e32aa9c7 1c27c65c3ab4d07553bbd269c6737576feca3f5c29c8b02f81a0d65c209d4621 lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05 lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll 5b0663a6d234572fb3e467e276d019415caa95ef006438cc59b7af4e1783161e 0e27c8a8f0e323c0e4d6db01fca821bf07c0864d293cdf96fa891b10820c1e4b @@ -606,7 +603,7 @@ lib/codeql/rust/elements/internal/generated/StructFieldList.qll 5da528a51a6a5db9 lib/codeql/rust/elements/internal/generated/StructPat.qll c76fa005c2fd0448a8803233e1e8818c4123301eb66ac5cf69d0b9eaafc61e98 6e0dffccdce24bca20e87d5ba0f0995c9a1ae8983283e71e7dbfcf6fffc67a58 lib/codeql/rust/elements/internal/generated/StructPatField.qll 5b5c7302dbc4a902ca8e69ff31875c867e295a16a626ba3cef29cd0aa248f179 4e192a0df79947f5cb0d47fdbbba7986137a6a40a1be92ae119873e2fad67edf lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll 1a95a1bd9f64fb18e9571657cf2d02a8b13c747048a1f0f74baf31b91f0392ad fc274e414ff4ed54386046505920de92755ad0b4d39a7523cdffa4830bd53b37 -lib/codeql/rust/elements/internal/generated/Synth.qll a8ea364358a2bc3a9226d451c0867e89c29509a0f54dd88ed23c77045db2c85a a44de5e84a63cb5a1bfa66b0df33bf28c9f8b6628393d0f3b2f6215dabee47bd +lib/codeql/rust/elements/internal/generated/Synth.qll 61147c264e863dc5234b391ad2b7a01e0a2fe99e18ea237ba06e31340fd0a50a 6d33624a9b571d05aba1e9459a211f75b762e72fa716259abcd994f5098e15a6 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll f41abfc73415b7accb38da7c107faebfe6843c270ad54e0e54a96e930dfe479a f41abfc73415b7accb38da7c107faebfe6843c270ad54e0e54a96e930dfe479a lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 1a3c4f5f30659738641abdd28cb793dab3cfde484196b59656fc0a2767e53511 de2ebb210c7759ef7a6f7ee9f805e1cac879221287281775fc80ba34a5492edf @@ -614,8 +611,8 @@ lib/codeql/rust/elements/internal/generated/Trait.qll 8fa41b50fa0f68333534f2b66b lib/codeql/rust/elements/internal/generated/TraitAlias.qll 40a296cf89eceaf02a32db90acb42bdc90df10e717bae3ab95bc09d842360a5b af85cf1f8fa46a8b04b763cdcacc6643b83c074c58c1344e485157d2ceb26306 lib/codeql/rust/elements/internal/generated/TryExpr.qll 73052d7d309427a30019ad962ee332d22e7e48b9cc98ee60261ca2df2f433f93 d9dd70bf69eaa22475acd78bea504341e3574742a51ad9118566f39038a02d85 lib/codeql/rust/elements/internal/generated/TupleExpr.qll 98f10bc72d09f98e3be87f41b1a3cbf037f4a7e3d3560dfa6d5759905a8177a5 6a9eb5568c518876b2912371e2b7b774cf5245097c5a0206eda35b749995f00b -lib/codeql/rust/elements/internal/generated/TupleField.qll d546b4e0c1a0b243c2bf88b371377cf9a396ca497cd5e78915e0e552910b6093 c0a754d15e0de590ee15139d8d366e4d7e4d33882c943e6ea8fa5fa8dce790e3 -lib/codeql/rust/elements/internal/generated/TupleFieldList.qll fb76d1a395326361859177c05e90e5bbb22d37518758752e9d89906006fb683e f31508b120c36f569cc7dcae06c9e55cf875abfb2fbe54a64ec12d8b3d2db108 +lib/codeql/rust/elements/internal/generated/TupleField.qll 121f7b35e28b86592f83e00993f9041acbe7ab636db894d03055149c7f15fd32 b1ba9e1182307a44bb5afc11e92d62e7eb2c819ccdfb28ef54943b6fec676827 +lib/codeql/rust/elements/internal/generated/TupleFieldList.qll e7874518ce353f58312b02fb646f19eb109b3d868f8b550c84b7d6fc3a85fd5a f4bff793bbdbc252688296953116146f5c9a0894e14a7d3e4883a5ac211c122f lib/codeql/rust/elements/internal/generated/TuplePat.qll 4e13b509e1c9dd1581a9dc50d38e0a6e36abc1254ea9c732b5b3e6503335afeb 298028df9eb84e106e625ed09d6b20038ad47bfc2faf634a0ffea50b17b5805d lib/codeql/rust/elements/internal/generated/TupleStructPat.qll 6539d0edbdc16e7df849514d51980d4cd1a2c9cbb58ca9e5273851f96df4eb36 45a13bae5220d5737cbd04713a17af5b33d8bb4cfdf17ddd64b298ab0c1eea24 lib/codeql/rust/elements/internal/generated/TupleTypeRepr.qll 1756cdbad56d634bf4726bc39c768386754e62650492d7d6344012038236a05b 3ac0997a47f95f28cc70c782173ce345fcb5b073be10f3c0b414d1df8443e04c @@ -643,7 +640,7 @@ lib/codeql/rust/elements/internal/generated/WhileExpr.qll 0353aab87c49569e1fbf58 lib/codeql/rust/elements/internal/generated/WildcardPat.qll d74b70b57a0a66bfae017a329352a5b27a6b9e73dd5521d627f680e810c6c59e 4b913b548ba27ff3c82fcd32cf996ff329cb57d176d3bebd0fcef394486ea499 lib/codeql/rust/elements/internal/generated/YeetExpr.qll cac328200872a35337b4bcb15c851afb4743f82c080f9738d295571eb01d7392 94af734eea08129b587fed849b643e7572800e8330c0b57d727d41abda47930b lib/codeql/rust/elements/internal/generated/YieldExpr.qll 37e5f0c1e373a22bbc53d8b7f2c0e1f476e5be5080b8437c5e964f4e83fad79a 4a9a68643401637bf48e5c2b2f74a6bf0ddcb4ff76f6bffb61d436b685621e85 -lib/codeql/rust/elements.qll d3beb3a35f2b5ea47d60aeefd86fb0d6406dd0a1b7cd89aecbb2732b4e72da38 d3beb3a35f2b5ea47d60aeefd86fb0d6406dd0a1b7cd89aecbb2732b4e72da38 +lib/codeql/rust/elements.qll 5cc722db81259ee5d5b9cbed1a4d2795060ad996c80fd7121e7ce43dc392b62f 5cc722db81259ee5d5b9cbed1a4d2795060ad996c80fd7121e7ce43dc392b62f test/extractor-tests/generated/Abi/Abi.ql 086ed104ab1a7e7fe5c1ed29e03f1719a797c7096c738868bf6ebe872ab8fdaa fe23fe67ab0d9201e1177ea3f844b18ed428e13e3ce77381bf2b6910adfa3a0e test/extractor-tests/generated/ArgList/ArgList.ql da97b5b25418b2aa8cb8df793f48870c89fa00759cdade8ddba60d7f1f4bbc01 acfd5d2caf67282ad2d57b961068472100482d0f770a52a3c00214c647d18c75 test/extractor-tests/generated/ArrayListExpr/ArrayListExpr.ql 42b365276aa43e2cad588338463542d3ce1dd0db3a428621554584b07a1431d5 08a66a8b69af35ee3bc64c35c453a19a6c9881cc6cc7e65275d1fff056121270 @@ -669,7 +666,7 @@ test/extractor-tests/generated/BinaryExpr/BinaryExpr.ql 4e849e6eaae581f487aa74d0 test/extractor-tests/generated/BlockExpr/BlockExpr.ql cd6ef66de9e56ebb74964e59617d47999fb8c9081e885acece17a3b747a35ae1 6766844c1b87e518688565f2469575af5ca4e0ff4eb0c0b620df73a451d86a0b test/extractor-tests/generated/BoxPat/BoxPat.ql 854c9ba4e045dbe7ea1666866c1c443a92597df0ce02f4ca5993142925941c39 a22c17cce0bff7d1df51b817d2cb1a61045357f91be14465166971efa5f5daad test/extractor-tests/generated/BreakExpr/BreakExpr.ql c2181211da3dfe983cfca93ead32d5d211e91181899b9477152c58124eaa846d 57e57b926e14db2efb2e88e04699608b2ba9797ee4f6c4f710135b6858982256 -test/extractor-tests/generated/CallExpr/CallExpr.ql 2a1cd4485ccd8d4eb24a75889e832612adef9bb7feae414c90572796380bc6d7 95060b92aa04d7ad1fc6603c5ec14a275a5788ecb5a19932732e28105607a3b7 +test/extractor-tests/generated/CallExpr/CallExpr.ql 16d85d6e5cb68384d0b932fb4506c1855019b819f2c5faa39a4472f39427623a 14df8383948cedaff88f514f7239c1ec8c424720d24e3546cbcd0b689acecdb1 test/extractor-tests/generated/CastExpr/CastExpr.ql 3480ec51072399409b7553ab6139c832db6ed4ca991f3a7a2282a39afe07c6f2 614c8ea7a2fe30d57583dbf84ed7a12743c2aba49d8c6252d31af3ed10853a39 test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql 675ae07193241fbd710ece4f74f86e9b00f47841299b1c5934f55dbf13a4b4af 21fb0664619c9c889e9491bfd651c2814dcf0f158dd6269937bd0acc18be6b0e test/extractor-tests/generated/Comment/Comment.ql 0e0454911d2cf2e7ef5c6d860b84c57b9d490090914ebcf4fa0e8a70f777f066 cbd1c195276ef163f8d3c122344738c884dc9fb70eb2f9b7067829d735d48c4c @@ -728,7 +725,7 @@ test/extractor-tests/generated/MatchArmList/MatchArmList.ql bbc679fe6d8dedf9131d test/extractor-tests/generated/MatchExpr/MatchExpr.ql b75a5936401bb5ca38686f1413f5c8267ad685722560a2e9041dacf2f8d54abc 7da57118fe5b1f7f5cbe8d6b5f3ae70816fd4837b1c2e6401b98175b36ca233f test/extractor-tests/generated/MatchGuard/MatchGuard.ql 91de18a0a18d120db568b2c329e5cb26f83e327cf22c5825c555ea17249d7d23 0bcdb25895362128517227c860b9dad76851215c2cdf9b2d0e5cc3534278f4ec test/extractor-tests/generated/Meta/Meta.ql 43dd1cd669099b38396b316616992af6d84b0c1cee953b19235a00ab3d3bb43c 80b1885809aa074357e21707d1f8c6dca19f0b968ccff43229bb0d5c6fffb2b2 -test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql 05ca29fdab8ce600469728b964c369368e5097b2a5eb35b84a7630ef044ac6b6 aa45fdbb7fba8afee9f6cef10d337622429d3f0fb71f7fbf861afb4906bdef71 +test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql 9d5af6b4771a8725fa5b56ccb3e2a33158b18c876546b88e6dc63da1f887910a 494c8c2fe5584aac45c828b38d8bb20c113927a1e909773d4a2dbd3965d26170 test/extractor-tests/generated/Module/Module.ql d7c442fd1b1f4f00da87e2228fc1aeeab0bb86648b2aa06a9dd6f40dbae1ee28 3229388727d14048e87238bcda5fde1bed503e5cac088922381e5833cfc32fa9 test/extractor-tests/generated/Name/Name.ql b2fe417f7c816f71d12622b4f84ece74eba3c128c806266a55b53f8120fa4fb3 8bc65bbf3f2909637485f5db7830d6fc110a94c9b12eefe12d7627f41eae2256 test/extractor-tests/generated/NameRef/NameRef.ql 210a70e0957f3444195eed3a3dfbb5806e349238c0b390dc00597e6b8b05fcec d74fbce3c71aa7b08ae4cb646ccb114335767cb4fe000322f9dd371c1bb3784f diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 99728972ec7a..22c7d3a15498 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -35,7 +35,6 @@ /lib/codeql/rust/elements/BoxPat.qll linguist-generated /lib/codeql/rust/elements/BreakExpr.qll linguist-generated /lib/codeql/rust/elements/CallExpr.qll linguist-generated -/lib/codeql/rust/elements/CallExprBase.qll linguist-generated /lib/codeql/rust/elements/Callable.qll linguist-generated /lib/codeql/rust/elements/CastExpr.qll linguist-generated /lib/codeql/rust/elements/ClosureExpr.qll linguist-generated @@ -436,7 +435,6 @@ /lib/codeql/rust/elements/internal/VariantListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/VariantListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/VisibilityConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/VisibilityImpl.qll linguist-generated /lib/codeql/rust/elements/internal/WhereClauseConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/WhereClauseImpl.qll linguist-generated /lib/codeql/rust/elements/internal/WherePredConstructor.qll linguist-generated @@ -482,7 +480,6 @@ /lib/codeql/rust/elements/internal/generated/BoxPat.qll linguist-generated /lib/codeql/rust/elements/internal/generated/BreakExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/CallExpr.qll linguist-generated -/lib/codeql/rust/elements/internal/generated/CallExprBase.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Callable.qll linguist-generated /lib/codeql/rust/elements/internal/generated/CastExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ClosureExpr.qll linguist-generated diff --git a/rust/ql/consistency-queries/PathResolutionConsistency.ql b/rust/ql/consistency-queries/PathResolutionConsistency.ql index 3b2165b712f3..bc1f572eedb3 100644 --- a/rust/ql/consistency-queries/PathResolutionConsistency.ql +++ b/rust/ql/consistency-queries/PathResolutionConsistency.ql @@ -15,8 +15,8 @@ class SourceLocatable extends Locatable { SourceLocatable() { this.fromSource() } } -query predicate multipleCallTargets(SourceLocatable a) { - PathResolutionConsistency::multipleCallTargets(a, _) +query predicate multipleResolvedTargets(SourceLocatable a) { + PathResolutionConsistency::multipleResolvedTargets(a, _) } query predicate multiplePathResolutions(SourceLocatable a) { diff --git a/rust/ql/examples/snippets/simple_constant_password.ql b/rust/ql/examples/snippets/simple_constant_password.ql index b0902235a96d..e43238cedd4f 100644 --- a/rust/ql/examples/snippets/simple_constant_password.ql +++ b/rust/ql/examples/snippets/simple_constant_password.ql @@ -30,11 +30,11 @@ module ConstantPasswordConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node node) { // `node` is an argument whose corresponding parameter name matches the pattern "pass%" - exists(CallExpr call, Function target, int argIndex, Variable v | + exists(Call call, Function target, int argIndex, Variable v | call.getStaticTarget() = target and v.getParameter() = target.getParam(argIndex) and v.getText().matches("pass%") and - call.getArg(argIndex) = node.asExpr() + call.getPositionalArgument(argIndex) = node.asExpr() ) } } diff --git a/rust/ql/examples/snippets/simple_sql_injection.ql b/rust/ql/examples/snippets/simple_sql_injection.ql index 653c761d7ebb..251ab6044025 100644 --- a/rust/ql/examples/snippets/simple_sql_injection.ql +++ b/rust/ql/examples/snippets/simple_sql_injection.ql @@ -23,9 +23,9 @@ module SqlInjectionConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node node) { // `node` is the first argument of a call to `sqlx_core::query::query` - exists(CallExpr call | + exists(Call call | call.getStaticTarget().getCanonicalPath() = "sqlx_core::query::query" and - call.getArg(0) = node.asExpr() + call.getPositionalArgument(0) = node.asExpr() ) } } diff --git a/rust/ql/lib/CHANGELOG.md b/rust/ql/lib/CHANGELOG.md index b714dc31cb98..e2aeb59f40ba 100644 --- a/rust/ql/lib/CHANGELOG.md +++ b/rust/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.2 + +No user-facing changes. + ## 0.2.1 No user-facing changes. diff --git a/rust/ql/lib/change-notes/2025-12-03-type-inference-raw-pointers.md b/rust/ql/lib/change-notes/2025-12-03-type-inference-raw-pointers.md new file mode 100644 index 000000000000..a24f86ad897a --- /dev/null +++ b/rust/ql/lib/change-notes/2025-12-03-type-inference-raw-pointers.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Improved type inference for raw pointers (`*const` and `*mut`). This includes type inference for the raw borrow operators (`&raw const` and `&raw mut`) and dereferencing of raw pointers. \ No newline at end of file diff --git a/rust/ql/lib/change-notes/2025-12-05-trait-function-dispatch.md b/rust/ql/lib/change-notes/2025-12-05-trait-function-dispatch.md new file mode 100644 index 000000000000..5a6f09911619 --- /dev/null +++ b/rust/ql/lib/change-notes/2025-12-05-trait-function-dispatch.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The call graph is now more precise for calls that target a trait function with a default implemention. This reduces the number of false positives for data flow queries. \ No newline at end of file diff --git a/rust/ql/lib/change-notes/2025-12-11-read-as-taint.md b/rust/ql/lib/change-notes/2025-12-11-read-as-taint.md new file mode 100644 index 000000000000..3e1cabd75f79 --- /dev/null +++ b/rust/ql/lib/change-notes/2025-12-11-read-as-taint.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Reading content of a value now carries taint if the value itself is tainted. For instance, if `s` is tainted then `s.field` is also tainted. This generally improves taint flow. \ No newline at end of file diff --git a/rust/ql/lib/change-notes/released/0.2.2.md b/rust/ql/lib/change-notes/released/0.2.2.md new file mode 100644 index 000000000000..98e69fd07723 --- /dev/null +++ b/rust/ql/lib/change-notes/released/0.2.2.md @@ -0,0 +1,3 @@ +## 0.2.2 + +No user-facing changes. diff --git a/rust/ql/lib/codeql-pack.release.yml b/rust/ql/lib/codeql-pack.release.yml index df29a726bccc..16a06790aa83 100644 --- a/rust/ql/lib/codeql-pack.release.yml +++ b/rust/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.1 +lastReleaseVersion: 0.2.2 diff --git a/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll index 96ae6f8fdbce..eeed7086546f 100644 --- a/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll @@ -4,7 +4,6 @@ */ private import rust -private import codeql.rust.elements.Call private import ControlFlowGraph private import internal.ControlFlowGraphImpl as CfgImpl private import internal.CfgNodes @@ -200,20 +199,6 @@ final class BreakExprCfgNode extends Nodes::BreakExprCfgNode { } } -/** - * A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. - */ -final class CallExprBaseCfgNode extends Nodes::CallExprBaseCfgNode { - private CallExprBaseChildMapping node; - - CallExprBaseCfgNode() { node = this.getAstNode() } - - /** Gets the `i`th argument of this call. */ - ExprCfgNode getArgument(int i) { - any(ChildMapping mapping).hasCfgChild(node, node.getArgList().getArg(i), this, result) - } -} - /** * A method call expression. For example: * ```rust @@ -221,7 +206,16 @@ final class CallExprBaseCfgNode extends Nodes::CallExprBaseCfgNode { * x.foo::(42); * ``` */ -final class MethodCallExprCfgNode extends CallExprBaseCfgNode, Nodes::MethodCallExprCfgNode { } +final class MethodCallExprCfgNode extends Nodes::MethodCallExprCfgNode { + private MethodCallExprChildMapping node; + + MethodCallExprCfgNode() { node = this.getAstNode() } + + /** Gets the `i`th argument of this call. */ + ExprCfgNode getPositionalArgument(int i) { + any(ChildMapping mapping).hasCfgChild(node, node.getPositionalArgument(i), this, result) + } +} /** * A CFG node that calls a function. @@ -238,7 +232,7 @@ final class CallCfgNode extends ExprCfgNode { /** Gets the receiver of this call if it is a method call. */ ExprCfgNode getReceiver() { - any(ChildMapping mapping).hasCfgChild(node, node.getReceiver(), this, result) + any(ChildMapping mapping).hasCfgChild(node, node.(MethodCall).getReceiver(), this, result) } /** Gets the `i`th argument of this call, if any. */ @@ -248,15 +242,26 @@ final class CallCfgNode extends ExprCfgNode { } /** - * A function call expression. For example: + * An expression with parenthesized arguments. For example: * ```rust * foo(42); * foo::(42); * foo[0](42); * foo(1) = 4; + * Option::Some(42); * ``` */ -final class CallExprCfgNode extends CallExprBaseCfgNode, Nodes::CallExprCfgNode { } +final class CallExprCfgNode extends Nodes::CallExprCfgNode { + private CallExprChildMapping node; + + CallExprCfgNode() { node = this.getAstNode() } + + /** Gets the `i`th argument of this call. */ + ExprCfgNode getSyntacticArgument(int i) { + any(ChildMapping mapping) + .hasCfgChild(node, node.getSyntacticPositionalArgument(i), this, result) + } +} /** * A FormatArgsExpr. For example: diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll index eb4d665436e2..ee1c0e6ab6b2 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll @@ -57,8 +57,12 @@ class BreakExprTargetChildMapping extends ParentAstNode, Expr { override predicate relevantChild(AstNode child) { child.(BreakExpr).getTarget() = this } } -class CallExprBaseChildMapping extends ParentAstNode, CallExprBase { - override predicate relevantChild(AstNode child) { child = this.getAnArg() } +class CallExprChildMapping extends ParentAstNode, CallExpr { + override predicate relevantChild(AstNode child) { child = this.getArgList().getAnArg() } +} + +class MethodCallExprChildMapping extends ParentAstNode, MethodCallExpr { + override predicate relevantChild(AstNode child) { child = this.getArgList().getAnArg() } } class StructExprChildMapping extends ParentAstNode, StructExpr { diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index c3fb15ec0e75..522e57417951 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -210,13 +210,17 @@ module ExprTrees { override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } } - class BinaryOpExprTree extends StandardPostOrderTree instanceof BinaryExpr { - BinaryOpExprTree() { not this instanceof BinaryLogicalOperation } + class InvocationExprTree extends StandardPostOrderTree instanceof InvocationExpr { + InvocationExprTree() { + not this instanceof CallExpr and + not this instanceof BinaryLogicalOperation + } override AstNode getChildNode(int i) { - i = 0 and result = super.getLhs() + i = 0 and + result = super.getSyntacticReceiver() or - i = 1 and result = super.getRhs() + result = super.getSyntacticPositionalArgument(i - 1) } } @@ -296,7 +300,7 @@ module ExprTrees { override AstNode getChildNode(int i) { i = 0 and result = super.getFunction() or - result = super.getArgList().getArg(i - 1) + result = super.getSyntacticPositionalArgument(i - 1) } } @@ -371,14 +375,6 @@ module ExprTrees { } } - class IndexExprTree extends StandardPostOrderTree instanceof IndexExpr { - override AstNode getChildNode(int i) { - i = 0 and result = super.getBase() - or - i = 1 and result = super.getIndex() - } - } - class LetExprTree extends StandardPostOrderTree, LetExpr { override AstNode getChildNode(int i) { i = 0 and @@ -510,12 +506,6 @@ module ExprTrees { } } - class MethodCallExprTree extends StandardPostOrderTree, MethodCallExpr { - override AstNode getChildNode(int i) { - if i = 0 then result = this.getReceiver() else result = this.getArg(i - 1) - } - } - class OffsetOfExprTree extends LeafTree instanceof OffsetOfExpr { } class ParenExprTree extends ControlFlowTree, ParenExpr { @@ -534,10 +524,6 @@ module ExprTrees { class PathExprTree extends LeafTree instanceof PathExpr { } - class PrefixExprTree extends StandardPostOrderTree instanceof PrefixExpr { - override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } - } - class RangeExprTree extends StandardPostOrderTree instanceof RangeExpr { override AstNode getChildNode(int i) { i = 0 and result = super.getStart() @@ -552,10 +538,6 @@ module ExprTrees { } } - class RefExprTree extends StandardPostOrderTree instanceof RefExpr { - override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } - } - class ReturnExprTree extends StandardPostOrderTree instanceof ReturnExpr { override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } } diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll index 9ce771983a3f..016217e0a460 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll @@ -654,15 +654,18 @@ module MakeCfgNodes Input> { } /** - * A function call expression. For example: + * NOTE: Consider using `Call` instead, as that excludes call expressions that are + * instantiations of tuple structs and tuple variants. + * + * A call expression. For example: * ```rust * foo(42); * foo::(42); * foo[0](42); - * foo(1) = 4; + * Option::Some(42); // tuple variant instantiation * ``` */ - final class CallExprCfgNode extends CfgNodeFinal, CallExprBaseCfgNode { + final class CallExprCfgNode extends CfgNodeFinal, ExprCfgNode { private CallExpr node; CallExprCfgNode() { node = this.getAstNode() } @@ -671,35 +674,7 @@ module MakeCfgNodes Input> { CallExpr getCallExpr() { result = node } /** - * Gets the function of this call expression, if it exists. - */ - ExprCfgNode getFunction() { - any(ChildMapping mapping).hasCfgChild(node, node.getFunction(), this, result) - } - - /** - * Holds if `getFunction()` exists. - */ - predicate hasFunction() { exists(this.getFunction()) } - } - - final private class ParentCallExprBase extends ParentAstNode, CallExprBase { - override predicate relevantChild(AstNode child) { none() } - } - - /** - * A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. - */ - final class CallExprBaseCfgNode extends CfgNodeFinal, ExprCfgNode { - private CallExprBase node; - - CallExprBaseCfgNode() { node = this.getAstNode() } - - /** Gets the underlying `CallExprBase`. */ - CallExprBase getCallExprBase() { result = node } - - /** - * Gets the argument list of this call expression base, if it exists. + * Gets the argument list of this call expression, if it exists. */ ArgList getArgList() { result = node.getArgList() } @@ -709,34 +684,31 @@ module MakeCfgNodes Input> { predicate hasArgList() { exists(this.getArgList()) } /** - * Gets the `index`th attr of this call expression base (0-based). + * Gets the `index`th attr of this call expression (0-based). */ Attr getAttr(int index) { result = node.getAttr(index) } /** - * Gets any of the attrs of this call expression base. + * Gets any of the attrs of this call expression. */ Attr getAnAttr() { result = this.getAttr(_) } /** - * Gets the number of attrs of this call expression base. + * Gets the number of attrs of this call expression. */ int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } /** - * Gets the `index`th argument of this call expression base (0-based). - */ - Expr getArg(int index) { result = node.getArg(index) } - - /** - * Gets any of the arguments of this call expression base. + * Gets the function of this call expression, if it exists. */ - Expr getAnArg() { result = this.getArg(_) } + ExprCfgNode getFunction() { + any(ChildMapping mapping).hasCfgChild(node, node.getFunction(), this, result) + } /** - * Gets the number of arguments of this call expression base. + * Holds if `getFunction()` exists. */ - int getNumberOfArgs() { result = count(int i | exists(this.getArg(i))) } + predicate hasFunction() { exists(this.getFunction()) } } final private class ParentCastExpr extends ParentAstNode, CastExpr { @@ -2071,13 +2043,17 @@ module MakeCfgNodes Input> { } /** + * NOTE: Consider using `MethodCall` instead, as that also includes calls to methods using + * call syntax (such as `Foo::method(x)`), operation syntax (such as `x + y`), and + * indexing syntax (such as `x[y]`). + * * A method call expression. For example: * ```rust * x.foo(42); * x.foo::(42); * ``` */ - final class MethodCallExprCfgNode extends CfgNodeFinal, CallExprBaseCfgNode { + final class MethodCallExprCfgNode extends CfgNodeFinal, ExprCfgNode { private MethodCallExpr node; MethodCallExprCfgNode() { node = this.getAstNode() } @@ -2085,6 +2061,31 @@ module MakeCfgNodes Input> { /** Gets the underlying `MethodCallExpr`. */ MethodCallExpr getMethodCallExpr() { result = node } + /** + * Gets the argument list of this method call expression, if it exists. + */ + ArgList getArgList() { result = node.getArgList() } + + /** + * Holds if `getArgList()` exists. + */ + predicate hasArgList() { exists(this.getArgList()) } + + /** + * Gets the `index`th attr of this method call expression (0-based). + */ + Attr getAttr(int index) { result = node.getAttr(index) } + + /** + * Gets any of the attrs of this method call expression. + */ + Attr getAnAttr() { result = this.getAttr(_) } + + /** + * Gets the number of attrs of this method call expression. + */ + int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + /** * Gets the generic argument list of this method call expression, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll b/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll index 12e4b6820915..a072edef612a 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll @@ -5,6 +5,7 @@ private import rust private import codeql.rust.frameworks.stdlib.Builtins private import DataFlowImpl +private import codeql.rust.elements.internal.CallExprImpl::Impl as CallExprImpl /** * A path to a value contained in an object. For example a field name of a struct. @@ -163,7 +164,7 @@ final class TuplePositionContent extends FieldContent, TTuplePositionContent { } /** - * A content for the index of an argument to at function call. + * A content for the index of an argument to at closure call. * * Used by the model generator to create flow summaries for higher-order * functions. @@ -270,7 +271,7 @@ newtype TContent = } or TFunctionCallReturnContent() or TFunctionCallArgumentContent(int pos) { - pos in [0 .. any(CallExpr c).getArgList().getNumberOfArgs() - 1] + pos in [0 .. any(CallExprImpl::DynamicCallExpr c).getNumberOfPositionalArguments()] } or TCapturedVariableContent(VariableCapture::CapturedVariable v) or TReferenceContent() diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowConsistency.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowConsistency.qll index 731996661cb2..ca6c0747ba3a 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowConsistency.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowConsistency.qll @@ -19,10 +19,6 @@ private module Input implements InputSig { predicate postWithInFlowExclude(RustDataFlow::Node n) { n instanceof Node::FlowSummaryNode or - // We allow flow into post-update node for receiver expressions (from the - // synthetic post receiever node). - n.(Node::PostUpdateNode).getPreUpdateNode().asExpr() = any(Node::ReceiverNode r).getReceiver() - or n.(Node::PostUpdateNode).getPreUpdateNode().asExpr() = getPostUpdateReverseStep(_, _) or FlowSummaryImpl::Private::Steps::sourceLocalStep(_, n, _) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index fd6bab4d23e1..fc84c8f0bc6f 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -8,11 +8,10 @@ private import codeql.util.Boolean private import codeql.dataflow.DataFlow private import codeql.dataflow.internal.DataFlowImpl private import rust -private import codeql.rust.elements.Call private import SsaImpl as SsaImpl private import codeql.rust.controlflow.internal.Scope as Scope +private import codeql.rust.elements.internal.CallExprImpl::Impl as CallExprImpl private import codeql.rust.internal.PathResolution -private import codeql.rust.internal.TypeInference as TypeInference private import codeql.rust.controlflow.ControlFlowGraph private import codeql.rust.dataflow.Ssa private import codeql.rust.dataflow.FlowSummary @@ -58,7 +57,7 @@ final class DataFlowCallable extends TDataFlowCallable { } final class DataFlowCall extends TDataFlowCall { - /** Gets the underlying call in the CFG, if any. */ + /** Gets the underlying call, if any. */ Call asCall() { this = TCall(result) } predicate isSummaryCall( @@ -87,72 +86,11 @@ final class DataFlowCall extends TDataFlowCall { Location getLocation() { result = this.asCall().getLocation() } } -/** - * The position of a parameter in a function. - * - * In Rust there is a 1-to-1 correspondence between parameter positions and - * arguments positions, so we use the same underlying type for both. - */ -final class ParameterPosition extends TParameterPosition { - /** Gets the underlying integer position, if any. */ - int getPosition() { this = TPositionalParameterPosition(result) } - - predicate hasPosition() { exists(this.getPosition()) } - - /** Holds if this position represents the `self` position. */ - predicate isSelf() { this = TSelfParameterPosition() } - - /** - * Holds if this position represents a reference to a closure itself. Only - * used for tracking flow through captured variables. - */ - predicate isClosureSelf() { this = TClosureSelfParameterPosition() } - - /** Gets a textual representation of this position. */ - string toString() { - result = this.getPosition().toString() - or - result = "self" and this.isSelf() - or - result = "closure self" and this.isClosureSelf() - } - - ParamBase getParameterIn(ParamList ps) { - result = ps.getParam(this.getPosition()) - or - result = ps.getSelfParam() and this.isSelf() - } -} - -/** - * The position of an argument in a call. - * - * In Rust there is a 1-to-1 correspondence between parameter positions and - * arguments positions, so we use the same underlying type for both. - */ -final class ArgumentPosition extends ParameterPosition { - /** Gets the argument of `call` at this position, if any. */ - Expr getArgument(Call call) { - result = call.getPositionalArgument(this.getPosition()) - or - result = call.getReceiver() and this.isSelf() - } -} - /** * Holds if `arg` is an argument of `call` at the position `pos`. - * - * Note that this does not hold for the receiever expression of a method call - * as the synthetic `ReceiverNode` is the argument for the `self` parameter. */ -predicate isArgumentForCall(Expr arg, Call call, ParameterPosition pos) { - // TODO: Handle index expressions as calls in data flow. - not call instanceof IndexExpr and - ( - call.getPositionalArgument(pos.getPosition()) = arg - or - call.getReceiver() = arg and pos.isSelf() and not call.receiverImplicitlyBorrowed() - ) +predicate isArgumentForCall(Expr arg, Call call, RustDataFlow::ArgumentPosition pos) { + arg = pos.getArgument(call) } /** Provides logic related to SSA. */ @@ -266,8 +204,11 @@ module LocalFlow { ) or // An edge from a pattern/expression to its corresponding SSA definition. - nodeFrom.(AstNodeNode).getAstNode() = - nodeTo.(SsaNode).asDefinition().(Ssa::WriteDefinition).getWriteAccess() + exists(AstNode n | + n = nodeTo.(SsaNode).asDefinition().(Ssa::WriteDefinition).getWriteAccess() and + n = nodeFrom.(AstNodeNode).getAstNode() and + not n = any(CompoundAssignmentExpr cae).getLhs() + ) or nodeFrom.(SourceParameterNode).getParameter().(Param).getPat() = nodeTo.asPat() or @@ -283,14 +224,6 @@ module LocalFlow { or nodeFrom.asPat().(OrPat).getAPat() = nodeTo.asPat() or - // Simple value step from receiver expression to receiver node, in case - // there is no implicit deref or borrow operation. - nodeFrom.asExpr() = nodeTo.(ReceiverNode).getReceiver() - or - // The dual step of the above, for the post-update nodes. - nodeFrom.(PostUpdateNode).getPreUpdateNode().(ReceiverNode).getReceiver() = - nodeTo.(PostUpdateNode).getPreUpdateNode().asExpr() - or nodeTo.(PostUpdateNode).getPreUpdateNode().asExpr() = getPostUpdateReverseStep(nodeFrom.(PostUpdateNode).getPreUpdateNode().asExpr(), true) } @@ -309,10 +242,8 @@ predicate lambdaCreationExpr(Expr creation) { * Holds if `call` is a lambda call of kind `kind` where `receiver` is the * invoked expression. */ -predicate lambdaCallExpr(CallExpr call, LambdaCallKind kind, Expr receiver) { +predicate lambdaCallExpr(CallExprImpl::DynamicCallExpr call, LambdaCallKind kind, Expr receiver) { receiver = call.getFunction() and - // All calls to complex expressions and local variable accesses are lambda call. - (receiver instanceof PathExpr implies receiver = any(Variable v).getAnAccess()) and exists(kind) } @@ -324,10 +255,6 @@ private module Aliases { class DataFlowCallAlias = DataFlowCall; - class ParameterPositionAlias = ParameterPosition; - - class ArgumentPositionAlias = ArgumentPosition; - class ContentAlias = Content; class ContentSetAlias = ContentSet; @@ -335,6 +262,30 @@ private module Aliases { class LambdaCallKindAlias = LambdaCallKind; } +/** + * Index assignments like `a[i] = rhs` are treated as `*a.index_mut(i) = rhs`, + * so they should in principle be handled by `referenceAssignment`. + * + * However, this would require support for [generalized reverse flow][1], which + * is not yet implemented, so instead we simulate reverse flow where it would + * have applied via the model for `<_ as core::ops::index::IndexMut>::index_mut`. + * + * The same is the case for compound assignments like `a[i] += rhs`, which are + * treated as `(*a.index_mut(i)).add_assign(rhs)`. + * + * [1]: https://github.com/github/codeql/pull/18109 + */ +predicate indexAssignment( + AssignmentOperation assignment, IndexExpr index, Node rhs, PostUpdateNode base, Content c +) { + assignment.getLhs() = index and + rhs.asExpr() = assignment.getRhs() and + base.getPreUpdateNode().asExpr() = index.getBase() and + c instanceof ElementContent and + // simulate that the flow summary applies + not index.getResolvedTarget().fromSource() +} + module RustDataFlow implements InputSig { private import Aliases private import codeql.rust.dataflow.DataFlow @@ -359,6 +310,58 @@ module RustDataFlow implements InputSig { final class CastNode = Node::CastNode; + /** + * The position of a parameter in a function. + * + * In Rust there is a 1-to-1 correspondence between parameter positions and + * arguments positions, so we use the same underlying type for both. + */ + final class ParameterPosition extends TParameterPosition { + /** Gets the underlying integer position, if any. */ + int getPosition() { this = TPositionalParameterPosition(result) } + + predicate hasPosition() { exists(this.getPosition()) } + + /** Holds if this position represents the `self` position. */ + predicate isSelf() { this = TSelfParameterPosition() } + + /** + * Holds if this position represents a reference to a closure itself. Only + * used for tracking flow through captured variables. + */ + predicate isClosureSelf() { this = TClosureSelfParameterPosition() } + + /** Gets a textual representation of this position. */ + string toString() { + result = this.getPosition().toString() + or + result = "self" and this.isSelf() + or + result = "closure self" and this.isClosureSelf() + } + + ParamBase getParameterIn(ParamList ps) { + result = ps.getParam(this.getPosition()) + or + result = ps.getSelfParam() and this.isSelf() + } + } + + /** + * The position of an argument in a call. + * + * In Rust there is a 1-to-1 correspondence between parameter positions and + * arguments positions, so we use the same underlying type for both. + */ + final class ArgumentPosition extends ParameterPosition { + /** Gets the argument of `call` at this position, if any. */ + Expr getArgument(Call call) { + result = call.getPositionalArgument(this.getPosition()) + or + result = call.(MethodCall).getReceiver() and this.isSelf() + } + } + /** Holds if `p` is a parameter of `c` at the position `pos`. */ predicate isParameterNode(ParameterNode p, DataFlowCallable c, ParameterPosition pos) { p.isParameterOf(c, pos) @@ -380,7 +383,9 @@ module RustDataFlow implements InputSig { node.(FlowSummaryNode).getSummaryNode().isHidden() or node instanceof CaptureNode or node instanceof ClosureParameterNode or - node instanceof ReceiverNode or + node instanceof DerefBorrowNode or + node instanceof DerefOutNode or + node instanceof IndexOutNode or node.asExpr() instanceof ParenExpr or nodeIsHidden(node.(PostUpdateNode).getPreUpdateNode()) } @@ -420,14 +425,35 @@ module RustDataFlow implements InputSig { final class ReturnKind = ReturnKindAlias; + private Function getStaticTargetExt(Call c) { + result = c.getStaticTarget() + or + // If the static target of an overloaded operation cannot be resolved, we fall + // back to the trait method as the target. This ensures that the flow models + // still apply. + not exists(c.getStaticTarget()) and + exists(TraitItemNode t, string methodName | + c.(Operation).isOverloaded(t, methodName, _) and + result = t.getAssocItem(methodName) + ) + } + /** Gets a viable implementation of the target of the given `Call`. */ DataFlowCallable viableCallable(DataFlowCall call) { exists(Call c | c = call.asCall() | result.asCfgScope() = c.getARuntimeTarget() or exists(SummarizedCallable sc, Function staticTarget | - staticTarget = c.getStaticTarget() and - sc = result.asSummarizedCallable() + staticTarget = getStaticTargetExt(c) and + sc = result.asSummarizedCallable() and + // Only use summarized callables with generated summaries in case + // the static call target is not in the source code. + // Note that if `applyGeneratedModel` holds it implies that there doesn't + // exist a manual model. + not ( + staticTarget.fromSource() and + sc.applyGeneratedModel() + ) | sc = staticTarget or @@ -467,10 +493,6 @@ module RustDataFlow implements InputSig { ContentApprox getContentApprox(Content c) { result = c } - class ParameterPosition = ParameterPositionAlias; - - class ArgumentPosition = ArgumentPositionAlias; - /** * Holds if the parameter position `ppos` matches the argument position * `apos`. @@ -520,16 +542,16 @@ module RustDataFlow implements InputSig { } pragma[nomagic] - private predicate implicitDerefToReceiver(Node node1, ReceiverNode node2, ReferenceContent c) { - TypeInference::receiverHasImplicitDeref(node1.asExpr()) and - node1.asExpr() = node2.getReceiver() and + private predicate implicitDeref(Node node1, DerefBorrowNode node2, ReferenceContent c) { + not node2.isBorrow() and + node1.asExpr() = node2.getNode() and exists(c) } pragma[nomagic] - private predicate implicitBorrowToReceiver(Node node1, ReceiverNode node2, ReferenceContent c) { - TypeInference::receiverHasImplicitBorrow(node1.asExpr()) and - node1.asExpr() = node2.getReceiver() and + private predicate implicitBorrow(Node node1, DerefBorrowNode node2, ReferenceContent c) { + node2.isBorrow() and + node1.asExpr() = node2.getNode() and exists(c) } @@ -539,6 +561,15 @@ module RustDataFlow implements InputSig { exists(c) } + private Node getFieldExprContainerNode(FieldExpr fe) { + exists(Expr container | container = fe.getContainer() | + not any(DerefBorrowNode n).getNode() = container and + result.asExpr() = container + or + result.(DerefBorrowNode).getNode() = container + ) + } + pragma[nomagic] additional predicate readContentStep(Node node1, Content c, Node node2) { exists(TupleStructPat pat, int pos | @@ -563,17 +594,11 @@ module RustDataFlow implements InputSig { node1.asPat().(RefPat).getPat() = node2.asPat() or exists(FieldExpr access | - node1.asExpr() = access.getContainer() and + node1 = getFieldExprContainerNode(access) and node2.asExpr() = access and access = c.(FieldContent).getAnAccess() ) or - exists(IndexExpr arr | - c instanceof ElementContent and - node1.asExpr() = arr.getBase() and - node2.asExpr() = arr - ) - or exists(ForExpr for | c instanceof ElementContent and node1.asExpr() = for.getIterable() and @@ -593,13 +618,18 @@ module RustDataFlow implements InputSig { .isVariantField([any(OptionEnum o).getSome(), any(ResultEnum r).getOk()], 0) ) or - exists(PrefixExpr deref | + exists(DerefExpr deref | c instanceof ReferenceContent and - deref.getOperatorName() = "*" and - node1.asExpr() = deref.getExpr() and + node1.(DerefOutNode).getDerefExpr() = deref and node2.asExpr() = deref ) or + exists(IndexExpr index | + c instanceof ReferenceContent and + node1.(IndexOutNode).getIndexExpr() = index and + node2.asExpr() = index + ) + or // Read from function return exists(DataFlowCall call | lambdaCall(call, _, node1) and @@ -616,13 +646,21 @@ module RustDataFlow implements InputSig { referenceExprToExpr(node2.(PostUpdateNode).getPreUpdateNode(), node1.(PostUpdateNode).getPreUpdateNode(), c) or - // Step from receiver expression to receiver node, in case of an implicit - // dereference. - implicitDerefToReceiver(node1, node2, c) + implicitDeref(node1, node2, c) or // A read step dual to the store step for implicit borrows. - implicitBorrowToReceiver(node2.(PostUpdateNode).getPreUpdateNode(), - node1.(PostUpdateNode).getPreUpdateNode(), c) + exists(Node n | implicitBorrow(n, node1.(PostUpdateNode).getPreUpdateNode(), c) | + node2.(PostUpdateNode).getPreUpdateNode() = n + or + // For compound assignments into variables like `x += y`, we do not want flow into + // `[post] x`, as that would create spurious flow when `x` is a parameter. Instead, + // we add the step directly into the SSA definition for `x` after the update. + exists(CompoundAssignmentExpr cae, Expr lhs | + lhs = cae.getLhs() and + lhs = node2.(SsaNode).asDefinition().(Ssa::WriteDefinition).getWriteAccess() and + n = TExprNode(lhs) + ) + ) or VariableCapture::readStep(node1, c, node2) } @@ -657,28 +695,46 @@ module RustDataFlow implements InputSig { exists(AssignmentExpr assignment, FieldExpr access | assignment.getLhs() = access and node1.asExpr() = assignment.getRhs() and - node2.asExpr() = access.getContainer() and + node2 = getFieldExprContainerNode(access) and access = c.getAnAccess() ) } pragma[nomagic] - private predicate referenceAssignment(Node node1, Node node2, ReferenceContent c) { - exists(AssignmentExpr assignment, PrefixExpr deref | - assignment.getLhs() = deref and - deref.getOperatorName() = "*" and + private predicate referenceAssignment( + Node node1, Node node2, Expr e, boolean clears, ReferenceContent c + ) { + exists(AssignmentExpr assignment, Expr lhs | + assignment.getLhs() = lhs and node1.asExpr() = assignment.getRhs() and - node2.asExpr() = deref.getExpr() and exists(c) + | + lhs = + any(DerefExpr de | + de = node2.(DerefOutNode).getDerefExpr() and + e = de.getExpr() + ) and + clears = true + or + lhs = + any(IndexExpr ie | + ie = node2.(IndexOutNode).getIndexExpr() and + e = ie.getBase() and + clears = false + ) ) } pragma[nomagic] additional predicate storeContentStep(Node node1, Content c, Node node2) { - exists(CallExpr call, int pos | - node1.asExpr() = call.getArg(pragma[only_bind_into](pos)) and - node2.asExpr() = call and - c = TTupleFieldContent(call.getTupleField(pragma[only_bind_into](pos))) + exists(CallExpr ce, TupleField tf, int pos | + node1.asExpr() = ce.getSyntacticPositionalArgument(pos) and + node2.asExpr() = ce and + c = TTupleFieldContent(tf) + | + tf = ce.(TupleStructExpr).getTupleField(pos) + or + tf = ce.(TupleVariantExpr).getTupleField(pos) ) or exists(StructExpr re, string field | @@ -709,14 +765,14 @@ module RustDataFlow implements InputSig { or fieldAssignment(node1, node2.(PostUpdateNode).getPreUpdateNode(), c) or - referenceAssignment(node1, node2.(PostUpdateNode).getPreUpdateNode(), c) + referenceAssignment(node1, node2.(PostUpdateNode).getPreUpdateNode(), _, _, c) or - exists(AssignmentExpr assignment, IndexExpr index | - c instanceof ElementContent and - assignment.getLhs() = index and - node1.asExpr() = assignment.getRhs() and - node2.(PostUpdateNode).getPreUpdateNode().asExpr() = index.getBase() - ) + indexAssignment(any(AssignmentExpr ae), _, node1, node2, c) + or + // Compund assignment like `a[i] += rhs` are modeled as a store step from `rhs` + // to `[post] a[i]`, followed by a taint step into `[post] a`. + indexAssignment(any(CompoundAssignmentExpr cae), + node2.(PostUpdateNode).getPreUpdateNode().asExpr(), node1, _, c) or referenceExprToExpr(node1, node2, c) or @@ -729,9 +785,7 @@ module RustDataFlow implements InputSig { or VariableCapture::storeStep(node1, c, node2) or - // Step from receiver expression to receiver node, in case of an implicit - // borrow. - implicitBorrowToReceiver(node1, node2, c) + implicitBorrow(node1, node2, c) } /** @@ -755,7 +809,7 @@ module RustDataFlow implements InputSig { predicate clearsContent(Node n, ContentSet cs) { fieldAssignment(_, n, cs.(SingletonContentSet).getContent()) or - referenceAssignment(_, n, cs.(SingletonContentSet).getContent()) + referenceAssignment(_, _, n.asExpr(), true, cs.(SingletonContentSet).getContent()) or FlowSummaryImpl::Private::Steps::summaryClearsContent(n.(FlowSummaryNode).getSummaryNode(), cs) or @@ -835,11 +889,7 @@ module RustDataFlow implements InputSig { */ predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) { ( - receiver.asExpr() = call.asCall().(CallExpr).getFunction() and - // All calls to complex expressions and local variable accesses are lambda call. - exists(Expr f | f = receiver.asExpr() | - f instanceof PathExpr implies f = any(Variable v).getAnAccess() - ) + receiver.asExpr() = call.asCall().(CallExprImpl::DynamicCallExpr).getFunction() or call.isSummaryCall(_, receiver.(FlowSummaryNode).getSummaryNode()) ) and @@ -1003,9 +1053,7 @@ private module Cached { newtype TDataFlowCall = TCall(Call call) { Stages::DataFlowStage::ref() and - call.hasEnclosingCfgScope() and - // TODO: Handle index expressions as calls in data flow. - not call instanceof IndexExpr + call.hasEnclosingCfgScope() } or TSummaryCall( FlowSummaryImpl::Public::SummarizedCallable c, FlowSummaryImpl::Private::SummaryNode receiver diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll index d9457d795109..582e58612354 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll @@ -11,19 +11,32 @@ private import codeql.rust.dataflow.FlowSummary private import codeql.rust.dataflow.Ssa private import Content +predicate encodeContentTupleField(TupleFieldContent c, string arg) { + exists(Addressable a, int pos, string prefix | + arg = prefix + "(" + pos + ")" and prefix = a.getCanonicalPath() + | + c.isStructField(a, pos) or c.isVariantField(a, pos) + ) +} + +predicate encodeContentStructField(StructFieldContent c, string arg) { + exists(Addressable a, string field | arg = a.getCanonicalPath() + "::" + field | + c.isStructField(a, field) or c.isVariantField(a, field) + ) +} + module Input implements InputSig { - private import codeql.rust.elements.internal.CallExprBaseImpl::Impl as CallExprBaseImpl private import codeql.rust.frameworks.stdlib.Stdlib class SummarizedCallableBase = Function; abstract private class SourceSinkBase extends AstNode { /** Gets the associated call. */ - abstract CallExprBase getCall(); + abstract Call getCall(); /** Holds if the associated call resolves to `path`. */ final predicate callResolvesTo(string path) { - path = this.getCall().getStaticTarget().(Addressable).getCanonicalPath() + path = this.getCall().getResolvedTarget().getCanonicalPath() } } @@ -36,7 +49,7 @@ module Input implements InputSig { CallExprFunction() { this = call.getFunction() } - override CallExpr getCall() { result = call } + override Call getCall() { result = call } } private class MethodCallExprNameRef extends SourceBase, SinkBase { @@ -51,34 +64,19 @@ module Input implements InputSig { ReturnKind getStandardReturnValueKind() { result = TNormalReturnKind() } - string encodeParameterPosition(ParameterPosition pos) { result = pos.toString() } + string encodeParameterPosition(RustDataFlow::ParameterPosition pos) { result = pos.toString() } - string encodeArgumentPosition(RustDataFlow::ArgumentPosition pos) { - result = encodeParameterPosition(pos) - } + string encodeArgumentPosition(RustDataFlow::ArgumentPosition pos) { result = pos.toString() } string encodeContent(ContentSet cs, string arg) { exists(Content c | cs = TSingletonContentSet(c) | result = "Field" and ( - exists(Addressable a, int pos, string prefix | - arg = prefix + "(" + pos + ")" and prefix = a.getCanonicalPath() - | - c.(TupleFieldContent).isStructField(a, pos) - or - c.(TupleFieldContent).isVariantField(a, pos) - ) + encodeContentTupleField(c, arg) or - exists(Addressable a, string field | arg = a.getCanonicalPath() + "::" + field | - c.(StructFieldContent).isStructField(a, field) - or - c.(StructFieldContent).isVariantField(a, field) - ) + encodeContentStructField(c, arg) or - exists(int pos | - c = TTuplePositionContent(pos) and - arg = pos.toString() - ) + exists(int pos | c = TTuplePositionContent(pos) and arg = pos.toString()) ) or result = "Reference" and @@ -108,7 +106,9 @@ module Input implements InputSig { string encodeWithContent(ContentSet c, string arg) { result = "With" + encodeContent(c, arg) } bindingset[token] - ParameterPosition decodeUnknownParameterPosition(AccessPath::AccessPathTokenBase token) { + RustDataFlow::ParameterPosition decodeUnknownParameterPosition( + AccessPath::AccessPathTokenBase token + ) { // needed to support `Argument[x..y]` ranges token.getName() = "Argument" and result.getPosition() = AccessPath::parseInt(token.getAnArgument()) @@ -135,7 +135,7 @@ private module StepsInput implements Impl::Private::StepsInputSig { /** Gets the argument of `source` described by `sc`, if any. */ private Expr getSourceNodeArgument(Input::SourceBase source, Impl::Private::SummaryComponent sc) { - exists(ArgumentPosition pos | + exists(RustDataFlow::ArgumentPosition pos | sc = Impl::Private::SummaryComponent::argument(pos) and result = pos.getArgument(source.getCall()) ) @@ -162,7 +162,7 @@ private module StepsInput implements Impl::Private::StepsInputSig { s.head() = Impl::Private::SummaryComponent::return(_) and result.asExpr() = source.getCall() or - exists(ArgumentPosition pos, Expr arg | + exists(RustDataFlow::ArgumentPosition pos, Expr arg | s.head() = Impl::Private::SummaryComponent::parameter(pos) and arg = getSourceNodeArgument(source, s.tail().headOfSingleton()) and result.asParameter() = getCallable(arg).getParam(pos.getPosition()) @@ -173,7 +173,7 @@ private module StepsInput implements Impl::Private::StepsInputSig { } RustDataFlow::Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { - exists(CallExprBase call, Expr arg, ArgumentPosition pos | + exists(InvocationExpr call, Expr arg, RustDataFlow::ArgumentPosition pos | result.asExpr() = arg and sc = Impl::Private::SummaryComponent::argument(pos) and call = sink.getCall() and diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll index 067ef98b2fc0..12dec7d5bd05 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll @@ -47,7 +47,6 @@ private import rust private import codeql.rust.dataflow.FlowSummary private import codeql.rust.dataflow.FlowSource private import codeql.rust.dataflow.FlowSink -private import codeql.rust.elements.internal.CallExprBaseImpl::Impl as CallExprBaseImpl /** * Holds if in a call to the function with canonical path `path`, the value referred @@ -124,12 +123,15 @@ private class SummarizedCallableFromModel extends SummarizedCallable::Range { summaryModel(path, _, _, _, provenance, _) } + private predicate hasManualModel() { summaryModel(path, _, _, _, "manual", _) } + override predicate propagatesFlow( string input, string output, boolean preservesValue, string model ) { - exists(string kind, QlBuiltins::ExtensionId madId | - summaryModel(path, input, output, kind, _, madId) and - model = "MaD:" + madId.toString() + exists(string kind, string provenance, QlBuiltins::ExtensionId madId | + summaryModel(path, input, output, kind, provenance, madId) and + model = "MaD:" + madId.toString() and + (provenance = "manual" or not this.hasManualModel()) | kind = "value" and preservesValue = true diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll b/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll index 2191714d6a17..cc738d1dc860 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll @@ -14,6 +14,7 @@ private import codeql.rust.controlflow.ControlFlowGraph private import codeql.rust.controlflow.CfgNodes private import codeql.rust.dataflow.Ssa private import codeql.rust.dataflow.FlowSummary +private import codeql.rust.internal.TypeInference as TypeInference private import Node as Node private import DataFlowImpl private import FlowSummaryImpl as FlowSummaryImpl @@ -166,7 +167,7 @@ final class NameNode extends AstNodeNode, TNameNode { */ abstract class ParameterNode extends Node { /** Holds if this node is a parameter of `c` at position `pos`. */ - abstract predicate isParameterOf(DataFlowCallable c, ParameterPosition pos); + abstract predicate isParameterOf(DataFlowCallable c, RustDataFlow::ParameterPosition pos); } final class SourceParameterNode extends AstNodeNode, ParameterNode, TSourceParameterNode { @@ -174,12 +175,12 @@ final class SourceParameterNode extends AstNodeNode, ParameterNode, TSourceParam SourceParameterNode() { this = TSourceParameterNode(n) } - override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) { + override predicate isParameterOf(DataFlowCallable c, RustDataFlow::ParameterPosition pos) { n = pos.getParameterIn(c.asCfgScope().(Callable).getParamList()) } /** Get the parameter position of this parameter. */ - ParameterPosition getPosition() { this.isParameterOf(_, result) } + RustDataFlow::ParameterPosition getPosition() { this.isParameterOf(_, result) } /** Gets the parameter in the CFG that this node corresponds to. */ ParamBase getParameter() { result = n } @@ -187,13 +188,13 @@ final class SourceParameterNode extends AstNodeNode, ParameterNode, TSourceParam /** A parameter for a library callable with a flow summary. */ final class SummaryParameterNode extends ParameterNode, FlowSummaryNode { - private ParameterPosition pos_; + private RustDataFlow::ParameterPosition pos_; SummaryParameterNode() { FlowSummaryImpl::Private::summaryParameterNode(this.getSummaryNode(), pos_) } - override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) { + override predicate isParameterOf(DataFlowCallable c, RustDataFlow::ParameterPosition pos) { this.getSummarizedCallable() = c.asSummarizedCallable() and pos = pos_ } } @@ -209,7 +210,7 @@ final class ClosureParameterNode extends ParameterNode, TClosureSelfReferenceNod final override CfgScope getCfgScope() { result = cfgScope } - override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) { + override predicate isParameterOf(DataFlowCallable c, RustDataFlow::ParameterPosition pos) { cfgScope = c.asCfgScope() and pos.isClosureSelf() } @@ -226,7 +227,11 @@ final class ExprArgumentNode extends ArgumentNode, ExprNode { private Call call_; private RustDataFlow::ArgumentPosition pos_; - ExprArgumentNode() { isArgumentForCall(n, call_, pos_) } + ExprArgumentNode() { + isArgumentForCall(n, call_, pos_) and + not TypeInference::implicitDeref(n) and + not TypeInference::implicitBorrow(n) + } override predicate isArgumentOf(DataFlowCall call, RustDataFlow::ArgumentPosition pos) { call.asCall() = call_ and pos = pos_ @@ -234,27 +239,41 @@ final class ExprArgumentNode extends ArgumentNode, ExprNode { } /** - * The receiver of a method call _after_ any implicit borrow or dereferencing - * has taken place. + * A node that represents the value of an expression _after_ implicit dereferencing + * or borrowing. */ -final class ReceiverNode extends ArgumentNode, TReceiverNode { - private Call n; +class DerefBorrowNode extends Node, TDerefBorrowNode { + AstNode n; + boolean isBorrow; - ReceiverNode() { this = TReceiverNode(n, false) } + DerefBorrowNode() { this = TDerefBorrowNode(n, isBorrow, false) } - Expr getReceiver() { result = n.getReceiver() } + AstNode getNode() { result = n } - MethodCallExpr getMethodCall() { result = n } + predicate isBorrow() { isBorrow = true } - override predicate isArgumentOf(DataFlowCall call, RustDataFlow::ArgumentPosition pos) { - call.asCall() = n and pos = TSelfParameterPosition() + override CfgScope getCfgScope() { result = n.getEnclosingCfgScope() } + + override Location getLocation() { result = n.getLocation() } + + override string toString() { + if isBorrow = true then result = n + " [borrowed]" else result = n + " [dereferenced]" } +} - override CfgScope getCfgScope() { result = n.getEnclosingCfgScope() } +/** + * A node that represents the value of an argument of a call _after_ implicit + * dereferencing or borrowing. + */ +final class DerefBorrowArgNode extends DerefBorrowNode, ArgumentNode { + private DataFlowCall call_; + private RustDataFlow::ArgumentPosition pos_; - override Location getLocation() { result = this.getReceiver().getLocation() } + DerefBorrowArgNode() { isArgumentForCall(n, call_.asCall(), pos_) } - override string toString() { result = "receiver for " + this.getReceiver() } + override predicate isArgumentOf(DataFlowCall call, RustDataFlow::ArgumentPosition pos) { + call = call_ and pos = pos_ + } } final class SummaryArgumentNode extends FlowSummaryNode, ArgumentNode { @@ -275,13 +294,12 @@ final class SummaryArgumentNode extends FlowSummaryNode, ArgumentNode { * passed into the closure body at an invocation. */ final class ClosureArgumentNode extends ArgumentNode, ExprNode { - private CallExpr call_; + private Call call_; ClosureArgumentNode() { lambdaCallExpr(call_, _, this.asExpr()) } override predicate isArgumentOf(DataFlowCall call, RustDataFlow::ArgumentPosition pos) { - call.asCall() = call_ and - pos.isClosureSelf() + call.asCall() = call_ and pos.isClosureSelf() } } @@ -329,15 +347,73 @@ abstract class OutNode extends Node { } final private class ExprOutNode extends ExprNode, OutNode { - ExprOutNode() { this.asExpr() instanceof Call } + ExprOutNode() { + exists(Call call | + call = this.asExpr() and + not call instanceof DerefExpr and // Handled by `DerefOutNode` + not call instanceof IndexExpr // Handled by `IndexOutNode` + ) + } - /** Gets the underlying call CFG node that includes this out node. */ + /** Gets the underlying call node that includes this out node. */ override DataFlowCall getCall(ReturnKind kind) { result.asCall() = n and kind = TNormalReturnKind() } } +/** + * A node that represents the value of a `*` expression _before_ implicit + * dereferencing: + * + * `*v` equivalent to `*Deref::deref(&v)`, and this node represents the + * `Deref::deref(&v)` part. + */ +class DerefOutNode extends OutNode, TDerefOutNode { + DerefExpr de; + + DerefOutNode() { this = TDerefOutNode(de, false) } + + DerefExpr getDerefExpr() { result = de } + + override CfgScope getCfgScope() { result = de.getEnclosingCfgScope() } + + override DataFlowCall getCall(ReturnKind kind) { + result.asCall() = de and + kind = TNormalReturnKind() + } + + override Location getLocation() { result = de.getLocation() } + + override string toString() { result = de.toString() + " [pre-dereferenced]" } +} + +/** + * A node that represents the value of a `x[y]` expression _before_ implicit + * dereferencing: + * + * `x[y]` equivalent to `*x.index(y)`, and this node represents the + * `x.index(y)` part. + */ +class IndexOutNode extends OutNode, TIndexOutNode { + IndexExpr ie; + + IndexOutNode() { this = TIndexOutNode(ie, false) } + + IndexExpr getIndexExpr() { result = ie } + + override CfgScope getCfgScope() { result = ie.getEnclosingCfgScope() } + + override DataFlowCall getCall(ReturnKind kind) { + result.asCall() = ie and + kind = TNormalReturnKind() + } + + override Location getLocation() { result = ie.getLocation() } + + override string toString() { result = ie.toString() + " [pre-dereferenced]" } +} + final class SummaryOutNode extends FlowSummaryNode, OutNode { private DataFlowCall call; private ReturnKind kind_; @@ -402,16 +478,41 @@ final class ExprPostUpdateNode extends PostUpdateNode, TExprPostUpdateNode { override Location getLocation() { result = e.getLocation() } } -final class ReceiverPostUpdateNode extends PostUpdateNode, TReceiverNode { - private Call call; +final class DerefBorrowPostUpdateNode extends PostUpdateNode, TDerefBorrowNode { + private Expr arg; + private boolean isBorrow; + + DerefBorrowPostUpdateNode() { this = TDerefBorrowNode(arg, isBorrow, true) } + + override DerefBorrowNode getPreUpdateNode() { result = TDerefBorrowNode(arg, isBorrow, false) } + + override CfgScope getCfgScope() { result = arg.getEnclosingCfgScope() } + + override Location getLocation() { result = arg.getLocation() } +} + +class DerefOutPostUpdateNode extends PostUpdateNode, TDerefOutNode { + DerefExpr de; - ReceiverPostUpdateNode() { this = TReceiverNode(call, true) } + DerefOutPostUpdateNode() { this = TDerefOutNode(de, true) } - override Node getPreUpdateNode() { result = TReceiverNode(call, false) } + override DerefOutNode getPreUpdateNode() { result = TDerefOutNode(de, false) } - override CfgScope getCfgScope() { result = call.getEnclosingCfgScope() } + override CfgScope getCfgScope() { result = de.getEnclosingCfgScope() } - override Location getLocation() { result = call.getReceiver().getLocation() } + override Location getLocation() { result = de.getLocation() } +} + +class IndexOutPostUpdateNode extends PostUpdateNode, TIndexOutNode { + IndexExpr ie; + + IndexOutPostUpdateNode() { this = TIndexOutNode(ie, true) } + + override IndexOutNode getPreUpdateNode() { result = TIndexOutNode(ie, false) } + + override CfgScope getCfgScope() { result = ie.getEnclosingCfgScope() } + + override Location getLocation() { result = ie.getLocation() } } final class SummaryPostUpdateNode extends FlowSummaryNode, PostUpdateNode { @@ -452,7 +553,10 @@ newtype TNode = TExprPostUpdateNode(Expr e) { e.hasEnclosingCfgScope() and ( - isArgumentForCall(e, _, _) + isArgumentForCall(e, _, _) and + // For compound assignments into variables like `x += y`, we do not want flow into + // `[post] x`, as that would create spurious flow when `x` is a parameter. + not (e = any(CompoundAssignmentExpr cae).getLhs() and e instanceof VariableAccess) or lambdaCallExpr(_, _, e) or @@ -464,22 +568,22 @@ newtype TNode = or e = [ - any(IndexExpr i).getBase(), // any(FieldExpr access).getContainer(), // any(TryExpr try).getExpr(), // - any(PrefixExpr pe | pe.getOperatorName() = "*").getExpr(), // any(AwaitExpr a).getExpr(), // - any(MethodCallExpr mc).getReceiver(), // getPostUpdateReverseStep(any(PostUpdateNode n).getPreUpdateNode().asExpr(), _) ] ) } or - TReceiverNode(Call call, Boolean isPost) { - call.hasEnclosingCfgScope() and - call.receiverImplicitlyBorrowed() and - // TODO: Handle index expressions as calls in data flow. - not call instanceof IndexExpr + TDerefBorrowNode(AstNode n, boolean borrow, Boolean isPost) { + TypeInference::implicitDeref(n) and + borrow = false + or + TypeInference::implicitBorrow(n) and + borrow = true } or + TDerefOutNode(DerefExpr de, Boolean isPost) or + TIndexOutNode(IndexExpr ie, Boolean isPost) or TSsaNode(SsaImpl::DataFlowIntegration::SsaNode node) or TFlowSummaryNode(FlowSummaryImpl::Private::SummaryNode sn) { forall(AstNode n | n = sn.getSinkElement() or n = sn.getSourceElement() | diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll index 29674cbd1dfb..03db7c35b4d4 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll @@ -154,7 +154,7 @@ private predicate variableWriteInOuterScope(BasicBlock bb, int i, Variable v, Cf } /** Holds if evaluating `e` jumps to the evaluation of a different CFG scope. */ -private predicate isControlFlowJump(Expr e) { e instanceof CallExprBase or e instanceof AwaitExpr } +private predicate isControlFlowJump(Expr e) { e instanceof Call or e instanceof AwaitExpr } /** * Holds if the call `call` at index `i` in basic block `bb` may reach @@ -325,10 +325,8 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu predicate ssaDefHasSource(WriteDefinition def) { none() } // handled in `DataFlowImpl.qll` instead - private predicate isArg(CallExprBase call, Expr e) { - call.getAnArg() = e - or - call.(MethodCallExpr).getReceiver() = e + private predicate isArg(Call call, Expr e) { + call.getASyntacticArgument() = e or exists(Expr mid | isArg(call, mid) and diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll index 544bed64730f..33d44501cfc1 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll @@ -7,6 +7,27 @@ private import Node as Node private import Content private import FlowSummaryImpl as FlowSummaryImpl private import codeql.rust.internal.CachedStages +private import codeql.rust.internal.TypeInference as TypeInference +private import codeql.rust.internal.Type as Type +private import codeql.rust.frameworks.stdlib.Builtins as Builtins + +/** + * Holds if the field `field` should, by default, be excluded from taint steps + * from the containing type to reads of the field. The models-as-data syntax + * used to denote the field is the same as for `Field[]` access path elements. + */ +extensible predicate excludeFieldTaintStep(string field); + +/** + * Holds if the content `c` corresponds to a field that has explicitly been + * excluded as a taint step. + */ +private predicate excludedTaintStepContent(Content c) { + exists(string arg | excludeFieldTaintStep(arg) | + FlowSummaryImpl::encodeContentStructField(c, arg) or + FlowSummaryImpl::encodeContentTupleField(c, arg) + ) +} module RustTaintTracking implements InputSig { predicate defaultTaintSanitizer(DataFlow::Node node) { none() } @@ -20,18 +41,6 @@ module RustTaintTracking implements InputSig { Stages::DataFlowStage::ref() and model = "" and ( - exists(BinaryExpr binary | - binary.getOperatorName() = ["+", "-", "*", "/", "%", "&", "|", "^", "<<", ">>"] and - pred.asExpr() = [binary.getLhs(), binary.getRhs()] and - succ.asExpr() = binary - ) - or - exists(PrefixExpr prefix | - prefix.getOperatorName() = ["-", "!"] and - pred.asExpr() = prefix.getExpr() and - succ.asExpr() = prefix - ) - or pred.asExpr() = succ.asExpr().(CastExpr).getExpr() or exists(IndexExpr index | @@ -40,11 +49,17 @@ module RustTaintTracking implements InputSig { succ.asExpr() = index ) or - // Although data flow through collections and references is modeled using - // stores/reads, we also allow taint to flow out of a tainted collection - // or reference. - // This is needed in order to support taint-tracking configurations where - // the source is a collection or reference. + // Read steps give rise to taint steps. This has the effect that if `foo` + // is tainted and an operation reads from `foo` (e.g., `foo.bar`) then + // taint is propagated. + exists(Content c | + RustDataFlow::readContentStep(pred, c, succ) and + not excludedTaintStepContent(c) + ) + or + // In addition to the above, for element and reference content we let + // _all_ read steps (including those from flow summaries and those that + // result in small primitive types) give rise to taint steps. exists(SingletonContentSet cs | RustDataFlow::readStep(pred, cs, succ) | cs.getContent() instanceof ElementContent or @@ -65,6 +80,9 @@ module RustTaintTracking implements InputSig { or succ.(Node::PostUpdateNode).getPreUpdateNode().asExpr() = getPostUpdateReverseStep(pred.(Node::PostUpdateNode).getPreUpdateNode().asExpr(), false) + or + indexAssignment(any(CompoundAssignmentExpr cae), + pred.(Node::PostUpdateNode).getPreUpdateNode().asExpr(), _, succ, _) ) or FlowSummaryImpl::Private::Steps::summaryLocalStep(pred.(Node::FlowSummaryNode).getSummaryNode(), diff --git a/rust/ql/lib/codeql/rust/elements.qll b/rust/ql/lib/codeql/rust/elements.qll index b42a93efc6c3..9c7d0be306fb 100644 --- a/rust/ql/lib/codeql/rust/elements.qll +++ b/rust/ql/lib/codeql/rust/elements.qll @@ -38,7 +38,6 @@ import codeql.rust.elements.BlockExpr import codeql.rust.elements.BoxPat import codeql.rust.elements.BreakExpr import codeql.rust.elements.CallExpr -import codeql.rust.elements.CallExprBase import codeql.rust.elements.Callable import codeql.rust.elements.CastExpr import codeql.rust.elements.ClosureExpr diff --git a/rust/ql/lib/codeql/rust/elements/Call.qll b/rust/ql/lib/codeql/rust/elements/Call.qll index 0fd7f1397e2d..3a14425df1e9 100644 --- a/rust/ql/lib/codeql/rust/elements/Call.qll +++ b/rust/ql/lib/codeql/rust/elements/Call.qll @@ -1,9 +1,11 @@ /** - * This module provides the public class `Call`. + * This module provides the public classes `Call` and `MethodCall`. */ +private import rust private import internal.CallImpl - -final class ArgumentPosition = Impl::ArgumentPosition; +private import internal.CallExprImpl::Impl as CallExprImpl final class Call = Impl::Call; + +final class MethodCall = Impl::MethodCall; diff --git a/rust/ql/lib/codeql/rust/elements/CallExpr.qll b/rust/ql/lib/codeql/rust/elements/CallExpr.qll index ab5631b07ca7..1344af3a124a 100644 --- a/rust/ql/lib/codeql/rust/elements/CallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/CallExpr.qll @@ -4,16 +4,20 @@ */ private import internal.CallExprImpl -import codeql.rust.elements.CallExprBase +import codeql.rust.elements.ArgList +import codeql.rust.elements.Attr import codeql.rust.elements.Expr /** - * A function call expression. For example: + * NOTE: Consider using `Call` instead, as that excludes call expressions that are + * instantiations of tuple structs and tuple variants. + * + * A call expression. For example: * ```rust * foo(42); * foo::(42); * foo[0](42); - * foo(1) = 4; + * Option::Some(42); // tuple variant instantiation * ``` */ final class CallExpr = Impl::CallExpr; diff --git a/rust/ql/lib/codeql/rust/elements/CallExprBase.qll b/rust/ql/lib/codeql/rust/elements/CallExprBase.qll deleted file mode 100644 index d59c4c705f7c..000000000000 --- a/rust/ql/lib/codeql/rust/elements/CallExprBase.qll +++ /dev/null @@ -1,14 +0,0 @@ -// generated by codegen, do not edit -/** - * This module provides the public class `CallExprBase`. - */ - -private import internal.CallExprBaseImpl -import codeql.rust.elements.ArgList -import codeql.rust.elements.Attr -import codeql.rust.elements.Expr - -/** - * A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. - */ -final class CallExprBase = Impl::CallExprBase; diff --git a/rust/ql/lib/codeql/rust/elements/InvocationExpr.qll b/rust/ql/lib/codeql/rust/elements/InvocationExpr.qll new file mode 100644 index 000000000000..315c6bdef846 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/InvocationExpr.qll @@ -0,0 +1,9 @@ +/** + * This module provides the public classes `InvocationExpr` and `ArgumentPosition`. + */ + +private import internal.InvocationExprImpl + +final class InvocationExpr = Impl::InvocationExpr; + +final class ArgumentPosition = Impl::ArgumentPosition; diff --git a/rust/ql/lib/codeql/rust/elements/Method.qll b/rust/ql/lib/codeql/rust/elements/Method.qll new file mode 100644 index 000000000000..e29b7acae9c6 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/Method.qll @@ -0,0 +1,22 @@ +/** + * This module provides the public class `Method`. + */ + +private import rust + +/** + * A method declaration. For example + * ```rust + * fn foo(self, x: u32) -> u64 { (x + 1).into() } + * ``` + * + * A method declaration within a trait might not have a body: + * ```rust + * trait Trait { + * fn bar(self); + * } + * ``` + */ +final class Method extends Function { + Method() { this.hasSelfParam() } +} diff --git a/rust/ql/lib/codeql/rust/elements/MethodCallExpr.qll b/rust/ql/lib/codeql/rust/elements/MethodCallExpr.qll index fca8b0861345..3ac0fccc42d5 100644 --- a/rust/ql/lib/codeql/rust/elements/MethodCallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/MethodCallExpr.qll @@ -4,12 +4,17 @@ */ private import internal.MethodCallExprImpl -import codeql.rust.elements.CallExprBase +import codeql.rust.elements.ArgList +import codeql.rust.elements.Attr import codeql.rust.elements.Expr import codeql.rust.elements.GenericArgList import codeql.rust.elements.NameRef /** + * NOTE: Consider using `MethodCall` instead, as that also includes calls to methods using + * call syntax (such as `Foo::method(x)`), operation syntax (such as `x + y`), and + * indexing syntax (such as `x[y]`). + * * A method call expression. For example: * ```rust * x.foo(42); diff --git a/rust/ql/lib/codeql/rust/elements/TupleField.qll b/rust/ql/lib/codeql/rust/elements/TupleField.qll index 9dcfaa4fb333..3e63f377aeb6 100644 --- a/rust/ql/lib/codeql/rust/elements/TupleField.qll +++ b/rust/ql/lib/codeql/rust/elements/TupleField.qll @@ -10,7 +10,7 @@ import codeql.rust.elements.TypeRepr import codeql.rust.elements.Visibility /** - * A field in a tuple struct or tuple enum variant. + * A field in a tuple struct or tuple variant. * * For example: * ```rust diff --git a/rust/ql/lib/codeql/rust/elements/TupleFieldList.qll b/rust/ql/lib/codeql/rust/elements/TupleFieldList.qll index 0c464944993c..f2651228a783 100644 --- a/rust/ql/lib/codeql/rust/elements/TupleFieldList.qll +++ b/rust/ql/lib/codeql/rust/elements/TupleFieldList.qll @@ -8,7 +8,7 @@ import codeql.rust.elements.FieldList import codeql.rust.elements.TupleField /** - * A list of fields in a tuple struct or tuple enum variant. + * A list of fields in a tuple struct or tuple variant. * * For example: * ```rust diff --git a/rust/ql/lib/codeql/rust/elements/TupleStructExpr.qll b/rust/ql/lib/codeql/rust/elements/TupleStructExpr.qll new file mode 100644 index 000000000000..88da6aaa1cfa --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/TupleStructExpr.qll @@ -0,0 +1,7 @@ +/** + * This module provides the public class `TupleStructExpr`. + */ + +private import internal.CallExprImpl + +final class TupleStructExpr = Impl::TupleStructExpr; diff --git a/rust/ql/lib/codeql/rust/elements/TupleVariantExpr.qll b/rust/ql/lib/codeql/rust/elements/TupleVariantExpr.qll new file mode 100644 index 000000000000..9afd18ea0d92 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/TupleVariantExpr.qll @@ -0,0 +1,7 @@ +/** + * This module provides the public class `TupleVariantExpr`. + */ + +private import internal.CallExprImpl + +final class TupleVariantExpr = Impl::TupleVariantExpr; diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll deleted file mode 100644 index 05d5aee7a065..000000000000 --- a/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll +++ /dev/null @@ -1,27 +0,0 @@ -/** - * This module provides a hand-modifiable wrapper around the generated class `CallExprBase`. - * - * INTERNAL: Do not use. - */ - -private import codeql.rust.elements.internal.generated.CallExprBase - -/** - * INTERNAL: This module contains the customizable definition of `CallExprBase` and should not - * be referenced directly. - */ -module Impl { - private import rust - private import codeql.rust.internal.TypeInference as TypeInference - - // the following QLdoc is generated: if you need to edit it, do it in the schema file - /** - * A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. - */ - class CallExprBase extends Generated::CallExprBase { - /** Gets the static target (function or tuple struct/variant) of this call, if any. */ - final Addressable getStaticTarget() { result = TypeInference::resolveCallTarget(this) } - - override Expr getArg(int index) { result = this.getArgList().getArg(index) } - } -} diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll index 5723e1fdbb52..cad921640ef3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll @@ -5,7 +5,6 @@ */ private import codeql.rust.elements.internal.generated.CallExpr -private import codeql.rust.elements.PathExpr /** * INTERNAL: This module contains the customizable definition of `CallExpr` and should not @@ -13,7 +12,10 @@ private import codeql.rust.elements.PathExpr */ module Impl { private import rust + private import codeql.rust.elements.internal.InvocationExprImpl::Impl as InvocationExprImpl + private import codeql.rust.elements.internal.CallImpl::Impl as CallImpl private import codeql.rust.internal.PathResolution as PathResolution + private import codeql.rust.internal.TypeInference as TypeInference pragma[nomagic] Path getFunctionPath(CallExpr ce) { result = ce.getFunction().(PathExpr).getPath() } @@ -23,43 +25,134 @@ module Impl { result = PathResolution::resolvePath(getFunctionPath(ce)) } + private Expr getSyntacticArg(CallExpr ce, int i) { result = ce.getArgList().getArg(i) } + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A function call expression. For example: + * NOTE: Consider using `Call` instead, as that excludes call expressions that are + * instantiations of tuple structs and tuple variants. + * + * A call expression. For example: * ```rust * foo(42); * foo::(42); * foo[0](42); - * foo(1) = 4; + * Option::Some(42); // tuple variant instantiation * ``` */ - class CallExpr extends Generated::CallExpr { + class CallExpr extends Generated::CallExpr, InvocationExprImpl::InvocationExpr { override string toStringImpl() { result = this.getFunction().toAbbreviatedString() + "(...)" } - /** Gets the struct that this call resolves to, if any. */ - Struct getStruct() { result = getResolvedFunction(this) } - - /** Gets the variant that this call resolves to, if any. */ - Variant getVariant() { result = getResolvedFunction(this) } + override Expr getSyntacticPositionalArgument(int i) { result = getSyntacticArg(this, i) } + } - pragma[nomagic] - private PathResolution::ItemNode getResolvedFunctionAndPos(int pos) { - result = getResolvedFunction(this) and - exists(this.getArg(pos)) + /** + * A call expression that is _not_ an instantiation of a tuple struct or a tuple variant. + * + * For example: + * ```rust + * foo(42); + * foo::(42); + * foo[0](42); + * foo(1) = 4; + * ``` + */ + class CallExprCall extends CallExpr, CallImpl::Call { + CallExprCall() { + not this instanceof TupleStructExpr and + not this instanceof TupleVariantExpr } - /** - * Gets the tuple field that matches the `pos`th argument of this call, if any. - * - * For example, if this call is `Option::Some(42)`, then the tuple field matching - * `42` is the first field of `Option::Some`. - */ - pragma[nomagic] - TupleField getTupleField(int pos) { - exists(PathResolution::ItemNode i | i = this.getResolvedFunctionAndPos(pos) | - result.isStructField(i, pos) or - result.isVariantField(i, pos) + override Expr getPositionalArgument(int i) { result = getSyntacticArg(this, i) } + } + + /** + * A call expression that targets a closure (or any value that implements + * `Fn`, `FnMut`, or `FnOnce`). + * + * Dynamic calls never have a static target, and the set of potential + * run-time targets is only available internally to the data flow library. + */ + class DynamicCallExpr extends CallExprCall { + DynamicCallExpr() { + exists(Expr f | f = this.getFunction() | + // All calls to complex expressions and local variable accesses are lambda calls + f instanceof PathExpr implies f = any(Variable v).getAnAccess() ) } } + + /** + * A call expression that is a _potential_ method call. + * + * Note: In order to prevent the AST layer from relying on the type inference + * layer, we do not check that the resolved target is a method in the charpred, + * instead we check this in `getPositionalArgument` and `getReceiver`. + */ + class CallExprMethodCall extends CallImpl::MethodCall, CallExprCall { + CallExprMethodCall() { not this instanceof DynamicCallExpr } + + private predicate isInFactMethodCall() { this.getResolvedTarget() instanceof Method } + + override Expr getPositionalArgument(int i) { + if this.isInFactMethodCall() + then result = getSyntacticArg(this, i + 1) + else result = getSyntacticArg(this, i) + } + + override Expr getReceiver() { + this.isInFactMethodCall() and + result = getSyntacticArg(this, 0) + } + } + + /** + * A call expression that instantiates a tuple struct. + * + * For example: + * ```rust + * struct S(u32, u64); + * let s = S(42, 84); + * ``` + */ + class TupleStructExpr extends CallExpr { + private Struct struct; + + TupleStructExpr() { struct = getResolvedFunction(this) } + + /** Gets the struct that is instantiated. */ + Struct getStruct() { result = struct } + + /** Gets the `i`th tuple field of the instantiated struct. */ + pragma[nomagic] + TupleField getTupleField(int i) { result = this.getStruct().getTupleField(i) } + + override string getAPrimaryQlClass() { result = "TupleStructExpr" } + } + + /** + * A call expression that instantiates a tuple variant. + * + * For example: + * ```rust + * enum E { + * V(u32, u64), + * } + * let e = E::V(42, 84); + * ``` + */ + class TupleVariantExpr extends CallExpr { + private Variant variant; + + TupleVariantExpr() { variant = getResolvedFunction(this) } + + /** Gets the variant that is instantiated. */ + Variant getVariant() { result = variant } + + /** Gets the `i`th tuple field of the instantiated variant. */ + pragma[nomagic] + TupleField getTupleField(int i) { result = this.getVariant().getTupleField(i) } + + override string getAPrimaryQlClass() { result = "TupleVariantExpr" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll index 71c6cfbffc07..e35b932242c7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll @@ -1,209 +1,109 @@ private import rust -private import codeql.rust.internal.PathResolution -private import codeql.rust.internal.TypeInference as TypeInference -private import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl -private import codeql.rust.elements.Operation module Impl { - newtype TArgumentPosition = - TPositionalArgumentPosition(int i) { - i in [0 .. max([any(ParamList l).getNumberOfParams(), any(ArgList l).getNumberOfArgs()]) - 1] - } or - TSelfArgumentPosition() - - /** An argument position in a call. */ - class ArgumentPosition extends TArgumentPosition { - /** Gets the index of the argument in the call, if this is a positional argument. */ - int asPosition() { this = TPositionalArgumentPosition(result) } - - /** Holds if this call position is a self argument. */ - predicate isSelf() { this instanceof TSelfArgumentPosition } - - /** Gets a string representation of this argument position. */ - string toString() { - result = this.asPosition().toString() - or - this.isSelf() and result = "self" - } - } + private import codeql.rust.internal.TypeInference as TypeInference + private import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl + private import codeql.rust.elements.internal.InvocationExprImpl::Impl as InvocationExprImpl /** - * An expression that calls a function. + * A call. + * + * Either * - * This class abstracts over the different ways in which a function can be - * called in Rust. + * - a `CallExpr` that is _not_ an instantiation of a tuple struct or a tuple variant, + * - a `MethodCallExpr`, + * - an `Operation` that targets an overloadable operator, or + * - an `IndexExpr`. */ - abstract class Call extends ExprImpl::Expr { - /** Holds if the receiver of this call is implicitly borrowed. */ - predicate receiverImplicitlyBorrowed() { this.implicitBorrowAt(TSelfArgumentPosition(), _) } - - /** Gets the trait targeted by this call, if any. */ - abstract Trait getTrait(); - - /** Holds if this call targets a trait. */ - predicate hasTrait() { exists(this.getTrait()) } - - /** Gets the name of the method called if this call is a method call. */ - abstract string getMethodName(); + abstract class Call extends InvocationExprImpl::InvocationExpr { + /** + * Gets the argument at position `pos` of this call. + * + * Examples: + * ```rust + * foo(42, "bar"); // `42` is argument 0 and `"bar"` is argument 1 + * foo.bar(42); // `foo` is receiver and `42` is argument 0 + * Foo::bar(foo, 42); // `foo` is receiver and `42` is argument 0 + * x + y; // `x` is receiver and `y` is argument 0 + * -x; // `x` is receiver + * x[y]; // `x` is receiver and `y` is argument 0 + * ``` + */ + final Expr getArgument(ArgumentPosition pos) { + result = this.getPositionalArgument(pos.asPosition()) + or + pos.isSelf() and + result = this.(MethodCall).getReceiver() + } - /** Gets the argument at the given position, if any. */ - abstract Expr getArgument(ArgumentPosition pos); + /** Gets an argument of this call. */ + Expr getAnArgument() { result = this.getArgument(_) } - /** Holds if the argument at `pos` might be implicitly borrowed. */ - abstract predicate implicitBorrowAt(ArgumentPosition pos, boolean certain); + /** + * Gets the `i`th positional argument of this call. + * + * Examples: + * ```rust + * foo(42, "bar"); // `42` is argument 0 and `"bar"` is argument 1 + * foo.bar(42); // `42` is argument 0 + * Foo::bar(foo, 42); // `42` is argument 0 + * x + y; // `y` is argument 0 + * -x; // no positional arguments + * x[y]; // `y` is argument 0 + * ``` + */ + Expr getPositionalArgument(int i) { none() } - /** Gets the number of arguments _excluding_ any `self` argument. */ - int getNumberOfArguments() { result = count(this.getArgument(TPositionalArgumentPosition(_))) } + /** Gets a positional argument of this expression. */ + Expr getAPositionalArgument() { result = this.getPositionalArgument(_) } - /** Gets the `i`th argument of this call, if any. */ - Expr getPositionalArgument(int i) { result = this.getArgument(TPositionalArgumentPosition(i)) } + /** Gets the number of positional arguments of this expression. */ + int getNumberOfPositionalArguments() { + result = count(Expr arg | arg = this.getPositionalArgument(_)) + } - /** Gets the receiver of this call if it is a method call. */ - Expr getReceiver() { result = this.getArgument(TSelfArgumentPosition()) } + /** Gets the resolved target of this call, if any. */ + Function getStaticTarget() { result = TypeInference::resolveCallTarget(this, _) } - /** Gets the static target of this call, if any. */ - Function getStaticTarget() { result = TypeInference::resolveCallTarget(this) } + /** Gets the name of the function called, if any. */ + string getTargetName() { result = this.getStaticTarget().getName().getText() } /** Gets a runtime target of this call, if any. */ pragma[nomagic] Function getARuntimeTarget() { result.hasImplementation() and ( - result = this.getStaticTarget() + result = TypeInference::resolveCallTarget(this, _) or - result.implements(this.getStaticTarget()) - ) - } - } - - private predicate callHasQualifier(CallExpr call, Path path, Path qualifier) { - path = call.getFunction().(PathExpr).getPath() and - qualifier = path.getQualifier() - } - - private predicate callHasTraitQualifier(CallExpr call, Trait qualifier) { - exists(PathExt qualifierPath | - callHasQualifier(call, _, qualifierPath) and - qualifier = resolvePath(qualifierPath) and - // When the qualifier is `Self` and resolves to a trait, it's inside a - // trait method's default implementation. This is not a dispatch whose - // target is inferred from the type of the receiver, but should always - // resolve to the function in the trait block as path resolution does. - not qualifierPath.isUnqualified("Self") - ) - } - - /** Holds if the call expression dispatches to a method. */ - private predicate callIsMethodCall( - CallExpr call, Path qualifier, string methodName, boolean selfIsRef - ) { - exists(Path path, Function f | - callHasQualifier(call, path, qualifier) and - f = resolvePath(path) and - path.getSegment().getIdentifier().getText() = methodName and - exists(SelfParam self | - self = f.getSelfParam() and - if self.isRef() then selfIsRef = true else selfIsRef = false + result.implements(TypeInference::resolveCallTarget(this, true)) ) - ) - } - - class CallExprCall extends Call instanceof CallExpr { - CallExprCall() { not callIsMethodCall(this, _, _, _) } - - override string getMethodName() { none() } - - override Trait getTrait() { callHasTraitQualifier(this, result) } - - override predicate implicitBorrowAt(ArgumentPosition pos, boolean certain) { none() } - - override Expr getArgument(ArgumentPosition pos) { - result = super.getArgList().getArg(pos.asPosition()) } } - class CallExprMethodCall extends Call instanceof CallExpr { - string methodName; - boolean selfIsRef; - - CallExprMethodCall() { callIsMethodCall(this, _, methodName, selfIsRef) } - + /** + * A method call. + * + * Either + * + * - a `CallExpr` where we can resolve the target as a method, + * - a `MethodCallExpr`, + * - an `Operation` that targets an overloadable operator, or + * - an `IndexExpr`. + */ + abstract class MethodCall extends Call { /** - * Holds if this call must have an explicit borrow for the `self` argument, - * because the corresponding parameter is `&self`. Explicit borrows are not - * needed when using method call syntax. + * Gets the receiver of this method call. + * + * Examples: + * ```rust + * foo(42, "bar"); // no receiver + * foo.bar(42); // `foo` is receiver + * Foo::bar(foo, 42); // `foo` is receiver + * x + y; // `x` is receiver + * -x; // `x` is receiver + * x[y]; // `x` is receiver + * ``` */ - predicate hasExplicitSelfBorrow() { selfIsRef = true } - - override string getMethodName() { result = methodName } - - override Trait getTrait() { callHasTraitQualifier(this, result) } - - override predicate implicitBorrowAt(ArgumentPosition pos, boolean certain) { none() } - - override Expr getArgument(ArgumentPosition pos) { - pos.isSelf() and result = super.getArgList().getArg(0) - or - result = super.getArgList().getArg(pos.asPosition() + 1) - } - } - - private class MethodCallExprCall extends Call instanceof MethodCallExpr { - override string getMethodName() { result = super.getIdentifier().getText() } - - override Trait getTrait() { none() } - - override predicate implicitBorrowAt(ArgumentPosition pos, boolean certain) { - pos.isSelf() and certain = false - } - - override Expr getArgument(ArgumentPosition pos) { - pos.isSelf() and result = this.(MethodCallExpr).getReceiver() - or - result = super.getArgList().getArg(pos.asPosition()) - } - } - - private class OperatorCall extends Call instanceof Operation { - Trait trait; - string methodName; - int borrows; - - OperatorCall() { super.isOverloaded(trait, methodName, borrows) } - - override string getMethodName() { result = methodName } - - override Trait getTrait() { result = trait } - - override predicate implicitBorrowAt(ArgumentPosition pos, boolean certain) { - ( - pos.isSelf() and borrows >= 1 - or - pos.asPosition() = 0 and borrows = 2 - ) and - certain = true - } - - override Expr getArgument(ArgumentPosition pos) { - pos.isSelf() and result = super.getOperand(0) - or - pos.asPosition() = 0 and result = super.getOperand(1) - } - } - - private class IndexCall extends Call instanceof IndexExpr { - override string getMethodName() { result = "index" } - - override Trait getTrait() { result.getCanonicalPath() = "core::ops::index::Index" } - - override predicate implicitBorrowAt(ArgumentPosition pos, boolean certain) { - pos.isSelf() and certain = true - } - - override Expr getArgument(ArgumentPosition pos) { - pos.isSelf() and result = super.getBase() - or - pos.asPosition() = 0 and result = super.getIndex() - } + Expr getReceiver() { none() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll index 2c037aa475ab..469a8ccc05da 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll @@ -23,10 +23,10 @@ module Impl { */ class FieldExpr extends Generated::FieldExpr { /** Gets the record field that this access references, if any. */ - StructField getStructField() { result = TypeInference::resolveStructFieldExpr(this) } + StructField getStructField() { result = TypeInference::resolveStructFieldExpr(this, _) } /** Gets the tuple field that this access references, if any. */ - TupleField getTupleField() { result = TypeInference::resolveTupleFieldExpr(this) } + TupleField getTupleField() { result = TypeInference::resolveTupleFieldExpr(this, _) } override string toStringImpl() { exists(string abbr, string name | diff --git a/rust/ql/lib/codeql/rust/elements/internal/IndexExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/IndexExprImpl.qll index 66c33b4a0b19..f5336497e282 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/IndexExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/IndexExprImpl.qll @@ -4,6 +4,7 @@ * INTERNAL: Do not use. */ +private import rust private import codeql.rust.elements.internal.generated.IndexExpr /** @@ -11,6 +12,8 @@ private import codeql.rust.elements.internal.generated.IndexExpr * be referenced directly. */ module Impl { + private import codeql.rust.elements.internal.CallImpl::Impl as CallImpl + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * An index expression. For example: @@ -19,10 +22,20 @@ module Impl { * list[42] = 1; * ``` */ - class IndexExpr extends Generated::IndexExpr { + class IndexExpr extends Generated::IndexExpr, CallImpl::MethodCall { override string toStringImpl() { result = this.getBase().toAbbreviatedString() + "[" + this.getIndex().toAbbreviatedString() + "]" } + + override Expr getSyntacticPositionalArgument(int i) { + i = 0 and result = this.getBase() + or + i = 1 and result = this.getIndex() + } + + override Expr getPositionalArgument(int i) { i = 0 and result = this.getIndex() } + + override Expr getReceiver() { result = this.getBase() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/InvocationExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/InvocationExprImpl.qll new file mode 100644 index 000000000000..e1db44eb4d12 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/InvocationExprImpl.qll @@ -0,0 +1,99 @@ +private import rust + +module Impl { + private import codeql.rust.internal.TypeInference as TypeInference + private import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl + + private newtype TArgumentPosition = + TPositionalArgumentPosition(int i) { + i in [0 .. max([any(ParamList l).getNumberOfParams(), any(ArgList l).getNumberOfArgs()]) - 1] + } or + TSelfArgumentPosition() + + /** An argument position in a call. */ + class ArgumentPosition extends TArgumentPosition { + /** Gets the index of the argument in the call, if this is a positional argument. */ + int asPosition() { this = TPositionalArgumentPosition(result) } + + /** Holds if this call position is a self argument. */ + predicate isSelf() { this instanceof TSelfArgumentPosition } + + /** Gets a string representation of this argument position. */ + string toString() { + result = this.asPosition().toString() + or + this.isSelf() and result = "self" + } + } + + /** + * An expression with arguments. + * + * Either a `CallExpr`, a `MethodCallExpr`, an `Operation`, or an `IndexExpr`. + */ + abstract class InvocationExpr extends ExprImpl::Expr { + /** + * Gets the `i`th syntactical argument of this expression. + * + * Examples: + * ```rust + * foo(42, "bar"); // `42` is syntactic argument 0 and `"bar"` is syntactic argument 1 + * foo.bar(42); // `42` is syntactic argument 0 + * Foo::bar(foo, 42); // `foo` is syntactic argument 0 and `42` is syntactic argument 1 + * Option::Some(x); // `x` is syntactic argument 0 + * x + y; // `x` is syntactic argument 0 and `y` is syntactic argument 1 + * -x; // `x` is syntactic argument 0 + * x[y]; // `x` is syntactic argument 0 and `y` is syntactic argument 1 + * ``` + */ + Expr getSyntacticPositionalArgument(int i) { none() } + + /** + * Gets the syntactic receiver of this expression, if any. + * + * Examples: + * ```rust + * foo(42, "bar"); // no syntactic receiver + * foo.bar(42); // `foo` is syntactic receiver + * Foo::bar(foo, 42); // no syntactic receiver + * Option::Some(x); // no syntactic receiver + * x + y; // no syntactic receiver + * -x; // no syntactic receiver + * x[y]; // no syntactic receiver + * ``` + */ + Expr getSyntacticReceiver() { none() } + + /** + * Gets the argument at syntactic position `pos` of this expression. + * + * Examples: + * ```rust + * foo(42, "bar"); // `42` is syntactic argument 0 and `"bar"` is syntactic argument 1 + * foo.bar(42); // `foo` is syntactic receiver and `42` is syntactic argument 0 + * Foo::bar(foo, 42); // `foo` is syntactic argument 0 and `42` is syntactic argument 1 + * Option::Some(x); // `x` is syntactic argument 0 + * x + y; // `x` is syntactic argument 0 and `y` is syntactic argument 1 + * -x; // `x` is syntactic argument 0 + * x[y]; // `x` is syntactic argument 0 and `y` is syntactic argument 1 + * ``` + */ + final Expr getSyntacticArgument(ArgumentPosition pos) { + result = this.getSyntacticPositionalArgument(pos.asPosition()) + or + pos.isSelf() and + result = this.getSyntacticReceiver() + } + + /** Gets a syntactic argument of this expression. */ + Expr getASyntacticArgument() { result = this.getSyntacticArgument(_) } + + /** Gets the number of syntactic arguments of this expression. */ + int getNumberOfSyntacticArguments() { + result = count(Expr arg | arg = this.getSyntacticArgument(_)) + } + + /** Gets the resolved target (function or tuple struct/variant), if any. */ + Addressable getResolvedTarget() { result = TypeInference::resolveCallTarget(this, _) } + } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll index 7617ae456bbb..d5fa29b26b2e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll @@ -12,15 +12,22 @@ private import codeql.rust.elements.internal.generated.MethodCallExpr * be referenced directly. */ module Impl { + private import codeql.rust.elements.internal.CallImpl::Impl as CallImpl + private import codeql.rust.elements.internal.InvocationExprImpl::Impl as InvocationExprImpl + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** + * NOTE: Consider using `MethodCall` instead, as that also includes calls to methods using + * call syntax (such as `Foo::method(x)`), operation syntax (such as `x + y`), and + * indexing syntax (such as `x[y]`). + * * A method call expression. For example: * ```rust * x.foo(42); * x.foo::(42); * ``` */ - class MethodCallExpr extends Generated::MethodCallExpr { + class MethodCallExpr extends Generated::MethodCallExpr, CallImpl::MethodCall { private string toStringPart(int index) { index = 0 and result = this.getReceiver().toAbbreviatedString() @@ -39,7 +46,12 @@ module Impl { result = strictconcat(int i | | this.toStringPart(i) order by i) } - /** Gets the static target of this method call, if any. */ - final Function getStaticTarget() { result = super.getStaticTarget() } + override Expr getSyntacticPositionalArgument(int i) { result = this.getArgList().getArg(i) } + + override Expr getSyntacticReceiver() { result = Generated::MethodCallExpr.super.getReceiver() } + + override Expr getPositionalArgument(int i) { result = this.getArgList().getArg(i) } + + override Expr getReceiver() { result = Generated::MethodCallExpr.super.getReceiver() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/OperationImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/OperationImpl.qll index f22c95759d6e..31e30c8dcb89 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/OperationImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/OperationImpl.qll @@ -7,100 +7,116 @@ private import rust private import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl -/** - * Holds if the operator `op` with arity `arity` is overloaded to a trait with - * the canonical path `path` and the method name `method`, and if it borrows its - * first `borrows` arguments. - */ -predicate isOverloaded(string op, int arity, string path, string method, int borrows) { - arity = 1 and - ( - // Negation - op = "-" and path = "core::ops::arith::Neg" and method = "neg" and borrows = 0 - or - // Not - op = "!" and path = "core::ops::bit::Not" and method = "not" and borrows = 0 - or - // Dereference - op = "*" and path = "core::ops::deref::Deref" and method = "deref" and borrows = 1 - ) - or - arity = 2 and - ( - // Comparison operators - op = "==" and path = "core::cmp::PartialEq" and method = "eq" and borrows = 2 - or - op = "!=" and path = "core::cmp::PartialEq" and method = "ne" and borrows = 2 - or - op = "<" and path = "core::cmp::PartialOrd" and method = "lt" and borrows = 2 - or - op = "<=" and path = "core::cmp::PartialOrd" and method = "le" and borrows = 2 - or - op = ">" and path = "core::cmp::PartialOrd" and method = "gt" and borrows = 2 - or - op = ">=" and path = "core::cmp::PartialOrd" and method = "ge" and borrows = 2 - or - // Arithmetic operators - op = "+" and path = "core::ops::arith::Add" and method = "add" and borrows = 0 - or - op = "-" and path = "core::ops::arith::Sub" and method = "sub" and borrows = 0 - or - op = "*" and path = "core::ops::arith::Mul" and method = "mul" and borrows = 0 - or - op = "/" and path = "core::ops::arith::Div" and method = "div" and borrows = 0 - or - op = "%" and path = "core::ops::arith::Rem" and method = "rem" and borrows = 0 - or - // Arithmetic assignment expressions - op = "+=" and path = "core::ops::arith::AddAssign" and method = "add_assign" and borrows = 1 - or - op = "-=" and path = "core::ops::arith::SubAssign" and method = "sub_assign" and borrows = 1 - or - op = "*=" and path = "core::ops::arith::MulAssign" and method = "mul_assign" and borrows = 1 - or - op = "/=" and path = "core::ops::arith::DivAssign" and method = "div_assign" and borrows = 1 - or - op = "%=" and path = "core::ops::arith::RemAssign" and method = "rem_assign" and borrows = 1 - or - // Bitwise operators - op = "&" and path = "core::ops::bit::BitAnd" and method = "bitand" and borrows = 0 - or - op = "|" and path = "core::ops::bit::BitOr" and method = "bitor" and borrows = 0 - or - op = "^" and path = "core::ops::bit::BitXor" and method = "bitxor" and borrows = 0 - or - op = "<<" and path = "core::ops::bit::Shl" and method = "shl" and borrows = 0 - or - op = ">>" and path = "core::ops::bit::Shr" and method = "shr" and borrows = 0 - or - // Bitwise assignment operators - op = "&=" and path = "core::ops::bit::BitAndAssign" and method = "bitand_assign" and borrows = 1 - or - op = "|=" and path = "core::ops::bit::BitOrAssign" and method = "bitor_assign" and borrows = 1 - or - op = "^=" and path = "core::ops::bit::BitXorAssign" and method = "bitxor_assign" and borrows = 1 - or - op = "<<=" and path = "core::ops::bit::ShlAssign" and method = "shl_assign" and borrows = 1 - or - op = ">>=" and path = "core::ops::bit::ShrAssign" and method = "shr_assign" and borrows = 1 - ) -} - /** * INTERNAL: This module contains the customizable definition of `Operation` and should not * be referenced directly. */ module Impl { + private import codeql.rust.elements.internal.CallImpl::Impl as CallImpl + private import codeql.rust.elements.internal.InvocationExprImpl::Impl as InvocationExprImpl + + /** + * Holds if the operator `op` with arity `arity` is overloaded to a trait with + * the canonical path `path` and the method name `method`, and if it borrows its + * first `borrows` arguments. + */ + predicate isOverloaded(string op, int arity, string path, string method, int borrows) { + arity = 1 and + ( + // Negation + op = "-" and path = "core::ops::arith::Neg" and method = "neg" and borrows = 0 + or + // Not + op = "!" and path = "core::ops::bit::Not" and method = "not" and borrows = 0 + or + // Dereference + op = "*" and path = "core::ops::deref::Deref" and method = "deref" and borrows = 1 + ) + or + arity = 2 and + ( + // Comparison operators + op = "==" and path = "core::cmp::PartialEq" and method = "eq" and borrows = 2 + or + op = "!=" and path = "core::cmp::PartialEq" and method = "ne" and borrows = 2 + or + op = "<" and path = "core::cmp::PartialOrd" and method = "lt" and borrows = 2 + or + op = "<=" and path = "core::cmp::PartialOrd" and method = "le" and borrows = 2 + or + op = ">" and path = "core::cmp::PartialOrd" and method = "gt" and borrows = 2 + or + op = ">=" and path = "core::cmp::PartialOrd" and method = "ge" and borrows = 2 + or + // Arithmetic operators + op = "+" and path = "core::ops::arith::Add" and method = "add" and borrows = 0 + or + op = "-" and path = "core::ops::arith::Sub" and method = "sub" and borrows = 0 + or + op = "*" and path = "core::ops::arith::Mul" and method = "mul" and borrows = 0 + or + op = "/" and path = "core::ops::arith::Div" and method = "div" and borrows = 0 + or + op = "%" and path = "core::ops::arith::Rem" and method = "rem" and borrows = 0 + or + // Arithmetic assignment expressions + op = "+=" and path = "core::ops::arith::AddAssign" and method = "add_assign" and borrows = 1 + or + op = "-=" and path = "core::ops::arith::SubAssign" and method = "sub_assign" and borrows = 1 + or + op = "*=" and path = "core::ops::arith::MulAssign" and method = "mul_assign" and borrows = 1 + or + op = "/=" and path = "core::ops::arith::DivAssign" and method = "div_assign" and borrows = 1 + or + op = "%=" and path = "core::ops::arith::RemAssign" and method = "rem_assign" and borrows = 1 + or + // Bitwise operators + op = "&" and path = "core::ops::bit::BitAnd" and method = "bitand" and borrows = 0 + or + op = "|" and path = "core::ops::bit::BitOr" and method = "bitor" and borrows = 0 + or + op = "^" and path = "core::ops::bit::BitXor" and method = "bitxor" and borrows = 0 + or + op = "<<" and path = "core::ops::bit::Shl" and method = "shl" and borrows = 0 + or + op = ">>" and path = "core::ops::bit::Shr" and method = "shr" and borrows = 0 + or + // Bitwise assignment operators + op = "&=" and + path = "core::ops::bit::BitAndAssign" and + method = "bitand_assign" and + borrows = 1 + or + op = "|=" and path = "core::ops::bit::BitOrAssign" and method = "bitor_assign" and borrows = 1 + or + op = "^=" and + path = "core::ops::bit::BitXorAssign" and + method = "bitxor_assign" and + borrows = 1 + or + op = "<<=" and path = "core::ops::bit::ShlAssign" and method = "shl_assign" and borrows = 1 + or + op = ">>=" and path = "core::ops::bit::ShrAssign" and method = "shr_assign" and borrows = 1 + ) + } + /** * An operation, for example `&&`, `+=`, `!` or `*`. + * + * Overloadable operations are syntatic sugar for method calls, where the + * first operand is the receiver. For example, `x + y` is syntactic sugar + * for `Add::add(x, y)`, and `x += y` is syntactic sugar for + * `AddAssign::add_assign(&mut x, y)`. */ - abstract class Operation extends ExprImpl::Expr { + abstract class Operation extends InvocationExprImpl::InvocationExpr { /** Gets the operator name of this operation, if it exists. */ abstract string getOperatorName(); /** Gets the `n`th operand of this operation, if any. */ abstract Expr getOperand(int n); + override Expr getSyntacticPositionalArgument(int i) { result = this.getOperand(i) } + /** * Gets the number of operands of this operation. * @@ -115,9 +131,18 @@ module Impl { * Holds if this operation is overloaded to the method `methodName` of the * trait `trait`. */ + pragma[nomagic] predicate isOverloaded(Trait trait, string methodName, int borrows) { isOverloaded(this.getOperatorName(), this.getNumberOfOperands(), trait.getCanonicalPath(), methodName, borrows) } } + + private class OperationMethodCall extends CallImpl::MethodCall instanceof Operation { + OperationMethodCall() { super.isOverloaded(_, _, _) } + + override Expr getPositionalArgument(int i) { result = super.getOperand(i + 1) and i >= 0 } + + override Expr getReceiver() { result = super.getOperand(0) } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/StructExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StructExprImpl.qll index 5cbeb62c7a4a..d7704894c49a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StructExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructExprImpl.qll @@ -27,6 +27,16 @@ module Impl { class StructExpr extends Generated::StructExpr { override string toStringImpl() { result = this.getPath().toStringImpl() + " {...}" } + private PathResolution::ItemNode getResolvedPath() { + result = PathResolution::resolvePath(this.getPath()) + } + + /** Gets the struct that is instantiated, if any. */ + Struct getStruct() { result = this.getResolvedPath() } + + /** Gets the variant that is instantiated, if any. */ + Variant getVariant() { result = this.getResolvedPath() } + /** Gets the record expression for the field `name`. */ pragma[nomagic] StructExprField getFieldExpr(string name) { @@ -34,19 +44,11 @@ module Impl { name = result.getFieldName() } - pragma[nomagic] - private PathResolution::ItemNode getResolvedPath(string name) { - result = PathResolution::resolvePath(this.getPath()) and - exists(this.getFieldExpr(name)) - } - - /** Gets the record field that matches the `name` field of this record expression. */ - pragma[nomagic] + /** Gets the record field named `name` of the instantiated struct or variant. */ StructField getStructField(string name) { - exists(PathResolution::ItemNode i | i = this.getResolvedPath(name) | - result.isStructField(i, name) or - result.isVariantField(i, name) - ) + result = this.getStruct().getStructField(name) + or + result = this.getVariant().getStructField(name) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/StructFieldImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StructFieldImpl.qll index 4ed4466c2d90..c0e9a2f40db9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StructFieldImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructFieldImpl.qll @@ -29,5 +29,19 @@ module Impl { /** Holds if this record field is named `name` and belongs to the struct `s`. */ predicate isStructField(Struct s, string name) { this = s.getStructField(name) } + + override string toStringImpl() { + result = strictconcat(int i | | this.toStringPart(i) order by i) + } + + private string toStringPart(int index) { + index = 0 and result = this.getVisibility().toAbbreviatedString() + " " + or + index = 1 and result = this.getName().getText() + or + index = 2 and result = ": " + or + index = 3 and result = this.getTypeRepr().toAbbreviatedString() + } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/TupleFieldImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TupleFieldImpl.qll index 05d799b60475..f26c855e3cb2 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TupleFieldImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TupleFieldImpl.qll @@ -15,7 +15,7 @@ module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A field in a tuple struct or tuple enum variant. + * A field in a tuple struct or tuple variant. * * For example: * ```rust diff --git a/rust/ql/lib/codeql/rust/elements/internal/TupleFieldListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TupleFieldListImpl.qll index 3b5964693f3e..b52f0477987b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TupleFieldListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TupleFieldListImpl.qll @@ -13,7 +13,7 @@ private import codeql.rust.elements.internal.generated.TupleFieldList */ module Impl { /** - * A list of fields in a tuple struct or tuple enum variant. + * A list of fields in a tuple struct or tuple variant. * * For example: * ```rust diff --git a/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll index 4569a108cd8c..37a2e4dacc07 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll @@ -676,12 +676,12 @@ module Impl { predicate isCapture() { this.getEnclosingCfgScope() != v.getEnclosingCfgScope() } } - /** Holds if `e` occurs in the LHS of an assignment or compound assignment. */ - private predicate assignmentExprDescendant(AssignmentExpr ae, Expr e) { - e = ae.getLhs() + /** Holds if `e` occurs in the LHS of an assignment operation. */ + predicate assignmentOperationDescendant(AssignmentOperation ao, Expr e) { + e = ao.getLhs() or exists(Expr mid | - assignmentExprDescendant(ae, mid) and + assignmentOperationDescendant(ao, mid) and getImmediateParentAdj(e) = mid and not mid instanceof DerefExpr and not mid instanceof FieldExpr and @@ -696,7 +696,7 @@ module Impl { cached VariableWriteAccess() { Cached::ref() and - assignmentExprDescendant(ae, this) + assignmentOperationDescendant(ae, this) } /** Gets the assignment expression that has this write access in the left-hand side. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/VisibilityImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VisibilityImpl.qll index 21de0c88ca8c..e2bc7140b59e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/VisibilityImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/VisibilityImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `Visibility`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.Visibility * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A visibility modifier. * @@ -21,5 +21,13 @@ module Impl { * //^^^ * ``` */ - class Visibility extends Generated::Visibility { } + class Visibility extends Generated::Visibility { + override string toStringImpl() { result = this.toAbbreviatedString() } + + override string toAbbreviatedString() { + result = "pub(" + this.getPath().toAbbreviatedString() + ")" + or + not this.hasPath() and result = "pub" + } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/CallExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/CallExpr.qll index 829de70510be..196b78c1bde1 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/CallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/CallExpr.qll @@ -6,8 +6,10 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw -import codeql.rust.elements.internal.CallExprBaseImpl::Impl as CallExprBaseImpl +import codeql.rust.elements.ArgList +import codeql.rust.elements.Attr import codeql.rust.elements.Expr +import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl /** * INTERNAL: This module contains the fully generated definition of `CallExpr` and should not @@ -15,19 +17,53 @@ import codeql.rust.elements.Expr */ module Generated { /** - * A function call expression. For example: + * NOTE: Consider using `Call` instead, as that excludes call expressions that are + * instantiations of tuple structs and tuple variants. + * + * A call expression. For example: * ```rust * foo(42); * foo::(42); * foo[0](42); - * foo(1) = 4; + * Option::Some(42); // tuple variant instantiation * ``` * INTERNAL: Do not reference the `Generated::CallExpr` class directly. * Use the subclass `CallExpr`, where the following predicates are available. */ - class CallExpr extends Synth::TCallExpr, CallExprBaseImpl::CallExprBase { + class CallExpr extends Synth::TCallExpr, ExprImpl::Expr { override string getAPrimaryQlClass() { result = "CallExpr" } + /** + * Gets the argument list of this call expression, if it exists. + */ + ArgList getArgList() { + result = + Synth::convertArgListFromRaw(Synth::convertCallExprToRaw(this).(Raw::CallExpr).getArgList()) + } + + /** + * Holds if `getArgList()` exists. + */ + final predicate hasArgList() { exists(this.getArgList()) } + + /** + * Gets the `index`th attr of this call expression (0-based). + */ + Attr getAttr(int index) { + result = + Synth::convertAttrFromRaw(Synth::convertCallExprToRaw(this).(Raw::CallExpr).getAttr(index)) + } + + /** + * Gets any of the attrs of this call expression. + */ + final Attr getAnAttr() { result = this.getAttr(_) } + + /** + * Gets the number of attrs of this call expression. + */ + final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + /** * Gets the function of this call expression, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/CallExprBase.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/CallExprBase.qll deleted file mode 100644 index 1d6364fb94f3..000000000000 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/CallExprBase.qll +++ /dev/null @@ -1,75 +0,0 @@ -// generated by codegen, do not edit -/** - * This module provides the generated definition of `CallExprBase`. - * INTERNAL: Do not import directly. - */ - -private import codeql.rust.elements.internal.generated.Synth -private import codeql.rust.elements.internal.generated.Raw -import codeql.rust.elements.ArgList -import codeql.rust.elements.Attr -import codeql.rust.elements.Expr -import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl - -/** - * INTERNAL: This module contains the fully generated definition of `CallExprBase` and should not - * be referenced directly. - */ -module Generated { - /** - * A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. - * INTERNAL: Do not reference the `Generated::CallExprBase` class directly. - * Use the subclass `CallExprBase`, where the following predicates are available. - */ - class CallExprBase extends Synth::TCallExprBase, ExprImpl::Expr { - /** - * Gets the argument list of this call expression base, if it exists. - */ - ArgList getArgList() { - result = - Synth::convertArgListFromRaw(Synth::convertCallExprBaseToRaw(this) - .(Raw::CallExprBase) - .getArgList()) - } - - /** - * Holds if `getArgList()` exists. - */ - final predicate hasArgList() { exists(this.getArgList()) } - - /** - * Gets the `index`th attr of this call expression base (0-based). - */ - Attr getAttr(int index) { - result = - Synth::convertAttrFromRaw(Synth::convertCallExprBaseToRaw(this) - .(Raw::CallExprBase) - .getAttr(index)) - } - - /** - * Gets any of the attrs of this call expression base. - */ - final Attr getAnAttr() { result = this.getAttr(_) } - - /** - * Gets the number of attrs of this call expression base. - */ - final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } - - /** - * Gets the `index`th argument of this call expression base (0-based). - */ - Expr getArg(int index) { none() } - - /** - * Gets any of the arguments of this call expression base. - */ - final Expr getAnArg() { result = this.getArg(_) } - - /** - * Gets the number of arguments of this call expression base. - */ - final int getNumberOfArgs() { result = count(int i | exists(this.getArg(i))) } - } -} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll index 8908b71b7aff..18d6803211b3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll @@ -6,8 +6,10 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw -import codeql.rust.elements.internal.CallExprBaseImpl::Impl as CallExprBaseImpl +import codeql.rust.elements.ArgList +import codeql.rust.elements.Attr import codeql.rust.elements.Expr +import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl import codeql.rust.elements.GenericArgList import codeql.rust.elements.NameRef @@ -17,6 +19,10 @@ import codeql.rust.elements.NameRef */ module Generated { /** + * NOTE: Consider using `MethodCall` instead, as that also includes calls to methods using + * call syntax (such as `Foo::method(x)`), operation syntax (such as `x + y`), and + * indexing syntax (such as `x[y]`). + * * A method call expression. For example: * ```rust * x.foo(42); @@ -25,9 +31,44 @@ module Generated { * INTERNAL: Do not reference the `Generated::MethodCallExpr` class directly. * Use the subclass `MethodCallExpr`, where the following predicates are available. */ - class MethodCallExpr extends Synth::TMethodCallExpr, CallExprBaseImpl::CallExprBase { + class MethodCallExpr extends Synth::TMethodCallExpr, ExprImpl::Expr { override string getAPrimaryQlClass() { result = "MethodCallExpr" } + /** + * Gets the argument list of this method call expression, if it exists. + */ + ArgList getArgList() { + result = + Synth::convertArgListFromRaw(Synth::convertMethodCallExprToRaw(this) + .(Raw::MethodCallExpr) + .getArgList()) + } + + /** + * Holds if `getArgList()` exists. + */ + final predicate hasArgList() { exists(this.getArgList()) } + + /** + * Gets the `index`th attr of this method call expression (0-based). + */ + Attr getAttr(int index) { + result = + Synth::convertAttrFromRaw(Synth::convertMethodCallExprToRaw(this) + .(Raw::MethodCallExpr) + .getAttr(index)) + } + + /** + * Gets any of the attrs of this method call expression. + */ + final Attr getAnAttr() { result = this.getAttr(_) } + + /** + * Gets the number of attrs of this method call expression. + */ + final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + /** * Gets the generic argument list of this method call expression, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index 233c29e01738..9d6ec74a53e5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -1070,6 +1070,25 @@ private module Impl { ) } + private Element getImmediateChildOfCallExpr(CallExpr e, int index, string partialPredicateCall) { + exists(int n, int nArgList, int nAttr, int nFunction | + n = 0 and + nArgList = n + 1 and + nAttr = nArgList + e.getNumberOfAttrs() and + nFunction = nAttr + 1 and + ( + none() + or + index = n and result = e.getArgList() and partialPredicateCall = "ArgList()" + or + result = e.getAttr(index - nArgList) and + partialPredicateCall = "Attr(" + (index - nArgList).toString() + ")" + or + index = nAttr and result = e.getFunction() and partialPredicateCall = "Function()" + ) + ) + } + private Element getImmediateChildOfCastExpr(CastExpr e, int index, string partialPredicateCall) { exists(int n, int nAttr, int nExpr, int nTypeRepr | n = 0 and @@ -1563,6 +1582,37 @@ private module Impl { ) } + private Element getImmediateChildOfMethodCallExpr( + MethodCallExpr e, int index, string partialPredicateCall + ) { + exists(int n, int nArgList, int nAttr, int nGenericArgList, int nIdentifier, int nReceiver | + n = 0 and + nArgList = n + 1 and + nAttr = nArgList + e.getNumberOfAttrs() and + nGenericArgList = nAttr + 1 and + nIdentifier = nGenericArgList + 1 and + nReceiver = nIdentifier + 1 and + ( + none() + or + index = n and result = e.getArgList() and partialPredicateCall = "ArgList()" + or + result = e.getAttr(index - nArgList) and + partialPredicateCall = "Attr(" + (index - nArgList).toString() + ")" + or + index = nAttr and + result = e.getGenericArgList() and + partialPredicateCall = "GenericArgList()" + or + index = nGenericArgList and + result = e.getIdentifier() and + partialPredicateCall = "Identifier()" + or + index = nIdentifier and result = e.getReceiver() and partialPredicateCall = "Receiver()" + ) + ) + } + private Element getImmediateChildOfNameRef(NameRef e, int index, string partialPredicateCall) { none() } @@ -2228,25 +2278,6 @@ private module Impl { ) } - private Element getImmediateChildOfCallExpr(CallExpr e, int index, string partialPredicateCall) { - exists(int n, int nArgList, int nAttr, int nFunction | - n = 0 and - nArgList = n + 1 and - nAttr = nArgList + e.getNumberOfAttrs() and - nFunction = nAttr + 1 and - ( - none() - or - index = n and result = e.getArgList() and partialPredicateCall = "ArgList()" - or - result = e.getAttr(index - nArgList) and - partialPredicateCall = "Attr(" + (index - nArgList).toString() + ")" - or - index = nAttr and result = e.getFunction() and partialPredicateCall = "Function()" - ) - ) - } - private Element getImmediateChildOfExternBlock( ExternBlock e, int index, string partialPredicateCall ) { @@ -2421,37 +2452,6 @@ private module Impl { ) } - private Element getImmediateChildOfMethodCallExpr( - MethodCallExpr e, int index, string partialPredicateCall - ) { - exists(int n, int nArgList, int nAttr, int nGenericArgList, int nIdentifier, int nReceiver | - n = 0 and - nArgList = n + 1 and - nAttr = nArgList + e.getNumberOfAttrs() and - nGenericArgList = nAttr + 1 and - nIdentifier = nGenericArgList + 1 and - nReceiver = nIdentifier + 1 and - ( - none() - or - index = n and result = e.getArgList() and partialPredicateCall = "ArgList()" - or - result = e.getAttr(index - nArgList) and - partialPredicateCall = "Attr(" + (index - nArgList).toString() + ")" - or - index = nAttr and - result = e.getGenericArgList() and - partialPredicateCall = "GenericArgList()" - or - index = nGenericArgList and - result = e.getIdentifier() and - partialPredicateCall = "Identifier()" - or - index = nIdentifier and result = e.getReceiver() and partialPredicateCall = "Receiver()" - ) - ) - } - private Element getImmediateChildOfModule(Module e, int index, string partialPredicateCall) { exists( int n, int nAttributeMacroExpansion, int nAttr, int nItemList, int nName, int nVisibility @@ -3167,6 +3167,8 @@ private module Impl { or result = getImmediateChildOfBreakExpr(e, index, partialAccessor) or + result = getImmediateChildOfCallExpr(e, index, partialAccessor) + or result = getImmediateChildOfCastExpr(e, index, partialAccessor) or result = getImmediateChildOfClosureExpr(e, index, partialAccessor) @@ -3227,6 +3229,8 @@ private module Impl { or result = getImmediateChildOfMatchExpr(e, index, partialAccessor) or + result = getImmediateChildOfMethodCallExpr(e, index, partialAccessor) + or result = getImmediateChildOfNameRef(e, index, partialAccessor) or result = getImmediateChildOfNeverTypeRepr(e, index, partialAccessor) @@ -3311,8 +3315,6 @@ private module Impl { or result = getImmediateChildOfBlockExpr(e, index, partialAccessor) or - result = getImmediateChildOfCallExpr(e, index, partialAccessor) - or result = getImmediateChildOfExternBlock(e, index, partialAccessor) or result = getImmediateChildOfExternCrate(e, index, partialAccessor) @@ -3325,8 +3327,6 @@ private module Impl { or result = getImmediateChildOfMacroRules(e, index, partialAccessor) or - result = getImmediateChildOfMethodCallExpr(e, index, partialAccessor) - or result = getImmediateChildOfModule(e, index, partialAccessor) or result = getImmediateChildOfPathExpr(e, index, partialAccessor) diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index aff81e9b9ab8..7682b4b99f4e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -1808,7 +1808,7 @@ module Raw { /** * INTERNAL: Do not use. - * A field in a tuple struct or tuple enum variant. + * A field in a tuple struct or tuple variant. * * For example: * ```rust @@ -2942,23 +2942,57 @@ module Raw { /** * INTERNAL: Do not use. - * A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. + * NOTE: Consider using `Call` instead, as that excludes call expressions that are + * instantiations of tuple structs and tuple variants. + * + * A call expression. For example: + * ```rust + * foo(42); + * foo::(42); + * foo[0](42); + * Option::Some(42); // tuple variant instantiation + * ``` */ - class CallExprBase extends @call_expr_base, Expr { + class CallExpr extends @call_expr, Expr { + override string toString() { result = "CallExpr" } + + /** + * Gets the argument list of this call expression, if it exists. + */ + ArgList getArgList() { call_expr_arg_lists(this, result) } + /** - * Gets the argument list of this call expression base, if it exists. + * Gets the `index`th attr of this call expression (0-based). */ - ArgList getArgList() { call_expr_base_arg_lists(this, result) } + Attr getAttr(int index) { call_expr_attrs(this, index, result) } /** - * Gets the `index`th attr of this call expression base (0-based). + * Gets the number of attrs of this call expression. */ - Attr getAttr(int index) { call_expr_base_attrs(this, index, result) } + int getNumberOfAttrs() { result = count(int i | call_expr_attrs(this, i, _)) } /** - * Gets the number of attrs of this call expression base. + * Gets the function of this call expression, if it exists. */ - int getNumberOfAttrs() { result = count(int i | call_expr_base_attrs(this, i, _)) } + Expr getFunction() { call_expr_functions(this, result) } + } + + private Element getImmediateChildOfCallExpr(CallExpr e, int index) { + exists(int n, int nArgList, int nAttr, int nFunction | + n = 0 and + nArgList = n + 1 and + nAttr = nArgList + e.getNumberOfAttrs() and + nFunction = nAttr + 1 and + ( + none() + or + index = n and result = e.getArgList() + or + result = e.getAttr(index - nArgList) + or + index = nAttr and result = e.getFunction() + ) + ) } /** @@ -4345,6 +4379,76 @@ module Raw { ) } + /** + * INTERNAL: Do not use. + * NOTE: Consider using `MethodCall` instead, as that also includes calls to methods using + * call syntax (such as `Foo::method(x)`), operation syntax (such as `x + y`), and + * indexing syntax (such as `x[y]`). + * + * A method call expression. For example: + * ```rust + * x.foo(42); + * x.foo::(42); + * ``` + */ + class MethodCallExpr extends @method_call_expr, Expr { + override string toString() { result = "MethodCallExpr" } + + /** + * Gets the argument list of this method call expression, if it exists. + */ + ArgList getArgList() { method_call_expr_arg_lists(this, result) } + + /** + * Gets the `index`th attr of this method call expression (0-based). + */ + Attr getAttr(int index) { method_call_expr_attrs(this, index, result) } + + /** + * Gets the number of attrs of this method call expression. + */ + int getNumberOfAttrs() { result = count(int i | method_call_expr_attrs(this, i, _)) } + + /** + * Gets the generic argument list of this method call expression, if it exists. + */ + GenericArgList getGenericArgList() { method_call_expr_generic_arg_lists(this, result) } + + /** + * Gets the identifier of this method call expression, if it exists. + */ + NameRef getIdentifier() { method_call_expr_identifiers(this, result) } + + /** + * Gets the receiver of this method call expression, if it exists. + */ + Expr getReceiver() { method_call_expr_receivers(this, result) } + } + + private Element getImmediateChildOfMethodCallExpr(MethodCallExpr e, int index) { + exists(int n, int nArgList, int nAttr, int nGenericArgList, int nIdentifier, int nReceiver | + n = 0 and + nArgList = n + 1 and + nAttr = nArgList + e.getNumberOfAttrs() and + nGenericArgList = nAttr + 1 and + nIdentifier = nGenericArgList + 1 and + nReceiver = nIdentifier + 1 and + ( + none() + or + index = n and result = e.getArgList() + or + result = e.getAttr(index - nArgList) + or + index = nAttr and result = e.getGenericArgList() + or + index = nGenericArgList and result = e.getIdentifier() + or + index = nIdentifier and result = e.getReceiver() + ) + ) + } + /** * INTERNAL: Do not use. * A reference to a name. @@ -5418,7 +5522,7 @@ module Raw { /** * INTERNAL: Do not use. - * A list of fields in a tuple struct or tuple enum variant. + * A list of fields in a tuple struct or tuple variant. * * For example: * ```rust @@ -6033,43 +6137,6 @@ module Raw { ) } - /** - * INTERNAL: Do not use. - * A function call expression. For example: - * ```rust - * foo(42); - * foo::(42); - * foo[0](42); - * foo(1) = 4; - * ``` - */ - class CallExpr extends @call_expr, CallExprBase { - override string toString() { result = "CallExpr" } - - /** - * Gets the function of this call expression, if it exists. - */ - Expr getFunction() { call_expr_functions(this, result) } - } - - private Element getImmediateChildOfCallExpr(CallExpr e, int index) { - exists(int n, int nArgList, int nAttr, int nFunction | - n = 0 and - nArgList = n + 1 and - nAttr = nArgList + e.getNumberOfAttrs() and - nFunction = nAttr + 1 and - ( - none() - or - index = n and result = e.getArgList() - or - result = e.getAttr(index - nArgList) - or - index = nAttr and result = e.getFunction() - ) - ) - } - /** * INTERNAL: Do not use. * An extern block containing foreign function declarations. @@ -6467,57 +6534,6 @@ module Raw { ) } - /** - * INTERNAL: Do not use. - * A method call expression. For example: - * ```rust - * x.foo(42); - * x.foo::(42); - * ``` - */ - class MethodCallExpr extends @method_call_expr, CallExprBase { - override string toString() { result = "MethodCallExpr" } - - /** - * Gets the generic argument list of this method call expression, if it exists. - */ - GenericArgList getGenericArgList() { method_call_expr_generic_arg_lists(this, result) } - - /** - * Gets the identifier of this method call expression, if it exists. - */ - NameRef getIdentifier() { method_call_expr_identifiers(this, result) } - - /** - * Gets the receiver of this method call expression, if it exists. - */ - Expr getReceiver() { method_call_expr_receivers(this, result) } - } - - private Element getImmediateChildOfMethodCallExpr(MethodCallExpr e, int index) { - exists(int n, int nArgList, int nAttr, int nGenericArgList, int nIdentifier, int nReceiver | - n = 0 and - nArgList = n + 1 and - nAttr = nArgList + e.getNumberOfAttrs() and - nGenericArgList = nAttr + 1 and - nIdentifier = nGenericArgList + 1 and - nReceiver = nIdentifier + 1 and - ( - none() - or - index = n and result = e.getArgList() - or - result = e.getAttr(index - nArgList) - or - index = nAttr and result = e.getGenericArgList() - or - index = nGenericArgList and result = e.getIdentifier() - or - index = nIdentifier and result = e.getReceiver() - ) - ) - } - /** * INTERNAL: Do not use. * A module declaration. For example: @@ -7907,6 +7923,8 @@ module Raw { or result = getImmediateChildOfBreakExpr(e, index) or + result = getImmediateChildOfCallExpr(e, index) + or result = getImmediateChildOfCastExpr(e, index) or result = getImmediateChildOfClosureExpr(e, index) @@ -7967,6 +7985,8 @@ module Raw { or result = getImmediateChildOfMatchExpr(e, index) or + result = getImmediateChildOfMethodCallExpr(e, index) + or result = getImmediateChildOfNameRef(e, index) or result = getImmediateChildOfNeverTypeRepr(e, index) @@ -8047,8 +8067,6 @@ module Raw { or result = getImmediateChildOfBlockExpr(e, index) or - result = getImmediateChildOfCallExpr(e, index) - or result = getImmediateChildOfExternBlock(e, index) or result = getImmediateChildOfExternCrate(e, index) @@ -8059,8 +8077,6 @@ module Raw { or result = getImmediateChildOfMacroRules(e, index) or - result = getImmediateChildOfMethodCallExpr(e, index) - or result = getImmediateChildOfModule(e, index) or result = getImmediateChildOfPathExpr(e, index) diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll index 74b4a14460a0..b5fc41677b23 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -729,11 +729,6 @@ module Synth { TTypeBoundList or TTypeRepr or TUseBoundGenericArg or TUseBoundGenericArgs or TUseTree or TUseTreeList or TVariantList or TVisibility or TWhereClause or TWherePred; - /** - * INTERNAL: Do not use. - */ - class TCallExprBase = TCallExpr or TMethodCallExpr; - /** * INTERNAL: Do not use. */ @@ -744,11 +739,11 @@ module Synth { */ class TExpr = TArrayExpr or TArrayExprInternal or TAsmExpr or TAwaitExpr or TBecomeExpr or TBinaryExpr or - TBreakExpr or TCallExprBase or TCastExpr or TClosureExpr or TContinueExpr or TFieldExpr or + TBreakExpr or TCallExpr or TCastExpr or TClosureExpr or TContinueExpr or TFieldExpr or TFormatArgsExpr or TIfExpr or TIndexExpr or TLabelableExpr or TLetExpr or TLiteralExpr or - TMacroBlockExpr or TMacroExpr or TMatchExpr or TOffsetOfExpr or TParenExpr or - TPathExprBase or TPrefixExpr or TRangeExpr or TRefExpr or TReturnExpr or TStructExpr or - TTryExpr or TTupleExpr or TUnderscoreExpr or TYeetExpr or TYieldExpr; + TMacroBlockExpr or TMacroExpr or TMatchExpr or TMethodCallExpr or TOffsetOfExpr or + TParenExpr or TPathExprBase or TPrefixExpr or TRangeExpr or TRefExpr or TReturnExpr or + TStructExpr or TTryExpr or TTupleExpr or TUnderscoreExpr or TYeetExpr or TYieldExpr; /** * INTERNAL: Do not use. @@ -2229,16 +2224,6 @@ module Synth { result = convertWherePredFromRaw(e) } - /** - * INTERNAL: Do not use. - * Converts a raw DB element to a synthesized `TCallExprBase`, if possible. - */ - TCallExprBase convertCallExprBaseFromRaw(Raw::Element e) { - result = convertCallExprFromRaw(e) - or - result = convertMethodCallExprFromRaw(e) - } - /** * INTERNAL: Do not use. * Converts a raw DB element to a synthesized `TCallable`, if possible. @@ -2282,7 +2267,7 @@ module Synth { or result = convertBreakExprFromRaw(e) or - result = convertCallExprBaseFromRaw(e) + result = convertCallExprFromRaw(e) or result = convertCastExprFromRaw(e) or @@ -2310,6 +2295,8 @@ module Synth { or result = convertMatchExprFromRaw(e) or + result = convertMethodCallExprFromRaw(e) + or result = convertOffsetOfExprFromRaw(e) or result = convertParenExprFromRaw(e) @@ -3805,16 +3792,6 @@ module Synth { result = convertWherePredToRaw(e) } - /** - * INTERNAL: Do not use. - * Converts a synthesized `TCallExprBase` to a raw DB element, if possible. - */ - Raw::Element convertCallExprBaseToRaw(TCallExprBase e) { - result = convertCallExprToRaw(e) - or - result = convertMethodCallExprToRaw(e) - } - /** * INTERNAL: Do not use. * Converts a synthesized `TCallable` to a raw DB element, if possible. @@ -3858,7 +3835,7 @@ module Synth { or result = convertBreakExprToRaw(e) or - result = convertCallExprBaseToRaw(e) + result = convertCallExprToRaw(e) or result = convertCastExprToRaw(e) or @@ -3886,6 +3863,8 @@ module Synth { or result = convertMatchExprToRaw(e) or + result = convertMethodCallExprToRaw(e) + or result = convertOffsetOfExprToRaw(e) or result = convertParenExprToRaw(e) diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TupleField.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TupleField.qll index 436960983864..8d39a116f5c0 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TupleField.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TupleField.qll @@ -17,7 +17,7 @@ import codeql.rust.elements.Visibility */ module Generated { /** - * A field in a tuple struct or tuple enum variant. + * A field in a tuple struct or tuple variant. * * For example: * ```rust diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TupleFieldList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TupleFieldList.qll index 56b1d505c3ac..6d68797e64b0 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TupleFieldList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TupleFieldList.qll @@ -15,7 +15,7 @@ import codeql.rust.elements.TupleField */ module Generated { /** - * A list of fields in a tuple struct or tuple enum variant. + * A list of fields in a tuple struct or tuple variant. * * For example: * ```rust diff --git a/rust/ql/lib/codeql/rust/frameworks/actix-web.model.yml b/rust/ql/lib/codeql/rust/frameworks/actix-web.model.yml index 17b76e137d82..bef64edf68d6 100644 --- a/rust/ql/lib/codeql/rust/frameworks/actix-web.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/actix-web.model.yml @@ -15,9 +15,4 @@ extensions: pack: codeql/rust-all extensible: summaryModel data: - - ["::into_inner", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["::into_inner", "Argument[self]", "ReturnValue.Field[0]", "taint", "manual"] - - ["::into_inner", "Argument[self]", "ReturnValue.Field[1]", "taint", "manual"] - - ["::into_inner", "Argument[self]", "ReturnValue.Field[2]", "taint", "manual"] - - ["::into_inner", "Argument[self]", "ReturnValue.Field[3]", "taint", "manual"] - - ["::into_inner", "Argument[self]", "ReturnValue.Field[4]", "taint", "manual"] \ No newline at end of file + - ["::into_inner", "Argument[self]", "ReturnValue", "taint", "manual"] \ No newline at end of file diff --git a/rust/ql/lib/codeql/rust/frameworks/futures.model.yml b/rust/ql/lib/codeql/rust/frameworks/futures.model.yml index 35e547076d97..712897186a8a 100644 --- a/rust/ql/lib/codeql/rust/frameworks/futures.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/futures.model.yml @@ -7,13 +7,10 @@ extensions: - ["::new", "Argument[0]", "ReturnValue", "taint", "manual"] - ["<_ as futures_util::io::AsyncReadExt>::read", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - ["<_ as futures_util::io::AsyncReadExt>::read", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] - - ["<_ as futures_util::io::AsyncReadExt>::read_to_end", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - ["<_ as futures_util::io::AsyncReadExt>::read_to_end", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] - - ["<_ as futures_util::io::AsyncBufReadExt>::read_line", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - ["<_ as futures_util::io::AsyncBufReadExt>::read_line", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] - - ["<_ as futures_util::io::AsyncBufReadExt>::read_until", "Argument[self]", "Argument[1].Reference", "taint", "manual"] - ["<_ as futures_util::io::AsyncBufReadExt>::read_until", "Argument[self].Reference", "Argument[1].Reference", "taint", "manual"] - - ["<_ as futures_util::io::AsyncBufReadExt>::fill_buf", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as futures_util::io::AsyncBufReadExt>::fill_buf", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - ["<_ as futures_util::io::AsyncBufReadExt>::lines", "Argument[self]", "ReturnValue", "taint", "manual"] - ["<_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf", "Argument[self].Reference", "ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]", "taint", "manual"] - ["<_ as futures_io::if_std::AsyncRead>::poll_read", "Argument[self].Reference", "Argument[1].Reference", "taint", "manual"] diff --git a/rust/ql/lib/codeql/rust/frameworks/reqwest.model.yml b/rust/ql/lib/codeql/rust/frameworks/reqwest.model.yml index e9bc66b4be75..4b728a9a6ad3 100644 --- a/rust/ql/lib/codeql/rust/frameworks/reqwest.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/reqwest.model.yml @@ -22,10 +22,10 @@ extensions: - ["::text", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - ["::text_with_charset", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - ["::bytes", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["::chunk", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]", "taint", "manual"] + - ["::chunk", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]", "taint", "manual"] - ["::text", "Argument[self]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] - ["::text_with_charset", "Argument[self]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] - ["::bytes", "Argument[self]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] - ["::text", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - ["::bytes", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["::chunk", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]", "taint", "manual"] + - ["::chunk", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]", "taint", "manual"] diff --git a/rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll b/rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll index b6accba0734d..6e50659103d6 100644 --- a/rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll +++ b/rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll @@ -24,13 +24,12 @@ class StreamCipherInit extends Cryptography::CryptographicOperation::Range { StreamCipherInit() { // a call to `cipher::KeyInit::new`, `cipher::KeyInit::new_from_slice`, // `cipher::KeyIvInit::new`, `cipher::KeyIvInit::new_from_slices`, `rc2::Rc2::new_with_eff_key_len` or similar. - exists(CallExprBase ce, string rawAlgorithmName | - ce = this.asExpr() and - ce.getStaticTarget().(Function).getName().getText() = - ["new", "new_from_slice", "new_with_eff_key_len", "new_from_slices"] and + exists(Call call, string rawAlgorithmName | + call = this.asExpr() and + call.getTargetName() = ["new", "new_from_slice", "new_with_eff_key_len", "new_from_slices"] and // extract the algorithm name from the type of `ce` or its receiver. exists(Type t, TypePath tp | - t = inferType([ce, ce.(MethodCallExpr).getReceiver()], tp) and + t = inferType([call, call.(MethodCall).getReceiver()], tp) and rawAlgorithmName = t.(StructType).getStruct().(Addressable).getCanonicalPath().splitAt("::") ) and algorithmName = simplifyAlgorithmName(rawAlgorithmName) and diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/Builtins.qll b/rust/ql/lib/codeql/rust/frameworks/stdlib/Builtins.qll index 038bbeaece4a..9021e5d3643f 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/Builtins.qll +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/Builtins.qll @@ -27,8 +27,19 @@ private class BuiltinsTypesFile extends File { class BuiltinType extends Struct { BuiltinType() { this.getFile() instanceof BuiltinsTypesFile } - /** Gets the name of this type. */ + /** + * Gets the name of this type. + * + * This is the name used internally to represent the type, for example `Ref`. + */ string getName() { result = super.getName().getText() } + + /** + * Gets a display name for this type. + * + * This is the name used in code, for example `&`. + */ + string getDisplayName() { result = this.getName() } } /** @@ -140,21 +151,48 @@ class F64 extends FloatingPointTypeImpl { /** The builtin slice type `[T]`. */ class SliceType extends BuiltinType { SliceType() { this.getName() = "Slice" } + + override string getDisplayName() { result = "[]" } } /** The builtin array type `[T; N]`. */ class ArrayType extends BuiltinType { ArrayType() { this.getName() = "Array" } + + override string getDisplayName() { result = "[;]" } } -/** The builtin reference type `&T` or `&mut T`. */ +/** The builtin reference type `&T`. */ class RefType extends BuiltinType { RefType() { this.getName() = "Ref" } + + override string getDisplayName() { result = "&" } } -/** The builtin pointer type `*const T` or `*mut T`. */ -class PtrType extends BuiltinType { - PtrType() { this.getName() = "Ptr" } +/** The builtin reference type `&mut T`. */ +class RefMutType extends BuiltinType { + RefMutType() { this.getName() = "RefMut" } + + override string getDisplayName() { result = "&mut" } +} + +/** A builtin raw pointer type `*const T` or `*mut T`. */ +abstract private class PtrTypeImpl extends BuiltinType { } + +final class PtrType = PtrTypeImpl; + +/** The builtin raw pointer type `*const T`. */ +class PtrConstType extends PtrTypeImpl { + PtrConstType() { this.getName() = "PtrConst" } + + override string getDisplayName() { result = "*const" } +} + +/** The builtin raw pointer type `*mut T`. */ +class PtrMutType extends PtrTypeImpl { + PtrMutType() { this.getName() = "PtrMut" } + + override string getDisplayName() { result = "*mut" } } /** A builtin tuple type `(T1, T2, ...)`. */ @@ -168,4 +206,13 @@ class TupleType extends BuiltinType { or result = this.getGenericParamList().getNumberOfGenericParams() } + + override string getDisplayName() { + // Note: This produces "(,,)" for a 2-tuple, "(,,,)" for a 3-tuple, etc. + // This is in order to distinguish the unit type `()` from the 1-tuple `(,)`. + exists(string commas | + commas = concat(int i | i = [0 .. this.getArity() - 1] | ",") and + result = "(" + commas + ")" + ) + } } diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll b/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll index d078f08c1680..00e03053654d 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll @@ -10,7 +10,7 @@ private import codeql.rust.internal.PathResolution /** * A call to the `starts_with` method on a `Path`. */ -private class StartswithCall extends Path::SafeAccessCheck::Range, MethodCallExpr { +private class StartswithCall extends Path::SafeAccessCheck::Range, MethodCall { StartswithCall() { this.getStaticTarget().getCanonicalPath() = "::starts_with" } override predicate checks(Expr e, boolean branch) { diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/alloc.model.yml b/rust/ql/lib/codeql/rust/frameworks/stdlib/alloc.model.yml index 5199a0e8117b..ece380966dee 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/alloc.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/alloc.model.yml @@ -24,30 +24,31 @@ extensions: extensible: summaryModel data: # Box - - ["::pin", "Argument[0]", "ReturnValue.Reference", "value", "manual"] - - ["::new", "Argument[0]", "ReturnValue.Reference", "value", "manual"] - - ["::into_pin", "Argument[0]", "ReturnValue", "value", "manual"] + - ["::deref", "Argument[self].Reference.Field[alloc::boxed::Box(0)]", "ReturnValue.Reference", "value", "manual"] + - ["::pin", "Argument[0]", "ReturnValue.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]", "value", "manual"] + - ["::new", "Argument[0]", "ReturnValue.Field[alloc::boxed::Box(0)]", "value", "manual"] + - ["::into_pin", "Argument[0]", "ReturnValue.Field[core::pin::Pin::pointer]", "value", "manual"] # Fmt - ["alloc::fmt::format", "Argument[0]", "ReturnValue", "taint", "manual"] # Layout - ["::from_size_align", "Argument[0]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] - ["::from_size_align_unchecked", "Argument[0]", "ReturnValue", "taint", "manual"] - ["::array", "Argument[0]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["::repeat", "Argument[self]", "ReturnValue.Field[core::result::Result::Ok(0)].Field[0]", "taint", "manual"] + - ["::repeat", "Argument[self].Reference", "ReturnValue.Field[core::result::Result::Ok(0)].Field[0]", "taint", "manual"] - ["::repeat", "Argument[0]", "ReturnValue.Field[core::result::Result::Ok(0)].Field[0]", "taint", "manual"] - - ["::repeat_packed", "Argument[self]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["::repeat_packed", "Argument[self].Reference", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] - ["::repeat_packed", "Argument[0]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["::extend", "Argument[self]", "ReturnValue.Field[core::result::Result::Ok(0)].Field[0]", "taint", "manual"] + - ["::extend", "Argument[self].Reference", "ReturnValue.Field[core::result::Result::Ok(0)].Field[0]", "taint", "manual"] - ["::extend", "Argument[0]", "ReturnValue.Field[core::result::Result::Ok(0)].Field[0]", "taint", "manual"] - - ["::extend_packed", "Argument[self]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["::extend_packed", "Argument[self].Reference", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] - ["::extend_packed", "Argument[0]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["::align_to", "Argument[self]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["::align_to", "Argument[self].Element", "ReturnValue.Field[0,1,2].Reference.Element", "taint", "manual"] - - ["::pad_to_align", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["::size", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["::align_to", "Argument[self].Reference", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["::align_to", "Argument[self].Reference.Element", "ReturnValue.Field[0,1,2].Reference.Element", "taint", "manual"] + - ["::pad_to_align", "Argument[self].Reference", "ReturnValue", "taint", "manual"] + - ["::size", "Argument[self].Reference", "ReturnValue", "taint", "manual"] # String - ["::as_str", "Argument[self]", "ReturnValue", "value", "manual"] - ["::as_bytes", "Argument[self]", "ReturnValue", "value", "manual"] - - ["<_ as alloc::string::ToString>::to_string", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["<_ as alloc::string::ToString>::to_string", "Argument[self].Reference", "ReturnValue", "taint", "manual"] # Vec - ["alloc::vec::from_elem", "Argument[0]", "ReturnValue.Element", "value", "manual"] diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml b/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml index 7d1761dd8885..afcc3c42c8d4 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml @@ -3,10 +3,76 @@ extensions: pack: codeql/rust-all extensible: summaryModel data: - # Arithmetic + # Builtin deref + - ["<& as core::ops::deref::Deref>::deref", "Argument[self].Reference", "ReturnValue", "value", "manual"] + - ["<&mut as core::ops::deref::Deref>::deref", "Argument[self].Reference", "ReturnValue", "value", "manual"] + # Index + - ["<_ as core::ops::index::Index>::index", "Argument[self].Reference.Element", "ReturnValue.Reference", "value", "manual"] + - ["<_ as core::ops::index::IndexMut>::index_mut", "Argument[self].Reference.Element", "ReturnValue.Reference", "value", "manual"] + # Unary operators + - ["<_ as core::ops::arith::Neg>::neg", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "manual"] + # Arithmetic operators - ["<_ as core::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::arith::Add>::add", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Sub>::sub", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Mul>::mul", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Div>::div", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Rem>::rem", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + # Arithmetic assignment expressions + - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + # Bitwise operators + - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + # Bitwise assignment operators + - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + # Shift operators + - ["<_ as core::ops::bit::Shl>::shl", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::Shl>::shl", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::Shl>::shl", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::Shr>::shr", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::Shr>::shr", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::Shr>::shr", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + # Shift assignment operators + - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] # Clone - ["<_ as core::clone::Clone>::clone", "Argument[self].Reference", "ReturnValue", "value", "manual"] # Conversions @@ -20,9 +86,8 @@ extensions: - ["::iter_mut", "Argument[self].Element", "ReturnValue.Element", "value", "manual"] - ["::into_iter", "Argument[self].Element", "ReturnValue.Element", "value", "manual"] - ["<_ as core::iter::traits::iterator::Iterator>::for_each", "Argument[self].Element", "Argument[0].Parameter[0]", "value", "manual"] - - ["<_ as core::iter::traits::iterator::Iterator>::nth", "Argument[self].Element", "ReturnValue.Field[core::option::Option::Some(0)]", "value", "manual"] - - ["<_ as core::iter::traits::iterator::Iterator>::next", "Argument[self].Element", "ReturnValue.Field[core::option::Option::Some(0)]", "value", "manual"] - - ["<_ as core::iter::traits::iterator::Iterator>::next", "Argument[self].Element", "ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]", "value", "manual"] + - ["<_ as core::iter::traits::iterator::Iterator>::nth", "Argument[self].Reference.Element", "ReturnValue.Field[core::option::Option::Some(0)]", "value", "manual"] + - ["<_ as core::iter::traits::iterator::Iterator>::next", "Argument[self].Reference.Element", "ReturnValue.Field[core::option::Option::Some(0)]", "value", "manual"] - ["<_ as core::iter::traits::iterator::Iterator>::collect", "Argument[self].Element", "ReturnValue.Element", "value", "manual"] - ["<_ as core::iter::traits::iterator::Iterator>::map", "Argument[self].Element", "Argument[0].Parameter[0]", "value", "manual"] - ["<_ as core::iter::traits::iterator::Iterator>::for_each", "Argument[self].Element", "Argument[0].Parameter[0]", "value", "manual"] @@ -30,12 +95,13 @@ extensions: - ["<_ as core::iter::traits::iterator::Iterator>::chain", "Argument[0]", "ReturnValue", "taint", "manual"] - ["<_ as core::iter::traits::iterator::Iterator>::take", "Argument[self]", "ReturnValue", "taint", "manual"] # Pin - - ["core::pin::Pin", "Argument[0]", "ReturnValue", "value", "manual"] - - ["::new", "Argument[0]", "ReturnValue", "value", "manual"] - - ["::new_unchecked", "Argument[0].Reference", "ReturnValue", "value", "manual"] - - ["::into_inner", "Argument[0]", "ReturnValue", "value", "manual"] - - ["::into_inner_unchecked", "Argument[0]", "ReturnValue", "value", "manual"] - - ["::set", "Argument[0]", "Argument[self]", "value", "manual"] + - ["::new", "Argument[0]", "ReturnValue.Field[core::pin::Pin::pointer]", "value", "manual"] + # This model is not precise, but helps in cases where a `Pin` is implicitly dereferenced. + - ["::new", "Argument[0].Reference", "ReturnValue", "value", "manual"] + - ["::new_unchecked", "Argument[0]", "ReturnValue.Field[core::pin::Pin::pointer]", "value", "manual"] + - ["::into_inner", "Argument[0].Field[core::pin::Pin::pointer]", "ReturnValue", "value", "manual"] + - ["::into_inner_unchecked", "Argument[0].Field[core::pin::Pin::pointer]", "ReturnValue", "value", "manual"] + - ["::set", "Argument[0]", "Argument[self].Reference.Field[core::pin::Pin::pointer]", "value", "manual"] # Ptr - ["core::ptr::read", "Argument[0].Reference", "ReturnValue", "value", "manual"] - ["core::ptr::read_unaligned", "Argument[0].Reference", "ReturnValue", "value", "manual"] @@ -43,12 +109,19 @@ extensions: - ["core::ptr::write", "Argument[1]", "Argument[0].Reference", "value", "manual"] - ["core::ptr::write_unaligned", "Argument[1]", "Argument[0].Reference", "value", "manual"] - ["core::ptr::write_volatile", "Argument[1]", "Argument[0].Reference", "value", "manual"] + # https://doc.rust-lang.org/std/pin/struct.Pin.html#impl-Deref-for-Pin%3CPtr%3E, but limited to `Ptr = &` and `Ptr = Box` + - ["::deref", "Argument[self].Reference.Field[core::pin::Pin::pointer].Reference", "ReturnValue.Reference", "value", "manual"] + - ["::deref", "Argument[self].Reference.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]", "ReturnValue.Reference", "value", "manual"] # Str - ["::as_str", "Argument[self]", "ReturnValue", "value", "manual"] - ["::as_bytes", "Argument[self]", "ReturnValue", "value", "manual"] - ["::parse", "Argument[self]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] - ["::trim", "Argument[self]", "ReturnValue.Reference", "taint", "manual"] - ["::to_string", "Argument[self]", "ReturnValue", "taint", "manual"] + # Ord + - ["<_ as core::cmp::Ord>::min", "Argument[self,0]", "ReturnValue", "value", "manual"] + - ["<_ as core::cmp::Ord>::max", "Argument[self,0]", "ReturnValue", "value", "manual"] + - ["<_ as core::cmp::Ord>::clamp", "Argument[self,0,1]", "ReturnValue", "value", "manual"] - addsTo: pack: codeql/rust-all extensible: sourceModel @@ -74,3 +147,9 @@ extensions: - ["core::ptr::write_bytes", "Argument[0]", "pointer-access", "manual"] - ["core::ptr::write_unaligned", "Argument[0]", "pointer-access", "manual"] - ["core::ptr::write_volatile", "Argument[0]", "pointer-access", "manual"] + - addsTo: + pack: codeql/rust-all + extensible: excludeFieldTaintStep + data: + - ["core::ops::range::RangeInclusive::start"] + - ["core::ops::range::RangeInclusive::end"] \ No newline at end of file diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/fs.model.yml b/rust/ql/lib/codeql/rust/frameworks/stdlib/fs.model.yml index 076cea745fb7..8be4fdc05bf9 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/fs.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/fs.model.yml @@ -58,7 +58,7 @@ extensions: data: - ["std::fs::canonicalize", "Argument[0].OptionalStep[normalize-path]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] - ["std::fs::canonicalize", "Argument[0].OptionalBarrier[normalize-path]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["::as_path", "Argument[Self]", "ReturnValue.Reference", "value", "manual"] + - ["::as_path", "Argument[self].Reference", "ReturnValue.Reference", "value", "manual"] - ["::as_mut_os_string", "Argument[Self].Reference", "ReturnValue.Reference", "value", "manual"] - ["::into_os_string", "Argument[Self]", "ReturnValue", "value", "manual"] - ["::into_boxed_path", "Argument[Self]", "ReturnValue.Reference", "value", "manual"] diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/io.model.yml b/rust/ql/lib/codeql/rust/frameworks/stdlib/io.model.yml index b09ba8f297af..064c2cd19cf0 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/io.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/io.model.yml @@ -9,18 +9,19 @@ extensions: extensible: summaryModel data: - ["::new", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["<_ as std::io::BufRead>::fill_buf", "Argument[self]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["::buffer", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as std::io::Read>::read", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - - ["<_ as std::io::Read>::read_to_string", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - - ["<_ as std::io::Read>::read_to_end", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - - ["<_ as std::io::Read>::read_exact", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - - ["<_ as std::io::BufRead>::read_line", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - - ["<_ as std::io::BufRead>::read_until", "Argument[self]", "Argument[1].Reference", "taint", "manual"] + - ["<_ as std::io::BufRead>::fill_buf", "Argument[self].Reference", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["::buffer", "Argument[self].Reference", "ReturnValue.Reference", "taint", "manual"] + - ["<_ as std::io::Read>::read", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] + - ["<_ as std::io::Read>::read_to_string", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] + - ["<_ as std::io::Read>::read_to_end", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] + - ["<_ as std::io::Read>::read_exact", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] + - ["<_ as std::io::BufRead>::read_line", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] + - ["<_ as std::io::BufRead>::read_until", "Argument[self].Reference", "Argument[1].Reference", "taint", "manual"] - ["<_ as std::io::BufRead>::split", "Argument[self]", "ReturnValue", "taint", "manual"] - ["<_ as std::io::BufRead>::lines", "Argument[self]", "ReturnValue", "taint", "manual"] - ["<_ as std::io::Read>::bytes", "Argument[self]", "ReturnValue", "taint", "manual"] - ["<_ as std::io::Read>::chain", "Argument[self]", "ReturnValue", "taint", "manual"] - ["<_ as std::io::Read>::chain", "Argument[0]", "ReturnValue", "taint", "manual"] - ["<_ as std::io::Read>::take", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["::lock", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["::lock", "Argument[self].Reference", "ReturnValue", "taint", "manual"] + - ["::next", "Argument[self].Reference.Element", "ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]", "value", "manual"] diff --git a/rust/ql/lib/codeql/rust/frameworks/tokio/io.model.yml b/rust/ql/lib/codeql/rust/frameworks/tokio/io.model.yml index 17b0451793d8..b5dafedb8b38 100644 --- a/rust/ql/lib/codeql/rust/frameworks/tokio/io.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/tokio/io.model.yml @@ -9,40 +9,40 @@ extensions: extensible: summaryModel data: - ["::new", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["<_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["::buffer", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - - ["<_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - - ["<_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until", "Argument[self]", "Argument[1].Reference", "taint", "manual"] + - ["<_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["::buffer", "Argument[self].Reference", "ReturnValue.Reference", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] + - ["<_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] + - ["<_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until", "Argument[self].Reference", "Argument[1].Reference", "taint", "manual"] - ["<_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::split", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["::next_segment", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]", "taint", "manual"] + - ["::next_segment", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]", "taint", "manual"] - ["<_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::lines", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["::next_line", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8_le", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u16", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u16_le", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u32", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u32_le", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u64", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u64_le", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u128", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u128_le", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i8", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i8_le", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16_le", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i32", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i32_le", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i128", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i128_le", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>:::read_f32_le", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f64", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f64_le", "Argument[self]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["::next_line", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8_le", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u16", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u16_le", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u32", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u32_le", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u64", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u64_le", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u128", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u128_le", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i8", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i8_le", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16_le", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i32", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i32_le", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i128", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i128_le", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>:::read_f32_le", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f64", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f64_le", "Argument[self].Reference", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] diff --git a/rust/ql/lib/codeql/rust/frameworks/tokio/net.model.yml b/rust/ql/lib/codeql/rust/frameworks/tokio/net.model.yml index 0501969b71f8..7008b6f64892 100644 --- a/rust/ql/lib/codeql/rust/frameworks/tokio/net.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/tokio/net.model.yml @@ -8,7 +8,6 @@ extensions: pack: codeql/rust-all extensible: summaryModel data: - - ["::peek", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - - ["<_ as tokio::io::util::async_read_ext::AsyncReadExt>::read", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - - ["::try_read", "Argument[self]", "Argument[0].Reference", "taint", "manual"] - - ["::try_read_buf", "Argument[self]", "Argument[0].Reference", "taint", "manual"] + - ["::peek", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] + - ["::try_read", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] + - ["::try_read_buf", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] diff --git a/rust/ql/lib/codeql/rust/internal/Definitions.qll b/rust/ql/lib/codeql/rust/internal/Definitions.qll index 60520a77cbf5..aedcc3fc69c5 100644 --- a/rust/ql/lib/codeql/rust/internal/Definitions.qll +++ b/rust/ql/lib/codeql/rust/internal/Definitions.qll @@ -147,7 +147,7 @@ private class PathUse extends Use instanceof NameRef { override Definition getDefinition() { // Our call resolution logic may disambiguate some calls, so only use those - result.asItemNode() = this.getCall().getStaticTarget() + result.asItemNode() = this.getCall().getResolvedTarget() or not exists(this.getCall()) and result.asItemNode() = resolvePath(path) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 767d8c3674ec..28a72d370ae9 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -264,6 +264,9 @@ abstract class ItemNode extends Locatable { pragma[nomagic] ItemNode getImmediateParent() { this = result.getADescendant() } + /** Gets a child item of this item, if any. */ + ItemNode getAChild() { this = result.getImmediateParent() } + /** Gets the immediately enclosing module (or source file) of this item. */ pragma[nomagic] ModuleLikeNode getImmediateParentModule() { @@ -339,10 +342,13 @@ abstract class ItemNode extends Locatable { typeImplEdge(this, _, name, kind, result, useOpt) or // trait items with default implementations made available in an implementation - exists(ImplItemNodeImpl impl, ItemNode trait | + exists(ImplItemNodeImpl impl, TraitItemNode trait | this = impl and trait = impl.resolveTraitTyCand() and result = trait.getASuccessor(name, kind, useOpt) and + // do not inherit default implementations from super traits; those are inherited by + // their `impl` blocks + result = trait.getAssocItem(name) and result.(AssocItemNode).hasImplementation() and kind.isExternalOrBoth() and not impl.hasAssocItem(name) @@ -402,8 +408,14 @@ abstract class ItemNode extends Locatable { this instanceof SourceFile and builtin(name, result) or - name = "Self" and - this = result.(ImplOrTraitItemNode).getAnItemInSelfScope() + exists(ImplOrTraitItemNode i | + name = "Self" and + this = i.getAnItemInSelfScope() + | + result = i.(Trait) + or + result = i.(ImplItemNodeImpl).resolveSelfTyCand() + ) or name = "crate" and this = result.(CrateItemNode).getASourceFile() @@ -734,7 +746,7 @@ abstract class ImplOrTraitItemNode extends ItemNode { Path getASelfPath() { Stages::PathResolutionStage::ref() and isUnqualifiedSelfPath(result) and - this = unqualifiedPathLookup(result, _, _) + result = this.getAnItemInSelfScope().getADescendant() } /** Gets an associated item belonging to this trait or `impl` block. */ @@ -762,8 +774,11 @@ private TypeItemNode resolveBuiltin(TypeRepr tr) { tr instanceof RefTypeRepr and result instanceof Builtins::RefType or - tr instanceof PtrTypeRepr and - result instanceof Builtins::PtrType + tr.(PtrTypeRepr).isConst() and + result instanceof Builtins::PtrConstType + or + tr.(PtrTypeRepr).isMut() and + result instanceof Builtins::PtrMutType or result.(Builtins::TupleType).getArity() = tr.(TupleTypeRepr).getNumberOfFields() } @@ -960,7 +975,7 @@ private class ImplItemNodeImpl extends ImplItemNode { result = this.resolveSelfTyBuiltin() } - TraitItemNode resolveTraitTyCand() { result = resolvePathCand(this.getTraitPath()) } + TraitItemNodeImpl resolveTraitTyCand() { result = resolvePathCand(this.getTraitPath()) } } private class StructItemNode extends TypeItemNode, ParameterizableItemNode instanceof Struct { @@ -998,7 +1013,16 @@ private class StructItemNode extends TypeItemNode, ParameterizableItemNode insta language[monotonicAggregates] override string getCanonicalPath(Crate c) { this.hasCanonicalPath(c) and - result = strictconcat(int i | i in [0 .. 2] | this.getCanonicalPathPart(c, i) order by i) + ( + this = + any(Builtins::BuiltinType t | + not t.hasVisibility() and + result = t.getDisplayName() + ) + or + not this = any(Builtins::BuiltinType t | not t.hasVisibility()) and + result = strictconcat(int i | i in [0 .. 2] | this.getCanonicalPathPart(c, i) order by i) + ) } } @@ -1813,15 +1837,7 @@ private module DollarCrateResolution { pragma[nomagic] private ItemNode resolvePathCand0(PathExt path, Namespace ns) { - exists(ItemNode res | - res = unqualifiedPathLookup(path, ns, _) and - if - not any(PathExt parent).getQualifier() = path and - isUnqualifiedSelfPath(path) and - res instanceof ImplItemNode - then result = res.(ImplItemNodeImpl).resolveSelfTyCand() - else result = res - ) + result = unqualifiedPathLookup(path, ns, _) or DollarCrateResolution::resolveDollarCrate(path, result) and ns = result.getNamespace() @@ -1883,12 +1899,35 @@ private predicate checkQualifiedVisibility( not i instanceof TypeParam } +pragma[nomagic] +private predicate isImplSelfQualifiedPath( + ImplItemNode impl, PathExt qualifier, PathExt path, string name +) { + qualifier = impl.getASelfPath() and + qualifier = path.getQualifier() and + name = path.getText() +} + +private ItemNode resolveImplSelfQualified(PathExt qualifier, PathExt path, Namespace ns) { + exists(ImplItemNode impl, string name | + isImplSelfQualifiedPath(impl, qualifier, path, name) and + result = impl.getAssocItem(name) and + ns = result.getNamespace() + ) +} + /** * Gets the item that `path` resolves to in `ns` when `qualifier` is the * qualifier of `path` and `qualifier` resolves to `q`, if any. */ pragma[nomagic] private ItemNode resolvePathCandQualified(PathExt qualifier, ItemNode q, PathExt path, Namespace ns) { + // Special case for `Self::Assoc`; this always refers to the associated + // item in the enclosing `impl` block, if available. + q = resolvePathCandQualifier(qualifier, path, _) and + result = resolveImplSelfQualified(qualifier, path, ns) + or + not exists(resolveImplSelfQualified(qualifier, path, ns)) and exists(string name, SuccessorKind kind, UseOption useOpt | q = resolvePathCandQualifier(qualifier, path, name) and result = getASuccessor(q, name, ns, kind, useOpt) and @@ -2010,7 +2049,7 @@ private ItemNode resolvePathCand(PathExt path) { or exists(CallExpr ce | path = CallExprImpl::getFunctionPath(ce) and - result.(ParameterizableItemNode).getArity() = ce.getNumberOfArgs() + result.(ParameterizableItemNode).getArity() = ce.getArgList().getNumberOfArgs() ) ) } diff --git a/rust/ql/lib/codeql/rust/internal/PathResolutionConsistency.qll b/rust/ql/lib/codeql/rust/internal/PathResolutionConsistency.qll index 1c8ac649df36..807225d1615a 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolutionConsistency.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolutionConsistency.qll @@ -24,10 +24,10 @@ query predicate multiplePathResolutions(Path p, ItemNode i) { strictcount(ItemNode i0 | i0 = resolvePath(p) and not i0 instanceof Crate) > 1 } -/** Holds if `call` has multiple static call targets including `target`. */ -query predicate multipleCallTargets(CallExprBase call, Callable target) { - target = call.getStaticTarget() and - strictcount(call.getStaticTarget()) > 1 +/** Holds if `ie` has multiple resolved targets including `target`. */ +query predicate multipleResolvedTargets(InvocationExpr ie, Addressable target) { + target = ie.getResolvedTarget() and + strictcount(ie.getResolvedTarget()) > 1 } /** Holds if `fe` resolves to multiple record fields including `field`. */ @@ -55,8 +55,8 @@ int getPathResolutionInconsistencyCounts(string type) { type = "Multiple path resolutions" and result = count(Path p | multiplePathResolutions(p, _) | p) or - type = "Multiple static call targets" and - result = count(CallExprBase call | multipleCallTargets(call, _) | call) + type = "Multiple resolved targets" and + result = count(InvocationExpr ie | multipleResolvedTargets(ie, _) | ie) or type = "Multiple record fields" and result = count(FieldExpr fe | multipleStructFields(fe, _) | fe) diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index 9cfa173c1a97..b187a64dec15 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -339,12 +339,23 @@ class NeverType extends Type, TNeverType { override Location getLocation() { result instanceof EmptyLocation } } -class PtrType extends StructType { - PtrType() { this.getStruct() instanceof Builtins::PtrType } +abstract class PtrType extends StructType { } - override string toString() { result = "*" } +pragma[nomagic] +TypeParamTypeParameter getPtrTypeParameter() { + result = any(PtrType t).getPositionalTypeParameter(0) +} - override Location getLocation() { result instanceof EmptyLocation } +class PtrMutType extends PtrType { + PtrMutType() { this.getStruct() instanceof Builtins::PtrMutType } + + override string toString() { result = "*mut" } +} + +class PtrConstType extends PtrType { + PtrConstType() { this.getStruct() instanceof Builtins::PtrConstType } + + override string toString() { result = "*const" } } /** @@ -377,14 +388,11 @@ class UnknownType extends Type, TUnknownType { override Location getLocation() { result instanceof EmptyLocation } } -pragma[nomagic] -TypeParamTypeParameter getPtrTypeParameter() { - result = any(PtrType t).getPositionalTypeParameter(0) -} - /** A type parameter. */ abstract class TypeParameter extends Type { override TypeParameter getPositionalTypeParameter(int i) { none() } + + abstract ItemNode getDeclaringItem(); } private class RawTypeParameter = @type_param or @trait or @type_alias or @impl_trait_type_repr; @@ -403,6 +411,8 @@ class TypeParamTypeParameter extends TypeParameter, TTypeParamTypeParameter { TypeParam getTypeParam() { result = typeParam } + override ItemNode getDeclaringItem() { result.getTypeParam(_) = typeParam } + override string toString() { result = typeParam.toString() } override Location getLocation() { result = typeParam.getLocation() } @@ -436,6 +446,8 @@ class AssociatedTypeTypeParameter extends TypeParameter, TAssociatedTypeTypePara /** Gets the trait that contains this associated type declaration. */ TraitItemNode getTrait() { result.getAnAssocItem() = typeAlias } + override ItemNode getDeclaringItem() { result = this.getTrait() } + override string toString() { result = typeAlias.getName().getText() } override Location getLocation() { result = typeAlias.getLocation() } @@ -468,6 +480,8 @@ class DynTraitTypeParameter extends TypeParameter, TDynTraitTypeParameter { result = [this.getTypeParam().toString(), this.getTypeAlias().getName().toString()] } + override ItemNode getDeclaringItem() { none() } + override string toString() { result = "dyn(" + this.toStringInner() + ")" } override Location getLocation() { result = n.getLocation() } @@ -483,6 +497,8 @@ class ImplTraitTypeParameter extends TypeParameter, TImplTraitTypeParameter { ImplTraitTypeRepr getImplTraitTypeRepr() { result = implTrait } + override ItemNode getDeclaringItem() { none() } + override string toString() { result = "impl(" + typeParam.toString() + ")" } override Location getLocation() { result = typeParam.getLocation() } @@ -502,6 +518,8 @@ class SelfTypeParameter extends TypeParameter, TSelfTypeParameter { Trait getTrait() { result = trait } + override ItemNode getDeclaringItem() { result = trait } + override string toString() { result = "Self [" + trait.toString() + "]" } override Location getLocation() { result = trait.getLocation() } @@ -529,6 +547,8 @@ class ImplTraitTypeTypeParameter extends ImplTraitType, TypeParameter { ImplTraitTypeTypeParameter() { impl = function.getAParam().getTypeRepr() } + override ItemNode getDeclaringItem() { none() } + override Function getFunction() { result = function } override TypeParameter getPositionalTypeParameter(int i) { none() } diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index e58ae8b1a5b2..a6b2592a1847 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -9,12 +9,11 @@ private import TypeMention private import typeinference.FunctionType private import typeinference.FunctionOverloading as FunctionOverloading private import typeinference.BlanketImplementation as BlanketImplementation +private import codeql.rust.elements.internal.VariableImpl::Impl as VariableImpl private import codeql.rust.internal.CachedStages private import codeql.typeinference.internal.TypeInference private import codeql.rust.frameworks.stdlib.Stdlib private import codeql.rust.frameworks.stdlib.Builtins as Builtins -private import codeql.rust.elements.Call -private import codeql.rust.elements.internal.CallImpl::Impl as CallImpl private import codeql.rust.elements.internal.CallExprImpl::Impl as CallExprImpl class Type = T::Type; @@ -230,11 +229,6 @@ module Consistency { } } -/** A method, that is, a function with a `self` parameter. */ -private class Method extends Function { - Method() { this.hasSelfParam() } -} - /** A function without a `self` parameter. */ private class NonMethodFunction extends Function { NonMethodFunction() { not this.hasSelfParam() } @@ -273,11 +267,6 @@ private TypeMention getTypeAnnotation(AstNode n) { n = p.getPat() and result = p.getTypeRepr() ) - or - exists(Function f | - result = getReturnTypeMention(f) and - n = f.getFunctionBody() - ) } /** Gets the type of `n`, which has an explicit type annotation. */ @@ -288,6 +277,17 @@ private Type inferAnnotatedType(AstNode n, TypePath path) { result = n.(ShorthandSelfParameterMention).resolveTypeAt(path) } +pragma[nomagic] +private Type inferFunctionBodyType(AstNode n, TypePath path) { + exists(Function f | + n = f.getFunctionBody() and + result = getReturnTypeMention(f).resolveTypeAt(path) and + not exists(ImplTraitReturnType i | i.getFunction() = f | + result = i or result = i.getATypeParameter() + ) + ) +} + /** * Holds if `me` is a call to the `panic!` macro. * @@ -425,13 +425,18 @@ module CertainTypeInference { result = inferAnnotatedType(n, path) and Stages::TypeInferenceStage::ref() or + result = inferFunctionBodyType(n, path) + or result = inferCertainCallExprType(n, path) or result = inferCertainTypeEquality(n, path) or result = inferLiteralType(n, path, true) or - result = inferRefNodeType(n) and + result = inferRefPatType(n) and + path.isEmpty() + or + result = inferRefExprType(n) and path.isEmpty() or result = inferLogicalOperationType(n, path) @@ -606,10 +611,14 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat strictcount(Expr e | bodyReturns(n1, e)) = 1 ) or - ( - n1 = n2.(RefExpr).getExpr() or - n1 = n2.(RefPat).getPat() - ) and + n2 = + any(RefExpr re | + n1 = re.getExpr() and + prefix1.isEmpty() and + prefix2 = TypePath::singleton(inferRefExprType(re).getPositionalTypeParameter(0)) + ) + or + n1 = n2.(RefPat).getPat() and prefix1.isEmpty() and prefix2 = TypePath::singleton(getRefTypeParameter()) or @@ -672,7 +681,7 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat /** * Holds if `child` is a child of `parent`, and the Rust compiler applies [least - * upper bound (LUB) coercion](1) to infer the type of `parent` from the type of + * upper bound (LUB) coercion][1] to infer the type of `parent` from the type of * `child`. * * In this case, we want type information to only flow from `child` to `parent`, @@ -709,9 +718,7 @@ private predicate lubCoercion(AstNode parent, AstNode child, TypePath prefix) { * of `n2` at `prefix2`, but type information should only propagate from `n1` to * `n2`. */ -private predicate typeEqualityNonSymmetric( - AstNode n1, TypePath prefix1, AstNode n2, TypePath prefix2 -) { +private predicate typeEqualityAsymmetric(AstNode n1, TypePath prefix1, AstNode n2, TypePath prefix2) { lubCoercion(n2, n1, prefix2) and prefix1.isEmpty() or @@ -723,6 +730,13 @@ private predicate typeEqualityNonSymmetric( not lubCoercion(mid, n1, _) and prefix1 = prefixMid.append(suffix) ) + or + // When `n2` is `*n1` propagate type information from a raw pointer type + // parameter at `n1`. The other direction is handled in + // `inferDereferencedExprPtrType`. + n1 = n2.(DerefExpr).getExpr() and + prefix1 = TypePath::singleton(getPtrTypeParameter()) and + prefix2.isEmpty() } pragma[nomagic] @@ -735,7 +749,7 @@ private Type inferTypeEquality(AstNode n, TypePath path) { or typeEquality(n2, prefix2, n, prefix1) or - typeEqualityNonSymmetric(n2, prefix2, n, prefix1) + typeEqualityAsymmetric(n2, prefix2, n, prefix1) ) } @@ -961,6 +975,24 @@ private Type getCallExprTypeQualifier(CallExpr ce, TypePath path) { ) } +/** + * Gets the trait qualifier of function call `ce`, if any. + * + * For example, the trait qualifier of `Default::::default()` is `Default`. + */ +pragma[nomagic] +private Trait getCallExprTraitQualifier(CallExpr ce) { + exists(PathExt qualifierPath | + qualifierPath = getCallExprPathQualifier(ce) and + result = resolvePath(qualifierPath) and + // When the qualifier is `Self` and resolves to a trait, it's inside a + // trait method's default implementation. This is not a dispatch whose + // target is inferred from the type of the receiver, but should always + // resolve to the function in the trait block as path resolution does. + not qualifierPath.isUnqualified("Self") + ) +} + /** * Provides functionality related to context-based typing of calls. */ @@ -1244,14 +1276,17 @@ private module MethodResolution { pragma[nomagic] private predicate methodCallTraitCandidate(Element mc, Trait trait) { - exists(string name, int arity | - mc.(MethodCall).hasNameAndArity(name, arity) and - methodTraitInfo(name, arity, trait) - | - not mc.(Call).hasTrait() - or - trait = mc.(Call).getTrait() - ) + mc = + any(MethodCall mc0 | + exists(string name, int arity | + mc0.hasNameAndArity(name, arity) and + methodTraitInfo(name, arity, trait) + | + not mc0.hasTrait() + or + trait = mc0.getTrait() + ) + ) } private module MethodTraitIsVisible = TraitIsVisible; @@ -1296,7 +1331,7 @@ private module MethodResolution { or methodCallVisibleTraitCandidate(mc, i) or - i.(ImplItemNode).resolveTraitTy() = mc.(Call).getTrait() + i.(ImplItemNode).resolveTraitTy() = mc.getTrait() ) } @@ -1323,7 +1358,7 @@ private module MethodResolution { | methodCallVisibleImplTraitCandidate(mc, impl) or - impl.resolveTraitTy() = mc.(Call).getTrait() + impl.resolveTraitTy() = mc.getTrait() ) } @@ -1350,18 +1385,24 @@ private module MethodResolution { abstract class MethodCall extends Expr { abstract predicate hasNameAndArity(string name, int arity); - abstract Expr getArgument(ArgumentPosition pos); + abstract Expr getArg(ArgumentPosition pos); abstract predicate supportsAutoDerefAndBorrow(); + /** Gets the trait targeted by this call, if any. */ + abstract Trait getTrait(); + + /** Holds if this call targets a trait. */ + predicate hasTrait() { exists(this.getTrait()) } + AstNode getNodeAt(FunctionPosition apos) { - result = this.getArgument(apos.asArgumentPosition()) + result = this.getArg(apos.asArgumentPosition()) or result = this and apos.isReturn() } Type getArgumentTypeAt(ArgumentPosition pos, TypePath path) { - result = inferType(this.getArgument(pos), path) + result = inferType(this.getArg(pos), path) } private Type getReceiverTypeAt(TypePath path) { @@ -1397,11 +1438,19 @@ private module MethodResolution { * Holds if the method inside `i` with matching name and arity can be ruled * out as a target of this call, because the candidate receiver type represented * by `derefChain` and `borrow` is incompatible with the `self` parameter type. + * + * The types are incompatible because they disagree on a concrete type somewhere + * inside `root`. */ pragma[nomagic] - private predicate hasIncompatibleTarget(ImplOrTraitItemNode i, string derefChain, boolean borrow) { - ReceiverIsInstantiationOfSelfParam::argIsNotInstantiationOf(MkMethodCallCand(this, derefChain, - borrow), i, _) + private predicate hasIncompatibleTarget( + ImplOrTraitItemNode i, string derefChain, boolean borrow, Type root + ) { + exists(TypePath path | + ReceiverIsInstantiationOfSelfParam::argIsNotInstantiationOf(MkMethodCallCand(this, + derefChain, borrow), i, _, path) and + path.isCons(root.getATypeParameter(), _) + ) } /** @@ -1415,7 +1464,7 @@ private module MethodResolution { ImplItemNode impl, string derefChain, boolean borrow ) { ReceiverIsNotInstantiationOfBlanketLikeSelfParam::argIsNotInstantiationOf(MkMethodCallCand(this, - derefChain, borrow), impl, _) + derefChain, borrow), impl, _, _) or ReceiverSatisfiesBlanketLikeConstraint::dissatisfiesBlanketConstraint(MkMethodCallCand(this, derefChain, borrow), impl) @@ -1446,7 +1495,7 @@ private module MethodResolution { forall(ImplOrTraitItemNode i | methodCallNonBlanketCandidate(this, _, i, _, strippedTypePath, strippedType) | - this.hasIncompatibleTarget(i, derefChain, borrow) + this.hasIncompatibleTarget(i, derefChain, borrow, strippedType) ) } @@ -1587,12 +1636,12 @@ private module MethodResolution { predicate receiverHasImplicitDeref(AstNode receiver) { exists(this.resolveCallTarget(_, ".ref", false)) and - receiver = this.getArgument(CallImpl::TSelfArgumentPosition()) + receiver = this.getArg(any(ArgumentPosition pos | pos.isSelf())) } - predicate receiverHasImplicitBorrow(AstNode receiver) { + predicate argumentHasImplicitBorrow(AstNode arg) { exists(this.resolveCallTarget(_, "", true)) and - receiver = this.getArgument(CallImpl::TSelfArgumentPosition()) + arg = this.getArg(any(ArgumentPosition pos | pos.isSelf())) } } @@ -1603,35 +1652,45 @@ private module MethodResolution { arity = super.getArgList().getNumberOfArgs() } - override Expr getArgument(ArgumentPosition pos) { - pos.isSelf() and - result = MethodCallExpr.super.getReceiver() - or - result = super.getArgList().getArg(pos.asPosition()) + override Expr getArg(ArgumentPosition pos) { + result = MethodCallExpr.super.getSyntacticArgument(pos) } override predicate supportsAutoDerefAndBorrow() { any() } + + override Trait getTrait() { none() } } - private class MethodCallIndexExpr extends MethodCall, IndexExpr { + private class MethodCallIndexExpr extends MethodCall instanceof IndexExpr { + private predicate isInMutableContext() { + // todo: does not handle all cases yet + VariableImpl::assignmentOperationDescendant(_, this) + } + pragma[nomagic] override predicate hasNameAndArity(string name, int arity) { - name = "index" and + (if this.isInMutableContext() then name = "index_mut" else name = "index") and arity = 1 } - override Expr getArgument(ArgumentPosition pos) { + override Expr getArg(ArgumentPosition pos) { pos.isSelf() and - result = this.getBase() + result = super.getBase() or pos.asPosition() = 0 and - result = this.getIndex() + result = super.getIndex() } override predicate supportsAutoDerefAndBorrow() { any() } + + override Trait getTrait() { + if this.isInMutableContext() + then result.getCanonicalPath() = "core::ops::index::IndexMut" + else result.getCanonicalPath() = "core::ops::index::Index" + } } - private class MethodCallCallExpr extends MethodCall, CallExpr { + private class MethodCallCallExpr extends MethodCall instanceof CallExpr { MethodCallCallExpr() { exists(getCallExprPathQualifier(this)) and // even if a method cannot be resolved by path resolution, it may still @@ -1656,14 +1715,14 @@ private module MethodResolution { pragma[nomagic] override predicate hasNameAndArity(string name, int arity) { name = CallExprImpl::getFunctionPath(this).getText() and - arity = this.getArgList().getNumberOfArgs() - 1 + arity = super.getArgList().getNumberOfArgs() - 1 } - override Expr getArgument(ArgumentPosition pos) { + override Expr getArg(ArgumentPosition pos) { pos.isSelf() and - result = this.getArg(0) + result = super.getSyntacticPositionalArgument(0) or - result = this.getArgList().getArg(pos.asPosition() + 1) + result = super.getSyntacticPositionalArgument(pos.asPosition() + 1) } // needed for `TypeQualifierIsInstantiationOfImplSelfInput` @@ -1672,38 +1731,55 @@ private module MethodResolution { } override predicate supportsAutoDerefAndBorrow() { none() } + + override Trait getTrait() { result = getCallExprTraitQualifier(this) } } - final class MethodCallOperation extends MethodCall, Operation { + final class MethodCallOperation extends MethodCall instanceof Operation { pragma[nomagic] override predicate hasNameAndArity(string name, int arity) { - name = this.(Call).getMethodName() and - arity = this.getNumberOfOperands() - 1 + super.isOverloaded(_, name, _) and + arity = super.getNumberOfOperands() - 1 + } + + override Expr getArg(ArgumentPosition pos) { + pos.isSelf() and + result = super.getOperand(0) + or + result = super.getOperand(pos.asPosition() + 1) } - override Expr getArgument(ArgumentPosition pos) { result = this.(Call).getArgument(pos) } + private predicate implicitBorrowAt(ArgumentPosition pos) { + exists(int borrows | super.isOverloaded(_, _, borrows) | + pos.isSelf() and borrows >= 1 + or + pos.asPosition() = 0 and borrows = 2 + ) + } override Type getArgumentTypeAt(ArgumentPosition pos, TypePath path) { - if this.(Call).implicitBorrowAt(pos, true) + if this.implicitBorrowAt(pos) then result instanceof RefType and path.isEmpty() or exists(TypePath path0 | - result = inferType(this.getArgument(pos), path0) and + result = inferType(this.getArg(pos), path0) and path = TypePath::cons(getRefTypeParameter(), path0) ) - else result = inferType(this.getArgument(pos), path) + else result = inferType(this.getArg(pos), path) } - override predicate receiverHasImplicitBorrow(AstNode receiver) { + override predicate argumentHasImplicitBorrow(AstNode arg) { exists(ArgumentPosition pos | - this.(Call).implicitBorrowAt(pos, true) and - receiver = this.getArgument(pos) + this.implicitBorrowAt(pos) and + arg = this.getArg(pos) ) } override predicate supportsAutoDerefAndBorrow() { none() } + + override Trait getTrait() { super.isOverloaded(result, _, _) } } pragma[nomagic] @@ -1758,7 +1834,7 @@ private module MethodResolution { */ pragma[nomagic] private predicate hasIncompatibleInherentTarget(Impl impl) { - ReceiverIsNotInstantiationOfInherentSelfParam::argIsNotInstantiationOf(this, impl, _) + ReceiverIsNotInstantiationOfInherentSelfParam::argIsNotInstantiationOf(this, impl, _, _) } /** @@ -2274,14 +2350,17 @@ private module NonMethodResolution { pragma[nomagic] private predicate blanketLikeCallTraitCandidate(Element fc, Trait trait) { - exists(string name, int arity | - fc.(NonMethodCall).hasNameAndArity(name, arity) and - functionInfoBlanketLikeRelevantPos(_, name, arity, _, trait, _, _, _, _) - | - not fc.(Call).hasTrait() - or - trait = fc.(Call).getTrait() - ) + fc = + any(NonMethodCall nmc | + exists(string name, int arity | + nmc.hasNameAndArity(name, arity) and + functionInfoBlanketLikeRelevantPos(_, name, arity, _, trait, _, _, _, _) + | + not nmc.hasTrait() + or + trait = nmc.getTrait() + ) + ) } private module BlanketTraitIsVisible = TraitIsVisible; @@ -2323,9 +2402,15 @@ private module NonMethodResolution { ) } + /** Gets the trait targeted by this call, if any. */ + Trait getTrait() { result = getCallExprTraitQualifier(this) } + + /** Holds if this call targets a trait. */ + predicate hasTrait() { exists(this.getTrait()) } + pragma[nomagic] NonMethodFunction resolveAssocCallTargetCand(ImplItemNode i) { - not this.(Call).hasTrait() and + not this.hasTrait() and result = this.getPathResolutionResolved() and result = i.getASuccessor(_) or @@ -2333,7 +2418,7 @@ private module NonMethodResolution { } AstNode getNodeAt(FunctionPosition pos) { - result = this.getArg(pos.asPosition()) + result = this.getSyntacticArgument(pos.asArgumentPosition()) or result = this and pos.isReturn() } @@ -2358,7 +2443,7 @@ private module NonMethodResolution { pragma[nomagic] predicate hasTraitResolved(TraitItemNode trait, NonMethodFunction resolved) { resolved = this.getPathResolutionResolved() and - trait = this.(Call).getTrait() + trait = this.getTrait() } /** @@ -2366,7 +2451,7 @@ private module NonMethodResolution { */ pragma[nomagic] ItemNode resolveCallTargetViaPathResolution() { - not this.(Call).hasTrait() and + not this.hasTrait() and result = this.getPathResolutionResolved() and not FunctionOverloading::functionResolutionDependsOnArgument(_, result, _, _, _) } @@ -2391,7 +2476,7 @@ private module NonMethodResolution { pragma[nomagic] NonMethodFunction resolveTraitFunctionViaPathResolution(TraitItemNode trait) { - this.(Call).hasTrait() and + this.hasTrait() and result = this.getPathResolutionResolved() and result = trait.getASuccessor(_) } @@ -2703,7 +2788,7 @@ private predicate inferNonMethodCallType = * A matching configuration for resolving types of operations like `a + b`. */ private module OperationMatchingInput implements MatchingInputSig { - private import codeql.rust.elements.internal.OperationImpl as OperationImpl + private import codeql.rust.elements.internal.OperationImpl::Impl as OperationImpl import FunctionPositionMatchingInput class Declaration extends MethodCallMatchingInput::Declaration { @@ -2783,18 +2868,19 @@ private predicate inferOperationType = ContextTyping::CheckContextTyping::check/2; pragma[nomagic] -private Type getFieldExprLookupType(FieldExpr fe, string name) { +private Type getFieldExprLookupType(FieldExpr fe, string name, boolean isDereferenced) { exists(TypePath path | result = inferType(fe.getContainer(), path) and name = fe.getIdentifier().getText() and - isComplexRootStripped(path, result) + isComplexRootStripped(path, result) and + if path.isEmpty() then isDereferenced = false else isDereferenced = true ) } pragma[nomagic] -private Type getTupleFieldExprLookupType(FieldExpr fe, int pos) { +private Type getTupleFieldExprLookupType(FieldExpr fe, int pos, boolean isDereferenced) { exists(string name | - result = getFieldExprLookupType(fe, name) and + result = getFieldExprLookupType(fe, name, isDereferenced) and pos = name.toInt() ) } @@ -2911,8 +2997,8 @@ private module FieldExprMatchingInput implements MatchingInputSig { // mutual recursion; resolving fields requires resolving types and vice versa result = [ - TStructFieldDecl(resolveStructFieldExpr(this)).(TDeclaration), - TTupleFieldDecl(resolveTupleFieldExpr(this)) + TStructFieldDecl(resolveStructFieldExpr(this, _)).(TDeclaration), + TTupleFieldDecl(resolveTupleFieldExpr(this, _)) ] } } @@ -2951,16 +3037,21 @@ private Type inferFieldExprType(AstNode n, TypePath path) { ) } -/** Gets the root type of the reference node `ref`. */ +/** Gets the root type of the reference expression `ref`. */ pragma[nomagic] -private Type inferRefNodeType(AstNode ref) { - ( - ref = any(IdentPat ip | ip.isRef()).getName() +private Type inferRefExprType(RefExpr ref) { + if ref.isRaw() + then + ref.isMut() and result instanceof PtrMutType or - ref instanceof RefExpr - or - ref instanceof RefPat - ) and + ref.isConst() and result instanceof PtrConstType + else result instanceof RefType +} + +/** Gets the root type of the reference node `ref`. */ +pragma[nomagic] +private Type inferRefPatType(AstNode ref) { + (ref = any(IdentPat ip | ip.isRef()).getName() or ref instanceof RefPat) and result instanceof RefType } @@ -3144,6 +3235,27 @@ private Type inferIndexExprType(IndexExpr ie, TypePath path) { ) } +pragma[nomagic] +private Type getInferredDerefType(DerefExpr de, TypePath path) { result = inferType(de, path) } + +pragma[nomagic] +private PtrType getInferredDerefExprPtrType(DerefExpr de) { result = inferType(de.getExpr()) } + +/** + * Gets the inferred type of `n` at `path` when `n` occurs in a dereference + * expression `*n` and when `n` is known to have a raw pointer type. + * + * The other direction is handled in `typeEqualityAsymmetric`. + */ +private Type inferDereferencedExprPtrType(AstNode n, TypePath path) { + exists(DerefExpr de, PtrType type, TypePath suffix | + de.getExpr() = n and + type = getInferredDerefExprPtrType(de) and + result = getInferredDerefType(de, suffix) and + path = TypePath::cons(type.getPositionalTypeParameter(0), suffix) + ) +} + /** * A matching configuration for resolving types of struct patterns * like `let Foo { bar } = ...`. @@ -3364,8 +3476,9 @@ private Type inferDynamicCallExprType(Expr n, TypePath path) { or // Propagate the function's parameter type to the arguments exists(int index | - n = ce.getCall().getArgList().getArg(index) and - path = path0.stripPrefix(fnParameterPath(ce.getCall().getNumberOfArgs(), index)) + n = ce.getCall().getSyntacticPositionalArgument(index) and + path = + path0.stripPrefix(fnParameterPath(ce.getCall().getArgList().getNumberOfArgs(), index)) ) ) or @@ -3375,16 +3488,17 @@ private Type inferDynamicCallExprType(Expr n, TypePath path) { ce.getTypeAt(TypePath::nil()).(DynTraitType).getTrait() instanceof FnOnceTrait | // Propagate the type of arguments to the parameter types of closure - exists(int index | + exists(int index, ArgList args | n = ce and - arity = ce.getCall().getNumberOfArgs() and - result = inferType(ce.getCall().getArg(index), path0) and + args = ce.getCall().getArgList() and + arity = args.getNumberOfArgs() and + result = inferType(args.getArg(index), path0) and path = closureParameterPath(arity, index).append(path0) ) or // Propagate the type of the call expression to the return type of the closure n = ce and - arity = ce.getCall().getNumberOfArgs() and + arity = ce.getCall().getArgList().getNumberOfArgs() and result = inferType(ce.getCall(), path0) and path = closureReturnPath().append(path0) ) @@ -3415,32 +3529,56 @@ private Type inferCastExprType(CastExpr ce, TypePath path) { cached private module Cached { - /** Holds if `receiver` is the receiver of a method call with an implicit dereference. */ + /** Holds if `n` is implicitly dereferenced. */ cached - predicate receiverHasImplicitDeref(AstNode receiver) { - any(MethodResolution::MethodCall mc).receiverHasImplicitDeref(receiver) + predicate implicitDeref(AstNode n) { + any(MethodResolution::MethodCall mc).receiverHasImplicitDeref(n) + or + n = + any(FieldExpr fe | + exists(resolveStructFieldExpr(fe, true)) + or + exists(resolveTupleFieldExpr(fe, true)) + ).getContainer() } - /** Holds if `receiver` is the receiver of a method call with an implicit borrow. */ + /** Holds if `n` is implicitly borrowed. */ cached - predicate receiverHasImplicitBorrow(AstNode receiver) { - any(MethodResolution::MethodCall mc).receiverHasImplicitBorrow(receiver) + predicate implicitBorrow(AstNode n) { + any(MethodResolution::MethodCall mc).argumentHasImplicitBorrow(n) } - /** Gets an item (function or tuple struct/variant) that `call` resolves to, if any. */ + /** + * Gets an item (function or tuple struct/variant) that `call` resolves to, if + * any. + * + * The parameter `dispatch` is `true` if and only if the resolved target is a + * trait item because a precise target could not be determined from the + * types (for instance in the presence of generics or `dyn` types) + */ cached - Addressable resolveCallTarget(Call call) { - result = call.(MethodResolution::MethodCall).resolveCallTarget(_, _, _) + Addressable resolveCallTarget(InvocationExpr call, boolean dispatch) { + dispatch = false and + result = call.(NonMethodResolution::NonMethodCall).resolveCallTargetViaPathResolution() or - result = call.(NonMethodResolution::NonMethodCall).resolveCallTarget() + exists(ImplOrTraitItemNode i | + i instanceof TraitItemNode and dispatch = true + or + i instanceof ImplItemNode and dispatch = false + | + result = call.(MethodResolution::MethodCall).resolveCallTarget(i, _, _) or + result = call.(NonMethodResolution::NonMethodCall).resolveCallTargetViaTypeInference(i) + ) } /** * Gets the struct field that the field expression `fe` resolves to, if any. */ cached - StructField resolveStructFieldExpr(FieldExpr fe) { - exists(string name, Type ty | ty = getFieldExprLookupType(fe, pragma[only_bind_into](name)) | + StructField resolveStructFieldExpr(FieldExpr fe, boolean isDereferenced) { + exists(string name, Type ty | + ty = getFieldExprLookupType(fe, pragma[only_bind_into](name), isDereferenced) + | result = ty.(StructType).getStruct().getStructField(pragma[only_bind_into](name)) or result = ty.(UnionType).getUnion().getStructField(pragma[only_bind_into](name)) ) @@ -3450,10 +3588,10 @@ private module Cached { * Gets the tuple field that the field expression `fe` resolves to, if any. */ cached - TupleField resolveTupleFieldExpr(FieldExpr fe) { + TupleField resolveTupleFieldExpr(FieldExpr fe, boolean isDereferenced) { exists(int i | result = - getTupleFieldExprLookupType(fe, pragma[only_bind_into](i)) + getTupleFieldExprLookupType(fe, pragma[only_bind_into](i), isDereferenced) .(StructType) .getStruct() .getTupleField(pragma[only_bind_into](i)) @@ -3534,6 +3672,8 @@ private module Cached { or result = inferIndexExprType(n, path) or + result = inferDereferencedExprPtrType(n, path) + or result = inferForLoopExprType(n, path) or result = inferDynamicCallExprType(n, path) @@ -3569,9 +3709,9 @@ private module Debug { result = inferType(n, path) } - Addressable debugResolveCallTarget(Call c) { + Addressable debugResolveCallTarget(InvocationExpr c, boolean dispatch) { c = getRelevantLocatable() and - result = resolveCallTarget(c) + result = resolveCallTarget(c, dispatch) } predicate debugConditionSatisfiesConstraint( diff --git a/rust/ql/lib/codeql/rust/internal/TypeInferenceConsistency.qll b/rust/ql/lib/codeql/rust/internal/TypeInferenceConsistency.qll index 16eaff92bb6c..11ad9bef2a21 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInferenceConsistency.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInferenceConsistency.qll @@ -11,7 +11,14 @@ import TypeInference::Consistency query predicate illFormedTypeMention(TypeMention tm) { Consistency::illFormedTypeMention(tm) and - not tm instanceof PathTypeReprMention and // avoid overlap with `PathTypeMention` + // avoid overlap with `PathTypeMention` + not tm instanceof PathTypeReprMention and + // known limitation for type mentions that would mention an escaping type parameter + not tm = + any(PathTypeMention ptm | + exists(ptm.resolvePathTypeAt(TypePath::nil())) and + not exists(ptm.resolveType()) + ) and // Only include inconsistencies in the source, as we otherwise get // inconsistencies from library code in every project. tm.fromSource() diff --git a/rust/ql/lib/codeql/rust/internal/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/TypeMention.qll index 90de48035e38..3e2ca8111079 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeMention.qll @@ -77,7 +77,19 @@ class SliceTypeReprMention extends TypeMention instanceof SliceTypeRepr { } } -abstract class PathTypeMention extends TypeMention, Path { } +abstract class PathTypeMention extends TypeMention, Path { + abstract Type resolvePathTypeAt(TypePath typePath); + + final override Type resolveTypeAt(TypePath typePath) { + result = this.resolvePathTypeAt(typePath) and + ( + not result instanceof TypeParameter + or + // Prevent type parameters from escaping their scope + this = result.(TypeParameter).getDeclaringItem().getAChild*().getADescendant() + ) + } +} class AliasPathTypeMention extends PathTypeMention { TypeAlias resolved; @@ -94,7 +106,7 @@ class AliasPathTypeMention extends PathTypeMention { * Holds if this path resolved to a type alias with a rhs. that has the * resulting type at `typePath`. */ - override Type resolveTypeAt(TypePath typePath) { + override Type resolvePathTypeAt(TypePath typePath) { result = rhs.resolveTypeAt(typePath) and not result = pathGetTypeParameter(resolved, _) or @@ -275,7 +287,7 @@ class NonAliasPathTypeMention extends PathTypeMention { result = TAssociatedTypeTypeParameter(resolved) } - override Type resolveTypeAt(TypePath typePath) { + override Type resolvePathTypeAt(TypePath typePath) { typePath.isEmpty() and result = this.resolveRootType() or @@ -307,7 +319,9 @@ class ImplSelfMention extends PathTypeMention { ImplSelfMention() { this = impl.getASelfPath() } - override Type resolveTypeAt(TypePath typePath) { result = resolveImplSelfTypeAt(impl, typePath) } + override Type resolvePathTypeAt(TypePath typePath) { + result = resolveImplSelfTypeAt(impl, typePath) + } } class PathTypeReprMention extends TypeMention, PathTypeRepr { @@ -542,13 +556,18 @@ class NeverTypeReprMention extends TypeMention, NeverTypeRepr { } class PtrTypeReprMention extends TypeMention instanceof PtrTypeRepr { + private PtrType resolveRootType() { + super.isConst() and result instanceof PtrConstType + or + super.isMut() and result instanceof PtrMutType + } + override Type resolveTypeAt(TypePath path) { - path.isEmpty() and - result instanceof PtrType + path.isEmpty() and result = this.resolveRootType() or exists(TypePath suffix | result = super.getTypeRepr().(TypeMention).resolveTypeAt(suffix) and - path = TypePath::cons(getPtrTypeParameter(), suffix) + path = TypePath::cons(this.resolveRootType().getPositionalTypeParameter(0), suffix) ) } } diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll index 133393bf57a4..a74ff762c583 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll @@ -3,7 +3,6 @@ private import codeql.rust.internal.TypeInference private import codeql.rust.internal.PathResolution private import codeql.rust.internal.Type private import codeql.rust.internal.TypeMention -private import codeql.rust.elements.Call private newtype TFunctionPosition = TArgumentFunctionPosition(ArgumentPosition pos) or @@ -257,8 +256,10 @@ module ArgIsInstantiationOf< ArgSubstIsInstantiationOf::isInstantiationOf(arg, i, constraint) } - predicate argIsNotInstantiationOf(Arg arg, ImplOrTraitItemNode i, AssocFunctionType constraint) { - ArgSubstIsInstantiationOf::isNotInstantiationOf(arg, i, constraint) + predicate argIsNotInstantiationOf( + Arg arg, ImplOrTraitItemNode i, AssocFunctionType constraint, TypePath path + ) { + ArgSubstIsInstantiationOf::isNotInstantiationOf(arg, i, constraint, path) } } diff --git a/rust/ql/lib/codeql/rust/security/AccessAfterLifetimeExtensions.qll b/rust/ql/lib/codeql/rust/security/AccessAfterLifetimeExtensions.qll index 06438fef0c8f..64b806331a66 100644 --- a/rust/ql/lib/codeql/rust/security/AccessAfterLifetimeExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/AccessAfterLifetimeExtensions.qll @@ -100,9 +100,9 @@ module AccessAfterLifetime { a = b.getEnclosingBlock*() or // propagate through function calls - exists(CallExprBase ce | - mayEncloseOnStack(a, ce.getEnclosingBlock()) and - ce.getStaticTarget() = b.getEnclosingCallable() + exists(Call call | + mayEncloseOnStack(a, call.getEnclosingBlock()) and + call.getARuntimeTarget() = b.getEnclosingCallable() ) } diff --git a/rust/ql/lib/codeql/rust/security/AccessInvalidPointerExtensions.qll b/rust/ql/lib/codeql/rust/security/AccessInvalidPointerExtensions.qll index b8b40ffa2578..d8d7be259339 100644 --- a/rust/ql/lib/codeql/rust/security/AccessInvalidPointerExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/AccessInvalidPointerExtensions.qll @@ -10,6 +10,8 @@ private import codeql.rust.dataflow.FlowSink private import codeql.rust.Concepts private import codeql.rust.dataflow.internal.Node private import codeql.rust.security.Barriers as Barriers +private import codeql.rust.internal.TypeInference as TypeInference +private import codeql.rust.internal.Type /** * Provides default sources, sinks and barriers for detecting accesses to @@ -47,16 +49,22 @@ module AccessInvalidPointer { ModelsAsDataSource() { sourceNode(this, "pointer-invalidate") } } - /** - * A pointer access using the unary `*` operator. - */ + /** A raw pointer access using the unary `*` operator. */ private class DereferenceSink extends Sink { - DereferenceSink() { any(DerefExpr p).getExpr() = this.asExpr() } + DereferenceSink() { + exists(Expr p, DerefExpr d | p = d.getExpr() and p = this.asExpr() | + // Dereferencing a raw pointer is an unsafe operation. Hence relevant + // dereferences must occur inside code marked as unsafe. + // See: https://doc.rust-lang.org/reference/types/pointer.html#r-type.pointer.raw.safety + (p.getEnclosingBlock*().isUnsafe() or p.getEnclosingCallable().(Function).isUnsafe()) and + // We are only interested in dereferences of raw pointers, as other uses + // of `*` are safe. + (not exists(TypeInference::inferType(p)) or TypeInference::inferType(p) instanceof PtrType) + ) + } } - /** - * A pointer access from model data. - */ + /** A pointer access from model data. */ private class ModelsAsDataSink extends Sink { ModelsAsDataSink() { sinkNode(this, "pointer-access") } } diff --git a/rust/ql/lib/codeql/rust/security/DisabledCertificateCheckExtensions.qll b/rust/ql/lib/codeql/rust/security/DisabledCertificateCheckExtensions.qll index 6a885828ee98..a86ee506dfa9 100644 --- a/rust/ql/lib/codeql/rust/security/DisabledCertificateCheckExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/DisabledCertificateCheckExtensions.qll @@ -33,12 +33,12 @@ module DisabledCertificateCheckExtensions { */ private class HeuristicSink extends Sink { HeuristicSink() { - exists(CallExprBase fc | - fc.getStaticTarget().(Function).getName().getText() = + exists(Call call | + call.getStaticTarget().getName().getText() = ["danger_accept_invalid_certs", "danger_accept_invalid_hostnames"] and - fc.getArg(0) = this.asExpr() and + call.getPositionalArgument(0) = this.asExpr() and // don't duplicate modeled sinks - not exists(ModelsAsDataSink s | s.(Node::FlowSummaryNode).getSinkElement().getCall() = fc) + not exists(ModelsAsDataSink s | s.(Node::FlowSummaryNode).getSinkElement().getCall() = call) ) } } diff --git a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll index a7fb35d138b8..9bdfc53971e3 100644 --- a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll @@ -9,6 +9,7 @@ private import codeql.rust.dataflow.FlowSource private import codeql.rust.dataflow.FlowSink private import codeql.rust.Concepts private import codeql.rust.security.SensitiveData +private import codeql.rust.dataflow.internal.Node as Node /** * A kind of cryptographic value. @@ -98,15 +99,45 @@ module HardcodedCryptographicValue { override CryptographicValueKind getKind() { result = kind } } + /** + * A heuristic sink for hard-coded cryptographic value vulnerabilities. + */ + private class HeuristicSinks extends Sink { + CryptographicValueKind kind; + + HeuristicSinks() { + // any argument going to a parameter whose name matches a credential name + exists(Call c, Function f, int argIndex, string argName | + c.getPositionalArgument(argIndex) = this.asExpr() and + c.getStaticTarget() = f and + f.getParam(argIndex).getPat().(IdentPat).getName().getText() = argName and + ( + argName = "password" and kind = "password" + or + argName = "iv" and kind = "iv" + or + argName = "nonce" and kind = "nonce" + or + argName = "salt" and kind = "salt" + // + // note: matching "key" results in too many false positives + ) and + // don't duplicate modeled sinks + not exists(ModelsAsDataSinks s | s.(Node::FlowSummaryNode).getSinkElement().getCall() = c) + ) + } + + override CryptographicValueKind getKind() { result = kind } + } + /** * A call to `getrandom` that is a barrier. */ private class GetRandomBarrier extends Barrier { GetRandomBarrier() { - exists(CallExprBase ce | - ce.getStaticTarget().(Addressable).getCanonicalPath() = - ["getrandom::fill", "getrandom::getrandom"] and - this.asExpr().getParentNode*() = ce.getArgList().getArg(0) + exists(Call call | + call.getStaticTarget().getCanonicalPath() = ["getrandom::fill", "getrandom::getrandom"] and + this.asExpr().getParentNode*() = call.getPositionalArgument(0) ) } } diff --git a/rust/ql/lib/codeql/rust/security/InsecureCookieExtensions.qll b/rust/ql/lib/codeql/rust/security/InsecureCookieExtensions.qll index 8e9f855209e8..87d37d6b85b4 100644 --- a/rust/ql/lib/codeql/rust/security/InsecureCookieExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/InsecureCookieExtensions.qll @@ -80,12 +80,12 @@ module InsecureCookie { * as `false`. */ predicate cookieSetNode(DataFlow::Node node, string attrib, boolean value) { - exists(FlowSummaryNode summaryNode, CallExprBase ce, int arg, DataFlow::Node argNode | + exists(FlowSummaryNode summaryNode, MethodCall call, int arg, DataFlow::Node argNode | // decode the models-as-data `OptionalBarrier` cookieOptionalBarrier(summaryNode, attrib, arg) and // find a call and arg referenced by this optional barrier - ce.getStaticTarget() = summaryNode.getSummarizedCallable() and - ce.getArg(arg) = argNode.asExpr() and + call.getStaticTarget() = summaryNode.getSummarizedCallable() and + call.getPositionalArgument(arg) = argNode.asExpr() and // check if the argument is always `true` ( if @@ -101,12 +101,12 @@ module InsecureCookie { // and find the node where this happens (we can't just use the flow summary node, since its // shared across all calls to the modeled function, we need a node specific to this call) ( - node.asExpr() = ce.(MethodCallExpr).getReceiver() // e.g. `a` in `a.set_secure(true)` + node.asExpr() = call.getReceiver() // e.g. `a` in `a.set_secure(true)` or exists(BasicBlock bb, int i | // associated SSA node node.(SsaNode).asDefinition().definesAt(_, bb, i) and - ce.(MethodCallExpr).getReceiver() = bb.getNode(i).getAstNode() + call.getReceiver() = bb.getNode(i).getAstNode() ) ) ) diff --git a/rust/ql/lib/codeql/rust/security/SensitiveData.qll b/rust/ql/lib/codeql/rust/security/SensitiveData.qll index 1b6abdd52fbf..c4cd7c313668 100644 --- a/rust/ql/lib/codeql/rust/security/SensitiveData.qll +++ b/rust/ql/lib/codeql/rust/security/SensitiveData.qll @@ -28,12 +28,13 @@ private class SensitiveDataCall extends SensitiveData { SensitiveDataClassification classification; SensitiveDataCall() { - exists(CallExprBase call, string name | + exists(InvocationExpr call, Addressable target, string name | call = this.asExpr() and + target = call.getResolvedTarget() and name = [ - call.getStaticTarget().(Function).getName().getText(), - call.(CallExpr).getVariant().getName().getText(), + target.(Function).getName().getText(), + target.(Variant).getName().getText(), ] and HeuristicNames::nameIndicatesSensitiveData(name, classification) ) diff --git a/rust/ql/lib/codeql/rust/security/TaintedPathExtensions.qll b/rust/ql/lib/codeql/rust/security/TaintedPathExtensions.qll index 2d097c0aa4cd..ccf3736ceb4a 100644 --- a/rust/ql/lib/codeql/rust/security/TaintedPathExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/TaintedPathExtensions.qll @@ -66,11 +66,11 @@ module SanitizerGuard { * A check of the form `!strings.Contains(nd, "..")`, considered as a sanitizer guard for * path traversal. */ -private class DotDotCheck extends SanitizerGuard::Range, MethodCallExpr { +private class DotDotCheck extends SanitizerGuard::Range, MethodCall { DotDotCheck() { - this.getStaticTarget().(Addressable).getCanonicalPath() = + this.getStaticTarget().getCanonicalPath() = ["::contains", "::contains"] and - this.getArg(0).(LiteralExpr).getTextValue() = ["\"..\"", "\"../\"", "\"..\\\""] + this.getPositionalArgument(0).(LiteralExpr).getTextValue() = ["\"..\"", "\"../\"", "\"..\\\""] } override predicate checks(Expr e, boolean branch) { diff --git a/rust/ql/lib/codeql/rust/security/XssExtensions.qll b/rust/ql/lib/codeql/rust/security/XssExtensions.qll index d1d043fafaf4..cb0510cd7045 100644 --- a/rust/ql/lib/codeql/rust/security/XssExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/XssExtensions.qll @@ -53,9 +53,9 @@ module Xss { /** A call to a function with "escape" or "encode" in its name. */ private class HeuristicHtmlEncodingBarrier extends Barrier { HeuristicHtmlEncodingBarrier() { - exists(Call fc | - fc.getStaticTarget().getName().getText().regexpMatch(".*(escape|encode).*") and - fc.getArgument(_) = this.asExpr() + exists(Call c | + c.getStaticTarget().getName().getText().regexpMatch(".*(escape|encode).*") and + c.getAnArgument() = this.asExpr() ) } } diff --git a/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll b/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll index ae330ed1d0f5..7cb0dc47c9f3 100644 --- a/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll @@ -53,10 +53,10 @@ module RegexInjection { */ private class NewSink extends Sink { NewSink() { - exists(CallExprBase call, Addressable a | - call.getStaticTarget() = a and - a.getCanonicalPath() = "::new" and - this.asExpr() = call.getArg(0) and + exists(Call call, Function f | + call.getStaticTarget() = f and + f.getCanonicalPath() = "::new" and + this.asExpr() = call.getPositionalArgument(0) and not this.asExpr() instanceof LiteralExpr ) } diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index ad4c093f605e..551f2cd20cf8 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.2.1 +version: 0.2.3-dev groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index 30a0713e5bf6..e54d01f67a41 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -398,7 +398,7 @@ callable_attrs( | @become_expr | @binary_expr | @break_expr -| @call_expr_base +| @call_expr | @cast_expr | @closure_expr | @continue_expr @@ -412,6 +412,7 @@ callable_attrs( | @macro_block_expr | @macro_expr | @match_expr +| @method_call_expr | @offset_of_expr | @paren_expr | @path_expr_base @@ -1480,24 +1481,29 @@ break_expr_lifetimes( int lifetime: @lifetime ref ); -@call_expr_base = - @call_expr -| @method_call_expr -; +call_exprs( + unique int id: @call_expr +); #keyset[id] -call_expr_base_arg_lists( - int id: @call_expr_base ref, +call_expr_arg_lists( + int id: @call_expr ref, int arg_list: @arg_list ref ); #keyset[id, index] -call_expr_base_attrs( - int id: @call_expr_base ref, +call_expr_attrs( + int id: @call_expr ref, int index: int ref, int attr: @attr ref ); +#keyset[id] +call_expr_functions( + int id: @call_expr ref, + int function: @expr ref +); + cast_exprs( unique int id: @cast_expr ); @@ -2100,6 +2106,41 @@ match_expr_match_arm_lists( int match_arm_list: @match_arm_list ref ); +method_call_exprs( + unique int id: @method_call_expr +); + +#keyset[id] +method_call_expr_arg_lists( + int id: @method_call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +method_call_expr_attrs( + int id: @method_call_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +method_call_expr_generic_arg_lists( + int id: @method_call_expr ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +method_call_expr_identifiers( + int id: @method_call_expr ref, + int identifier: @name_ref ref +); + +#keyset[id] +method_call_expr_receivers( + int id: @method_call_expr ref, + int receiver: @expr ref +); + name_refs( unique int id: @name_ref ); @@ -2776,16 +2817,6 @@ block_expr_stmt_lists( int stmt_list: @stmt_list ref ); -call_exprs( - unique int id: @call_expr -); - -#keyset[id] -call_expr_functions( - int id: @call_expr ref, - int function: @expr ref -); - extern_blocks( unique int id: @extern_block ); @@ -2988,28 +3019,6 @@ macro_rules_visibilities( int visibility: @visibility ref ); -method_call_exprs( - unique int id: @method_call_expr -); - -#keyset[id] -method_call_expr_generic_arg_lists( - int id: @method_call_expr ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -method_call_expr_identifiers( - int id: @method_call_expr ref, - int identifier: @name_ref ref -); - -#keyset[id] -method_call_expr_receivers( - int id: @method_call_expr ref, - int receiver: @expr ref -); - modules( unique int id: @module ); diff --git a/rust/ql/lib/rust.qll b/rust/ql/lib/rust.qll index d209672028b9..410f062d91ea 100644 --- a/rust/ql/lib/rust.qll +++ b/rust/ql/lib/rust.qll @@ -6,6 +6,7 @@ import codeql.Locations import codeql.files.FileSystem import codeql.rust.elements.Operation import codeql.rust.elements.ArithmeticOperation +import codeql.rust.elements.InvocationExpr import codeql.rust.elements.AssignmentOperation import codeql.rust.elements.BitwiseOperation import codeql.rust.elements.ComparisonOperation @@ -18,6 +19,7 @@ import codeql.rust.elements.Variable import codeql.rust.elements.NamedFormatArgument import codeql.rust.elements.PositionalFormatArgument import codeql.rust.elements.RangeExprExt -private import codeql.rust.elements.Call as Call - -class Call = Call::Call; +import codeql.rust.elements.Call +import codeql.rust.elements.TupleStructExpr +import codeql.rust.elements.TupleVariantExpr +import codeql.rust.elements.Method diff --git a/rust/ql/lib/upgrades/30a0713e5bf69c60d003e4994e5abd1c78a36826/old.dbscheme b/rust/ql/lib/upgrades/30a0713e5bf69c60d003e4994e5abd1c78a36826/old.dbscheme new file mode 100644 index 000000000000..30a0713e5bf6 --- /dev/null +++ b/rust/ql/lib/upgrades/30a0713e5bf69c60d003e4994e5abd1c78a36826/old.dbscheme @@ -0,0 +1,3615 @@ +// generated by codegen, do not edit + +// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Empty location -*/ + +empty_location( + int location: @location_default ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- Diagnostic messages: severity -*/ + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Database metadata -*/ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); + + +// from prefix.dbscheme +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_default ref +); + + +// from schema + +@element = + @extractor_step +| @locatable +| @named_crate +| @unextracted +; + +extractor_steps( + unique int id: @extractor_step, + string action: string ref, + int duration_ms: int ref +); + +#keyset[id] +extractor_step_files( + int id: @extractor_step ref, + int file: @file ref +); + +@locatable = + @ast_node +| @crate +; + +named_crates( + unique int id: @named_crate, + string name: string ref, + int crate: @crate ref +); + +@unextracted = + @missing +| @unimplemented +; + +@ast_node = + @abi +| @addressable +| @arg_list +| @asm_dir_spec +| @asm_operand +| @asm_operand_expr +| @asm_option +| @asm_piece +| @asm_reg_spec +| @assoc_item_list +| @attr +| @callable +| @expr +| @extern_item_list +| @field_list +| @for_binder +| @format_args_arg +| @generic_arg +| @generic_arg_list +| @generic_param +| @generic_param_list +| @item_list +| @label +| @let_else +| @macro_items +| @match_arm +| @match_arm_list +| @match_guard +| @meta +| @name +| @param_base +| @param_list +| @parenthesized_arg_list +| @pat +| @path +| @path_ast_node +| @path_segment +| @rename +| @ret_type_repr +| @return_type_syntax +| @source_file +| @stmt +| @stmt_list +| @struct_expr_field +| @struct_expr_field_list +| @struct_field +| @struct_pat_field +| @struct_pat_field_list +| @token +| @token_tree +| @tuple_field +| @type_bound +| @type_bound_list +| @type_repr +| @use_bound_generic_arg +| @use_bound_generic_args +| @use_tree +| @use_tree_list +| @variant_list +| @visibility +| @where_clause +| @where_pred +; + +crates( + unique int id: @crate +); + +#keyset[id] +crate_names( + int id: @crate ref, + string name: string ref +); + +#keyset[id] +crate_versions( + int id: @crate ref, + string version: string ref +); + +#keyset[id, index] +crate_cfg_options( + int id: @crate ref, + int index: int ref, + string cfg_option: string ref +); + +#keyset[id, index] +crate_named_dependencies( + int id: @crate ref, + int index: int ref, + int named_dependency: @named_crate ref +); + +missings( + unique int id: @missing +); + +unimplementeds( + unique int id: @unimplemented +); + +abis( + unique int id: @abi +); + +#keyset[id] +abi_abi_strings( + int id: @abi ref, + string abi_string: string ref +); + +@addressable = + @item +| @variant +; + +arg_lists( + unique int id: @arg_list +); + +#keyset[id, index] +arg_list_args( + int id: @arg_list ref, + int index: int ref, + int arg: @expr ref +); + +asm_dir_specs( + unique int id: @asm_dir_spec +); + +@asm_operand = + @asm_const +| @asm_label +| @asm_reg_operand +| @asm_sym +; + +asm_operand_exprs( + unique int id: @asm_operand_expr +); + +#keyset[id] +asm_operand_expr_in_exprs( + int id: @asm_operand_expr ref, + int in_expr: @expr ref +); + +#keyset[id] +asm_operand_expr_out_exprs( + int id: @asm_operand_expr ref, + int out_expr: @expr ref +); + +asm_options( + unique int id: @asm_option +); + +#keyset[id] +asm_option_is_raw( + int id: @asm_option ref +); + +@asm_piece = + @asm_clobber_abi +| @asm_operand_named +| @asm_options_list +; + +asm_reg_specs( + unique int id: @asm_reg_spec +); + +#keyset[id] +asm_reg_spec_identifiers( + int id: @asm_reg_spec ref, + int identifier: @name_ref ref +); + +assoc_item_lists( + unique int id: @assoc_item_list +); + +#keyset[id, index] +assoc_item_list_assoc_items( + int id: @assoc_item_list ref, + int index: int ref, + int assoc_item: @assoc_item ref +); + +#keyset[id, index] +assoc_item_list_attrs( + int id: @assoc_item_list ref, + int index: int ref, + int attr: @attr ref +); + +attrs( + unique int id: @attr +); + +#keyset[id] +attr_meta( + int id: @attr ref, + int meta: @meta ref +); + +@callable = + @closure_expr +| @function +; + +#keyset[id] +callable_param_lists( + int id: @callable ref, + int param_list: @param_list ref +); + +#keyset[id, index] +callable_attrs( + int id: @callable ref, + int index: int ref, + int attr: @attr ref +); + +@expr = + @array_expr_internal +| @asm_expr +| @await_expr +| @become_expr +| @binary_expr +| @break_expr +| @call_expr_base +| @cast_expr +| @closure_expr +| @continue_expr +| @field_expr +| @format_args_expr +| @if_expr +| @index_expr +| @labelable_expr +| @let_expr +| @literal_expr +| @macro_block_expr +| @macro_expr +| @match_expr +| @offset_of_expr +| @paren_expr +| @path_expr_base +| @prefix_expr +| @range_expr +| @ref_expr +| @return_expr +| @struct_expr +| @try_expr +| @tuple_expr +| @underscore_expr +| @yeet_expr +| @yield_expr +; + +extern_item_lists( + unique int id: @extern_item_list +); + +#keyset[id, index] +extern_item_list_attrs( + int id: @extern_item_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +extern_item_list_extern_items( + int id: @extern_item_list ref, + int index: int ref, + int extern_item: @extern_item ref +); + +@field_list = + @struct_field_list +| @tuple_field_list +; + +for_binders( + unique int id: @for_binder +); + +#keyset[id] +for_binder_generic_param_lists( + int id: @for_binder ref, + int generic_param_list: @generic_param_list ref +); + +format_args_args( + unique int id: @format_args_arg +); + +#keyset[id] +format_args_arg_exprs( + int id: @format_args_arg ref, + int expr: @expr ref +); + +#keyset[id] +format_args_arg_names( + int id: @format_args_arg ref, + int name: @name ref +); + +@generic_arg = + @assoc_type_arg +| @const_arg +| @lifetime_arg +| @type_arg +; + +generic_arg_lists( + unique int id: @generic_arg_list +); + +#keyset[id, index] +generic_arg_list_generic_args( + int id: @generic_arg_list ref, + int index: int ref, + int generic_arg: @generic_arg ref +); + +@generic_param = + @const_param +| @lifetime_param +| @type_param +; + +generic_param_lists( + unique int id: @generic_param_list +); + +#keyset[id, index] +generic_param_list_generic_params( + int id: @generic_param_list ref, + int index: int ref, + int generic_param: @generic_param ref +); + +item_lists( + unique int id: @item_list +); + +#keyset[id, index] +item_list_attrs( + int id: @item_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +item_list_items( + int id: @item_list ref, + int index: int ref, + int item: @item ref +); + +labels( + unique int id: @label +); + +#keyset[id] +label_lifetimes( + int id: @label ref, + int lifetime: @lifetime ref +); + +let_elses( + unique int id: @let_else +); + +#keyset[id] +let_else_block_exprs( + int id: @let_else ref, + int block_expr: @block_expr ref +); + +macro_items( + unique int id: @macro_items +); + +#keyset[id, index] +macro_items_items( + int id: @macro_items ref, + int index: int ref, + int item: @item ref +); + +match_arms( + unique int id: @match_arm +); + +#keyset[id, index] +match_arm_attrs( + int id: @match_arm ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +match_arm_exprs( + int id: @match_arm ref, + int expr: @expr ref +); + +#keyset[id] +match_arm_guards( + int id: @match_arm ref, + int guard: @match_guard ref +); + +#keyset[id] +match_arm_pats( + int id: @match_arm ref, + int pat: @pat ref +); + +match_arm_lists( + unique int id: @match_arm_list +); + +#keyset[id, index] +match_arm_list_arms( + int id: @match_arm_list ref, + int index: int ref, + int arm: @match_arm ref +); + +#keyset[id, index] +match_arm_list_attrs( + int id: @match_arm_list ref, + int index: int ref, + int attr: @attr ref +); + +match_guards( + unique int id: @match_guard +); + +#keyset[id] +match_guard_conditions( + int id: @match_guard ref, + int condition: @expr ref +); + +meta( + unique int id: @meta +); + +#keyset[id] +meta_exprs( + int id: @meta ref, + int expr: @expr ref +); + +#keyset[id] +meta_is_unsafe( + int id: @meta ref +); + +#keyset[id] +meta_paths( + int id: @meta ref, + int path: @path ref +); + +#keyset[id] +meta_token_trees( + int id: @meta ref, + int token_tree: @token_tree ref +); + +names( + unique int id: @name +); + +#keyset[id] +name_texts( + int id: @name ref, + string text: string ref +); + +@param_base = + @param +| @self_param +; + +#keyset[id, index] +param_base_attrs( + int id: @param_base ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +param_base_type_reprs( + int id: @param_base ref, + int type_repr: @type_repr ref +); + +param_lists( + unique int id: @param_list +); + +#keyset[id, index] +param_list_params( + int id: @param_list ref, + int index: int ref, + int param: @param ref +); + +#keyset[id] +param_list_self_params( + int id: @param_list ref, + int self_param: @self_param ref +); + +parenthesized_arg_lists( + unique int id: @parenthesized_arg_list +); + +#keyset[id, index] +parenthesized_arg_list_type_args( + int id: @parenthesized_arg_list ref, + int index: int ref, + int type_arg: @type_arg ref +); + +@pat = + @box_pat +| @const_block_pat +| @ident_pat +| @literal_pat +| @macro_pat +| @or_pat +| @paren_pat +| @path_pat +| @range_pat +| @ref_pat +| @rest_pat +| @slice_pat +| @struct_pat +| @tuple_pat +| @tuple_struct_pat +| @wildcard_pat +; + +paths( + unique int id: @path +); + +#keyset[id] +path_qualifiers( + int id: @path ref, + int qualifier: @path ref +); + +#keyset[id] +path_segments_( + int id: @path ref, + int segment: @path_segment ref +); + +@path_ast_node = + @path_expr +| @path_pat +| @struct_expr +| @struct_pat +| @tuple_struct_pat +; + +#keyset[id] +path_ast_node_paths( + int id: @path_ast_node ref, + int path: @path ref +); + +path_segments( + unique int id: @path_segment +); + +#keyset[id] +path_segment_generic_arg_lists( + int id: @path_segment ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +path_segment_identifiers( + int id: @path_segment ref, + int identifier: @name_ref ref +); + +#keyset[id] +path_segment_parenthesized_arg_lists( + int id: @path_segment ref, + int parenthesized_arg_list: @parenthesized_arg_list ref +); + +#keyset[id] +path_segment_ret_types( + int id: @path_segment ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +path_segment_return_type_syntaxes( + int id: @path_segment ref, + int return_type_syntax: @return_type_syntax ref +); + +#keyset[id] +path_segment_type_reprs( + int id: @path_segment ref, + int type_repr: @type_repr ref +); + +#keyset[id] +path_segment_trait_type_reprs( + int id: @path_segment ref, + int trait_type_repr: @path_type_repr ref +); + +renames( + unique int id: @rename +); + +#keyset[id] +rename_names( + int id: @rename ref, + int name: @name ref +); + +ret_type_reprs( + unique int id: @ret_type_repr +); + +#keyset[id] +ret_type_repr_type_reprs( + int id: @ret_type_repr ref, + int type_repr: @type_repr ref +); + +return_type_syntaxes( + unique int id: @return_type_syntax +); + +source_files( + unique int id: @source_file +); + +#keyset[id, index] +source_file_attrs( + int id: @source_file ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +source_file_items( + int id: @source_file ref, + int index: int ref, + int item: @item ref +); + +@stmt = + @expr_stmt +| @item +| @let_stmt +; + +stmt_lists( + unique int id: @stmt_list +); + +#keyset[id, index] +stmt_list_attrs( + int id: @stmt_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +stmt_list_statements( + int id: @stmt_list ref, + int index: int ref, + int statement: @stmt ref +); + +#keyset[id] +stmt_list_tail_exprs( + int id: @stmt_list ref, + int tail_expr: @expr ref +); + +struct_expr_fields( + unique int id: @struct_expr_field +); + +#keyset[id, index] +struct_expr_field_attrs( + int id: @struct_expr_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_expr_field_exprs( + int id: @struct_expr_field ref, + int expr: @expr ref +); + +#keyset[id] +struct_expr_field_identifiers( + int id: @struct_expr_field ref, + int identifier: @name_ref ref +); + +struct_expr_field_lists( + unique int id: @struct_expr_field_list +); + +#keyset[id, index] +struct_expr_field_list_attrs( + int id: @struct_expr_field_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +struct_expr_field_list_fields( + int id: @struct_expr_field_list ref, + int index: int ref, + int field: @struct_expr_field ref +); + +#keyset[id] +struct_expr_field_list_spreads( + int id: @struct_expr_field_list ref, + int spread: @expr ref +); + +struct_fields( + unique int id: @struct_field +); + +#keyset[id, index] +struct_field_attrs( + int id: @struct_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_field_defaults( + int id: @struct_field ref, + int default: @expr ref +); + +#keyset[id] +struct_field_is_unsafe( + int id: @struct_field ref +); + +#keyset[id] +struct_field_names( + int id: @struct_field ref, + int name: @name ref +); + +#keyset[id] +struct_field_type_reprs( + int id: @struct_field ref, + int type_repr: @type_repr ref +); + +#keyset[id] +struct_field_visibilities( + int id: @struct_field ref, + int visibility: @visibility ref +); + +struct_pat_fields( + unique int id: @struct_pat_field +); + +#keyset[id, index] +struct_pat_field_attrs( + int id: @struct_pat_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_pat_field_identifiers( + int id: @struct_pat_field ref, + int identifier: @name_ref ref +); + +#keyset[id] +struct_pat_field_pats( + int id: @struct_pat_field ref, + int pat: @pat ref +); + +struct_pat_field_lists( + unique int id: @struct_pat_field_list +); + +#keyset[id, index] +struct_pat_field_list_fields( + int id: @struct_pat_field_list ref, + int index: int ref, + int field: @struct_pat_field ref +); + +#keyset[id] +struct_pat_field_list_rest_pats( + int id: @struct_pat_field_list ref, + int rest_pat: @rest_pat ref +); + +@token = + @comment +; + +token_trees( + unique int id: @token_tree +); + +tuple_fields( + unique int id: @tuple_field +); + +#keyset[id, index] +tuple_field_attrs( + int id: @tuple_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +tuple_field_type_reprs( + int id: @tuple_field ref, + int type_repr: @type_repr ref +); + +#keyset[id] +tuple_field_visibilities( + int id: @tuple_field ref, + int visibility: @visibility ref +); + +type_bounds( + unique int id: @type_bound +); + +#keyset[id] +type_bound_for_binders( + int id: @type_bound ref, + int for_binder: @for_binder ref +); + +#keyset[id] +type_bound_is_async( + int id: @type_bound ref +); + +#keyset[id] +type_bound_is_const( + int id: @type_bound ref +); + +#keyset[id] +type_bound_lifetimes( + int id: @type_bound ref, + int lifetime: @lifetime ref +); + +#keyset[id] +type_bound_type_reprs( + int id: @type_bound ref, + int type_repr: @type_repr ref +); + +#keyset[id] +type_bound_use_bound_generic_args( + int id: @type_bound ref, + int use_bound_generic_args: @use_bound_generic_args ref +); + +type_bound_lists( + unique int id: @type_bound_list +); + +#keyset[id, index] +type_bound_list_bounds( + int id: @type_bound_list ref, + int index: int ref, + int bound: @type_bound ref +); + +@type_repr = + @array_type_repr +| @dyn_trait_type_repr +| @fn_ptr_type_repr +| @for_type_repr +| @impl_trait_type_repr +| @infer_type_repr +| @macro_type_repr +| @never_type_repr +| @paren_type_repr +| @path_type_repr +| @ptr_type_repr +| @ref_type_repr +| @slice_type_repr +| @tuple_type_repr +; + +@use_bound_generic_arg = + @lifetime +| @name_ref +; + +use_bound_generic_args( + unique int id: @use_bound_generic_args +); + +#keyset[id, index] +use_bound_generic_args_use_bound_generic_args( + int id: @use_bound_generic_args ref, + int index: int ref, + int use_bound_generic_arg: @use_bound_generic_arg ref +); + +use_trees( + unique int id: @use_tree +); + +#keyset[id] +use_tree_is_glob( + int id: @use_tree ref +); + +#keyset[id] +use_tree_paths( + int id: @use_tree ref, + int path: @path ref +); + +#keyset[id] +use_tree_renames( + int id: @use_tree ref, + int rename: @rename ref +); + +#keyset[id] +use_tree_use_tree_lists( + int id: @use_tree ref, + int use_tree_list: @use_tree_list ref +); + +use_tree_lists( + unique int id: @use_tree_list +); + +#keyset[id, index] +use_tree_list_use_trees( + int id: @use_tree_list ref, + int index: int ref, + int use_tree: @use_tree ref +); + +variant_lists( + unique int id: @variant_list +); + +#keyset[id, index] +variant_list_variants( + int id: @variant_list ref, + int index: int ref, + int variant: @variant ref +); + +visibilities( + unique int id: @visibility +); + +#keyset[id] +visibility_paths( + int id: @visibility ref, + int path: @path ref +); + +where_clauses( + unique int id: @where_clause +); + +#keyset[id, index] +where_clause_predicates( + int id: @where_clause ref, + int index: int ref, + int predicate: @where_pred ref +); + +where_preds( + unique int id: @where_pred +); + +#keyset[id] +where_pred_for_binders( + int id: @where_pred ref, + int for_binder: @for_binder ref +); + +#keyset[id] +where_pred_lifetimes( + int id: @where_pred ref, + int lifetime: @lifetime ref +); + +#keyset[id] +where_pred_type_reprs( + int id: @where_pred ref, + int type_repr: @type_repr ref +); + +#keyset[id] +where_pred_type_bound_lists( + int id: @where_pred ref, + int type_bound_list: @type_bound_list ref +); + +array_expr_internals( + unique int id: @array_expr_internal +); + +#keyset[id, index] +array_expr_internal_attrs( + int id: @array_expr_internal ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +array_expr_internal_exprs( + int id: @array_expr_internal ref, + int index: int ref, + int expr: @expr ref +); + +#keyset[id] +array_expr_internal_is_semicolon( + int id: @array_expr_internal ref +); + +array_type_reprs( + unique int id: @array_type_repr +); + +#keyset[id] +array_type_repr_const_args( + int id: @array_type_repr ref, + int const_arg: @const_arg ref +); + +#keyset[id] +array_type_repr_element_type_reprs( + int id: @array_type_repr ref, + int element_type_repr: @type_repr ref +); + +asm_clobber_abis( + unique int id: @asm_clobber_abi +); + +asm_consts( + unique int id: @asm_const +); + +#keyset[id] +asm_const_exprs( + int id: @asm_const ref, + int expr: @expr ref +); + +#keyset[id] +asm_const_is_const( + int id: @asm_const ref +); + +asm_labels( + unique int id: @asm_label +); + +#keyset[id] +asm_label_block_exprs( + int id: @asm_label ref, + int block_expr: @block_expr ref +); + +asm_operand_nameds( + unique int id: @asm_operand_named +); + +#keyset[id] +asm_operand_named_asm_operands( + int id: @asm_operand_named ref, + int asm_operand: @asm_operand ref +); + +#keyset[id] +asm_operand_named_names( + int id: @asm_operand_named ref, + int name: @name ref +); + +asm_options_lists( + unique int id: @asm_options_list +); + +#keyset[id, index] +asm_options_list_asm_options( + int id: @asm_options_list ref, + int index: int ref, + int asm_option: @asm_option ref +); + +asm_reg_operands( + unique int id: @asm_reg_operand +); + +#keyset[id] +asm_reg_operand_asm_dir_specs( + int id: @asm_reg_operand ref, + int asm_dir_spec: @asm_dir_spec ref +); + +#keyset[id] +asm_reg_operand_asm_operand_exprs( + int id: @asm_reg_operand ref, + int asm_operand_expr: @asm_operand_expr ref +); + +#keyset[id] +asm_reg_operand_asm_reg_specs( + int id: @asm_reg_operand ref, + int asm_reg_spec: @asm_reg_spec ref +); + +asm_syms( + unique int id: @asm_sym +); + +#keyset[id] +asm_sym_paths( + int id: @asm_sym ref, + int path: @path ref +); + +assoc_type_args( + unique int id: @assoc_type_arg +); + +#keyset[id] +assoc_type_arg_const_args( + int id: @assoc_type_arg ref, + int const_arg: @const_arg ref +); + +#keyset[id] +assoc_type_arg_generic_arg_lists( + int id: @assoc_type_arg ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +assoc_type_arg_identifiers( + int id: @assoc_type_arg ref, + int identifier: @name_ref ref +); + +#keyset[id] +assoc_type_arg_param_lists( + int id: @assoc_type_arg ref, + int param_list: @param_list ref +); + +#keyset[id] +assoc_type_arg_ret_types( + int id: @assoc_type_arg ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +assoc_type_arg_return_type_syntaxes( + int id: @assoc_type_arg ref, + int return_type_syntax: @return_type_syntax ref +); + +#keyset[id] +assoc_type_arg_type_reprs( + int id: @assoc_type_arg ref, + int type_repr: @type_repr ref +); + +#keyset[id] +assoc_type_arg_type_bound_lists( + int id: @assoc_type_arg ref, + int type_bound_list: @type_bound_list ref +); + +await_exprs( + unique int id: @await_expr +); + +#keyset[id, index] +await_expr_attrs( + int id: @await_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +await_expr_exprs( + int id: @await_expr ref, + int expr: @expr ref +); + +become_exprs( + unique int id: @become_expr +); + +#keyset[id, index] +become_expr_attrs( + int id: @become_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +become_expr_exprs( + int id: @become_expr ref, + int expr: @expr ref +); + +binary_exprs( + unique int id: @binary_expr +); + +#keyset[id, index] +binary_expr_attrs( + int id: @binary_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +binary_expr_lhs( + int id: @binary_expr ref, + int lhs: @expr ref +); + +#keyset[id] +binary_expr_operator_names( + int id: @binary_expr ref, + string operator_name: string ref +); + +#keyset[id] +binary_expr_rhs( + int id: @binary_expr ref, + int rhs: @expr ref +); + +box_pats( + unique int id: @box_pat +); + +#keyset[id] +box_pat_pats( + int id: @box_pat ref, + int pat: @pat ref +); + +break_exprs( + unique int id: @break_expr +); + +#keyset[id, index] +break_expr_attrs( + int id: @break_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +break_expr_exprs( + int id: @break_expr ref, + int expr: @expr ref +); + +#keyset[id] +break_expr_lifetimes( + int id: @break_expr ref, + int lifetime: @lifetime ref +); + +@call_expr_base = + @call_expr +| @method_call_expr +; + +#keyset[id] +call_expr_base_arg_lists( + int id: @call_expr_base ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +call_expr_base_attrs( + int id: @call_expr_base ref, + int index: int ref, + int attr: @attr ref +); + +cast_exprs( + unique int id: @cast_expr +); + +#keyset[id, index] +cast_expr_attrs( + int id: @cast_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +cast_expr_exprs( + int id: @cast_expr ref, + int expr: @expr ref +); + +#keyset[id] +cast_expr_type_reprs( + int id: @cast_expr ref, + int type_repr: @type_repr ref +); + +closure_exprs( + unique int id: @closure_expr +); + +#keyset[id] +closure_expr_closure_bodies( + int id: @closure_expr ref, + int closure_body: @expr ref +); + +#keyset[id] +closure_expr_for_binders( + int id: @closure_expr ref, + int for_binder: @for_binder ref +); + +#keyset[id] +closure_expr_is_async( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_const( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_gen( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_move( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_static( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_ret_types( + int id: @closure_expr ref, + int ret_type: @ret_type_repr ref +); + +comments( + unique int id: @comment, + int parent: @ast_node ref, + string text: string ref +); + +const_args( + unique int id: @const_arg +); + +#keyset[id] +const_arg_exprs( + int id: @const_arg ref, + int expr: @expr ref +); + +const_block_pats( + unique int id: @const_block_pat +); + +#keyset[id] +const_block_pat_block_exprs( + int id: @const_block_pat ref, + int block_expr: @block_expr ref +); + +#keyset[id] +const_block_pat_is_const( + int id: @const_block_pat ref +); + +const_params( + unique int id: @const_param +); + +#keyset[id, index] +const_param_attrs( + int id: @const_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +const_param_default_vals( + int id: @const_param ref, + int default_val: @const_arg ref +); + +#keyset[id] +const_param_is_const( + int id: @const_param ref +); + +#keyset[id] +const_param_names( + int id: @const_param ref, + int name: @name ref +); + +#keyset[id] +const_param_type_reprs( + int id: @const_param ref, + int type_repr: @type_repr ref +); + +continue_exprs( + unique int id: @continue_expr +); + +#keyset[id, index] +continue_expr_attrs( + int id: @continue_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +continue_expr_lifetimes( + int id: @continue_expr ref, + int lifetime: @lifetime ref +); + +dyn_trait_type_reprs( + unique int id: @dyn_trait_type_repr +); + +#keyset[id] +dyn_trait_type_repr_type_bound_lists( + int id: @dyn_trait_type_repr ref, + int type_bound_list: @type_bound_list ref +); + +expr_stmts( + unique int id: @expr_stmt +); + +#keyset[id] +expr_stmt_exprs( + int id: @expr_stmt ref, + int expr: @expr ref +); + +field_exprs( + unique int id: @field_expr +); + +#keyset[id, index] +field_expr_attrs( + int id: @field_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +field_expr_containers( + int id: @field_expr ref, + int container: @expr ref +); + +#keyset[id] +field_expr_identifiers( + int id: @field_expr ref, + int identifier: @name_ref ref +); + +fn_ptr_type_reprs( + unique int id: @fn_ptr_type_repr +); + +#keyset[id] +fn_ptr_type_repr_abis( + int id: @fn_ptr_type_repr ref, + int abi: @abi ref +); + +#keyset[id] +fn_ptr_type_repr_is_async( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_is_const( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_is_unsafe( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_param_lists( + int id: @fn_ptr_type_repr ref, + int param_list: @param_list ref +); + +#keyset[id] +fn_ptr_type_repr_ret_types( + int id: @fn_ptr_type_repr ref, + int ret_type: @ret_type_repr ref +); + +for_type_reprs( + unique int id: @for_type_repr +); + +#keyset[id] +for_type_repr_for_binders( + int id: @for_type_repr ref, + int for_binder: @for_binder ref +); + +#keyset[id] +for_type_repr_type_reprs( + int id: @for_type_repr ref, + int type_repr: @type_repr ref +); + +format_args_exprs( + unique int id: @format_args_expr +); + +#keyset[id, index] +format_args_expr_args( + int id: @format_args_expr ref, + int index: int ref, + int arg: @format_args_arg ref +); + +#keyset[id, index] +format_args_expr_attrs( + int id: @format_args_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +format_args_expr_templates( + int id: @format_args_expr ref, + int template: @expr ref +); + +ident_pats( + unique int id: @ident_pat +); + +#keyset[id, index] +ident_pat_attrs( + int id: @ident_pat ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +ident_pat_is_mut( + int id: @ident_pat ref +); + +#keyset[id] +ident_pat_is_ref( + int id: @ident_pat ref +); + +#keyset[id] +ident_pat_names( + int id: @ident_pat ref, + int name: @name ref +); + +#keyset[id] +ident_pat_pats( + int id: @ident_pat ref, + int pat: @pat ref +); + +if_exprs( + unique int id: @if_expr +); + +#keyset[id, index] +if_expr_attrs( + int id: @if_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +if_expr_conditions( + int id: @if_expr ref, + int condition: @expr ref +); + +#keyset[id] +if_expr_elses( + int id: @if_expr ref, + int else: @expr ref +); + +#keyset[id] +if_expr_thens( + int id: @if_expr ref, + int then: @block_expr ref +); + +impl_trait_type_reprs( + unique int id: @impl_trait_type_repr +); + +#keyset[id] +impl_trait_type_repr_type_bound_lists( + int id: @impl_trait_type_repr ref, + int type_bound_list: @type_bound_list ref +); + +index_exprs( + unique int id: @index_expr +); + +#keyset[id, index] +index_expr_attrs( + int id: @index_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +index_expr_bases( + int id: @index_expr ref, + int base: @expr ref +); + +#keyset[id] +index_expr_indices( + int id: @index_expr ref, + int index: @expr ref +); + +infer_type_reprs( + unique int id: @infer_type_repr +); + +@item = + @adt +| @asm_expr +| @assoc_item +| @extern_block +| @extern_crate +| @extern_item +| @impl +| @macro_def +| @macro_rules +| @module +| @trait +| @trait_alias +| @use +; + +#keyset[id] +item_attribute_macro_expansions( + int id: @item ref, + int attribute_macro_expansion: @macro_items ref +); + +@labelable_expr = + @block_expr +| @looping_expr +; + +#keyset[id] +labelable_expr_labels( + int id: @labelable_expr ref, + int label: @label ref +); + +let_exprs( + unique int id: @let_expr +); + +#keyset[id, index] +let_expr_attrs( + int id: @let_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +let_expr_scrutinees( + int id: @let_expr ref, + int scrutinee: @expr ref +); + +#keyset[id] +let_expr_pats( + int id: @let_expr ref, + int pat: @pat ref +); + +let_stmts( + unique int id: @let_stmt +); + +#keyset[id, index] +let_stmt_attrs( + int id: @let_stmt ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +let_stmt_initializers( + int id: @let_stmt ref, + int initializer: @expr ref +); + +#keyset[id] +let_stmt_let_elses( + int id: @let_stmt ref, + int let_else: @let_else ref +); + +#keyset[id] +let_stmt_pats( + int id: @let_stmt ref, + int pat: @pat ref +); + +#keyset[id] +let_stmt_type_reprs( + int id: @let_stmt ref, + int type_repr: @type_repr ref +); + +lifetimes( + unique int id: @lifetime +); + +#keyset[id] +lifetime_texts( + int id: @lifetime ref, + string text: string ref +); + +lifetime_args( + unique int id: @lifetime_arg +); + +#keyset[id] +lifetime_arg_lifetimes( + int id: @lifetime_arg ref, + int lifetime: @lifetime ref +); + +lifetime_params( + unique int id: @lifetime_param +); + +#keyset[id, index] +lifetime_param_attrs( + int id: @lifetime_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +lifetime_param_lifetimes( + int id: @lifetime_param ref, + int lifetime: @lifetime ref +); + +#keyset[id] +lifetime_param_type_bound_lists( + int id: @lifetime_param ref, + int type_bound_list: @type_bound_list ref +); + +literal_exprs( + unique int id: @literal_expr +); + +#keyset[id, index] +literal_expr_attrs( + int id: @literal_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +literal_expr_text_values( + int id: @literal_expr ref, + string text_value: string ref +); + +literal_pats( + unique int id: @literal_pat +); + +#keyset[id] +literal_pat_literals( + int id: @literal_pat ref, + int literal: @literal_expr ref +); + +macro_block_exprs( + unique int id: @macro_block_expr +); + +#keyset[id, index] +macro_block_expr_statements( + int id: @macro_block_expr ref, + int index: int ref, + int statement: @stmt ref +); + +#keyset[id] +macro_block_expr_tail_exprs( + int id: @macro_block_expr ref, + int tail_expr: @expr ref +); + +macro_exprs( + unique int id: @macro_expr +); + +#keyset[id] +macro_expr_macro_calls( + int id: @macro_expr ref, + int macro_call: @macro_call ref +); + +macro_pats( + unique int id: @macro_pat +); + +#keyset[id] +macro_pat_macro_calls( + int id: @macro_pat ref, + int macro_call: @macro_call ref +); + +macro_type_reprs( + unique int id: @macro_type_repr +); + +#keyset[id] +macro_type_repr_macro_calls( + int id: @macro_type_repr ref, + int macro_call: @macro_call ref +); + +match_exprs( + unique int id: @match_expr +); + +#keyset[id, index] +match_expr_attrs( + int id: @match_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +match_expr_scrutinees( + int id: @match_expr ref, + int scrutinee: @expr ref +); + +#keyset[id] +match_expr_match_arm_lists( + int id: @match_expr ref, + int match_arm_list: @match_arm_list ref +); + +name_refs( + unique int id: @name_ref +); + +#keyset[id] +name_ref_texts( + int id: @name_ref ref, + string text: string ref +); + +never_type_reprs( + unique int id: @never_type_repr +); + +offset_of_exprs( + unique int id: @offset_of_expr +); + +#keyset[id, index] +offset_of_expr_attrs( + int id: @offset_of_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +offset_of_expr_fields( + int id: @offset_of_expr ref, + int index: int ref, + int field: @name_ref ref +); + +#keyset[id] +offset_of_expr_type_reprs( + int id: @offset_of_expr ref, + int type_repr: @type_repr ref +); + +or_pats( + unique int id: @or_pat +); + +#keyset[id, index] +or_pat_pats( + int id: @or_pat ref, + int index: int ref, + int pat: @pat ref +); + +params( + unique int id: @param +); + +#keyset[id] +param_pats( + int id: @param ref, + int pat: @pat ref +); + +paren_exprs( + unique int id: @paren_expr +); + +#keyset[id, index] +paren_expr_attrs( + int id: @paren_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +paren_expr_exprs( + int id: @paren_expr ref, + int expr: @expr ref +); + +paren_pats( + unique int id: @paren_pat +); + +#keyset[id] +paren_pat_pats( + int id: @paren_pat ref, + int pat: @pat ref +); + +paren_type_reprs( + unique int id: @paren_type_repr +); + +#keyset[id] +paren_type_repr_type_reprs( + int id: @paren_type_repr ref, + int type_repr: @type_repr ref +); + +@path_expr_base = + @path_expr +; + +path_pats( + unique int id: @path_pat +); + +path_type_reprs( + unique int id: @path_type_repr +); + +#keyset[id] +path_type_repr_paths( + int id: @path_type_repr ref, + int path: @path ref +); + +prefix_exprs( + unique int id: @prefix_expr +); + +#keyset[id, index] +prefix_expr_attrs( + int id: @prefix_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +prefix_expr_exprs( + int id: @prefix_expr ref, + int expr: @expr ref +); + +#keyset[id] +prefix_expr_operator_names( + int id: @prefix_expr ref, + string operator_name: string ref +); + +ptr_type_reprs( + unique int id: @ptr_type_repr +); + +#keyset[id] +ptr_type_repr_is_const( + int id: @ptr_type_repr ref +); + +#keyset[id] +ptr_type_repr_is_mut( + int id: @ptr_type_repr ref +); + +#keyset[id] +ptr_type_repr_type_reprs( + int id: @ptr_type_repr ref, + int type_repr: @type_repr ref +); + +range_exprs( + unique int id: @range_expr +); + +#keyset[id, index] +range_expr_attrs( + int id: @range_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +range_expr_ends( + int id: @range_expr ref, + int end: @expr ref +); + +#keyset[id] +range_expr_operator_names( + int id: @range_expr ref, + string operator_name: string ref +); + +#keyset[id] +range_expr_starts( + int id: @range_expr ref, + int start: @expr ref +); + +range_pats( + unique int id: @range_pat +); + +#keyset[id] +range_pat_ends( + int id: @range_pat ref, + int end: @pat ref +); + +#keyset[id] +range_pat_operator_names( + int id: @range_pat ref, + string operator_name: string ref +); + +#keyset[id] +range_pat_starts( + int id: @range_pat ref, + int start: @pat ref +); + +ref_exprs( + unique int id: @ref_expr +); + +#keyset[id, index] +ref_expr_attrs( + int id: @ref_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +ref_expr_exprs( + int id: @ref_expr ref, + int expr: @expr ref +); + +#keyset[id] +ref_expr_is_const( + int id: @ref_expr ref +); + +#keyset[id] +ref_expr_is_mut( + int id: @ref_expr ref +); + +#keyset[id] +ref_expr_is_raw( + int id: @ref_expr ref +); + +ref_pats( + unique int id: @ref_pat +); + +#keyset[id] +ref_pat_is_mut( + int id: @ref_pat ref +); + +#keyset[id] +ref_pat_pats( + int id: @ref_pat ref, + int pat: @pat ref +); + +ref_type_reprs( + unique int id: @ref_type_repr +); + +#keyset[id] +ref_type_repr_is_mut( + int id: @ref_type_repr ref +); + +#keyset[id] +ref_type_repr_lifetimes( + int id: @ref_type_repr ref, + int lifetime: @lifetime ref +); + +#keyset[id] +ref_type_repr_type_reprs( + int id: @ref_type_repr ref, + int type_repr: @type_repr ref +); + +rest_pats( + unique int id: @rest_pat +); + +#keyset[id, index] +rest_pat_attrs( + int id: @rest_pat ref, + int index: int ref, + int attr: @attr ref +); + +return_exprs( + unique int id: @return_expr +); + +#keyset[id, index] +return_expr_attrs( + int id: @return_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +return_expr_exprs( + int id: @return_expr ref, + int expr: @expr ref +); + +self_params( + unique int id: @self_param +); + +#keyset[id] +self_param_is_ref( + int id: @self_param ref +); + +#keyset[id] +self_param_is_mut( + int id: @self_param ref +); + +#keyset[id] +self_param_lifetimes( + int id: @self_param ref, + int lifetime: @lifetime ref +); + +#keyset[id] +self_param_names( + int id: @self_param ref, + int name: @name ref +); + +slice_pats( + unique int id: @slice_pat +); + +#keyset[id, index] +slice_pat_pats( + int id: @slice_pat ref, + int index: int ref, + int pat: @pat ref +); + +slice_type_reprs( + unique int id: @slice_type_repr +); + +#keyset[id] +slice_type_repr_type_reprs( + int id: @slice_type_repr ref, + int type_repr: @type_repr ref +); + +struct_exprs( + unique int id: @struct_expr +); + +#keyset[id] +struct_expr_struct_expr_field_lists( + int id: @struct_expr ref, + int struct_expr_field_list: @struct_expr_field_list ref +); + +struct_field_lists( + unique int id: @struct_field_list +); + +#keyset[id, index] +struct_field_list_fields( + int id: @struct_field_list ref, + int index: int ref, + int field: @struct_field ref +); + +struct_pats( + unique int id: @struct_pat +); + +#keyset[id] +struct_pat_struct_pat_field_lists( + int id: @struct_pat ref, + int struct_pat_field_list: @struct_pat_field_list ref +); + +try_exprs( + unique int id: @try_expr +); + +#keyset[id, index] +try_expr_attrs( + int id: @try_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +try_expr_exprs( + int id: @try_expr ref, + int expr: @expr ref +); + +tuple_exprs( + unique int id: @tuple_expr +); + +#keyset[id, index] +tuple_expr_attrs( + int id: @tuple_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +tuple_expr_fields( + int id: @tuple_expr ref, + int index: int ref, + int field: @expr ref +); + +tuple_field_lists( + unique int id: @tuple_field_list +); + +#keyset[id, index] +tuple_field_list_fields( + int id: @tuple_field_list ref, + int index: int ref, + int field: @tuple_field ref +); + +tuple_pats( + unique int id: @tuple_pat +); + +#keyset[id, index] +tuple_pat_fields( + int id: @tuple_pat ref, + int index: int ref, + int field: @pat ref +); + +tuple_struct_pats( + unique int id: @tuple_struct_pat +); + +#keyset[id, index] +tuple_struct_pat_fields( + int id: @tuple_struct_pat ref, + int index: int ref, + int field: @pat ref +); + +tuple_type_reprs( + unique int id: @tuple_type_repr +); + +#keyset[id, index] +tuple_type_repr_fields( + int id: @tuple_type_repr ref, + int index: int ref, + int field: @type_repr ref +); + +type_args( + unique int id: @type_arg +); + +#keyset[id] +type_arg_type_reprs( + int id: @type_arg ref, + int type_repr: @type_repr ref +); + +type_params( + unique int id: @type_param +); + +#keyset[id, index] +type_param_attrs( + int id: @type_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +type_param_default_types( + int id: @type_param ref, + int default_type: @type_repr ref +); + +#keyset[id] +type_param_names( + int id: @type_param ref, + int name: @name ref +); + +#keyset[id] +type_param_type_bound_lists( + int id: @type_param ref, + int type_bound_list: @type_bound_list ref +); + +underscore_exprs( + unique int id: @underscore_expr +); + +#keyset[id, index] +underscore_expr_attrs( + int id: @underscore_expr ref, + int index: int ref, + int attr: @attr ref +); + +variants( + unique int id: @variant +); + +#keyset[id, index] +variant_attrs( + int id: @variant ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +variant_discriminants( + int id: @variant ref, + int discriminant: @expr ref +); + +#keyset[id] +variant_field_lists( + int id: @variant ref, + int field_list: @field_list ref +); + +#keyset[id] +variant_names( + int id: @variant ref, + int name: @name ref +); + +#keyset[id] +variant_visibilities( + int id: @variant ref, + int visibility: @visibility ref +); + +wildcard_pats( + unique int id: @wildcard_pat +); + +yeet_exprs( + unique int id: @yeet_expr +); + +#keyset[id, index] +yeet_expr_attrs( + int id: @yeet_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +yeet_expr_exprs( + int id: @yeet_expr ref, + int expr: @expr ref +); + +yield_exprs( + unique int id: @yield_expr +); + +#keyset[id, index] +yield_expr_attrs( + int id: @yield_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +yield_expr_exprs( + int id: @yield_expr ref, + int expr: @expr ref +); + +@adt = + @enum +| @struct +| @union +; + +#keyset[id, index] +adt_derive_macro_expansions( + int id: @adt ref, + int index: int ref, + int derive_macro_expansion: @macro_items ref +); + +asm_exprs( + unique int id: @asm_expr +); + +#keyset[id, index] +asm_expr_asm_pieces( + int id: @asm_expr ref, + int index: int ref, + int asm_piece: @asm_piece ref +); + +#keyset[id, index] +asm_expr_attrs( + int id: @asm_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +asm_expr_templates( + int id: @asm_expr ref, + int index: int ref, + int template: @expr ref +); + +@assoc_item = + @const +| @function +| @macro_call +| @type_alias +; + +block_exprs( + unique int id: @block_expr +); + +#keyset[id, index] +block_expr_attrs( + int id: @block_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +block_expr_is_async( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_const( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_gen( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_move( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_try( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_unsafe( + int id: @block_expr ref +); + +#keyset[id] +block_expr_stmt_lists( + int id: @block_expr ref, + int stmt_list: @stmt_list ref +); + +call_exprs( + unique int id: @call_expr +); + +#keyset[id] +call_expr_functions( + int id: @call_expr ref, + int function: @expr ref +); + +extern_blocks( + unique int id: @extern_block +); + +#keyset[id] +extern_block_abis( + int id: @extern_block ref, + int abi: @abi ref +); + +#keyset[id, index] +extern_block_attrs( + int id: @extern_block ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +extern_block_extern_item_lists( + int id: @extern_block ref, + int extern_item_list: @extern_item_list ref +); + +#keyset[id] +extern_block_is_unsafe( + int id: @extern_block ref +); + +extern_crates( + unique int id: @extern_crate +); + +#keyset[id, index] +extern_crate_attrs( + int id: @extern_crate ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +extern_crate_identifiers( + int id: @extern_crate ref, + int identifier: @name_ref ref +); + +#keyset[id] +extern_crate_renames( + int id: @extern_crate ref, + int rename: @rename ref +); + +#keyset[id] +extern_crate_visibilities( + int id: @extern_crate ref, + int visibility: @visibility ref +); + +@extern_item = + @function +| @macro_call +| @static +| @type_alias +; + +impls( + unique int id: @impl +); + +#keyset[id] +impl_assoc_item_lists( + int id: @impl ref, + int assoc_item_list: @assoc_item_list ref +); + +#keyset[id, index] +impl_attrs( + int id: @impl ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +impl_generic_param_lists( + int id: @impl ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +impl_is_const( + int id: @impl ref +); + +#keyset[id] +impl_is_default( + int id: @impl ref +); + +#keyset[id] +impl_is_unsafe( + int id: @impl ref +); + +#keyset[id] +impl_self_ties( + int id: @impl ref, + int self_ty: @type_repr ref +); + +#keyset[id] +impl_traits( + int id: @impl ref, + int trait: @type_repr ref +); + +#keyset[id] +impl_visibilities( + int id: @impl ref, + int visibility: @visibility ref +); + +#keyset[id] +impl_where_clauses( + int id: @impl ref, + int where_clause: @where_clause ref +); + +@looping_expr = + @for_expr +| @loop_expr +| @while_expr +; + +#keyset[id] +looping_expr_loop_bodies( + int id: @looping_expr ref, + int loop_body: @block_expr ref +); + +macro_defs( + unique int id: @macro_def +); + +#keyset[id] +macro_def_args( + int id: @macro_def ref, + int args: @token_tree ref +); + +#keyset[id, index] +macro_def_attrs( + int id: @macro_def ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_def_bodies( + int id: @macro_def ref, + int body: @token_tree ref +); + +#keyset[id] +macro_def_names( + int id: @macro_def ref, + int name: @name ref +); + +#keyset[id] +macro_def_visibilities( + int id: @macro_def ref, + int visibility: @visibility ref +); + +macro_rules( + unique int id: @macro_rules +); + +#keyset[id, index] +macro_rules_attrs( + int id: @macro_rules ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_rules_names( + int id: @macro_rules ref, + int name: @name ref +); + +#keyset[id] +macro_rules_token_trees( + int id: @macro_rules ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_rules_visibilities( + int id: @macro_rules ref, + int visibility: @visibility ref +); + +method_call_exprs( + unique int id: @method_call_expr +); + +#keyset[id] +method_call_expr_generic_arg_lists( + int id: @method_call_expr ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +method_call_expr_identifiers( + int id: @method_call_expr ref, + int identifier: @name_ref ref +); + +#keyset[id] +method_call_expr_receivers( + int id: @method_call_expr ref, + int receiver: @expr ref +); + +modules( + unique int id: @module +); + +#keyset[id, index] +module_attrs( + int id: @module ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +module_item_lists( + int id: @module ref, + int item_list: @item_list ref +); + +#keyset[id] +module_names( + int id: @module ref, + int name: @name ref +); + +#keyset[id] +module_visibilities( + int id: @module ref, + int visibility: @visibility ref +); + +path_exprs( + unique int id: @path_expr +); + +#keyset[id, index] +path_expr_attrs( + int id: @path_expr ref, + int index: int ref, + int attr: @attr ref +); + +traits( + unique int id: @trait +); + +#keyset[id] +trait_assoc_item_lists( + int id: @trait ref, + int assoc_item_list: @assoc_item_list ref +); + +#keyset[id, index] +trait_attrs( + int id: @trait ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +trait_generic_param_lists( + int id: @trait ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +trait_is_auto( + int id: @trait ref +); + +#keyset[id] +trait_is_unsafe( + int id: @trait ref +); + +#keyset[id] +trait_names( + int id: @trait ref, + int name: @name ref +); + +#keyset[id] +trait_type_bound_lists( + int id: @trait ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +trait_visibilities( + int id: @trait ref, + int visibility: @visibility ref +); + +#keyset[id] +trait_where_clauses( + int id: @trait ref, + int where_clause: @where_clause ref +); + +trait_aliases( + unique int id: @trait_alias +); + +#keyset[id, index] +trait_alias_attrs( + int id: @trait_alias ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +trait_alias_generic_param_lists( + int id: @trait_alias ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +trait_alias_names( + int id: @trait_alias ref, + int name: @name ref +); + +#keyset[id] +trait_alias_type_bound_lists( + int id: @trait_alias ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +trait_alias_visibilities( + int id: @trait_alias ref, + int visibility: @visibility ref +); + +#keyset[id] +trait_alias_where_clauses( + int id: @trait_alias ref, + int where_clause: @where_clause ref +); + +uses( + unique int id: @use +); + +#keyset[id, index] +use_attrs( + int id: @use ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +use_use_trees( + int id: @use ref, + int use_tree: @use_tree ref +); + +#keyset[id] +use_visibilities( + int id: @use ref, + int visibility: @visibility ref +); + +consts( + unique int id: @const +); + +#keyset[id, index] +const_attrs( + int id: @const ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +const_bodies( + int id: @const ref, + int body: @expr ref +); + +#keyset[id] +const_generic_param_lists( + int id: @const ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +const_is_const( + int id: @const ref +); + +#keyset[id] +const_is_default( + int id: @const ref +); + +#keyset[id] +const_names( + int id: @const ref, + int name: @name ref +); + +#keyset[id] +const_type_reprs( + int id: @const ref, + int type_repr: @type_repr ref +); + +#keyset[id] +const_visibilities( + int id: @const ref, + int visibility: @visibility ref +); + +#keyset[id] +const_where_clauses( + int id: @const ref, + int where_clause: @where_clause ref +); + +#keyset[id] +const_has_implementation( + int id: @const ref +); + +enums( + unique int id: @enum +); + +#keyset[id, index] +enum_attrs( + int id: @enum ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +enum_generic_param_lists( + int id: @enum ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +enum_names( + int id: @enum ref, + int name: @name ref +); + +#keyset[id] +enum_variant_lists( + int id: @enum ref, + int variant_list: @variant_list ref +); + +#keyset[id] +enum_visibilities( + int id: @enum ref, + int visibility: @visibility ref +); + +#keyset[id] +enum_where_clauses( + int id: @enum ref, + int where_clause: @where_clause ref +); + +for_exprs( + unique int id: @for_expr +); + +#keyset[id, index] +for_expr_attrs( + int id: @for_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +for_expr_iterables( + int id: @for_expr ref, + int iterable: @expr ref +); + +#keyset[id] +for_expr_pats( + int id: @for_expr ref, + int pat: @pat ref +); + +functions( + unique int id: @function +); + +#keyset[id] +function_abis( + int id: @function ref, + int abi: @abi ref +); + +#keyset[id] +function_function_bodies( + int id: @function ref, + int function_body: @block_expr ref +); + +#keyset[id] +function_generic_param_lists( + int id: @function ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +function_is_async( + int id: @function ref +); + +#keyset[id] +function_is_const( + int id: @function ref +); + +#keyset[id] +function_is_default( + int id: @function ref +); + +#keyset[id] +function_is_gen( + int id: @function ref +); + +#keyset[id] +function_is_unsafe( + int id: @function ref +); + +#keyset[id] +function_names( + int id: @function ref, + int name: @name ref +); + +#keyset[id] +function_ret_types( + int id: @function ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +function_visibilities( + int id: @function ref, + int visibility: @visibility ref +); + +#keyset[id] +function_where_clauses( + int id: @function ref, + int where_clause: @where_clause ref +); + +#keyset[id] +function_has_implementation( + int id: @function ref +); + +loop_exprs( + unique int id: @loop_expr +); + +#keyset[id, index] +loop_expr_attrs( + int id: @loop_expr ref, + int index: int ref, + int attr: @attr ref +); + +macro_calls( + unique int id: @macro_call +); + +#keyset[id, index] +macro_call_attrs( + int id: @macro_call ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_call_paths( + int id: @macro_call ref, + int path: @path ref +); + +#keyset[id] +macro_call_token_trees( + int id: @macro_call ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_call_macro_call_expansions( + int id: @macro_call ref, + int macro_call_expansion: @ast_node ref +); + +statics( + unique int id: @static +); + +#keyset[id, index] +static_attrs( + int id: @static ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +static_bodies( + int id: @static ref, + int body: @expr ref +); + +#keyset[id] +static_is_mut( + int id: @static ref +); + +#keyset[id] +static_is_static( + int id: @static ref +); + +#keyset[id] +static_is_unsafe( + int id: @static ref +); + +#keyset[id] +static_names( + int id: @static ref, + int name: @name ref +); + +#keyset[id] +static_type_reprs( + int id: @static ref, + int type_repr: @type_repr ref +); + +#keyset[id] +static_visibilities( + int id: @static ref, + int visibility: @visibility ref +); + +structs( + unique int id: @struct +); + +#keyset[id, index] +struct_attrs( + int id: @struct ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_field_lists_( + int id: @struct ref, + int field_list: @field_list ref +); + +#keyset[id] +struct_generic_param_lists( + int id: @struct ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +struct_names( + int id: @struct ref, + int name: @name ref +); + +#keyset[id] +struct_visibilities( + int id: @struct ref, + int visibility: @visibility ref +); + +#keyset[id] +struct_where_clauses( + int id: @struct ref, + int where_clause: @where_clause ref +); + +type_aliases( + unique int id: @type_alias +); + +#keyset[id, index] +type_alias_attrs( + int id: @type_alias ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +type_alias_generic_param_lists( + int id: @type_alias ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +type_alias_is_default( + int id: @type_alias ref +); + +#keyset[id] +type_alias_names( + int id: @type_alias ref, + int name: @name ref +); + +#keyset[id] +type_alias_type_reprs( + int id: @type_alias ref, + int type_repr: @type_repr ref +); + +#keyset[id] +type_alias_type_bound_lists( + int id: @type_alias ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +type_alias_visibilities( + int id: @type_alias ref, + int visibility: @visibility ref +); + +#keyset[id] +type_alias_where_clauses( + int id: @type_alias ref, + int where_clause: @where_clause ref +); + +unions( + unique int id: @union +); + +#keyset[id, index] +union_attrs( + int id: @union ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +union_generic_param_lists( + int id: @union ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +union_names( + int id: @union ref, + int name: @name ref +); + +#keyset[id] +union_struct_field_lists( + int id: @union ref, + int struct_field_list: @struct_field_list ref +); + +#keyset[id] +union_visibilities( + int id: @union ref, + int visibility: @visibility ref +); + +#keyset[id] +union_where_clauses( + int id: @union ref, + int where_clause: @where_clause ref +); + +while_exprs( + unique int id: @while_expr +); + +#keyset[id, index] +while_expr_attrs( + int id: @while_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +while_expr_conditions( + int id: @while_expr ref, + int condition: @expr ref +); diff --git a/rust/ql/lib/upgrades/30a0713e5bf69c60d003e4994e5abd1c78a36826/rust.dbscheme b/rust/ql/lib/upgrades/30a0713e5bf69c60d003e4994e5abd1c78a36826/rust.dbscheme new file mode 100644 index 000000000000..e54d01f67a41 --- /dev/null +++ b/rust/ql/lib/upgrades/30a0713e5bf69c60d003e4994e5abd1c78a36826/rust.dbscheme @@ -0,0 +1,3624 @@ +// generated by codegen, do not edit + +// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Empty location -*/ + +empty_location( + int location: @location_default ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- Diagnostic messages: severity -*/ + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Database metadata -*/ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); + + +// from prefix.dbscheme +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_default ref +); + + +// from schema + +@element = + @extractor_step +| @locatable +| @named_crate +| @unextracted +; + +extractor_steps( + unique int id: @extractor_step, + string action: string ref, + int duration_ms: int ref +); + +#keyset[id] +extractor_step_files( + int id: @extractor_step ref, + int file: @file ref +); + +@locatable = + @ast_node +| @crate +; + +named_crates( + unique int id: @named_crate, + string name: string ref, + int crate: @crate ref +); + +@unextracted = + @missing +| @unimplemented +; + +@ast_node = + @abi +| @addressable +| @arg_list +| @asm_dir_spec +| @asm_operand +| @asm_operand_expr +| @asm_option +| @asm_piece +| @asm_reg_spec +| @assoc_item_list +| @attr +| @callable +| @expr +| @extern_item_list +| @field_list +| @for_binder +| @format_args_arg +| @generic_arg +| @generic_arg_list +| @generic_param +| @generic_param_list +| @item_list +| @label +| @let_else +| @macro_items +| @match_arm +| @match_arm_list +| @match_guard +| @meta +| @name +| @param_base +| @param_list +| @parenthesized_arg_list +| @pat +| @path +| @path_ast_node +| @path_segment +| @rename +| @ret_type_repr +| @return_type_syntax +| @source_file +| @stmt +| @stmt_list +| @struct_expr_field +| @struct_expr_field_list +| @struct_field +| @struct_pat_field +| @struct_pat_field_list +| @token +| @token_tree +| @tuple_field +| @type_bound +| @type_bound_list +| @type_repr +| @use_bound_generic_arg +| @use_bound_generic_args +| @use_tree +| @use_tree_list +| @variant_list +| @visibility +| @where_clause +| @where_pred +; + +crates( + unique int id: @crate +); + +#keyset[id] +crate_names( + int id: @crate ref, + string name: string ref +); + +#keyset[id] +crate_versions( + int id: @crate ref, + string version: string ref +); + +#keyset[id, index] +crate_cfg_options( + int id: @crate ref, + int index: int ref, + string cfg_option: string ref +); + +#keyset[id, index] +crate_named_dependencies( + int id: @crate ref, + int index: int ref, + int named_dependency: @named_crate ref +); + +missings( + unique int id: @missing +); + +unimplementeds( + unique int id: @unimplemented +); + +abis( + unique int id: @abi +); + +#keyset[id] +abi_abi_strings( + int id: @abi ref, + string abi_string: string ref +); + +@addressable = + @item +| @variant +; + +arg_lists( + unique int id: @arg_list +); + +#keyset[id, index] +arg_list_args( + int id: @arg_list ref, + int index: int ref, + int arg: @expr ref +); + +asm_dir_specs( + unique int id: @asm_dir_spec +); + +@asm_operand = + @asm_const +| @asm_label +| @asm_reg_operand +| @asm_sym +; + +asm_operand_exprs( + unique int id: @asm_operand_expr +); + +#keyset[id] +asm_operand_expr_in_exprs( + int id: @asm_operand_expr ref, + int in_expr: @expr ref +); + +#keyset[id] +asm_operand_expr_out_exprs( + int id: @asm_operand_expr ref, + int out_expr: @expr ref +); + +asm_options( + unique int id: @asm_option +); + +#keyset[id] +asm_option_is_raw( + int id: @asm_option ref +); + +@asm_piece = + @asm_clobber_abi +| @asm_operand_named +| @asm_options_list +; + +asm_reg_specs( + unique int id: @asm_reg_spec +); + +#keyset[id] +asm_reg_spec_identifiers( + int id: @asm_reg_spec ref, + int identifier: @name_ref ref +); + +assoc_item_lists( + unique int id: @assoc_item_list +); + +#keyset[id, index] +assoc_item_list_assoc_items( + int id: @assoc_item_list ref, + int index: int ref, + int assoc_item: @assoc_item ref +); + +#keyset[id, index] +assoc_item_list_attrs( + int id: @assoc_item_list ref, + int index: int ref, + int attr: @attr ref +); + +attrs( + unique int id: @attr +); + +#keyset[id] +attr_meta( + int id: @attr ref, + int meta: @meta ref +); + +@callable = + @closure_expr +| @function +; + +#keyset[id] +callable_param_lists( + int id: @callable ref, + int param_list: @param_list ref +); + +#keyset[id, index] +callable_attrs( + int id: @callable ref, + int index: int ref, + int attr: @attr ref +); + +@expr = + @array_expr_internal +| @asm_expr +| @await_expr +| @become_expr +| @binary_expr +| @break_expr +| @call_expr +| @cast_expr +| @closure_expr +| @continue_expr +| @field_expr +| @format_args_expr +| @if_expr +| @index_expr +| @labelable_expr +| @let_expr +| @literal_expr +| @macro_block_expr +| @macro_expr +| @match_expr +| @method_call_expr +| @offset_of_expr +| @paren_expr +| @path_expr_base +| @prefix_expr +| @range_expr +| @ref_expr +| @return_expr +| @struct_expr +| @try_expr +| @tuple_expr +| @underscore_expr +| @yeet_expr +| @yield_expr +; + +extern_item_lists( + unique int id: @extern_item_list +); + +#keyset[id, index] +extern_item_list_attrs( + int id: @extern_item_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +extern_item_list_extern_items( + int id: @extern_item_list ref, + int index: int ref, + int extern_item: @extern_item ref +); + +@field_list = + @struct_field_list +| @tuple_field_list +; + +for_binders( + unique int id: @for_binder +); + +#keyset[id] +for_binder_generic_param_lists( + int id: @for_binder ref, + int generic_param_list: @generic_param_list ref +); + +format_args_args( + unique int id: @format_args_arg +); + +#keyset[id] +format_args_arg_exprs( + int id: @format_args_arg ref, + int expr: @expr ref +); + +#keyset[id] +format_args_arg_names( + int id: @format_args_arg ref, + int name: @name ref +); + +@generic_arg = + @assoc_type_arg +| @const_arg +| @lifetime_arg +| @type_arg +; + +generic_arg_lists( + unique int id: @generic_arg_list +); + +#keyset[id, index] +generic_arg_list_generic_args( + int id: @generic_arg_list ref, + int index: int ref, + int generic_arg: @generic_arg ref +); + +@generic_param = + @const_param +| @lifetime_param +| @type_param +; + +generic_param_lists( + unique int id: @generic_param_list +); + +#keyset[id, index] +generic_param_list_generic_params( + int id: @generic_param_list ref, + int index: int ref, + int generic_param: @generic_param ref +); + +item_lists( + unique int id: @item_list +); + +#keyset[id, index] +item_list_attrs( + int id: @item_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +item_list_items( + int id: @item_list ref, + int index: int ref, + int item: @item ref +); + +labels( + unique int id: @label +); + +#keyset[id] +label_lifetimes( + int id: @label ref, + int lifetime: @lifetime ref +); + +let_elses( + unique int id: @let_else +); + +#keyset[id] +let_else_block_exprs( + int id: @let_else ref, + int block_expr: @block_expr ref +); + +macro_items( + unique int id: @macro_items +); + +#keyset[id, index] +macro_items_items( + int id: @macro_items ref, + int index: int ref, + int item: @item ref +); + +match_arms( + unique int id: @match_arm +); + +#keyset[id, index] +match_arm_attrs( + int id: @match_arm ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +match_arm_exprs( + int id: @match_arm ref, + int expr: @expr ref +); + +#keyset[id] +match_arm_guards( + int id: @match_arm ref, + int guard: @match_guard ref +); + +#keyset[id] +match_arm_pats( + int id: @match_arm ref, + int pat: @pat ref +); + +match_arm_lists( + unique int id: @match_arm_list +); + +#keyset[id, index] +match_arm_list_arms( + int id: @match_arm_list ref, + int index: int ref, + int arm: @match_arm ref +); + +#keyset[id, index] +match_arm_list_attrs( + int id: @match_arm_list ref, + int index: int ref, + int attr: @attr ref +); + +match_guards( + unique int id: @match_guard +); + +#keyset[id] +match_guard_conditions( + int id: @match_guard ref, + int condition: @expr ref +); + +meta( + unique int id: @meta +); + +#keyset[id] +meta_exprs( + int id: @meta ref, + int expr: @expr ref +); + +#keyset[id] +meta_is_unsafe( + int id: @meta ref +); + +#keyset[id] +meta_paths( + int id: @meta ref, + int path: @path ref +); + +#keyset[id] +meta_token_trees( + int id: @meta ref, + int token_tree: @token_tree ref +); + +names( + unique int id: @name +); + +#keyset[id] +name_texts( + int id: @name ref, + string text: string ref +); + +@param_base = + @param +| @self_param +; + +#keyset[id, index] +param_base_attrs( + int id: @param_base ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +param_base_type_reprs( + int id: @param_base ref, + int type_repr: @type_repr ref +); + +param_lists( + unique int id: @param_list +); + +#keyset[id, index] +param_list_params( + int id: @param_list ref, + int index: int ref, + int param: @param ref +); + +#keyset[id] +param_list_self_params( + int id: @param_list ref, + int self_param: @self_param ref +); + +parenthesized_arg_lists( + unique int id: @parenthesized_arg_list +); + +#keyset[id, index] +parenthesized_arg_list_type_args( + int id: @parenthesized_arg_list ref, + int index: int ref, + int type_arg: @type_arg ref +); + +@pat = + @box_pat +| @const_block_pat +| @ident_pat +| @literal_pat +| @macro_pat +| @or_pat +| @paren_pat +| @path_pat +| @range_pat +| @ref_pat +| @rest_pat +| @slice_pat +| @struct_pat +| @tuple_pat +| @tuple_struct_pat +| @wildcard_pat +; + +paths( + unique int id: @path +); + +#keyset[id] +path_qualifiers( + int id: @path ref, + int qualifier: @path ref +); + +#keyset[id] +path_segments_( + int id: @path ref, + int segment: @path_segment ref +); + +@path_ast_node = + @path_expr +| @path_pat +| @struct_expr +| @struct_pat +| @tuple_struct_pat +; + +#keyset[id] +path_ast_node_paths( + int id: @path_ast_node ref, + int path: @path ref +); + +path_segments( + unique int id: @path_segment +); + +#keyset[id] +path_segment_generic_arg_lists( + int id: @path_segment ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +path_segment_identifiers( + int id: @path_segment ref, + int identifier: @name_ref ref +); + +#keyset[id] +path_segment_parenthesized_arg_lists( + int id: @path_segment ref, + int parenthesized_arg_list: @parenthesized_arg_list ref +); + +#keyset[id] +path_segment_ret_types( + int id: @path_segment ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +path_segment_return_type_syntaxes( + int id: @path_segment ref, + int return_type_syntax: @return_type_syntax ref +); + +#keyset[id] +path_segment_type_reprs( + int id: @path_segment ref, + int type_repr: @type_repr ref +); + +#keyset[id] +path_segment_trait_type_reprs( + int id: @path_segment ref, + int trait_type_repr: @path_type_repr ref +); + +renames( + unique int id: @rename +); + +#keyset[id] +rename_names( + int id: @rename ref, + int name: @name ref +); + +ret_type_reprs( + unique int id: @ret_type_repr +); + +#keyset[id] +ret_type_repr_type_reprs( + int id: @ret_type_repr ref, + int type_repr: @type_repr ref +); + +return_type_syntaxes( + unique int id: @return_type_syntax +); + +source_files( + unique int id: @source_file +); + +#keyset[id, index] +source_file_attrs( + int id: @source_file ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +source_file_items( + int id: @source_file ref, + int index: int ref, + int item: @item ref +); + +@stmt = + @expr_stmt +| @item +| @let_stmt +; + +stmt_lists( + unique int id: @stmt_list +); + +#keyset[id, index] +stmt_list_attrs( + int id: @stmt_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +stmt_list_statements( + int id: @stmt_list ref, + int index: int ref, + int statement: @stmt ref +); + +#keyset[id] +stmt_list_tail_exprs( + int id: @stmt_list ref, + int tail_expr: @expr ref +); + +struct_expr_fields( + unique int id: @struct_expr_field +); + +#keyset[id, index] +struct_expr_field_attrs( + int id: @struct_expr_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_expr_field_exprs( + int id: @struct_expr_field ref, + int expr: @expr ref +); + +#keyset[id] +struct_expr_field_identifiers( + int id: @struct_expr_field ref, + int identifier: @name_ref ref +); + +struct_expr_field_lists( + unique int id: @struct_expr_field_list +); + +#keyset[id, index] +struct_expr_field_list_attrs( + int id: @struct_expr_field_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +struct_expr_field_list_fields( + int id: @struct_expr_field_list ref, + int index: int ref, + int field: @struct_expr_field ref +); + +#keyset[id] +struct_expr_field_list_spreads( + int id: @struct_expr_field_list ref, + int spread: @expr ref +); + +struct_fields( + unique int id: @struct_field +); + +#keyset[id, index] +struct_field_attrs( + int id: @struct_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_field_defaults( + int id: @struct_field ref, + int default: @expr ref +); + +#keyset[id] +struct_field_is_unsafe( + int id: @struct_field ref +); + +#keyset[id] +struct_field_names( + int id: @struct_field ref, + int name: @name ref +); + +#keyset[id] +struct_field_type_reprs( + int id: @struct_field ref, + int type_repr: @type_repr ref +); + +#keyset[id] +struct_field_visibilities( + int id: @struct_field ref, + int visibility: @visibility ref +); + +struct_pat_fields( + unique int id: @struct_pat_field +); + +#keyset[id, index] +struct_pat_field_attrs( + int id: @struct_pat_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_pat_field_identifiers( + int id: @struct_pat_field ref, + int identifier: @name_ref ref +); + +#keyset[id] +struct_pat_field_pats( + int id: @struct_pat_field ref, + int pat: @pat ref +); + +struct_pat_field_lists( + unique int id: @struct_pat_field_list +); + +#keyset[id, index] +struct_pat_field_list_fields( + int id: @struct_pat_field_list ref, + int index: int ref, + int field: @struct_pat_field ref +); + +#keyset[id] +struct_pat_field_list_rest_pats( + int id: @struct_pat_field_list ref, + int rest_pat: @rest_pat ref +); + +@token = + @comment +; + +token_trees( + unique int id: @token_tree +); + +tuple_fields( + unique int id: @tuple_field +); + +#keyset[id, index] +tuple_field_attrs( + int id: @tuple_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +tuple_field_type_reprs( + int id: @tuple_field ref, + int type_repr: @type_repr ref +); + +#keyset[id] +tuple_field_visibilities( + int id: @tuple_field ref, + int visibility: @visibility ref +); + +type_bounds( + unique int id: @type_bound +); + +#keyset[id] +type_bound_for_binders( + int id: @type_bound ref, + int for_binder: @for_binder ref +); + +#keyset[id] +type_bound_is_async( + int id: @type_bound ref +); + +#keyset[id] +type_bound_is_const( + int id: @type_bound ref +); + +#keyset[id] +type_bound_lifetimes( + int id: @type_bound ref, + int lifetime: @lifetime ref +); + +#keyset[id] +type_bound_type_reprs( + int id: @type_bound ref, + int type_repr: @type_repr ref +); + +#keyset[id] +type_bound_use_bound_generic_args( + int id: @type_bound ref, + int use_bound_generic_args: @use_bound_generic_args ref +); + +type_bound_lists( + unique int id: @type_bound_list +); + +#keyset[id, index] +type_bound_list_bounds( + int id: @type_bound_list ref, + int index: int ref, + int bound: @type_bound ref +); + +@type_repr = + @array_type_repr +| @dyn_trait_type_repr +| @fn_ptr_type_repr +| @for_type_repr +| @impl_trait_type_repr +| @infer_type_repr +| @macro_type_repr +| @never_type_repr +| @paren_type_repr +| @path_type_repr +| @ptr_type_repr +| @ref_type_repr +| @slice_type_repr +| @tuple_type_repr +; + +@use_bound_generic_arg = + @lifetime +| @name_ref +; + +use_bound_generic_args( + unique int id: @use_bound_generic_args +); + +#keyset[id, index] +use_bound_generic_args_use_bound_generic_args( + int id: @use_bound_generic_args ref, + int index: int ref, + int use_bound_generic_arg: @use_bound_generic_arg ref +); + +use_trees( + unique int id: @use_tree +); + +#keyset[id] +use_tree_is_glob( + int id: @use_tree ref +); + +#keyset[id] +use_tree_paths( + int id: @use_tree ref, + int path: @path ref +); + +#keyset[id] +use_tree_renames( + int id: @use_tree ref, + int rename: @rename ref +); + +#keyset[id] +use_tree_use_tree_lists( + int id: @use_tree ref, + int use_tree_list: @use_tree_list ref +); + +use_tree_lists( + unique int id: @use_tree_list +); + +#keyset[id, index] +use_tree_list_use_trees( + int id: @use_tree_list ref, + int index: int ref, + int use_tree: @use_tree ref +); + +variant_lists( + unique int id: @variant_list +); + +#keyset[id, index] +variant_list_variants( + int id: @variant_list ref, + int index: int ref, + int variant: @variant ref +); + +visibilities( + unique int id: @visibility +); + +#keyset[id] +visibility_paths( + int id: @visibility ref, + int path: @path ref +); + +where_clauses( + unique int id: @where_clause +); + +#keyset[id, index] +where_clause_predicates( + int id: @where_clause ref, + int index: int ref, + int predicate: @where_pred ref +); + +where_preds( + unique int id: @where_pred +); + +#keyset[id] +where_pred_for_binders( + int id: @where_pred ref, + int for_binder: @for_binder ref +); + +#keyset[id] +where_pred_lifetimes( + int id: @where_pred ref, + int lifetime: @lifetime ref +); + +#keyset[id] +where_pred_type_reprs( + int id: @where_pred ref, + int type_repr: @type_repr ref +); + +#keyset[id] +where_pred_type_bound_lists( + int id: @where_pred ref, + int type_bound_list: @type_bound_list ref +); + +array_expr_internals( + unique int id: @array_expr_internal +); + +#keyset[id, index] +array_expr_internal_attrs( + int id: @array_expr_internal ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +array_expr_internal_exprs( + int id: @array_expr_internal ref, + int index: int ref, + int expr: @expr ref +); + +#keyset[id] +array_expr_internal_is_semicolon( + int id: @array_expr_internal ref +); + +array_type_reprs( + unique int id: @array_type_repr +); + +#keyset[id] +array_type_repr_const_args( + int id: @array_type_repr ref, + int const_arg: @const_arg ref +); + +#keyset[id] +array_type_repr_element_type_reprs( + int id: @array_type_repr ref, + int element_type_repr: @type_repr ref +); + +asm_clobber_abis( + unique int id: @asm_clobber_abi +); + +asm_consts( + unique int id: @asm_const +); + +#keyset[id] +asm_const_exprs( + int id: @asm_const ref, + int expr: @expr ref +); + +#keyset[id] +asm_const_is_const( + int id: @asm_const ref +); + +asm_labels( + unique int id: @asm_label +); + +#keyset[id] +asm_label_block_exprs( + int id: @asm_label ref, + int block_expr: @block_expr ref +); + +asm_operand_nameds( + unique int id: @asm_operand_named +); + +#keyset[id] +asm_operand_named_asm_operands( + int id: @asm_operand_named ref, + int asm_operand: @asm_operand ref +); + +#keyset[id] +asm_operand_named_names( + int id: @asm_operand_named ref, + int name: @name ref +); + +asm_options_lists( + unique int id: @asm_options_list +); + +#keyset[id, index] +asm_options_list_asm_options( + int id: @asm_options_list ref, + int index: int ref, + int asm_option: @asm_option ref +); + +asm_reg_operands( + unique int id: @asm_reg_operand +); + +#keyset[id] +asm_reg_operand_asm_dir_specs( + int id: @asm_reg_operand ref, + int asm_dir_spec: @asm_dir_spec ref +); + +#keyset[id] +asm_reg_operand_asm_operand_exprs( + int id: @asm_reg_operand ref, + int asm_operand_expr: @asm_operand_expr ref +); + +#keyset[id] +asm_reg_operand_asm_reg_specs( + int id: @asm_reg_operand ref, + int asm_reg_spec: @asm_reg_spec ref +); + +asm_syms( + unique int id: @asm_sym +); + +#keyset[id] +asm_sym_paths( + int id: @asm_sym ref, + int path: @path ref +); + +assoc_type_args( + unique int id: @assoc_type_arg +); + +#keyset[id] +assoc_type_arg_const_args( + int id: @assoc_type_arg ref, + int const_arg: @const_arg ref +); + +#keyset[id] +assoc_type_arg_generic_arg_lists( + int id: @assoc_type_arg ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +assoc_type_arg_identifiers( + int id: @assoc_type_arg ref, + int identifier: @name_ref ref +); + +#keyset[id] +assoc_type_arg_param_lists( + int id: @assoc_type_arg ref, + int param_list: @param_list ref +); + +#keyset[id] +assoc_type_arg_ret_types( + int id: @assoc_type_arg ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +assoc_type_arg_return_type_syntaxes( + int id: @assoc_type_arg ref, + int return_type_syntax: @return_type_syntax ref +); + +#keyset[id] +assoc_type_arg_type_reprs( + int id: @assoc_type_arg ref, + int type_repr: @type_repr ref +); + +#keyset[id] +assoc_type_arg_type_bound_lists( + int id: @assoc_type_arg ref, + int type_bound_list: @type_bound_list ref +); + +await_exprs( + unique int id: @await_expr +); + +#keyset[id, index] +await_expr_attrs( + int id: @await_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +await_expr_exprs( + int id: @await_expr ref, + int expr: @expr ref +); + +become_exprs( + unique int id: @become_expr +); + +#keyset[id, index] +become_expr_attrs( + int id: @become_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +become_expr_exprs( + int id: @become_expr ref, + int expr: @expr ref +); + +binary_exprs( + unique int id: @binary_expr +); + +#keyset[id, index] +binary_expr_attrs( + int id: @binary_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +binary_expr_lhs( + int id: @binary_expr ref, + int lhs: @expr ref +); + +#keyset[id] +binary_expr_operator_names( + int id: @binary_expr ref, + string operator_name: string ref +); + +#keyset[id] +binary_expr_rhs( + int id: @binary_expr ref, + int rhs: @expr ref +); + +box_pats( + unique int id: @box_pat +); + +#keyset[id] +box_pat_pats( + int id: @box_pat ref, + int pat: @pat ref +); + +break_exprs( + unique int id: @break_expr +); + +#keyset[id, index] +break_expr_attrs( + int id: @break_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +break_expr_exprs( + int id: @break_expr ref, + int expr: @expr ref +); + +#keyset[id] +break_expr_lifetimes( + int id: @break_expr ref, + int lifetime: @lifetime ref +); + +call_exprs( + unique int id: @call_expr +); + +#keyset[id] +call_expr_arg_lists( + int id: @call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +call_expr_attrs( + int id: @call_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +call_expr_functions( + int id: @call_expr ref, + int function: @expr ref +); + +cast_exprs( + unique int id: @cast_expr +); + +#keyset[id, index] +cast_expr_attrs( + int id: @cast_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +cast_expr_exprs( + int id: @cast_expr ref, + int expr: @expr ref +); + +#keyset[id] +cast_expr_type_reprs( + int id: @cast_expr ref, + int type_repr: @type_repr ref +); + +closure_exprs( + unique int id: @closure_expr +); + +#keyset[id] +closure_expr_closure_bodies( + int id: @closure_expr ref, + int closure_body: @expr ref +); + +#keyset[id] +closure_expr_for_binders( + int id: @closure_expr ref, + int for_binder: @for_binder ref +); + +#keyset[id] +closure_expr_is_async( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_const( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_gen( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_move( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_static( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_ret_types( + int id: @closure_expr ref, + int ret_type: @ret_type_repr ref +); + +comments( + unique int id: @comment, + int parent: @ast_node ref, + string text: string ref +); + +const_args( + unique int id: @const_arg +); + +#keyset[id] +const_arg_exprs( + int id: @const_arg ref, + int expr: @expr ref +); + +const_block_pats( + unique int id: @const_block_pat +); + +#keyset[id] +const_block_pat_block_exprs( + int id: @const_block_pat ref, + int block_expr: @block_expr ref +); + +#keyset[id] +const_block_pat_is_const( + int id: @const_block_pat ref +); + +const_params( + unique int id: @const_param +); + +#keyset[id, index] +const_param_attrs( + int id: @const_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +const_param_default_vals( + int id: @const_param ref, + int default_val: @const_arg ref +); + +#keyset[id] +const_param_is_const( + int id: @const_param ref +); + +#keyset[id] +const_param_names( + int id: @const_param ref, + int name: @name ref +); + +#keyset[id] +const_param_type_reprs( + int id: @const_param ref, + int type_repr: @type_repr ref +); + +continue_exprs( + unique int id: @continue_expr +); + +#keyset[id, index] +continue_expr_attrs( + int id: @continue_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +continue_expr_lifetimes( + int id: @continue_expr ref, + int lifetime: @lifetime ref +); + +dyn_trait_type_reprs( + unique int id: @dyn_trait_type_repr +); + +#keyset[id] +dyn_trait_type_repr_type_bound_lists( + int id: @dyn_trait_type_repr ref, + int type_bound_list: @type_bound_list ref +); + +expr_stmts( + unique int id: @expr_stmt +); + +#keyset[id] +expr_stmt_exprs( + int id: @expr_stmt ref, + int expr: @expr ref +); + +field_exprs( + unique int id: @field_expr +); + +#keyset[id, index] +field_expr_attrs( + int id: @field_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +field_expr_containers( + int id: @field_expr ref, + int container: @expr ref +); + +#keyset[id] +field_expr_identifiers( + int id: @field_expr ref, + int identifier: @name_ref ref +); + +fn_ptr_type_reprs( + unique int id: @fn_ptr_type_repr +); + +#keyset[id] +fn_ptr_type_repr_abis( + int id: @fn_ptr_type_repr ref, + int abi: @abi ref +); + +#keyset[id] +fn_ptr_type_repr_is_async( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_is_const( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_is_unsafe( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_param_lists( + int id: @fn_ptr_type_repr ref, + int param_list: @param_list ref +); + +#keyset[id] +fn_ptr_type_repr_ret_types( + int id: @fn_ptr_type_repr ref, + int ret_type: @ret_type_repr ref +); + +for_type_reprs( + unique int id: @for_type_repr +); + +#keyset[id] +for_type_repr_for_binders( + int id: @for_type_repr ref, + int for_binder: @for_binder ref +); + +#keyset[id] +for_type_repr_type_reprs( + int id: @for_type_repr ref, + int type_repr: @type_repr ref +); + +format_args_exprs( + unique int id: @format_args_expr +); + +#keyset[id, index] +format_args_expr_args( + int id: @format_args_expr ref, + int index: int ref, + int arg: @format_args_arg ref +); + +#keyset[id, index] +format_args_expr_attrs( + int id: @format_args_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +format_args_expr_templates( + int id: @format_args_expr ref, + int template: @expr ref +); + +ident_pats( + unique int id: @ident_pat +); + +#keyset[id, index] +ident_pat_attrs( + int id: @ident_pat ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +ident_pat_is_mut( + int id: @ident_pat ref +); + +#keyset[id] +ident_pat_is_ref( + int id: @ident_pat ref +); + +#keyset[id] +ident_pat_names( + int id: @ident_pat ref, + int name: @name ref +); + +#keyset[id] +ident_pat_pats( + int id: @ident_pat ref, + int pat: @pat ref +); + +if_exprs( + unique int id: @if_expr +); + +#keyset[id, index] +if_expr_attrs( + int id: @if_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +if_expr_conditions( + int id: @if_expr ref, + int condition: @expr ref +); + +#keyset[id] +if_expr_elses( + int id: @if_expr ref, + int else: @expr ref +); + +#keyset[id] +if_expr_thens( + int id: @if_expr ref, + int then: @block_expr ref +); + +impl_trait_type_reprs( + unique int id: @impl_trait_type_repr +); + +#keyset[id] +impl_trait_type_repr_type_bound_lists( + int id: @impl_trait_type_repr ref, + int type_bound_list: @type_bound_list ref +); + +index_exprs( + unique int id: @index_expr +); + +#keyset[id, index] +index_expr_attrs( + int id: @index_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +index_expr_bases( + int id: @index_expr ref, + int base: @expr ref +); + +#keyset[id] +index_expr_indices( + int id: @index_expr ref, + int index: @expr ref +); + +infer_type_reprs( + unique int id: @infer_type_repr +); + +@item = + @adt +| @asm_expr +| @assoc_item +| @extern_block +| @extern_crate +| @extern_item +| @impl +| @macro_def +| @macro_rules +| @module +| @trait +| @trait_alias +| @use +; + +#keyset[id] +item_attribute_macro_expansions( + int id: @item ref, + int attribute_macro_expansion: @macro_items ref +); + +@labelable_expr = + @block_expr +| @looping_expr +; + +#keyset[id] +labelable_expr_labels( + int id: @labelable_expr ref, + int label: @label ref +); + +let_exprs( + unique int id: @let_expr +); + +#keyset[id, index] +let_expr_attrs( + int id: @let_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +let_expr_scrutinees( + int id: @let_expr ref, + int scrutinee: @expr ref +); + +#keyset[id] +let_expr_pats( + int id: @let_expr ref, + int pat: @pat ref +); + +let_stmts( + unique int id: @let_stmt +); + +#keyset[id, index] +let_stmt_attrs( + int id: @let_stmt ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +let_stmt_initializers( + int id: @let_stmt ref, + int initializer: @expr ref +); + +#keyset[id] +let_stmt_let_elses( + int id: @let_stmt ref, + int let_else: @let_else ref +); + +#keyset[id] +let_stmt_pats( + int id: @let_stmt ref, + int pat: @pat ref +); + +#keyset[id] +let_stmt_type_reprs( + int id: @let_stmt ref, + int type_repr: @type_repr ref +); + +lifetimes( + unique int id: @lifetime +); + +#keyset[id] +lifetime_texts( + int id: @lifetime ref, + string text: string ref +); + +lifetime_args( + unique int id: @lifetime_arg +); + +#keyset[id] +lifetime_arg_lifetimes( + int id: @lifetime_arg ref, + int lifetime: @lifetime ref +); + +lifetime_params( + unique int id: @lifetime_param +); + +#keyset[id, index] +lifetime_param_attrs( + int id: @lifetime_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +lifetime_param_lifetimes( + int id: @lifetime_param ref, + int lifetime: @lifetime ref +); + +#keyset[id] +lifetime_param_type_bound_lists( + int id: @lifetime_param ref, + int type_bound_list: @type_bound_list ref +); + +literal_exprs( + unique int id: @literal_expr +); + +#keyset[id, index] +literal_expr_attrs( + int id: @literal_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +literal_expr_text_values( + int id: @literal_expr ref, + string text_value: string ref +); + +literal_pats( + unique int id: @literal_pat +); + +#keyset[id] +literal_pat_literals( + int id: @literal_pat ref, + int literal: @literal_expr ref +); + +macro_block_exprs( + unique int id: @macro_block_expr +); + +#keyset[id, index] +macro_block_expr_statements( + int id: @macro_block_expr ref, + int index: int ref, + int statement: @stmt ref +); + +#keyset[id] +macro_block_expr_tail_exprs( + int id: @macro_block_expr ref, + int tail_expr: @expr ref +); + +macro_exprs( + unique int id: @macro_expr +); + +#keyset[id] +macro_expr_macro_calls( + int id: @macro_expr ref, + int macro_call: @macro_call ref +); + +macro_pats( + unique int id: @macro_pat +); + +#keyset[id] +macro_pat_macro_calls( + int id: @macro_pat ref, + int macro_call: @macro_call ref +); + +macro_type_reprs( + unique int id: @macro_type_repr +); + +#keyset[id] +macro_type_repr_macro_calls( + int id: @macro_type_repr ref, + int macro_call: @macro_call ref +); + +match_exprs( + unique int id: @match_expr +); + +#keyset[id, index] +match_expr_attrs( + int id: @match_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +match_expr_scrutinees( + int id: @match_expr ref, + int scrutinee: @expr ref +); + +#keyset[id] +match_expr_match_arm_lists( + int id: @match_expr ref, + int match_arm_list: @match_arm_list ref +); + +method_call_exprs( + unique int id: @method_call_expr +); + +#keyset[id] +method_call_expr_arg_lists( + int id: @method_call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +method_call_expr_attrs( + int id: @method_call_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +method_call_expr_generic_arg_lists( + int id: @method_call_expr ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +method_call_expr_identifiers( + int id: @method_call_expr ref, + int identifier: @name_ref ref +); + +#keyset[id] +method_call_expr_receivers( + int id: @method_call_expr ref, + int receiver: @expr ref +); + +name_refs( + unique int id: @name_ref +); + +#keyset[id] +name_ref_texts( + int id: @name_ref ref, + string text: string ref +); + +never_type_reprs( + unique int id: @never_type_repr +); + +offset_of_exprs( + unique int id: @offset_of_expr +); + +#keyset[id, index] +offset_of_expr_attrs( + int id: @offset_of_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +offset_of_expr_fields( + int id: @offset_of_expr ref, + int index: int ref, + int field: @name_ref ref +); + +#keyset[id] +offset_of_expr_type_reprs( + int id: @offset_of_expr ref, + int type_repr: @type_repr ref +); + +or_pats( + unique int id: @or_pat +); + +#keyset[id, index] +or_pat_pats( + int id: @or_pat ref, + int index: int ref, + int pat: @pat ref +); + +params( + unique int id: @param +); + +#keyset[id] +param_pats( + int id: @param ref, + int pat: @pat ref +); + +paren_exprs( + unique int id: @paren_expr +); + +#keyset[id, index] +paren_expr_attrs( + int id: @paren_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +paren_expr_exprs( + int id: @paren_expr ref, + int expr: @expr ref +); + +paren_pats( + unique int id: @paren_pat +); + +#keyset[id] +paren_pat_pats( + int id: @paren_pat ref, + int pat: @pat ref +); + +paren_type_reprs( + unique int id: @paren_type_repr +); + +#keyset[id] +paren_type_repr_type_reprs( + int id: @paren_type_repr ref, + int type_repr: @type_repr ref +); + +@path_expr_base = + @path_expr +; + +path_pats( + unique int id: @path_pat +); + +path_type_reprs( + unique int id: @path_type_repr +); + +#keyset[id] +path_type_repr_paths( + int id: @path_type_repr ref, + int path: @path ref +); + +prefix_exprs( + unique int id: @prefix_expr +); + +#keyset[id, index] +prefix_expr_attrs( + int id: @prefix_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +prefix_expr_exprs( + int id: @prefix_expr ref, + int expr: @expr ref +); + +#keyset[id] +prefix_expr_operator_names( + int id: @prefix_expr ref, + string operator_name: string ref +); + +ptr_type_reprs( + unique int id: @ptr_type_repr +); + +#keyset[id] +ptr_type_repr_is_const( + int id: @ptr_type_repr ref +); + +#keyset[id] +ptr_type_repr_is_mut( + int id: @ptr_type_repr ref +); + +#keyset[id] +ptr_type_repr_type_reprs( + int id: @ptr_type_repr ref, + int type_repr: @type_repr ref +); + +range_exprs( + unique int id: @range_expr +); + +#keyset[id, index] +range_expr_attrs( + int id: @range_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +range_expr_ends( + int id: @range_expr ref, + int end: @expr ref +); + +#keyset[id] +range_expr_operator_names( + int id: @range_expr ref, + string operator_name: string ref +); + +#keyset[id] +range_expr_starts( + int id: @range_expr ref, + int start: @expr ref +); + +range_pats( + unique int id: @range_pat +); + +#keyset[id] +range_pat_ends( + int id: @range_pat ref, + int end: @pat ref +); + +#keyset[id] +range_pat_operator_names( + int id: @range_pat ref, + string operator_name: string ref +); + +#keyset[id] +range_pat_starts( + int id: @range_pat ref, + int start: @pat ref +); + +ref_exprs( + unique int id: @ref_expr +); + +#keyset[id, index] +ref_expr_attrs( + int id: @ref_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +ref_expr_exprs( + int id: @ref_expr ref, + int expr: @expr ref +); + +#keyset[id] +ref_expr_is_const( + int id: @ref_expr ref +); + +#keyset[id] +ref_expr_is_mut( + int id: @ref_expr ref +); + +#keyset[id] +ref_expr_is_raw( + int id: @ref_expr ref +); + +ref_pats( + unique int id: @ref_pat +); + +#keyset[id] +ref_pat_is_mut( + int id: @ref_pat ref +); + +#keyset[id] +ref_pat_pats( + int id: @ref_pat ref, + int pat: @pat ref +); + +ref_type_reprs( + unique int id: @ref_type_repr +); + +#keyset[id] +ref_type_repr_is_mut( + int id: @ref_type_repr ref +); + +#keyset[id] +ref_type_repr_lifetimes( + int id: @ref_type_repr ref, + int lifetime: @lifetime ref +); + +#keyset[id] +ref_type_repr_type_reprs( + int id: @ref_type_repr ref, + int type_repr: @type_repr ref +); + +rest_pats( + unique int id: @rest_pat +); + +#keyset[id, index] +rest_pat_attrs( + int id: @rest_pat ref, + int index: int ref, + int attr: @attr ref +); + +return_exprs( + unique int id: @return_expr +); + +#keyset[id, index] +return_expr_attrs( + int id: @return_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +return_expr_exprs( + int id: @return_expr ref, + int expr: @expr ref +); + +self_params( + unique int id: @self_param +); + +#keyset[id] +self_param_is_ref( + int id: @self_param ref +); + +#keyset[id] +self_param_is_mut( + int id: @self_param ref +); + +#keyset[id] +self_param_lifetimes( + int id: @self_param ref, + int lifetime: @lifetime ref +); + +#keyset[id] +self_param_names( + int id: @self_param ref, + int name: @name ref +); + +slice_pats( + unique int id: @slice_pat +); + +#keyset[id, index] +slice_pat_pats( + int id: @slice_pat ref, + int index: int ref, + int pat: @pat ref +); + +slice_type_reprs( + unique int id: @slice_type_repr +); + +#keyset[id] +slice_type_repr_type_reprs( + int id: @slice_type_repr ref, + int type_repr: @type_repr ref +); + +struct_exprs( + unique int id: @struct_expr +); + +#keyset[id] +struct_expr_struct_expr_field_lists( + int id: @struct_expr ref, + int struct_expr_field_list: @struct_expr_field_list ref +); + +struct_field_lists( + unique int id: @struct_field_list +); + +#keyset[id, index] +struct_field_list_fields( + int id: @struct_field_list ref, + int index: int ref, + int field: @struct_field ref +); + +struct_pats( + unique int id: @struct_pat +); + +#keyset[id] +struct_pat_struct_pat_field_lists( + int id: @struct_pat ref, + int struct_pat_field_list: @struct_pat_field_list ref +); + +try_exprs( + unique int id: @try_expr +); + +#keyset[id, index] +try_expr_attrs( + int id: @try_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +try_expr_exprs( + int id: @try_expr ref, + int expr: @expr ref +); + +tuple_exprs( + unique int id: @tuple_expr +); + +#keyset[id, index] +tuple_expr_attrs( + int id: @tuple_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +tuple_expr_fields( + int id: @tuple_expr ref, + int index: int ref, + int field: @expr ref +); + +tuple_field_lists( + unique int id: @tuple_field_list +); + +#keyset[id, index] +tuple_field_list_fields( + int id: @tuple_field_list ref, + int index: int ref, + int field: @tuple_field ref +); + +tuple_pats( + unique int id: @tuple_pat +); + +#keyset[id, index] +tuple_pat_fields( + int id: @tuple_pat ref, + int index: int ref, + int field: @pat ref +); + +tuple_struct_pats( + unique int id: @tuple_struct_pat +); + +#keyset[id, index] +tuple_struct_pat_fields( + int id: @tuple_struct_pat ref, + int index: int ref, + int field: @pat ref +); + +tuple_type_reprs( + unique int id: @tuple_type_repr +); + +#keyset[id, index] +tuple_type_repr_fields( + int id: @tuple_type_repr ref, + int index: int ref, + int field: @type_repr ref +); + +type_args( + unique int id: @type_arg +); + +#keyset[id] +type_arg_type_reprs( + int id: @type_arg ref, + int type_repr: @type_repr ref +); + +type_params( + unique int id: @type_param +); + +#keyset[id, index] +type_param_attrs( + int id: @type_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +type_param_default_types( + int id: @type_param ref, + int default_type: @type_repr ref +); + +#keyset[id] +type_param_names( + int id: @type_param ref, + int name: @name ref +); + +#keyset[id] +type_param_type_bound_lists( + int id: @type_param ref, + int type_bound_list: @type_bound_list ref +); + +underscore_exprs( + unique int id: @underscore_expr +); + +#keyset[id, index] +underscore_expr_attrs( + int id: @underscore_expr ref, + int index: int ref, + int attr: @attr ref +); + +variants( + unique int id: @variant +); + +#keyset[id, index] +variant_attrs( + int id: @variant ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +variant_discriminants( + int id: @variant ref, + int discriminant: @expr ref +); + +#keyset[id] +variant_field_lists( + int id: @variant ref, + int field_list: @field_list ref +); + +#keyset[id] +variant_names( + int id: @variant ref, + int name: @name ref +); + +#keyset[id] +variant_visibilities( + int id: @variant ref, + int visibility: @visibility ref +); + +wildcard_pats( + unique int id: @wildcard_pat +); + +yeet_exprs( + unique int id: @yeet_expr +); + +#keyset[id, index] +yeet_expr_attrs( + int id: @yeet_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +yeet_expr_exprs( + int id: @yeet_expr ref, + int expr: @expr ref +); + +yield_exprs( + unique int id: @yield_expr +); + +#keyset[id, index] +yield_expr_attrs( + int id: @yield_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +yield_expr_exprs( + int id: @yield_expr ref, + int expr: @expr ref +); + +@adt = + @enum +| @struct +| @union +; + +#keyset[id, index] +adt_derive_macro_expansions( + int id: @adt ref, + int index: int ref, + int derive_macro_expansion: @macro_items ref +); + +asm_exprs( + unique int id: @asm_expr +); + +#keyset[id, index] +asm_expr_asm_pieces( + int id: @asm_expr ref, + int index: int ref, + int asm_piece: @asm_piece ref +); + +#keyset[id, index] +asm_expr_attrs( + int id: @asm_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +asm_expr_templates( + int id: @asm_expr ref, + int index: int ref, + int template: @expr ref +); + +@assoc_item = + @const +| @function +| @macro_call +| @type_alias +; + +block_exprs( + unique int id: @block_expr +); + +#keyset[id, index] +block_expr_attrs( + int id: @block_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +block_expr_is_async( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_const( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_gen( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_move( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_try( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_unsafe( + int id: @block_expr ref +); + +#keyset[id] +block_expr_stmt_lists( + int id: @block_expr ref, + int stmt_list: @stmt_list ref +); + +extern_blocks( + unique int id: @extern_block +); + +#keyset[id] +extern_block_abis( + int id: @extern_block ref, + int abi: @abi ref +); + +#keyset[id, index] +extern_block_attrs( + int id: @extern_block ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +extern_block_extern_item_lists( + int id: @extern_block ref, + int extern_item_list: @extern_item_list ref +); + +#keyset[id] +extern_block_is_unsafe( + int id: @extern_block ref +); + +extern_crates( + unique int id: @extern_crate +); + +#keyset[id, index] +extern_crate_attrs( + int id: @extern_crate ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +extern_crate_identifiers( + int id: @extern_crate ref, + int identifier: @name_ref ref +); + +#keyset[id] +extern_crate_renames( + int id: @extern_crate ref, + int rename: @rename ref +); + +#keyset[id] +extern_crate_visibilities( + int id: @extern_crate ref, + int visibility: @visibility ref +); + +@extern_item = + @function +| @macro_call +| @static +| @type_alias +; + +impls( + unique int id: @impl +); + +#keyset[id] +impl_assoc_item_lists( + int id: @impl ref, + int assoc_item_list: @assoc_item_list ref +); + +#keyset[id, index] +impl_attrs( + int id: @impl ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +impl_generic_param_lists( + int id: @impl ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +impl_is_const( + int id: @impl ref +); + +#keyset[id] +impl_is_default( + int id: @impl ref +); + +#keyset[id] +impl_is_unsafe( + int id: @impl ref +); + +#keyset[id] +impl_self_ties( + int id: @impl ref, + int self_ty: @type_repr ref +); + +#keyset[id] +impl_traits( + int id: @impl ref, + int trait: @type_repr ref +); + +#keyset[id] +impl_visibilities( + int id: @impl ref, + int visibility: @visibility ref +); + +#keyset[id] +impl_where_clauses( + int id: @impl ref, + int where_clause: @where_clause ref +); + +@looping_expr = + @for_expr +| @loop_expr +| @while_expr +; + +#keyset[id] +looping_expr_loop_bodies( + int id: @looping_expr ref, + int loop_body: @block_expr ref +); + +macro_defs( + unique int id: @macro_def +); + +#keyset[id] +macro_def_args( + int id: @macro_def ref, + int args: @token_tree ref +); + +#keyset[id, index] +macro_def_attrs( + int id: @macro_def ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_def_bodies( + int id: @macro_def ref, + int body: @token_tree ref +); + +#keyset[id] +macro_def_names( + int id: @macro_def ref, + int name: @name ref +); + +#keyset[id] +macro_def_visibilities( + int id: @macro_def ref, + int visibility: @visibility ref +); + +macro_rules( + unique int id: @macro_rules +); + +#keyset[id, index] +macro_rules_attrs( + int id: @macro_rules ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_rules_names( + int id: @macro_rules ref, + int name: @name ref +); + +#keyset[id] +macro_rules_token_trees( + int id: @macro_rules ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_rules_visibilities( + int id: @macro_rules ref, + int visibility: @visibility ref +); + +modules( + unique int id: @module +); + +#keyset[id, index] +module_attrs( + int id: @module ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +module_item_lists( + int id: @module ref, + int item_list: @item_list ref +); + +#keyset[id] +module_names( + int id: @module ref, + int name: @name ref +); + +#keyset[id] +module_visibilities( + int id: @module ref, + int visibility: @visibility ref +); + +path_exprs( + unique int id: @path_expr +); + +#keyset[id, index] +path_expr_attrs( + int id: @path_expr ref, + int index: int ref, + int attr: @attr ref +); + +traits( + unique int id: @trait +); + +#keyset[id] +trait_assoc_item_lists( + int id: @trait ref, + int assoc_item_list: @assoc_item_list ref +); + +#keyset[id, index] +trait_attrs( + int id: @trait ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +trait_generic_param_lists( + int id: @trait ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +trait_is_auto( + int id: @trait ref +); + +#keyset[id] +trait_is_unsafe( + int id: @trait ref +); + +#keyset[id] +trait_names( + int id: @trait ref, + int name: @name ref +); + +#keyset[id] +trait_type_bound_lists( + int id: @trait ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +trait_visibilities( + int id: @trait ref, + int visibility: @visibility ref +); + +#keyset[id] +trait_where_clauses( + int id: @trait ref, + int where_clause: @where_clause ref +); + +trait_aliases( + unique int id: @trait_alias +); + +#keyset[id, index] +trait_alias_attrs( + int id: @trait_alias ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +trait_alias_generic_param_lists( + int id: @trait_alias ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +trait_alias_names( + int id: @trait_alias ref, + int name: @name ref +); + +#keyset[id] +trait_alias_type_bound_lists( + int id: @trait_alias ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +trait_alias_visibilities( + int id: @trait_alias ref, + int visibility: @visibility ref +); + +#keyset[id] +trait_alias_where_clauses( + int id: @trait_alias ref, + int where_clause: @where_clause ref +); + +uses( + unique int id: @use +); + +#keyset[id, index] +use_attrs( + int id: @use ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +use_use_trees( + int id: @use ref, + int use_tree: @use_tree ref +); + +#keyset[id] +use_visibilities( + int id: @use ref, + int visibility: @visibility ref +); + +consts( + unique int id: @const +); + +#keyset[id, index] +const_attrs( + int id: @const ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +const_bodies( + int id: @const ref, + int body: @expr ref +); + +#keyset[id] +const_generic_param_lists( + int id: @const ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +const_is_const( + int id: @const ref +); + +#keyset[id] +const_is_default( + int id: @const ref +); + +#keyset[id] +const_names( + int id: @const ref, + int name: @name ref +); + +#keyset[id] +const_type_reprs( + int id: @const ref, + int type_repr: @type_repr ref +); + +#keyset[id] +const_visibilities( + int id: @const ref, + int visibility: @visibility ref +); + +#keyset[id] +const_where_clauses( + int id: @const ref, + int where_clause: @where_clause ref +); + +#keyset[id] +const_has_implementation( + int id: @const ref +); + +enums( + unique int id: @enum +); + +#keyset[id, index] +enum_attrs( + int id: @enum ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +enum_generic_param_lists( + int id: @enum ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +enum_names( + int id: @enum ref, + int name: @name ref +); + +#keyset[id] +enum_variant_lists( + int id: @enum ref, + int variant_list: @variant_list ref +); + +#keyset[id] +enum_visibilities( + int id: @enum ref, + int visibility: @visibility ref +); + +#keyset[id] +enum_where_clauses( + int id: @enum ref, + int where_clause: @where_clause ref +); + +for_exprs( + unique int id: @for_expr +); + +#keyset[id, index] +for_expr_attrs( + int id: @for_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +for_expr_iterables( + int id: @for_expr ref, + int iterable: @expr ref +); + +#keyset[id] +for_expr_pats( + int id: @for_expr ref, + int pat: @pat ref +); + +functions( + unique int id: @function +); + +#keyset[id] +function_abis( + int id: @function ref, + int abi: @abi ref +); + +#keyset[id] +function_function_bodies( + int id: @function ref, + int function_body: @block_expr ref +); + +#keyset[id] +function_generic_param_lists( + int id: @function ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +function_is_async( + int id: @function ref +); + +#keyset[id] +function_is_const( + int id: @function ref +); + +#keyset[id] +function_is_default( + int id: @function ref +); + +#keyset[id] +function_is_gen( + int id: @function ref +); + +#keyset[id] +function_is_unsafe( + int id: @function ref +); + +#keyset[id] +function_names( + int id: @function ref, + int name: @name ref +); + +#keyset[id] +function_ret_types( + int id: @function ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +function_visibilities( + int id: @function ref, + int visibility: @visibility ref +); + +#keyset[id] +function_where_clauses( + int id: @function ref, + int where_clause: @where_clause ref +); + +#keyset[id] +function_has_implementation( + int id: @function ref +); + +loop_exprs( + unique int id: @loop_expr +); + +#keyset[id, index] +loop_expr_attrs( + int id: @loop_expr ref, + int index: int ref, + int attr: @attr ref +); + +macro_calls( + unique int id: @macro_call +); + +#keyset[id, index] +macro_call_attrs( + int id: @macro_call ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_call_paths( + int id: @macro_call ref, + int path: @path ref +); + +#keyset[id] +macro_call_token_trees( + int id: @macro_call ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_call_macro_call_expansions( + int id: @macro_call ref, + int macro_call_expansion: @ast_node ref +); + +statics( + unique int id: @static +); + +#keyset[id, index] +static_attrs( + int id: @static ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +static_bodies( + int id: @static ref, + int body: @expr ref +); + +#keyset[id] +static_is_mut( + int id: @static ref +); + +#keyset[id] +static_is_static( + int id: @static ref +); + +#keyset[id] +static_is_unsafe( + int id: @static ref +); + +#keyset[id] +static_names( + int id: @static ref, + int name: @name ref +); + +#keyset[id] +static_type_reprs( + int id: @static ref, + int type_repr: @type_repr ref +); + +#keyset[id] +static_visibilities( + int id: @static ref, + int visibility: @visibility ref +); + +structs( + unique int id: @struct +); + +#keyset[id, index] +struct_attrs( + int id: @struct ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_field_lists_( + int id: @struct ref, + int field_list: @field_list ref +); + +#keyset[id] +struct_generic_param_lists( + int id: @struct ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +struct_names( + int id: @struct ref, + int name: @name ref +); + +#keyset[id] +struct_visibilities( + int id: @struct ref, + int visibility: @visibility ref +); + +#keyset[id] +struct_where_clauses( + int id: @struct ref, + int where_clause: @where_clause ref +); + +type_aliases( + unique int id: @type_alias +); + +#keyset[id, index] +type_alias_attrs( + int id: @type_alias ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +type_alias_generic_param_lists( + int id: @type_alias ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +type_alias_is_default( + int id: @type_alias ref +); + +#keyset[id] +type_alias_names( + int id: @type_alias ref, + int name: @name ref +); + +#keyset[id] +type_alias_type_reprs( + int id: @type_alias ref, + int type_repr: @type_repr ref +); + +#keyset[id] +type_alias_type_bound_lists( + int id: @type_alias ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +type_alias_visibilities( + int id: @type_alias ref, + int visibility: @visibility ref +); + +#keyset[id] +type_alias_where_clauses( + int id: @type_alias ref, + int where_clause: @where_clause ref +); + +unions( + unique int id: @union +); + +#keyset[id, index] +union_attrs( + int id: @union ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +union_generic_param_lists( + int id: @union ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +union_names( + int id: @union ref, + int name: @name ref +); + +#keyset[id] +union_struct_field_lists( + int id: @union ref, + int struct_field_list: @struct_field_list ref +); + +#keyset[id] +union_visibilities( + int id: @union ref, + int visibility: @visibility ref +); + +#keyset[id] +union_where_clauses( + int id: @union ref, + int where_clause: @where_clause ref +); + +while_exprs( + unique int id: @while_expr +); + +#keyset[id, index] +while_expr_attrs( + int id: @while_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +while_expr_conditions( + int id: @while_expr ref, + int condition: @expr ref +); diff --git a/rust/ql/lib/upgrades/30a0713e5bf69c60d003e4994e5abd1c78a36826/upgrade.properties b/rust/ql/lib/upgrades/30a0713e5bf69c60d003e4994e5abd1c78a36826/upgrade.properties new file mode 100644 index 000000000000..d3abc91cc1b2 --- /dev/null +++ b/rust/ql/lib/upgrades/30a0713e5bf69c60d003e4994e5abd1c78a36826/upgrade.properties @@ -0,0 +1,10 @@ +description: Removed the `@call_expr_base` union type +compatibility: backwards + +call_expr_base_arg_lists.rel: delete +call_expr_base_attrs.rel: delete + +call_expr_arg_lists.rel: run upgrade.ql call_expr_arg_lists +call_expr_attrs.rel: run upgrade.ql call_expr_attrs +method_call_expr_arg_lists.rel: run upgrade.ql method_call_expr_arg_lists +method_call_expr_attrs.rel: run upgrade.ql method_call_expr_attrs diff --git a/rust/ql/lib/upgrades/30a0713e5bf69c60d003e4994e5abd1c78a36826/upgrade.ql b/rust/ql/lib/upgrades/30a0713e5bf69c60d003e4994e5abd1c78a36826/upgrade.ql new file mode 100644 index 000000000000..727b13634efa --- /dev/null +++ b/rust/ql/lib/upgrades/30a0713e5bf69c60d003e4994e5abd1c78a36826/upgrade.ql @@ -0,0 +1,23 @@ +class Element extends @element { + string toString() { none() } +} + +class CallExpr extends Element, @call_expr { } + +class ArgList extends Element, @arg_list { } + +class Attr extends Element, @attr { } + +class MethodCallExpr extends Element, @method_call_expr { } + +query predicate call_expr_arg_lists(CallExpr c, ArgList l) { call_expr_base_arg_lists(c, l) } + +query predicate call_expr_attrs(CallExpr c, int i, Attr a) { call_expr_base_attrs(c, i, a) } + +query predicate method_call_expr_arg_lists(MethodCallExpr c, ArgList l) { + call_expr_base_arg_lists(c, l) +} + +query predicate method_call_expr_attrs(MethodCallExpr c, int i, Attr a) { + call_expr_base_attrs(c, i, a) +} diff --git a/rust/ql/lib/utils/test/InlineFlowTest.qll b/rust/ql/lib/utils/test/InlineFlowTest.qll index 938559620fc0..aad06087d283 100644 --- a/rust/ql/lib/utils/test/InlineFlowTest.qll +++ b/rust/ql/lib/utils/test/InlineFlowTest.qll @@ -26,15 +26,21 @@ private module FlowTestImpl implements InputSig { predicate defaultSource(DataFlow::Node source) { callTargetName(source.asExpr(), "source") } predicate defaultSink(DataFlow::Node sink) { - any(CallExpr call | callTargetName(call, "sink")).getAnArg() = sink.asExpr() + any(CallExpr call | callTargetName(call, "sink")).getASyntacticArgument() = sink.asExpr() } private string getSourceArgString(DataFlow::Node src) { defaultSource(src) and - result = src.asExpr().(CallExpr).getArg(0).toString() + exists(Expr arg | arg = src.asExpr().(Call).getPositionalArgument(0) | + not arg instanceof ArrayListExpr and + result = arg.toString() + or + result = arg.(ArrayListExpr).getExpr(0).toString() + ) or sourceNode(src, _) and - result = src.(Node::FlowSummaryNode).getSourceElement().getCall().getArg(0).toString() and + result = + src.(Node::FlowSummaryNode).getSourceElement().getCall().getPositionalArgument(0).toString() and // Don't use the result if it contains spaces not result.matches("% %") } diff --git a/rust/ql/src/CHANGELOG.md b/rust/ql/src/CHANGELOG.md index 61c5c6518946..f5e2fdb64071 100644 --- a/rust/ql/src/CHANGELOG.md +++ b/rust/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.23 + +No user-facing changes. + ## 0.1.22 No user-facing changes. diff --git a/rust/ql/src/change-notes/2025-12-01-hard-coded-cryptographic-value.md b/rust/ql/src/change-notes/2025-12-01-hard-coded-cryptographic-value.md new file mode 100644 index 000000000000..f211982df625 --- /dev/null +++ b/rust/ql/src/change-notes/2025-12-01-hard-coded-cryptographic-value.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The `rust/hard-coded-cryptographic-value` query has been extended with new heuristic sinks identifying passwords, initialization vectors, nonces and salts. diff --git a/rust/ql/src/change-notes/2025-12-04-access-after-lifetime-ended.md b/rust/ql/src/change-notes/2025-12-04-access-after-lifetime-ended.md new file mode 100644 index 000000000000..1e9200eec8f1 --- /dev/null +++ b/rust/ql/src/change-notes/2025-12-04-access-after-lifetime-ended.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Fixed false positives from the `rust/access-after-lifetime-ended` query, involving calls to trait methods. diff --git a/rust/ql/src/change-notes/2025-12-05-exclude-dereference-sinks.md b/rust/ql/src/change-notes/2025-12-05-exclude-dereference-sinks.md new file mode 100644 index 000000000000..c0ccd758e8d7 --- /dev/null +++ b/rust/ql/src/change-notes/2025-12-05-exclude-dereference-sinks.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Fixed false positives from the `rust/access-invalid-pointer` query, by only considering dereferences of raw pointers as sinks. diff --git a/rust/ql/src/change-notes/2025-12-10-unused-variable.md b/rust/ql/src/change-notes/2025-12-10-unused-variable.md new file mode 100644 index 000000000000..7391255e608c --- /dev/null +++ b/rust/ql/src/change-notes/2025-12-10-unused-variable.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Fixed common false positives for the `rust/unused-variable` and `rust/unused-value` queries. diff --git a/rust/ql/src/change-notes/released/0.1.23.md b/rust/ql/src/change-notes/released/0.1.23.md new file mode 100644 index 000000000000..3e1036afffa1 --- /dev/null +++ b/rust/ql/src/change-notes/released/0.1.23.md @@ -0,0 +1,3 @@ +## 0.1.23 + +No user-facing changes. diff --git a/rust/ql/src/codeql-pack.release.yml b/rust/ql/src/codeql-pack.release.yml index c9f15f8e72c4..484c6d90798c 100644 --- a/rust/ql/src/codeql-pack.release.yml +++ b/rust/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.22 +lastReleaseVersion: 0.1.23 diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index a5240c10c38b..2162add3f355 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.22 +version: 0.1.24-dev groups: - rust - queries diff --git a/rust/ql/src/queries/security/CWE-614/InsecureCookie.ql b/rust/ql/src/queries/security/CWE-614/InsecureCookie.ql index 61996adaf059..4de9cc989488 100644 --- a/rust/ql/src/queries/security/CWE-614/InsecureCookie.ql +++ b/rust/ql/src/queries/security/CWE-614/InsecureCookie.ql @@ -88,5 +88,5 @@ import InsecureCookieFlow::PathGraph from InsecureCookieFlow::PathNode sourceNode, InsecureCookieFlow::PathNode sinkNode where InsecureCookieFlow::flowPath(sourceNode, sinkNode) and - not PartitionedCookieFlow::flow(_, sinkNode.getNode()) + not PartitionedCookieFlow::flowTo(sinkNode.getNode()) select sinkNode.getNode(), sourceNode, sinkNode, "Cookie attribute 'Secure' is not set to true." diff --git a/rust/ql/src/queries/security/CWE-696/BadCtorInitialization.ql b/rust/ql/src/queries/security/CWE-696/BadCtorInitialization.ql index f0f7cdf0d981..7a206856adf8 100644 --- a/rust/ql/src/queries/security/CWE-696/BadCtorInitialization.ql +++ b/rust/ql/src/queries/security/CWE-696/BadCtorInitialization.ql @@ -30,10 +30,8 @@ class CtorAttr extends Attr { /** * A call into the Rust standard library, that is, a sink for this query. */ -class StdCall extends Expr { - StdCall() { - this.(CallExprBase).getStaticTarget().getCanonicalPath().matches(["std::%", " enclosed call edgesFwd(_, pred) and - pred = succ.(CallExprBase).getEnclosingCallable() + pred = succ.(Call).getEnclosingCallable() or // [forwards reachable] call -> target callable edgesFwd(_, pred) and - pred.(CallExprBase).getStaticTarget() = succ + pred.(Call).getStaticTarget() = succ } /** diff --git a/rust/ql/src/queries/security/CWE-798/HardcodedCryptographicValue.ql b/rust/ql/src/queries/security/CWE-798/HardcodedCryptographicValue.ql index f5a43c5419c6..c8e6c9932cb8 100644 --- a/rust/ql/src/queries/security/CWE-798/HardcodedCryptographicValue.ql +++ b/rust/ql/src/queries/security/CWE-798/HardcodedCryptographicValue.ql @@ -39,6 +39,11 @@ module HardcodedCryptographicValueConfig implements DataFlow::ConfigSig { // case like `[0, 0, 0, 0]`) isSource(node) } + + predicate isBarrierOut(DataFlow::Node node) { + // make sinks barriers so that we only report the closest instance + isSink(node) + } } module HardcodedCryptographicValueFlow = TaintTracking::Global; diff --git a/rust/ql/src/queries/security/CWE-825/AccessAfterLifetime.ql b/rust/ql/src/queries/security/CWE-825/AccessAfterLifetime.ql index b9bf80c94749..edc22a86409b 100644 --- a/rust/ql/src/queries/security/CWE-825/AccessAfterLifetime.ql +++ b/rust/ql/src/queries/security/CWE-825/AccessAfterLifetime.ql @@ -26,18 +26,18 @@ module AccessAfterLifetimeConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node node) { node instanceof AccessAfterLifetime::Source and // exclude cases with sources in macros, since these results are difficult to interpret - not node.asExpr().isFromMacroExpansion() + not node.asExpr().isFromMacroExpansion() and + AccessAfterLifetime::sourceValueScope(node, _, _) } predicate isSink(DataFlow::Node node) { node instanceof AccessAfterLifetime::Sink and - // exclude cases with sinks in macros, since these results are difficult to interpret + // Exclude cases with sinks in macros, since these results are difficult to interpret not node.asExpr().isFromMacroExpansion() and - // include only results inside `unsafe` blocks, as other results tend to be false positives - ( - node.asExpr().getEnclosingBlock*().isUnsafe() or - node.asExpr().getEnclosingCallable().(Function).isUnsafe() - ) + // TODO: Remove this condition if it can be done without negatively + // impacting performance. This condition only include nodes with + // corresponding to an expression. This excludes sinks from models-as-data. + exists(node.asExpr()) } predicate isBarrier(DataFlow::Node barrier) { barrier instanceof AccessAfterLifetime::Barrier } diff --git a/rust/ql/src/queries/telemetry/DatabaseQuality.qll b/rust/ql/src/queries/telemetry/DatabaseQuality.qll index 64adf9826dc1..5f50cdd4c4ff 100644 --- a/rust/ql/src/queries/telemetry/DatabaseQuality.qll +++ b/rust/ql/src/queries/telemetry/DatabaseQuality.qll @@ -1,12 +1,14 @@ /** * Provides database quality statistics that are reported by * `rust/telemetry/extractor-information` - * and perhaps warned about by `rust/diagnostics/database-quality`. + * and perhaps warned about by `rust/diagnostic/database-quality`. */ import rust import codeql.util.ReportStats +import codeql.rust.elements.internal.CallExprImpl::Impl as CallExprImpl import codeql.rust.internal.TypeInference as TypeInference +import codeql.rust.internal.Type /** * A file that is included in the quality statistics. @@ -19,25 +21,26 @@ private class RelevantFile extends File { } module CallTargetStats implements StatsSig { - int getNumberOfOk() { - result = - count(CallExprBase c | c.getFile() instanceof RelevantFile and exists(c.getStaticTarget())) + /** + * A call-like expression that is relevant for call target statistics. + * + * Note that this also includes tuple struct instantiations and tuple + * variant instantiations. + */ + private class RelevantInvocationExpr extends InvocationExpr { + RelevantInvocationExpr() { + this.getFile() instanceof RelevantFile and + not this instanceof CallExprImpl::DynamicCallExpr and + not this = any(Operation o | not o.isOverloaded(_, _, _)) and + not this = any(DerefExpr de | TypeInference::inferType(de.getExpr()) instanceof PtrType) + } } - private predicate isLambdaCall(CallExpr call) { - exists(Expr receiver | receiver = call.getFunction() | - // All calls to complex expressions and local variable accesses are lambda calls - receiver instanceof PathExpr implies receiver = any(Variable v).getAnAccess() - ) - } + int getNumberOfOk() { result = count(RelevantInvocationExpr e | exists(e.getResolvedTarget())) } - additional predicate isNotOkCall(CallExprBase c) { - c.getFile() instanceof RelevantFile and - not exists(c.getStaticTarget()) and - not isLambdaCall(c) - } + additional predicate isNotOkCall(RelevantInvocationExpr e) { not exists(e.getResolvedTarget()) } - int getNumberOfNotOk() { result = count(CallExprBase c | isNotOkCall(c)) } + int getNumberOfNotOk() { result = count(RelevantInvocationExpr e | isNotOkCall(e)) } string getOkText() { result = "calls with call target" } diff --git a/rust/ql/src/queries/unusedentities/UnusedVariable.qll b/rust/ql/src/queries/unusedentities/UnusedVariable.qll index c0684636e77b..744af559dd2a 100644 --- a/rust/ql/src/queries/unusedentities/UnusedVariable.qll +++ b/rust/ql/src/queries/unusedentities/UnusedVariable.qll @@ -43,4 +43,10 @@ predicate isAllowableUnused(Variable v) { or // a 'self' variable v.getText() = "self" + or + // a common source of false positives is match arms containing constants + // (typically beginning with a capital letter) that are misrecognized as a + // variable, having not been correctly resolved. + v.getPat().getParentNode() instanceof MatchArm and + v.getText().charAt(0).isUppercase() } diff --git a/rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll index 420051f4ee1e..9826f56795f6 100644 --- a/rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -67,8 +67,9 @@ module ModelGeneratorCommonInput implements string parameterExactAccess(R::ParamBase p) { result = - "Argument[" + any(DataFlowImpl::ParameterPosition pos | p = pos.getParameterIn(_)).toString() + - "]" + "Argument[" + + any(DataFlowImpl::RustDataFlow::ParameterPosition pos | p = pos.getParameterIn(_)) + .toString() + "]" } string parameterApproximateAccess(R::ParamBase p) { result = parameterExactAccess(p) } @@ -78,12 +79,16 @@ module ModelGeneratorCommonInput implements } bindingset[c] - string paramReturnNodeAsApproximateOutput(QualifiedCallable c, DataFlowImpl::ParameterPosition pos) { + string paramReturnNodeAsApproximateOutput( + QualifiedCallable c, DataFlowImpl::RustDataFlow::ParameterPosition pos + ) { result = paramReturnNodeAsExactOutput(c, pos) } bindingset[c] - string paramReturnNodeAsExactOutput(QualifiedCallable c, DataFlowImpl::ParameterPosition pos) { + string paramReturnNodeAsExactOutput( + QualifiedCallable c, DataFlowImpl::RustDataFlow::ParameterPosition pos + ) { result = parameterExactAccess(c.getFunction().getParam(pos.getPosition())) or pos.isSelf() and result = qualifierString() diff --git a/rust/ql/test/extractor-tests/generated/.generated_tests.list b/rust/ql/test/extractor-tests/generated/.generated_tests.list index 879695fb7585..a0f338af4207 100644 --- a/rust/ql/test/extractor-tests/generated/.generated_tests.list +++ b/rust/ql/test/extractor-tests/generated/.generated_tests.list @@ -23,7 +23,7 @@ BinaryExpr/gen_binary_expr.rs 5ea68396dc2e3ff7fcaf5a5201636dd175dd45be36647b6ae0 BlockExpr/gen_block_expr.rs 17b06c726e304e0efcfde8e71afd9c657860312be554366894236125cb08719e 17b06c726e304e0efcfde8e71afd9c657860312be554366894236125cb08719e BoxPat/gen_box_pat.rs 1493e24b732370b577ade38c47db17fa157df19f5390606a67a6040e49b501c0 1493e24b732370b577ade38c47db17fa157df19f5390606a67a6040e49b501c0 BreakExpr/gen_break_expr.rs aacdf9df7fc51d19742b9e813835c0bd0913017e8d62765960e06b27d58b9031 aacdf9df7fc51d19742b9e813835c0bd0913017e8d62765960e06b27d58b9031 -CallExpr/gen_call_expr.rs 013a7c878996aefb25b94b68eebc4f0b1bb74ccd09e91c491980817a383e2401 013a7c878996aefb25b94b68eebc4f0b1bb74ccd09e91c491980817a383e2401 +CallExpr/gen_call_expr.rs 228705e9b0c46d34aa035da3c139a8c3e93fb144d3310592d5bad38ac97382c2 228705e9b0c46d34aa035da3c139a8c3e93fb144d3310592d5bad38ac97382c2 CastExpr/gen_cast_expr.rs c3892211fbae4fed7cb1f25ff1679fd79d2878bf0bf2bd4b7982af23d00129f5 c3892211fbae4fed7cb1f25ff1679fd79d2878bf0bf2bd4b7982af23d00129f5 ClosureExpr/gen_closure_expr.rs bd95408103b7f2084e526e6d35cf3319b2e9d7219aff4c80e4e6691180c549b4 bd95408103b7f2084e526e6d35cf3319b2e9d7219aff4c80e4e6691180c549b4 Comment/gen_comment.rs 1e1f9f43161a79c096c2056e8b7f5346385ab7addcdec68c2d53b383dd3debe6 1e1f9f43161a79c096c2056e8b7f5346385ab7addcdec68c2d53b383dd3debe6 @@ -80,7 +80,7 @@ MatchArmList/gen_match_arm_list.rs 6dcb92591c86771d2aeb762e4274d3e61a7d6c1a42da3 MatchExpr/gen_match_expr.rs 081c5d4c78cb71ccd13fb37a93d7f525267c51b179f44b5a22ca3297897002a0 081c5d4c78cb71ccd13fb37a93d7f525267c51b179f44b5a22ca3297897002a0 MatchGuard/gen_match_guard.rs f0e84a1f608c0361983c516a40216cea149620a36e0aed7ff39b0b7d77a9ab8a f0e84a1f608c0361983c516a40216cea149620a36e0aed7ff39b0b7d77a9ab8a Meta/gen_meta.rs 39172a1f7dd02fa3149e7a1fc1dc1f135aa87c84057ee721cd9b373517042b25 39172a1f7dd02fa3149e7a1fc1dc1f135aa87c84057ee721cd9b373517042b25 -MethodCallExpr/gen_method_call_expr.rs f2b4679eb1ec095981fe6bd656b632c22bf6bd0da133309da3f7ef5bd1ab4b5d f2b4679eb1ec095981fe6bd656b632c22bf6bd0da133309da3f7ef5bd1ab4b5d +MethodCallExpr/gen_method_call_expr.rs f696e63c5302f46dcac7bc2914fe899d029996d5064ffe8252cfa173a06f9dd3 f696e63c5302f46dcac7bc2914fe899d029996d5064ffe8252cfa173a06f9dd3 Module/gen_module.rs 815605a604fea1d9276684f8d6738a4e833eacad57ceeb27e2095fc450264fc1 815605a604fea1d9276684f8d6738a4e833eacad57ceeb27e2095fc450264fc1 Name/gen_name.rs 8a7fe65ee632a47d12eaa313e7248ac9210e5a381e9522499ca68f94c39e72c0 8a7fe65ee632a47d12eaa313e7248ac9210e5a381e9522499ca68f94c39e72c0 NameRef/gen_name_ref.rs c8c922e77a7d62b8272359ccdabbf7e15411f31ca85f15a3afdd94bec7ec64e7 c8c922e77a7d62b8272359ccdabbf7e15411f31ca85f15a3afdd94bec7ec64e7 @@ -129,8 +129,8 @@ Trait/gen_trait.rs bac694993e224f9c6dd86cfb28c54846ae1b3bae45a1e58d3149c88418448 TraitAlias/gen_trait_alias.rs 425d78a7cb87db7737ceaf713c9a62e0411537374d1bc58c5b1fb80cc25732c9 425d78a7cb87db7737ceaf713c9a62e0411537374d1bc58c5b1fb80cc25732c9 TryExpr/gen_try_expr.rs f60198181a423661f4ed1bf6f98d475f40ada190b7b5fc6af97aa5e45ca29a1e f60198181a423661f4ed1bf6f98d475f40ada190b7b5fc6af97aa5e45ca29a1e TupleExpr/gen_tuple_expr.rs 27e56846b3f08c37c8a345169c2a532b2023d231d46a5bdf586bbc6d8fb36a01 27e56846b3f08c37c8a345169c2a532b2023d231d46a5bdf586bbc6d8fb36a01 -TupleField/gen_tuple_field.rs 5d6b4f356af895541f975cc1fd90116fd047fe914c2049d47f61e4a43a8c2af4 5d6b4f356af895541f975cc1fd90116fd047fe914c2049d47f61e4a43a8c2af4 -TupleFieldList/gen_tuple_field_list.rs 42f0af8c391fb9e33fe09b791e0e719cadf5143b58764f8a5d38f8d9054daca7 42f0af8c391fb9e33fe09b791e0e719cadf5143b58764f8a5d38f8d9054daca7 +TupleField/gen_tuple_field.rs 20507753ddb979a33d0e568ae5ebe466f039e7ab7b8f2e6ce15b28b3e4450615 20507753ddb979a33d0e568ae5ebe466f039e7ab7b8f2e6ce15b28b3e4450615 +TupleFieldList/gen_tuple_field_list.rs 4702b92cfca9c4db9b84cb846c5d44569ad3f3e40cd07e9015d144152c684fd0 4702b92cfca9c4db9b84cb846c5d44569ad3f3e40cd07e9015d144152c684fd0 TuplePat/gen_tuple_pat.rs b1b0c9c5ff1b787f380644691c77807655a4f6441fc7431c90ecf78c54c26148 b1b0c9c5ff1b787f380644691c77807655a4f6441fc7431c90ecf78c54c26148 TupleStructPat/gen_tuple_struct_pat.rs 601ca8813272d15b4c8fd7402d0d28a42a62be82865eb5e86b985ad31464ca98 601ca8813272d15b4c8fd7402d0d28a42a62be82865eb5e86b985ad31464ca98 TupleTypeRepr/gen_tuple_type_repr.rs 64873a6a1cd5df6cd10165d7e9fa0399902b6bfbac086ef3a7ce83237b816879 64873a6a1cd5df6cd10165d7e9fa0399902b6bfbac086ef3a7ce83237b816879 diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected index 3aaaed00da2d..16e6f165028a 100644 --- a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected @@ -1,21 +1,16 @@ instances -| gen_call_expr.rs:5:5:5:11 | foo(...) | -| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | -| gen_call_expr.rs:7:5:7:14 | ...(...) | -| gen_call_expr.rs:8:5:8:10 | foo(...) | +| gen_call_expr.rs:8:5:8:11 | foo(...) | +| gen_call_expr.rs:9:5:9:23 | foo::<...>(...) | +| gen_call_expr.rs:10:5:10:14 | ...(...) | +| gen_call_expr.rs:11:5:11:20 | ...::Some(...) | getArgList -| gen_call_expr.rs:5:5:5:11 | foo(...) | gen_call_expr.rs:5:8:5:11 | ArgList | -| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | gen_call_expr.rs:6:20:6:23 | ArgList | -| gen_call_expr.rs:7:5:7:14 | ...(...) | gen_call_expr.rs:7:11:7:14 | ArgList | -| gen_call_expr.rs:8:5:8:10 | foo(...) | gen_call_expr.rs:8:8:8:10 | ArgList | +| gen_call_expr.rs:8:5:8:11 | foo(...) | gen_call_expr.rs:8:8:8:11 | ArgList | +| gen_call_expr.rs:9:5:9:23 | foo::<...>(...) | gen_call_expr.rs:9:20:9:23 | ArgList | +| gen_call_expr.rs:10:5:10:14 | ...(...) | gen_call_expr.rs:10:11:10:14 | ArgList | +| gen_call_expr.rs:11:5:11:20 | ...::Some(...) | gen_call_expr.rs:11:17:11:20 | ArgList | getAttr -getArg -| gen_call_expr.rs:5:5:5:11 | foo(...) | 0 | gen_call_expr.rs:5:9:5:10 | 42 | -| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | 0 | gen_call_expr.rs:6:21:6:22 | 42 | -| gen_call_expr.rs:7:5:7:14 | ...(...) | 0 | gen_call_expr.rs:7:12:7:13 | 42 | -| gen_call_expr.rs:8:5:8:10 | foo(...) | 0 | gen_call_expr.rs:8:9:8:9 | 1 | getFunction -| gen_call_expr.rs:5:5:5:11 | foo(...) | gen_call_expr.rs:5:5:5:7 | foo | -| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | gen_call_expr.rs:6:5:6:19 | foo::<...> | -| gen_call_expr.rs:7:5:7:14 | ...(...) | gen_call_expr.rs:7:5:7:10 | foo[0] | -| gen_call_expr.rs:8:5:8:10 | foo(...) | gen_call_expr.rs:8:5:8:7 | foo | +| gen_call_expr.rs:8:5:8:11 | foo(...) | gen_call_expr.rs:8:5:8:7 | foo | +| gen_call_expr.rs:9:5:9:23 | foo::<...>(...) | gen_call_expr.rs:9:5:9:19 | foo::<...> | +| gen_call_expr.rs:10:5:10:14 | ...(...) | gen_call_expr.rs:10:5:10:10 | foo[0] | +| gen_call_expr.rs:11:5:11:20 | ...::Some(...) | gen_call_expr.rs:11:5:11:16 | ...::Some | diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.ql b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.ql index e16ab837325b..4d3b26f2f788 100644 --- a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.ql +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.ql @@ -12,10 +12,6 @@ query predicate getAttr(CallExpr x, int index, Attr getAttr) { toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) } -query predicate getArg(CallExpr x, int index, Expr getArg) { - toBeTested(x) and not x.isUnknown() and getArg = x.getArg(index) -} - query predicate getFunction(CallExpr x, Expr getFunction) { toBeTested(x) and not x.isUnknown() and getFunction = x.getFunction() } diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/gen_call_expr.rs b/rust/ql/test/extractor-tests/generated/CallExpr/gen_call_expr.rs index b2436cc00429..3ab2646ae377 100644 --- a/rust/ql/test/extractor-tests/generated/CallExpr/gen_call_expr.rs +++ b/rust/ql/test/extractor-tests/generated/CallExpr/gen_call_expr.rs @@ -1,9 +1,12 @@ // generated by codegen, do not edit fn test_call_expr() -> () { - // A function call expression. For example: + // NOTE: Consider using `Call` instead, as that excludes call expressions that are + // instantiations of tuple structs and tuple variants. + // + // A call expression. For example: foo(42); foo::(42); foo[0](42); - foo(1) = 4; + Option::Some(42); // tuple variant instantiation } diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.expected index ba510853f06b..e35d59d6588d 100644 --- a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.expected +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.expected @@ -9,4 +9,4 @@ getBody getName | gen_macro_def.rs:4:5:9:5 | MacroDef | gen_macro_def.rs:7:15:7:24 | vec_of_two | getVisibility -| gen_macro_def.rs:4:5:9:5 | MacroDef | gen_macro_def.rs:7:5:7:7 | Visibility | +| gen_macro_def.rs:4:5:9:5 | MacroDef | gen_macro_def.rs:7:5:7:7 | pub | diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected index 0eedcc70b5d2..34d44431de2d 100644 --- a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected @@ -1,18 +1,15 @@ instances -| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | -| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | +| gen_method_call_expr.rs:9:5:9:13 | x.foo(...) | +| gen_method_call_expr.rs:10:5:10:25 | x.foo(...) | getArgList -| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | gen_method_call_expr.rs:5:10:5:13 | ArgList | -| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | gen_method_call_expr.rs:6:22:6:25 | ArgList | +| gen_method_call_expr.rs:9:5:9:13 | x.foo(...) | gen_method_call_expr.rs:9:10:9:13 | ArgList | +| gen_method_call_expr.rs:10:5:10:25 | x.foo(...) | gen_method_call_expr.rs:10:22:10:25 | ArgList | getAttr -getArg -| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | 0 | gen_method_call_expr.rs:5:11:5:12 | 42 | -| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | 0 | gen_method_call_expr.rs:6:23:6:24 | 42 | getGenericArgList -| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | gen_method_call_expr.rs:6:10:6:21 | <...> | +| gen_method_call_expr.rs:10:5:10:25 | x.foo(...) | gen_method_call_expr.rs:10:10:10:21 | <...> | getIdentifier -| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | gen_method_call_expr.rs:5:7:5:9 | foo | -| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | gen_method_call_expr.rs:6:7:6:9 | foo | +| gen_method_call_expr.rs:9:5:9:13 | x.foo(...) | gen_method_call_expr.rs:9:7:9:9 | foo | +| gen_method_call_expr.rs:10:5:10:25 | x.foo(...) | gen_method_call_expr.rs:10:7:10:9 | foo | getReceiver -| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | gen_method_call_expr.rs:5:5:5:5 | x | -| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | gen_method_call_expr.rs:6:5:6:5 | x | +| gen_method_call_expr.rs:9:5:9:13 | x.foo(...) | gen_method_call_expr.rs:9:5:9:5 | x | +| gen_method_call_expr.rs:10:5:10:25 | x.foo(...) | gen_method_call_expr.rs:10:5:10:5 | x | diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql index d1b6d5a13046..8ecc14ee820f 100644 --- a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql @@ -12,10 +12,6 @@ query predicate getAttr(MethodCallExpr x, int index, Attr getAttr) { toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) } -query predicate getArg(MethodCallExpr x, int index, Expr getArg) { - toBeTested(x) and not x.isUnknown() and getArg = x.getArg(index) -} - query predicate getGenericArgList(MethodCallExpr x, GenericArgList getGenericArgList) { toBeTested(x) and not x.isUnknown() and getGenericArgList = x.getGenericArgList() } diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/gen_method_call_expr.rs b/rust/ql/test/extractor-tests/generated/MethodCallExpr/gen_method_call_expr.rs index f8bf728d2570..5b4f22e8efc8 100644 --- a/rust/ql/test/extractor-tests/generated/MethodCallExpr/gen_method_call_expr.rs +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/gen_method_call_expr.rs @@ -1,6 +1,10 @@ // generated by codegen, do not edit fn test_method_call_expr() -> () { + // NOTE: Consider using `MethodCall` instead, as that also includes calls to methods using + // call syntax (such as `Foo::method(x)`), operation syntax (such as `x + y`), and + // indexing syntax (such as `x[y]`). + // // A method call expression. For example: x.foo(42); x.foo::(42); diff --git a/rust/ql/test/extractor-tests/generated/Module/Module.expected b/rust/ql/test/extractor-tests/generated/Module/Module.expected index d0259df5ee81..a22ef831d9ff 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module.expected +++ b/rust/ql/test/extractor-tests/generated/Module/Module.expected @@ -11,4 +11,4 @@ getName | gen_module.rs:5:1:7:1 | mod bar | gen_module.rs:5:5:5:7 | bar | | lib.rs:1:1:1:19 | mod gen_module | lib.rs:1:9:1:18 | gen_module | getVisibility -| lib.rs:1:1:1:19 | mod gen_module | lib.rs:1:1:1:3 | Visibility | +| lib.rs:1:1:1:19 | mod gen_module | lib.rs:1:1:1:3 | pub | diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField.expected b/rust/ql/test/extractor-tests/generated/StructField/StructField.expected index 3b5d0d7b71ca..285d3530c66f 100644 --- a/rust/ql/test/extractor-tests/generated/StructField/StructField.expected +++ b/rust/ql/test/extractor-tests/generated/StructField/StructField.expected @@ -1,9 +1,9 @@ instances -| gen_struct_field.rs:7:16:7:21 | StructField | isUnsafe: | no | +| gen_struct_field.rs:7:16:7:21 | x: i32 | isUnsafe: | no | getAttr getDefault getName -| gen_struct_field.rs:7:16:7:21 | StructField | gen_struct_field.rs:7:16:7:16 | x | +| gen_struct_field.rs:7:16:7:21 | x: i32 | gen_struct_field.rs:7:16:7:16 | x | getTypeRepr -| gen_struct_field.rs:7:16:7:21 | StructField | gen_struct_field.rs:7:19:7:21 | i32 | +| gen_struct_field.rs:7:16:7:21 | x: i32 | gen_struct_field.rs:7:19:7:21 | i32 | getVisibility diff --git a/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.expected b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.expected index 847bfd3c9371..3e9fe67dd29d 100644 --- a/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.expected +++ b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.expected @@ -1,5 +1,5 @@ instances | gen_struct_field_list.rs:7:14:7:31 | StructFieldList | getField -| gen_struct_field_list.rs:7:14:7:31 | StructFieldList | 0 | gen_struct_field_list.rs:7:16:7:21 | StructField | -| gen_struct_field_list.rs:7:14:7:31 | StructFieldList | 1 | gen_struct_field_list.rs:7:24:7:29 | StructField | +| gen_struct_field_list.rs:7:14:7:31 | StructFieldList | 0 | gen_struct_field_list.rs:7:16:7:21 | x: i32 | +| gen_struct_field_list.rs:7:14:7:31 | StructFieldList | 1 | gen_struct_field_list.rs:7:24:7:29 | y: i32 | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait.expected index e0f91737d5e9..9e8d41cb5ff5 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait.expected +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait.expected @@ -13,6 +13,6 @@ getName | gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:11:10:13 | Foo | getTypeBoundList getVisibility -| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:1:10:3 | Visibility | +| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:1:10:3 | pub | getWhereClause | gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:32:10:54 | WhereClause | diff --git a/rust/ql/test/extractor-tests/generated/TupleField/gen_tuple_field.rs b/rust/ql/test/extractor-tests/generated/TupleField/gen_tuple_field.rs index 96fe3582e402..e7a28dd59398 100644 --- a/rust/ql/test/extractor-tests/generated/TupleField/gen_tuple_field.rs +++ b/rust/ql/test/extractor-tests/generated/TupleField/gen_tuple_field.rs @@ -1,7 +1,7 @@ // generated by codegen, do not edit fn test_tuple_field() -> () { - // A field in a tuple struct or tuple enum variant. + // A field in a tuple struct or tuple variant. // // For example: struct S(i32, String); diff --git a/rust/ql/test/extractor-tests/generated/TupleFieldList/gen_tuple_field_list.rs b/rust/ql/test/extractor-tests/generated/TupleFieldList/gen_tuple_field_list.rs index 26f955c4add1..d010d73c207d 100644 --- a/rust/ql/test/extractor-tests/generated/TupleFieldList/gen_tuple_field_list.rs +++ b/rust/ql/test/extractor-tests/generated/TupleFieldList/gen_tuple_field_list.rs @@ -1,7 +1,7 @@ // generated by codegen, do not edit fn test_tuple_field_list() -> () { - // A list of fields in a tuple struct or tuple enum variant. + // A list of fields in a tuple struct or tuple variant. // // For example: struct S(i32, String); diff --git a/rust/ql/test/extractor-tests/generated/Visibility/Visibility.expected b/rust/ql/test/extractor-tests/generated/Visibility/Visibility.expected index 4bc7fefe4c13..2d032d6eee46 100644 --- a/rust/ql/test/extractor-tests/generated/Visibility/Visibility.expected +++ b/rust/ql/test/extractor-tests/generated/Visibility/Visibility.expected @@ -1,4 +1,4 @@ instances -| gen_visibility.rs:7:7:7:9 | Visibility | -| lib.rs:1:1:1:3 | Visibility | +| gen_visibility.rs:7:7:7:9 | pub | +| lib.rs:1:1:1:3 | pub | getPath diff --git a/rust/ql/test/extractor-tests/macro-expansion/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/extractor-tests/macro-expansion/CONSISTENCY/PathResolutionConsistency.expected index 141cfc355b9f..f5a5b9b7b194 100644 --- a/rust/ql/test/extractor-tests/macro-expansion/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/extractor-tests/macro-expansion/CONSISTENCY/PathResolutionConsistency.expected @@ -1,2 +1,2 @@ -multipleCallTargets +multipleResolvedTargets | proc_macro.rs:44:27:44:30 | ...::to_tokens(...) | diff --git a/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected b/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected index 5174e0bd6186..e50dc4d5274e 100644 --- a/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected +++ b/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected @@ -146,10 +146,10 @@ lib.rs: # 1| [SourceFile] SourceFile # 1| getItem(0): [Module] mod call # 1| getName(): [Name] call -# 1| getVisibility(): [Visibility] Visibility +# 1| getVisibility(): [Visibility] pub # 2| getItem(1): [Module] mod macro_expansion # 2| getName(): [Name] macro_expansion -# 2| getVisibility(): [Visibility] Visibility +# 2| getVisibility(): [Visibility] pub macro_expansion.rs: # 1| [SourceFile] SourceFile # 1| getItem(0): [Use] use proc_macro::{...} @@ -223,7 +223,7 @@ macro_expansion.rs: # 11| getSegment(): [PathSegment] inner_1 # 11| getIdentifier(): [NameRef] inner_1 # 4| getName(): [Name] foo -# 4| getVisibility(): [Visibility] Visibility +# 4| getVisibility(): [Visibility] pub # 4| getItem(1): [Function] fn foo_new # 4| getParamList(): [ParamList] ParamList # 4| getFunctionBody(): [BlockExpr] { ... } @@ -271,7 +271,7 @@ macro_expansion.rs: # 11| getSegment(): [PathSegment] inner_1 # 11| getIdentifier(): [NameRef] inner_1 # 4| getName(): [Name] foo_new -# 4| getVisibility(): [Visibility] Visibility +# 4| getVisibility(): [Visibility] pub # 3| getAttr(0): [Attr] Attr # 3| getMeta(): [Meta] Meta # 3| getPath(): [Path] add_one @@ -286,13 +286,13 @@ macro_expansion.rs: # 16| getFunctionBody(): [BlockExpr] { ... } # 16| getStmtList(): [StmtList] StmtList # 16| getName(): [Name] bar_0 -# 16| getVisibility(): [Visibility] Visibility +# 16| getVisibility(): [Visibility] pub # 16| getItem(1): [Function] fn bar_0_new # 16| getParamList(): [ParamList] ParamList # 16| getFunctionBody(): [BlockExpr] { ... } # 16| getStmtList(): [StmtList] StmtList # 16| getName(): [Name] bar_0_new -# 16| getVisibility(): [Visibility] Visibility +# 16| getVisibility(): [Visibility] pub # 15| getAttr(0): [Attr] Attr # 15| getMeta(): [Meta] Meta # 15| getPath(): [Path] add_one @@ -305,13 +305,13 @@ macro_expansion.rs: # 16| getFunctionBody(): [BlockExpr] { ... } # 16| getStmtList(): [StmtList] StmtList # 16| getName(): [Name] bar_1 -# 16| getVisibility(): [Visibility] Visibility +# 16| getVisibility(): [Visibility] pub # 16| getItem(1): [Function] fn bar_1_new # 16| getParamList(): [ParamList] ParamList # 16| getFunctionBody(): [BlockExpr] { ... } # 16| getStmtList(): [StmtList] StmtList # 16| getName(): [Name] bar_1_new -# 16| getVisibility(): [Visibility] Visibility +# 16| getVisibility(): [Visibility] pub # 15| getAttr(0): [Attr] Attr # 15| getMeta(): [Meta] Meta # 15| getPath(): [Path] add_one @@ -340,7 +340,7 @@ macro_expansion.rs: # 22| getTokenTree(): [TokenTree] TokenTree # 28| getItem(5): [Struct] struct S # 28| getName(): [Name] S -# 28| getVisibility(): [Visibility] Visibility +# 28| getVisibility(): [Visibility] pub # 30| getItem(6): [Impl] impl S { ... } # 30| getAssocItemList(): [AssocItemList] AssocItemList # 31| getAssocItem(0): [Function] (item with attribute macro expansion) @@ -392,7 +392,7 @@ macro_expansion.rs: # 31| getSegment(): [PathSegment] _print # 31| getIdentifier(): [NameRef] _print # 32| getName(): [Name] bzz_0 -# 32| getVisibility(): [Visibility] Visibility +# 32| getVisibility(): [Visibility] pub # 32| getItem(1): [Function] fn bzz_1 # 32| getParamList(): [ParamList] ParamList # 32| getFunctionBody(): [BlockExpr] { ... } @@ -440,7 +440,7 @@ macro_expansion.rs: # 31| getSegment(): [PathSegment] _print # 31| getIdentifier(): [NameRef] _print # 32| getName(): [Name] bzz_1 -# 32| getVisibility(): [Visibility] Visibility +# 32| getVisibility(): [Visibility] pub # 32| getItem(2): [Function] fn bzz_2 # 32| getParamList(): [ParamList] ParamList # 32| getFunctionBody(): [BlockExpr] { ... } @@ -488,7 +488,7 @@ macro_expansion.rs: # 31| getSegment(): [PathSegment] _print # 31| getIdentifier(): [NameRef] _print # 32| getName(): [Name] bzz_2 -# 32| getVisibility(): [Visibility] Visibility +# 32| getVisibility(): [Visibility] pub # 31| getAttr(0): [Attr] Attr # 31| getMeta(): [Meta] Meta # 31| getPath(): [Path] repeat @@ -515,7 +515,7 @@ macro_expansion.rs: # 44| getFunctionBody(): [BlockExpr] { ... } # 44| getStmtList(): [StmtList] StmtList # 44| getName(): [Name] x -# 44| getVisibility(): [Visibility] Visibility +# 44| getVisibility(): [Visibility] pub # 43| getSelfTy(): [PathTypeRepr] S # 43| getPath(): [Path] S # 43| getSegment(): [PathSegment] S @@ -700,7 +700,7 @@ macro_expansion.rs: # 76| getIdentifier(): [NameRef] i32 # 78| getItem(16): [Struct] struct MyStruct # 78| getFieldList(): [StructFieldList] StructFieldList -# 79| getField(0): [StructField] StructField +# 79| getField(0): [StructField] field: ... # 79| getName(): [Name] field # 79| getTypeRepr(): [MacroTypeRepr] MacroTypeRepr # 79| getMacroCall(): [MacroCall] my_int!... @@ -809,7 +809,7 @@ macro_expansion.rs: # 83| getIdentifier(): [NameRef] derive # 83| getTokenTree(): [TokenTree] TokenTree # 84| getFieldList(): [StructFieldList] StructFieldList -# 85| getField(0): [StructField] StructField +# 85| getField(0): [StructField] field: usize # 85| getName(): [Name] field # 85| getTypeRepr(): [PathTypeRepr] usize # 85| getPath(): [Path] usize @@ -990,13 +990,13 @@ macro_expansion.rs: # 98| getTokenTree(): [TokenTree] TokenTree # 99| getName(): [Name] MyDeriveUnion # 99| getStructFieldList(): [StructFieldList] StructFieldList -# 100| getField(0): [StructField] StructField +# 100| getField(0): [StructField] field1: usize # 100| getName(): [Name] field1 # 100| getTypeRepr(): [PathTypeRepr] usize # 100| getPath(): [Path] usize # 100| getSegment(): [PathSegment] usize # 100| getIdentifier(): [NameRef] usize -# 101| getField(1): [StructField] StructField +# 101| getField(1): [StructField] field2: f64 # 101| getName(): [Name] field2 # 101| getTypeRepr(): [PathTypeRepr] f64 # 101| getPath(): [Path] f64 @@ -1770,7 +1770,7 @@ proc_macro.rs: # 16| getIdentifier(): [NameRef] items # 15| getMatchArmList(): [MatchArmList] MatchArmList # 15| getArm(0): [MatchArm] ... => ... -# 15| getExpr(): [CallExpr] ...::RepInterp(...) +# 15| getExpr(): [TupleStructExpr] ...::RepInterp(...) # 15| getArgList(): [ArgList] ArgList # 15| getArg(0): [VariableAccess] _x # 15| getPath(): [Path] _x @@ -2003,7 +2003,7 @@ proc_macro.rs: # 5| getPath(): [Path] TokenStream # 5| getSegment(): [PathSegment] TokenStream # 5| getIdentifier(): [NameRef] TokenStream -# 5| getVisibility(): [Visibility] Visibility +# 5| getVisibility(): [Visibility] pub # 20| getItem(3): [Function] fn add_one # 21| getParamList(): [ParamList] ParamList # 21| getParam(0): [Param] ...: TokenStream @@ -2434,7 +2434,7 @@ proc_macro.rs: # 21| getPath(): [Path] TokenStream # 21| getSegment(): [PathSegment] TokenStream # 21| getIdentifier(): [NameRef] TokenStream -# 21| getVisibility(): [Visibility] Visibility +# 21| getVisibility(): [Visibility] pub # 31| getItem(4): [Function] fn erase # 32| getParamList(): [ParamList] ParamList # 32| getParam(0): [Param] ...: TokenStream @@ -2473,7 +2473,7 @@ proc_macro.rs: # 32| getPath(): [Path] TokenStream # 32| getSegment(): [PathSegment] TokenStream # 32| getIdentifier(): [NameRef] TokenStream -# 32| getVisibility(): [Visibility] Visibility +# 32| getVisibility(): [Visibility] pub # 36| getItem(5): [Function] fn my_trait_derive # 37| getParamList(): [ParamList] ParamList # 37| getParam(0): [Param] ...: TokenStream @@ -3808,4 +3808,4 @@ proc_macro.rs: # 37| getPath(): [Path] TokenStream # 37| getSegment(): [PathSegment] TokenStream # 37| getIdentifier(): [NameRef] TokenStream -# 37| getVisibility(): [Visibility] Visibility +# 37| getVisibility(): [Visibility] pub diff --git a/rust/ql/test/extractor-tests/macro-in-library/PrintAst.expected b/rust/ql/test/extractor-tests/macro-in-library/PrintAst.expected index 30dbc24103b9..aa0fc42f81d8 100644 --- a/rust/ql/test/extractor-tests/macro-in-library/PrintAst.expected +++ b/rust/ql/test/extractor-tests/macro-in-library/PrintAst.expected @@ -2,7 +2,7 @@ lib.rs: # 1| [SourceFile] SourceFile # 1| getItem(0): [Module] mod macro_in_library # 1| getName(): [Name] macro_in_library -# 1| getVisibility(): [Visibility] Visibility +# 1| getVisibility(): [Visibility] pub macro_in_library.rs: # 1| [SourceFile] SourceFile # 1| getItem(0): [MacroCall] (item with attribute macro expansion) @@ -10,15 +10,15 @@ macro_in_library.rs: # 2| getItem(0): [Function] fn foo # 2| getParamList(): [ParamList] ParamList # 2| getName(): [Name] foo -# 2| getVisibility(): [Visibility] Visibility +# 2| getVisibility(): [Visibility] pub # 2| getItem(1): [Function] fn foo_new # 2| getParamList(): [ParamList] ParamList # 2| getName(): [Name] foo_new -# 2| getVisibility(): [Visibility] Visibility +# 2| getVisibility(): [Visibility] pub # 4| getItem(1): [Function] fn bar # 4| getParamList(): [ParamList] ParamList # 4| getName(): [Name] bar -# 4| getVisibility(): [Visibility] Visibility +# 4| getVisibility(): [Visibility] pub proc_macro.rs: # 1| [SourceFile] SourceFile # 1| getItem(0): [Use] use ...::TokenStream @@ -60,4 +60,4 @@ proc_macro.rs: # 5| getPath(): [Path] TokenStream # 5| getSegment(): [PathSegment] TokenStream # 5| getIdentifier(): [NameRef] TokenStream -# 5| getVisibility(): [Visibility] Visibility +# 5| getVisibility(): [Visibility] pub diff --git a/rust/ql/test/extractor-tests/utf8/ast.expected b/rust/ql/test/extractor-tests/utf8/ast.expected index 7fe2a9bd4ee7..a5f91da61589 100644 --- a/rust/ql/test/extractor-tests/utf8/ast.expected +++ b/rust/ql/test/extractor-tests/utf8/ast.expected @@ -1,4 +1,4 @@ -| lib.rs:1:1:1:3 | Visibility | +| lib.rs:1:1:1:3 | pub | | lib.rs:1:1:1:25 | SourceFile | | lib.rs:1:1:1:25 | mod utf8_identifiers | | lib.rs:1:9:1:24 | utf8_identifiers | @@ -17,12 +17,12 @@ | utf8_identifiers.rs:6:8:6:8 | X | | utf8_identifiers.rs:6:10:8:1 | StructFieldList | | utf8_identifiers.rs:7:5:7:5 | \u03b4 | -| utf8_identifiers.rs:7:5:7:13 | StructField | +| utf8_identifiers.rs:7:5:7:13 | \u03b4: usize | | utf8_identifiers.rs:7:9:7:13 | usize | | utf8_identifiers.rs:7:9:7:13 | usize | | utf8_identifiers.rs:7:9:7:13 | usize | | utf8_identifiers.rs:7:9:7:13 | usize | -| utf8_identifiers.rs:10:1:10:3 | Visibility | +| utf8_identifiers.rs:10:1:10:3 | pub | | utf8_identifiers.rs:10:1:12:1 | fn main | | utf8_identifiers.rs:10:8:10:11 | main | | utf8_identifiers.rs:10:12:10:13 | ParamList | diff --git a/rust/ql/test/library-tests/controlflow/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/controlflow/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..97a93c16a2d7 --- /dev/null +++ b/rust/ql/test/library-tests/controlflow/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,4 @@ +multipleResolvedTargets +| test.rs:419:34:419:35 | * ... | +| test.rs:420:26:420:27 | * ... | +| test.rs:597:9:597:10 | * ... | diff --git a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.ql b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.ql index e399ea0e5d71..5dcb7ee70a9d 100644 --- a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.ql +++ b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.ql @@ -5,8 +5,8 @@ import rust import utils.test.InlineFlowTest import DefaultFlowTest -import ValueFlow::PathGraph +import TaintFlow::PathGraph -from ValueFlow::PathNode source, ValueFlow::PathNode sink -where ValueFlow::flowPath(source, sink) +from TaintFlow::PathNode source, TaintFlow::PathNode sink +where TaintFlow::flowPath(source, sink) select sink, source, sink, "$@", source, source.toString() diff --git a/rust/ql/test/library-tests/dataflow/collections/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/collections/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..9ff99af9fac7 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/collections/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,8 @@ +multipleResolvedTargets +| main.rs:18:14:18:26 | * ... | +| main.rs:22:14:22:26 | * ... | +| main.rs:42:9:42:25 | * ... | +| main.rs:85:15:85:25 | * ... | +| main.rs:94:9:94:23 | * ... | +| main.rs:104:9:104:23 | * ... | +| main.rs:110:10:110:24 | * ... | diff --git a/rust/ql/test/library-tests/dataflow/collections/Cargo.lock b/rust/ql/test/library-tests/dataflow/collections/Cargo.lock new file mode 100644 index 000000000000..b9856cfaf77d --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/collections/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "test" +version = "0.0.1" diff --git a/rust/ql/test/library-tests/dataflow/collections/inline-flow.expected b/rust/ql/test/library-tests/dataflow/collections/inline-flow.expected new file mode 100644 index 000000000000..fdd3a25a347a --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/collections/inline-flow.expected @@ -0,0 +1,254 @@ +models +| 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value | +| 2 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 3 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint | +| 4 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +edges +| main.rs:15:13:15:13 | s | main.rs:16:20:16:20 | s | provenance | | +| main.rs:15:17:15:25 | source(...) | main.rs:15:13:15:13 | s | provenance | | +| main.rs:16:13:16:15 | arr [element] | main.rs:17:14:17:16 | arr [element] | provenance | | +| main.rs:16:13:16:15 | arr [element] | main.rs:18:15:18:17 | arr [element] | provenance | | +| main.rs:16:19:16:24 | [s; 5] [element] | main.rs:16:13:16:15 | arr [element] | provenance | | +| main.rs:16:20:16:20 | s | main.rs:16:19:16:24 | [s; 5] [element] | provenance | | +| main.rs:17:14:17:16 | arr [element] | main.rs:17:14:17:19 | arr[2] | provenance | MaD:4 | +| main.rs:18:15:18:17 | arr [element] | main.rs:18:15:18:26 | arr.index(...) [&ref] | provenance | MaD:4 | +| main.rs:18:15:18:26 | arr.index(...) [&ref] | main.rs:18:14:18:26 | * ... | provenance | MaD:1 | +| main.rs:20:13:20:19 | mut arr | main.rs:21:14:21:16 | arr | provenance | | +| main.rs:20:13:20:19 | mut arr | main.rs:22:15:22:17 | arr | provenance | | +| main.rs:20:23:20:33 | source(...) | main.rs:20:13:20:19 | mut arr | provenance | | +| main.rs:21:14:21:16 | arr | main.rs:21:14:21:19 | arr[0] | provenance | MaD:4 | +| main.rs:22:15:22:17 | arr | main.rs:22:15:22:26 | arr.index(...) [&ref] | provenance | MaD:4 | +| main.rs:22:15:22:26 | arr.index(...) [&ref] | main.rs:22:14:22:26 | * ... | provenance | MaD:1 | +| main.rs:24:13:24:13 | s | main.rs:25:20:25:20 | s | provenance | | +| main.rs:24:17:24:25 | source(...) | main.rs:24:13:24:13 | s | provenance | | +| main.rs:25:13:25:15 | arr [element] | main.rs:26:18:26:20 | arr [element] | provenance | | +| main.rs:25:19:25:21 | [...] [element] | main.rs:25:13:25:15 | arr [element] | provenance | | +| main.rs:25:20:25:20 | s | main.rs:25:19:25:21 | [...] [element] | provenance | | +| main.rs:26:13:26:13 | x | main.rs:27:18:27:18 | x | provenance | | +| main.rs:26:18:26:20 | arr [element] | main.rs:26:13:26:13 | x | provenance | | +| main.rs:30:13:30:15 | arr | main.rs:32:18:32:18 | x | provenance | | +| main.rs:30:19:30:29 | source(...) | main.rs:30:13:30:15 | arr | provenance | | +| main.rs:37:9:37:11 | [post] arr [element] | main.rs:38:14:38:16 | arr [element] | provenance | | +| main.rs:37:18:37:26 | source(...) | main.rs:37:9:37:11 | [post] arr [element] | provenance | | +| main.rs:38:14:38:16 | arr [element] | main.rs:38:14:38:19 | arr[0] | provenance | MaD:4 | +| main.rs:46:9:46:14 | [post] arr[0] | main.rs:47:14:47:16 | arr | provenance | | +| main.rs:46:19:46:27 | source(...) | main.rs:46:9:46:14 | [post] arr[0] | provenance | MaD:2 | +| main.rs:46:19:46:27 | source(...) | main.rs:46:9:46:14 | [post] arr[0] | provenance | MaD:3 | +| main.rs:47:14:47:16 | arr | main.rs:47:14:47:19 | arr[0] | provenance | MaD:4 | +| main.rs:63:18:63:22 | SelfParam [&ref, S] | main.rs:63:56:65:9 | { ... } [&ref, S] | provenance | | +| main.rs:76:34:76:44 | ...: Self [S] | main.rs:77:23:77:27 | other [S] | provenance | | +| main.rs:77:13:77:16 | [post] self [&ref, S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, S] | provenance | | +| main.rs:77:13:77:16 | [post] self [&ref, tuple.0] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, tuple.0] | provenance | | +| main.rs:77:13:77:18 | [post] self.0 | main.rs:77:13:77:16 | [post] self [&ref, S] | provenance | | +| main.rs:77:13:77:18 | [post] self.0 | main.rs:77:13:77:16 | [post] self [&ref, tuple.0] | provenance | | +| main.rs:77:23:77:27 | other [S] | main.rs:77:23:77:29 | other.0 | provenance | | +| main.rs:77:23:77:29 | other.0 | main.rs:77:13:77:18 | [post] self.0 | provenance | MaD:2 | +| main.rs:77:23:77:29 | other.0 | main.rs:77:13:77:18 | [post] self.0 | provenance | MaD:3 | +| main.rs:82:13:82:13 | s | main.rs:83:19:83:19 | s | provenance | | +| main.rs:82:17:82:25 | source(...) | main.rs:82:13:82:13 | s | provenance | | +| main.rs:83:13:83:13 | s [S] | main.rs:84:14:84:14 | s [S] | provenance | | +| main.rs:83:13:83:13 | s [S] | main.rs:85:16:85:16 | s [S] | provenance | | +| main.rs:83:17:83:20 | S(...) [S] | main.rs:83:13:83:13 | s [S] | provenance | | +| main.rs:83:19:83:19 | s | main.rs:83:17:83:20 | S(...) [S] | provenance | | +| main.rs:84:14:84:14 | s [S] | main.rs:63:18:63:22 | SelfParam [&ref, S] | provenance | | +| main.rs:84:14:84:14 | s [S] | main.rs:84:14:84:17 | s[0] [S] | provenance | | +| main.rs:84:14:84:17 | s[0] [S] | main.rs:84:14:84:19 | ... .0 | provenance | | +| main.rs:85:15:85:25 | * ... [S] | main.rs:85:14:85:28 | ... .0 | provenance | | +| main.rs:85:16:85:16 | s [S] | main.rs:63:18:63:22 | SelfParam [&ref, S] | provenance | | +| main.rs:85:16:85:16 | s [S] | main.rs:85:16:85:25 | s.index(...) [&ref, S] | provenance | | +| main.rs:85:16:85:25 | s.index(...) [&ref, S] | main.rs:85:15:85:25 | * ... [S] | provenance | MaD:1 | +| main.rs:89:9:89:9 | [post] s [S] | main.rs:90:14:90:14 | s [S] | provenance | | +| main.rs:89:16:89:27 | S(...) [S] | main.rs:89:9:89:9 | [post] s [S] | provenance | | +| main.rs:89:18:89:26 | source(...) | main.rs:89:16:89:27 | S(...) [S] | provenance | | +| main.rs:90:14:90:14 | s [S] | main.rs:90:14:90:16 | s.0 | provenance | | +| main.rs:94:10:94:10 | [post] s [S] | main.rs:95:14:95:14 | s [S] | provenance | | +| main.rs:94:10:94:23 | [post] s.index_mut(...) [&ref, S] | main.rs:94:10:94:10 | [post] s [S] | provenance | | +| main.rs:94:27:94:38 | S(...) [S] | main.rs:94:10:94:23 | [post] s.index_mut(...) [&ref, S] | provenance | | +| main.rs:94:29:94:37 | source(...) | main.rs:94:27:94:38 | S(...) [S] | provenance | | +| main.rs:95:14:95:14 | s [S] | main.rs:95:14:95:16 | s.0 | provenance | | +| main.rs:99:9:99:9 | [post] s [S] | main.rs:100:14:100:14 | s [S] | provenance | | +| main.rs:99:9:99:9 | [post] s [tuple.0] | main.rs:100:14:100:14 | s [tuple.0] | provenance | | +| main.rs:99:9:99:12 | [post] s[0] [S] | main.rs:99:9:99:9 | [post] s [S] | provenance | | +| main.rs:99:9:99:12 | [post] s[0] [tuple.0] | main.rs:99:9:99:9 | [post] s [tuple.0] | provenance | | +| main.rs:99:17:99:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | | +| main.rs:99:17:99:28 | S(...) [S] | main.rs:99:9:99:12 | [post] s[0] [S] | provenance | MaD:2 | +| main.rs:99:17:99:28 | S(...) [S] | main.rs:99:9:99:12 | [post] s[0] [S] | provenance | MaD:3 | +| main.rs:99:17:99:28 | S(...) [S] | main.rs:99:9:99:12 | [post] s[0] [tuple.0] | provenance | MaD:2 | +| main.rs:99:17:99:28 | S(...) [S] | main.rs:99:9:99:12 | [post] s[0] [tuple.0] | provenance | MaD:3 | +| main.rs:99:19:99:27 | source(...) | main.rs:99:17:99:28 | S(...) [S] | provenance | | +| main.rs:100:14:100:14 | s [S] | main.rs:100:14:100:16 | s.0 | provenance | | +| main.rs:100:14:100:14 | s [tuple.0] | main.rs:100:14:100:16 | s.0 | provenance | | +| main.rs:104:9:104:23 | [post] * ... [S] | main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, S] | provenance | | +| main.rs:104:9:104:23 | [post] * ... [tuple.0] | main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, tuple.0] | provenance | | +| main.rs:104:10:104:10 | [post] s [S] | main.rs:106:14:106:14 | s [S] | provenance | | +| main.rs:104:10:104:10 | [post] s [tuple.0] | main.rs:106:14:106:14 | s [tuple.0] | provenance | | +| main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, S] | main.rs:104:10:104:10 | [post] s [S] | provenance | | +| main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, tuple.0] | main.rs:104:10:104:10 | [post] s [tuple.0] | provenance | | +| main.rs:104:28:104:39 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | | +| main.rs:104:28:104:39 | S(...) [S] | main.rs:104:9:104:23 | [post] * ... [S] | provenance | MaD:2 | +| main.rs:104:28:104:39 | S(...) [S] | main.rs:104:9:104:23 | [post] * ... [S] | provenance | MaD:3 | +| main.rs:104:28:104:39 | S(...) [S] | main.rs:104:9:104:23 | [post] * ... [tuple.0] | provenance | MaD:2 | +| main.rs:104:28:104:39 | S(...) [S] | main.rs:104:9:104:23 | [post] * ... [tuple.0] | provenance | MaD:3 | +| main.rs:104:30:104:38 | source(...) | main.rs:104:28:104:39 | S(...) [S] | provenance | | +| main.rs:105:9:105:9 | [post] s [S] | main.rs:106:14:106:14 | s [S] | provenance | | +| main.rs:105:9:105:9 | [post] s [tuple.0] | main.rs:106:14:106:14 | s [tuple.0] | provenance | | +| main.rs:105:9:105:12 | [post] s[0] [S] | main.rs:105:9:105:9 | [post] s [S] | provenance | | +| main.rs:105:9:105:12 | [post] s[0] [tuple.0] | main.rs:105:9:105:9 | [post] s [tuple.0] | provenance | | +| main.rs:105:17:105:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | | +| main.rs:105:17:105:28 | S(...) [S] | main.rs:105:9:105:12 | [post] s[0] [S] | provenance | MaD:2 | +| main.rs:105:17:105:28 | S(...) [S] | main.rs:105:9:105:12 | [post] s[0] [S] | provenance | MaD:3 | +| main.rs:105:17:105:28 | S(...) [S] | main.rs:105:9:105:12 | [post] s[0] [tuple.0] | provenance | MaD:2 | +| main.rs:105:17:105:28 | S(...) [S] | main.rs:105:9:105:12 | [post] s[0] [tuple.0] | provenance | MaD:3 | +| main.rs:105:19:105:27 | source(...) | main.rs:105:17:105:28 | S(...) [S] | provenance | | +| main.rs:106:14:106:14 | s [S] | main.rs:106:14:106:16 | s.0 | provenance | | +| main.rs:106:14:106:14 | s [tuple.0] | main.rs:106:14:106:16 | s.0 | provenance | | +| main.rs:110:10:110:24 | [post] * ... [S] | main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, S] | provenance | | +| main.rs:110:10:110:24 | [post] * ... [tuple.0] | main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, tuple.0] | provenance | | +| main.rs:110:11:110:11 | [post] s [S] | main.rs:111:14:111:14 | s [S] | provenance | | +| main.rs:110:11:110:11 | [post] s [tuple.0] | main.rs:111:14:111:14 | s [tuple.0] | provenance | | +| main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, S] | main.rs:110:11:110:11 | [post] s [S] | provenance | | +| main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, tuple.0] | main.rs:110:11:110:11 | [post] s [tuple.0] | provenance | | +| main.rs:110:38:110:49 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | | +| main.rs:110:38:110:49 | S(...) [S] | main.rs:110:10:110:24 | [post] * ... [S] | provenance | MaD:2 | +| main.rs:110:38:110:49 | S(...) [S] | main.rs:110:10:110:24 | [post] * ... [S] | provenance | MaD:3 | +| main.rs:110:38:110:49 | S(...) [S] | main.rs:110:10:110:24 | [post] * ... [tuple.0] | provenance | MaD:2 | +| main.rs:110:38:110:49 | S(...) [S] | main.rs:110:10:110:24 | [post] * ... [tuple.0] | provenance | MaD:3 | +| main.rs:110:40:110:48 | source(...) | main.rs:110:38:110:49 | S(...) [S] | provenance | | +| main.rs:111:14:111:14 | s [S] | main.rs:111:14:111:16 | s.0 | provenance | | +| main.rs:111:14:111:14 | s [tuple.0] | main.rs:111:14:111:16 | s.0 | provenance | | +nodes +| main.rs:15:13:15:13 | s | semmle.label | s | +| main.rs:15:17:15:25 | source(...) | semmle.label | source(...) | +| main.rs:16:13:16:15 | arr [element] | semmle.label | arr [element] | +| main.rs:16:19:16:24 | [s; 5] [element] | semmle.label | [s; 5] [element] | +| main.rs:16:20:16:20 | s | semmle.label | s | +| main.rs:17:14:17:16 | arr [element] | semmle.label | arr [element] | +| main.rs:17:14:17:19 | arr[2] | semmle.label | arr[2] | +| main.rs:18:14:18:26 | * ... | semmle.label | * ... | +| main.rs:18:15:18:17 | arr [element] | semmle.label | arr [element] | +| main.rs:18:15:18:26 | arr.index(...) [&ref] | semmle.label | arr.index(...) [&ref] | +| main.rs:20:13:20:19 | mut arr | semmle.label | mut arr | +| main.rs:20:23:20:33 | source(...) | semmle.label | source(...) | +| main.rs:21:14:21:16 | arr | semmle.label | arr | +| main.rs:21:14:21:19 | arr[0] | semmle.label | arr[0] | +| main.rs:22:14:22:26 | * ... | semmle.label | * ... | +| main.rs:22:15:22:17 | arr | semmle.label | arr | +| main.rs:22:15:22:26 | arr.index(...) [&ref] | semmle.label | arr.index(...) [&ref] | +| main.rs:24:13:24:13 | s | semmle.label | s | +| main.rs:24:17:24:25 | source(...) | semmle.label | source(...) | +| main.rs:25:13:25:15 | arr [element] | semmle.label | arr [element] | +| main.rs:25:19:25:21 | [...] [element] | semmle.label | [...] [element] | +| main.rs:25:20:25:20 | s | semmle.label | s | +| main.rs:26:13:26:13 | x | semmle.label | x | +| main.rs:26:18:26:20 | arr [element] | semmle.label | arr [element] | +| main.rs:27:18:27:18 | x | semmle.label | x | +| main.rs:30:13:30:15 | arr | semmle.label | arr | +| main.rs:30:19:30:29 | source(...) | semmle.label | source(...) | +| main.rs:32:18:32:18 | x | semmle.label | x | +| main.rs:37:9:37:11 | [post] arr [element] | semmle.label | [post] arr [element] | +| main.rs:37:18:37:26 | source(...) | semmle.label | source(...) | +| main.rs:38:14:38:16 | arr [element] | semmle.label | arr [element] | +| main.rs:38:14:38:19 | arr[0] | semmle.label | arr[0] | +| main.rs:46:9:46:14 | [post] arr[0] | semmle.label | [post] arr[0] | +| main.rs:46:19:46:27 | source(...) | semmle.label | source(...) | +| main.rs:47:14:47:16 | arr | semmle.label | arr | +| main.rs:47:14:47:19 | arr[0] | semmle.label | arr[0] | +| main.rs:63:18:63:22 | SelfParam [&ref, S] | semmle.label | SelfParam [&ref, S] | +| main.rs:63:56:65:9 | { ... } [&ref, S] | semmle.label | { ... } [&ref, S] | +| main.rs:76:23:76:31 | SelfParam [Return] [&ref, S] | semmle.label | SelfParam [Return] [&ref, S] | +| main.rs:76:23:76:31 | SelfParam [Return] [&ref, tuple.0] | semmle.label | SelfParam [Return] [&ref, tuple.0] | +| main.rs:76:34:76:44 | ...: Self [S] | semmle.label | ...: Self [S] | +| main.rs:77:13:77:16 | [post] self [&ref, S] | semmle.label | [post] self [&ref, S] | +| main.rs:77:13:77:16 | [post] self [&ref, tuple.0] | semmle.label | [post] self [&ref, tuple.0] | +| main.rs:77:13:77:18 | [post] self.0 | semmle.label | [post] self.0 | +| main.rs:77:23:77:27 | other [S] | semmle.label | other [S] | +| main.rs:77:23:77:29 | other.0 | semmle.label | other.0 | +| main.rs:82:13:82:13 | s | semmle.label | s | +| main.rs:82:17:82:25 | source(...) | semmle.label | source(...) | +| main.rs:83:13:83:13 | s [S] | semmle.label | s [S] | +| main.rs:83:17:83:20 | S(...) [S] | semmle.label | S(...) [S] | +| main.rs:83:19:83:19 | s | semmle.label | s | +| main.rs:84:14:84:14 | s [S] | semmle.label | s [S] | +| main.rs:84:14:84:17 | s[0] [S] | semmle.label | s[0] [S] | +| main.rs:84:14:84:19 | ... .0 | semmle.label | ... .0 | +| main.rs:85:14:85:28 | ... .0 | semmle.label | ... .0 | +| main.rs:85:15:85:25 | * ... [S] | semmle.label | * ... [S] | +| main.rs:85:16:85:16 | s [S] | semmle.label | s [S] | +| main.rs:85:16:85:25 | s.index(...) [&ref, S] | semmle.label | s.index(...) [&ref, S] | +| main.rs:89:9:89:9 | [post] s [S] | semmle.label | [post] s [S] | +| main.rs:89:16:89:27 | S(...) [S] | semmle.label | S(...) [S] | +| main.rs:89:18:89:26 | source(...) | semmle.label | source(...) | +| main.rs:90:14:90:14 | s [S] | semmle.label | s [S] | +| main.rs:90:14:90:16 | s.0 | semmle.label | s.0 | +| main.rs:94:10:94:10 | [post] s [S] | semmle.label | [post] s [S] | +| main.rs:94:10:94:23 | [post] s.index_mut(...) [&ref, S] | semmle.label | [post] s.index_mut(...) [&ref, S] | +| main.rs:94:27:94:38 | S(...) [S] | semmle.label | S(...) [S] | +| main.rs:94:29:94:37 | source(...) | semmle.label | source(...) | +| main.rs:95:14:95:14 | s [S] | semmle.label | s [S] | +| main.rs:95:14:95:16 | s.0 | semmle.label | s.0 | +| main.rs:99:9:99:9 | [post] s [S] | semmle.label | [post] s [S] | +| main.rs:99:9:99:9 | [post] s [tuple.0] | semmle.label | [post] s [tuple.0] | +| main.rs:99:9:99:12 | [post] s[0] [S] | semmle.label | [post] s[0] [S] | +| main.rs:99:9:99:12 | [post] s[0] [tuple.0] | semmle.label | [post] s[0] [tuple.0] | +| main.rs:99:17:99:28 | S(...) [S] | semmle.label | S(...) [S] | +| main.rs:99:19:99:27 | source(...) | semmle.label | source(...) | +| main.rs:100:14:100:14 | s [S] | semmle.label | s [S] | +| main.rs:100:14:100:14 | s [tuple.0] | semmle.label | s [tuple.0] | +| main.rs:100:14:100:16 | s.0 | semmle.label | s.0 | +| main.rs:104:9:104:23 | [post] * ... [S] | semmle.label | [post] * ... [S] | +| main.rs:104:9:104:23 | [post] * ... [tuple.0] | semmle.label | [post] * ... [tuple.0] | +| main.rs:104:10:104:10 | [post] s [S] | semmle.label | [post] s [S] | +| main.rs:104:10:104:10 | [post] s [tuple.0] | semmle.label | [post] s [tuple.0] | +| main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, S] | semmle.label | [post] s.index_mut(...) [&ref, S] | +| main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, tuple.0] | semmle.label | [post] s.index_mut(...) [&ref, tuple.0] | +| main.rs:104:28:104:39 | S(...) [S] | semmle.label | S(...) [S] | +| main.rs:104:30:104:38 | source(...) | semmle.label | source(...) | +| main.rs:105:9:105:9 | [post] s [S] | semmle.label | [post] s [S] | +| main.rs:105:9:105:9 | [post] s [tuple.0] | semmle.label | [post] s [tuple.0] | +| main.rs:105:9:105:12 | [post] s[0] [S] | semmle.label | [post] s[0] [S] | +| main.rs:105:9:105:12 | [post] s[0] [tuple.0] | semmle.label | [post] s[0] [tuple.0] | +| main.rs:105:17:105:28 | S(...) [S] | semmle.label | S(...) [S] | +| main.rs:105:19:105:27 | source(...) | semmle.label | source(...) | +| main.rs:106:14:106:14 | s [S] | semmle.label | s [S] | +| main.rs:106:14:106:14 | s [tuple.0] | semmle.label | s [tuple.0] | +| main.rs:106:14:106:16 | s.0 | semmle.label | s.0 | +| main.rs:110:10:110:24 | [post] * ... [S] | semmle.label | [post] * ... [S] | +| main.rs:110:10:110:24 | [post] * ... [tuple.0] | semmle.label | [post] * ... [tuple.0] | +| main.rs:110:11:110:11 | [post] s [S] | semmle.label | [post] s [S] | +| main.rs:110:11:110:11 | [post] s [tuple.0] | semmle.label | [post] s [tuple.0] | +| main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, S] | semmle.label | [post] s.index_mut(...) [&ref, S] | +| main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, tuple.0] | semmle.label | [post] s.index_mut(...) [&ref, tuple.0] | +| main.rs:110:38:110:49 | S(...) [S] | semmle.label | S(...) [S] | +| main.rs:110:40:110:48 | source(...) | semmle.label | source(...) | +| main.rs:111:14:111:14 | s [S] | semmle.label | s [S] | +| main.rs:111:14:111:14 | s [tuple.0] | semmle.label | s [tuple.0] | +| main.rs:111:14:111:16 | s.0 | semmle.label | s.0 | +subpaths +| main.rs:84:14:84:14 | s [S] | main.rs:63:18:63:22 | SelfParam [&ref, S] | main.rs:63:56:65:9 | { ... } [&ref, S] | main.rs:84:14:84:17 | s[0] [S] | +| main.rs:85:16:85:16 | s [S] | main.rs:63:18:63:22 | SelfParam [&ref, S] | main.rs:63:56:65:9 | { ... } [&ref, S] | main.rs:85:16:85:25 | s.index(...) [&ref, S] | +| main.rs:99:17:99:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, S] | main.rs:99:9:99:12 | [post] s[0] [S] | +| main.rs:99:17:99:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, tuple.0] | main.rs:99:9:99:12 | [post] s[0] [tuple.0] | +| main.rs:104:28:104:39 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, S] | main.rs:104:9:104:23 | [post] * ... [S] | +| main.rs:104:28:104:39 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, tuple.0] | main.rs:104:9:104:23 | [post] * ... [tuple.0] | +| main.rs:105:17:105:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, S] | main.rs:105:9:105:12 | [post] s[0] [S] | +| main.rs:105:17:105:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, tuple.0] | main.rs:105:9:105:12 | [post] s[0] [tuple.0] | +| main.rs:110:38:110:49 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, S] | main.rs:110:10:110:24 | [post] * ... [S] | +| main.rs:110:38:110:49 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, tuple.0] | main.rs:110:10:110:24 | [post] * ... [tuple.0] | +testFailures +#select +| main.rs:17:14:17:19 | arr[2] | main.rs:15:17:15:25 | source(...) | main.rs:17:14:17:19 | arr[2] | $@ | main.rs:15:17:15:25 | source(...) | source(...) | +| main.rs:18:14:18:26 | * ... | main.rs:15:17:15:25 | source(...) | main.rs:18:14:18:26 | * ... | $@ | main.rs:15:17:15:25 | source(...) | source(...) | +| main.rs:21:14:21:19 | arr[0] | main.rs:20:23:20:33 | source(...) | main.rs:21:14:21:19 | arr[0] | $@ | main.rs:20:23:20:33 | source(...) | source(...) | +| main.rs:22:14:22:26 | * ... | main.rs:20:23:20:33 | source(...) | main.rs:22:14:22:26 | * ... | $@ | main.rs:20:23:20:33 | source(...) | source(...) | +| main.rs:27:18:27:18 | x | main.rs:24:17:24:25 | source(...) | main.rs:27:18:27:18 | x | $@ | main.rs:24:17:24:25 | source(...) | source(...) | +| main.rs:32:18:32:18 | x | main.rs:30:19:30:29 | source(...) | main.rs:32:18:32:18 | x | $@ | main.rs:30:19:30:29 | source(...) | source(...) | +| main.rs:38:14:38:19 | arr[0] | main.rs:37:18:37:26 | source(...) | main.rs:38:14:38:19 | arr[0] | $@ | main.rs:37:18:37:26 | source(...) | source(...) | +| main.rs:47:14:47:19 | arr[0] | main.rs:46:19:46:27 | source(...) | main.rs:47:14:47:19 | arr[0] | $@ | main.rs:46:19:46:27 | source(...) | source(...) | +| main.rs:84:14:84:19 | ... .0 | main.rs:82:17:82:25 | source(...) | main.rs:84:14:84:19 | ... .0 | $@ | main.rs:82:17:82:25 | source(...) | source(...) | +| main.rs:85:14:85:28 | ... .0 | main.rs:82:17:82:25 | source(...) | main.rs:85:14:85:28 | ... .0 | $@ | main.rs:82:17:82:25 | source(...) | source(...) | +| main.rs:90:14:90:16 | s.0 | main.rs:89:18:89:26 | source(...) | main.rs:90:14:90:16 | s.0 | $@ | main.rs:89:18:89:26 | source(...) | source(...) | +| main.rs:95:14:95:16 | s.0 | main.rs:94:29:94:37 | source(...) | main.rs:95:14:95:16 | s.0 | $@ | main.rs:94:29:94:37 | source(...) | source(...) | +| main.rs:100:14:100:16 | s.0 | main.rs:99:19:99:27 | source(...) | main.rs:100:14:100:16 | s.0 | $@ | main.rs:99:19:99:27 | source(...) | source(...) | +| main.rs:106:14:106:16 | s.0 | main.rs:104:30:104:38 | source(...) | main.rs:106:14:106:16 | s.0 | $@ | main.rs:104:30:104:38 | source(...) | source(...) | +| main.rs:106:14:106:16 | s.0 | main.rs:105:19:105:27 | source(...) | main.rs:106:14:106:16 | s.0 | $@ | main.rs:105:19:105:27 | source(...) | source(...) | +| main.rs:111:14:111:16 | s.0 | main.rs:110:40:110:48 | source(...) | main.rs:111:14:111:16 | s.0 | $@ | main.rs:110:40:110:48 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/collections/inline-flow.ql b/rust/ql/test/library-tests/dataflow/collections/inline-flow.ql new file mode 100644 index 000000000000..5dcb7ee70a9d --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/collections/inline-flow.ql @@ -0,0 +1,12 @@ +/** + * @kind path-problem + */ + +import rust +import utils.test.InlineFlowTest +import DefaultFlowTest +import TaintFlow::PathGraph + +from TaintFlow::PathNode source, TaintFlow::PathNode sink +where TaintFlow::flowPath(source, sink) +select sink, source, sink, "$@", source, source.toString() diff --git a/rust/ql/test/library-tests/dataflow/collections/main.rs b/rust/ql/test/library-tests/dataflow/collections/main.rs new file mode 100644 index 000000000000..e7675f9fdded --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/collections/main.rs @@ -0,0 +1,118 @@ +fn source(s: T) -> T { + s +} + +fn sink(s: i64) { + println!("{}", s); +} + +mod arrays { + use crate::*; + use std::ops::Index; + use std::ops::IndexMut; + + pub fn f() { + let s = source(0); + let arr = [s; 5]; + sink(arr[2]); // $ hasValueFlow=0 + sink(*arr.index(2)); // $ hasValueFlow=0 + + let mut arr = source([1]); + sink(arr[0]); // $ hasTaintFlow=1 + sink(*arr.index(0)); // $ hasTaintFlow=1 + + let s = source(2); + let arr = [s]; + for x in arr { + sink(x); // $ hasValueFlow=2 + } + + let arr = source([3]); + for x in arr { + sink(x); // $ hasTaintFlow=3 + } + + let mut arr = [0]; + sink(arr[0]); + arr[0] = source(4); + sink(arr[0]); // $ hasValueFlow=4 + + let mut arr = [0]; + sink(arr[0]); + *arr.index_mut(0) = source(5); + sink(arr[0]); // $ MISSING: hasValueFlow=5 -- needs generalized reverse flow + + let mut arr = [0]; + arr[0] += source(6); + sink(arr[0]); // $ hasTaintFlow=6 + } +} + +mod indexers { + use crate::*; + use std::ops::AddAssign; + use std::ops::Index; + use std::ops::IndexMut; + + #[derive(Debug)] + struct S(T); + + impl Index for S { + type Output = S; // `T` would be a better choice here, but that requires generalized reverse flow for the test to pass + + fn index(&self, index: usize) -> &Self::Output { + self + } + } + + impl IndexMut for S { + // `Self::Output` is not yet handled, so use `S` for now + fn index_mut(&mut self, index: usize) -> &mut S { + self + } + } + + impl std::ops::AddAssign for S { + fn add_assign(&mut self, other: Self) { + self.0 += other.0; + } + } + + pub fn f() { + let s = source(0); + let s = S(s); + sink(s[0].0); // $ hasValueFlow=0 + sink((*s.index(0)).0); // $ hasValueFlow=0 + + let mut s = S(0); + sink(s.0); + s[0] = S(source(1)); + sink(s.0); // $ hasValueFlow=1 + + let mut s = S(0); + sink(s.0); + *s.index_mut(0) = S(source(2)); + sink(s.0); // $ hasValueFlow=2 + + let mut s = S(0i64); + sink(s.0); + s[0] += S(source(3)); + sink(s.0); // $ hasTaintFlow=3 + + let mut s = S(0i64); + sink(s.0); + *s.index_mut(0) += S(source(5)); + s[0] += S(source(5)); + sink(s.0); // $ hasTaintFlow=5 + + let mut s = S(0i64); + sink(s.0); + (*s.index_mut(0)).add_assign(S(source(6))); + sink(s.0); // $ hasTaintFlow=6 + } +} + +fn main() { + arrays::f(); + indexers::f(); +} diff --git a/rust/ql/test/library-tests/dataflow/global/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/global/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..603574572d8a --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/global/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,3 @@ +multipleResolvedTargets +| main.rs:252:11:252:15 | * ... | +| main.rs:288:13:288:29 | * ... | diff --git a/rust/ql/test/library-tests/dataflow/global/inline-flow.expected b/rust/ql/test/library-tests/dataflow/global/inline-flow.expected index 26984a1d377f..343a33146d22 100644 --- a/rust/ql/test/library-tests/dataflow/global/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/global/inline-flow.expected @@ -1,18 +1,18 @@ models -| 1 | Summary: futures_executor::local_pool::block_on; Argument[0]; ReturnValue; value | +| 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value | +| 2 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self]; ReturnValue; taint | +| 3 | Summary: futures_executor::local_pool::block_on; Argument[0]; ReturnValue; value | edges | main.rs:12:28:14:1 | { ... } | main.rs:17:13:17:23 | get_data(...) | provenance | | | main.rs:13:5:13:13 | source(...) | main.rs:12:28:14:1 | { ... } | provenance | | | main.rs:17:9:17:9 | a | main.rs:18:10:18:10 | a | provenance | | | main.rs:17:13:17:23 | get_data(...) | main.rs:17:9:17:9 | a | provenance | | -| main.rs:26:28:26:33 | ...: i64 | main.rs:27:24:27:24 | n | provenance | | -| main.rs:27:10:27:14 | [post] * ... [MyStruct] | main.rs:27:11:27:14 | [post] self [&ref, MyStruct] | provenance | | -| main.rs:27:11:27:14 | [post] self [&ref, MyStruct] | main.rs:26:17:26:25 | SelfParam [Return] [&ref, MyStruct] | provenance | | -| main.rs:27:24:27:24 | n | main.rs:27:10:27:14 | [post] * ... [MyStruct] | provenance | | -| main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:31:11:31:14 | self [&ref, MyStruct] | provenance | | -| main.rs:31:9:31:20 | ... .data | main.rs:30:31:32:5 | { ... } | provenance | | -| main.rs:31:10:31:14 | * ... [MyStruct] | main.rs:31:9:31:20 | ... .data | provenance | | -| main.rs:31:11:31:14 | self [&ref, MyStruct] | main.rs:31:10:31:14 | * ... [MyStruct] | provenance | | +| main.rs:26:28:26:33 | ...: i64 | main.rs:27:21:27:21 | n | provenance | | +| main.rs:27:9:27:12 | [post] self [&ref, MyStruct] | main.rs:26:17:26:25 | SelfParam [Return] [&ref, MyStruct] | provenance | | +| main.rs:27:21:27:21 | n | main.rs:27:9:27:12 | [post] self [&ref, MyStruct] | provenance | | +| main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:31:9:31:12 | self [&ref, MyStruct] | provenance | | +| main.rs:31:9:31:12 | self [&ref, MyStruct] | main.rs:31:9:31:17 | self.data | provenance | | +| main.rs:31:9:31:17 | self.data | main.rs:30:31:32:5 | { ... } | provenance | | | main.rs:38:6:38:11 | [post] &mut a [&ref, MyStruct] | main.rs:38:11:38:11 | [post] a [MyStruct] | provenance | | | main.rs:38:11:38:11 | [post] a [MyStruct] | main.rs:39:10:39:10 | a [MyStruct] | provenance | | | main.rs:38:23:38:31 | source(...) | main.rs:26:28:26:33 | ...: i64 | provenance | | @@ -49,138 +49,176 @@ edges | main.rs:86:26:86:26 | a | main.rs:82:21:82:26 | ...: i64 | provenance | | | main.rs:86:26:86:26 | a | main.rs:86:13:86:27 | pass_through(...) | provenance | | | main.rs:104:22:104:27 | ...: i64 | main.rs:105:14:105:14 | n | provenance | | -| main.rs:108:30:110:5 | { ... } | main.rs:138:13:138:25 | mn.get_data() | provenance | | -| main.rs:109:35:109:43 | source(...) | main.rs:108:30:110:5 | { ... } | provenance | | -| main.rs:112:27:112:32 | ...: i64 | main.rs:112:42:114:5 | { ... } | provenance | | -| main.rs:118:28:118:33 | ...: i64 | main.rs:119:14:119:14 | n | provenance | | -| main.rs:122:36:124:5 | { ... } | main.rs:132:13:132:30 | x.get_data_trait() | provenance | | -| main.rs:122:36:124:5 | { ... } | main.rs:142:13:142:31 | mn.get_data_trait() | provenance | | -| main.rs:123:35:123:44 | source(...) | main.rs:122:36:124:5 | { ... } | provenance | | -| main.rs:126:33:126:38 | ...: i64 | main.rs:126:48:128:5 | { ... } | provenance | | -| main.rs:132:9:132:9 | a | main.rs:133:10:133:10 | a | provenance | | -| main.rs:132:13:132:30 | x.get_data_trait() | main.rs:132:9:132:9 | a | provenance | | -| main.rs:138:9:138:9 | a | main.rs:139:10:139:10 | a | provenance | | -| main.rs:138:13:138:25 | mn.get_data() | main.rs:138:9:138:9 | a | provenance | | -| main.rs:142:9:142:9 | a | main.rs:143:10:143:10 | a | provenance | | -| main.rs:142:13:142:31 | mn.get_data_trait() | main.rs:142:9:142:9 | a | provenance | | -| main.rs:149:9:149:9 | a | main.rs:150:21:150:21 | a | provenance | | -| main.rs:149:13:149:22 | source(...) | main.rs:149:9:149:9 | a | provenance | | -| main.rs:150:21:150:21 | a | main.rs:118:28:118:33 | ...: i64 | provenance | | -| main.rs:155:9:155:9 | a | main.rs:156:16:156:16 | a | provenance | | -| main.rs:155:13:155:21 | source(...) | main.rs:155:9:155:9 | a | provenance | | -| main.rs:156:16:156:16 | a | main.rs:104:22:104:27 | ...: i64 | provenance | | -| main.rs:159:9:159:9 | a | main.rs:160:22:160:22 | a | provenance | | -| main.rs:159:13:159:22 | source(...) | main.rs:159:9:159:9 | a | provenance | | -| main.rs:160:22:160:22 | a | main.rs:118:28:118:33 | ...: i64 | provenance | | -| main.rs:166:9:166:9 | a | main.rs:167:34:167:34 | a | provenance | | -| main.rs:166:13:166:22 | source(...) | main.rs:166:9:166:9 | a | provenance | | -| main.rs:167:9:167:9 | b | main.rs:168:10:168:10 | b | provenance | | -| main.rs:167:13:167:35 | x.data_through_trait(...) | main.rs:167:9:167:9 | b | provenance | | -| main.rs:167:34:167:34 | a | main.rs:126:33:126:38 | ...: i64 | provenance | | -| main.rs:167:34:167:34 | a | main.rs:167:13:167:35 | x.data_through_trait(...) | provenance | | -| main.rs:173:9:173:9 | a | main.rs:174:29:174:29 | a | provenance | | -| main.rs:173:13:173:21 | source(...) | main.rs:173:9:173:9 | a | provenance | | -| main.rs:174:9:174:9 | b | main.rs:175:10:175:10 | b | provenance | | -| main.rs:174:13:174:30 | mn.data_through(...) | main.rs:174:9:174:9 | b | provenance | | -| main.rs:174:29:174:29 | a | main.rs:112:27:112:32 | ...: i64 | provenance | | -| main.rs:174:29:174:29 | a | main.rs:174:13:174:30 | mn.data_through(...) | provenance | | -| main.rs:178:9:178:9 | a | main.rs:179:35:179:35 | a | provenance | | -| main.rs:178:13:178:22 | source(...) | main.rs:178:9:178:9 | a | provenance | | -| main.rs:179:9:179:9 | b | main.rs:180:10:180:10 | b | provenance | | -| main.rs:179:13:179:36 | mn.data_through_trait(...) | main.rs:179:9:179:9 | b | provenance | | -| main.rs:179:35:179:35 | a | main.rs:126:33:126:38 | ...: i64 | provenance | | -| main.rs:179:35:179:35 | a | main.rs:179:13:179:36 | mn.data_through_trait(...) | provenance | | -| main.rs:187:9:187:9 | a | main.rs:188:25:188:25 | a | provenance | | -| main.rs:187:13:187:21 | source(...) | main.rs:187:9:187:9 | a | provenance | | -| main.rs:188:25:188:25 | a | main.rs:104:22:104:27 | ...: i64 | provenance | | -| main.rs:193:9:193:9 | a | main.rs:194:38:194:38 | a | provenance | | -| main.rs:193:13:193:22 | source(...) | main.rs:193:9:193:9 | a | provenance | | -| main.rs:194:9:194:9 | b | main.rs:195:10:195:10 | b | provenance | | -| main.rs:194:13:194:39 | ...::data_through(...) | main.rs:194:9:194:9 | b | provenance | | -| main.rs:194:38:194:38 | a | main.rs:112:27:112:32 | ...: i64 | provenance | | -| main.rs:194:38:194:38 | a | main.rs:194:13:194:39 | ...::data_through(...) | provenance | | -| main.rs:206:12:206:17 | ...: i64 | main.rs:207:24:207:24 | n | provenance | | -| main.rs:207:9:207:26 | MyInt {...} [MyInt] | main.rs:206:28:208:5 | { ... } [MyInt] | provenance | | -| main.rs:207:24:207:24 | n | main.rs:207:9:207:26 | MyInt {...} [MyInt] | provenance | | -| main.rs:212:9:212:9 | n [MyInt] | main.rs:213:9:213:26 | MyInt {...} [MyInt] | provenance | | -| main.rs:212:13:212:34 | ...::new(...) [MyInt] | main.rs:212:9:212:9 | n [MyInt] | provenance | | -| main.rs:212:24:212:33 | source(...) | main.rs:206:12:206:17 | ...: i64 | provenance | | -| main.rs:212:24:212:33 | source(...) | main.rs:212:13:212:34 | ...::new(...) [MyInt] | provenance | | -| main.rs:213:9:213:26 | MyInt {...} [MyInt] | main.rs:213:24:213:24 | m | provenance | | -| main.rs:213:24:213:24 | m | main.rs:214:10:214:10 | m | provenance | | -| main.rs:220:12:220:15 | SelfParam [MyInt] | main.rs:222:24:222:27 | self [MyInt] | provenance | | -| main.rs:222:9:222:35 | MyInt {...} [MyInt] | main.rs:220:42:223:5 | { ... } [MyInt] | provenance | | -| main.rs:222:24:222:27 | self [MyInt] | main.rs:222:24:222:33 | self.value | provenance | | -| main.rs:222:24:222:33 | self.value | main.rs:222:9:222:35 | MyInt {...} [MyInt] | provenance | | -| main.rs:227:30:227:39 | ...: MyInt [MyInt] | main.rs:228:25:228:27 | rhs [MyInt] | provenance | | -| main.rs:228:10:228:14 | [post] * ... [MyInt] | main.rs:228:11:228:14 | [post] self [&ref, MyInt] | provenance | | -| main.rs:228:11:228:14 | [post] self [&ref, MyInt] | main.rs:227:19:227:27 | SelfParam [Return] [&ref, MyInt] | provenance | | -| main.rs:228:25:228:27 | rhs [MyInt] | main.rs:228:25:228:33 | rhs.value | provenance | | -| main.rs:228:25:228:33 | rhs.value | main.rs:228:10:228:14 | [post] * ... [MyInt] | provenance | | -| main.rs:235:14:235:18 | SelfParam [&ref, MyInt] | main.rs:236:12:236:15 | self [&ref, MyInt] | provenance | | -| main.rs:236:9:236:22 | &... [&ref] | main.rs:235:38:237:5 | { ... } [&ref] | provenance | | -| main.rs:236:10:236:22 | ... .value | main.rs:236:9:236:22 | &... [&ref] | provenance | | -| main.rs:236:11:236:15 | * ... [MyInt] | main.rs:236:10:236:22 | ... .value | provenance | | -| main.rs:236:12:236:15 | self [&ref, MyInt] | main.rs:236:11:236:15 | * ... [MyInt] | provenance | | -| main.rs:242:9:242:9 | a [MyInt] | main.rs:244:13:244:13 | a [MyInt] | provenance | | -| main.rs:242:13:242:38 | MyInt {...} [MyInt] | main.rs:242:9:242:9 | a [MyInt] | provenance | | -| main.rs:242:28:242:36 | source(...) | main.rs:242:13:242:38 | MyInt {...} [MyInt] | provenance | | -| main.rs:244:9:244:9 | c [MyInt] | main.rs:245:10:245:10 | c [MyInt] | provenance | | -| main.rs:244:13:244:13 | a [MyInt] | main.rs:220:12:220:15 | SelfParam [MyInt] | provenance | | -| main.rs:244:13:244:13 | a [MyInt] | main.rs:244:13:244:17 | ... + ... [MyInt] | provenance | | -| main.rs:244:13:244:17 | ... + ... [MyInt] | main.rs:244:9:244:9 | c [MyInt] | provenance | | -| main.rs:245:10:245:10 | c [MyInt] | main.rs:245:10:245:16 | c.value | provenance | | -| main.rs:252:9:252:9 | a [MyInt] | main.rs:220:12:220:15 | SelfParam [MyInt] | provenance | | -| main.rs:252:9:252:9 | a [MyInt] | main.rs:254:13:254:20 | a.add(...) [MyInt] | provenance | | -| main.rs:252:13:252:38 | MyInt {...} [MyInt] | main.rs:252:9:252:9 | a [MyInt] | provenance | | -| main.rs:252:28:252:36 | source(...) | main.rs:252:13:252:38 | MyInt {...} [MyInt] | provenance | | -| main.rs:254:9:254:9 | d [MyInt] | main.rs:255:10:255:10 | d [MyInt] | provenance | | -| main.rs:254:13:254:20 | a.add(...) [MyInt] | main.rs:254:9:254:9 | d [MyInt] | provenance | | -| main.rs:255:10:255:10 | d [MyInt] | main.rs:255:10:255:16 | d.value | provenance | | -| main.rs:259:9:259:9 | b [MyInt] | main.rs:261:35:261:35 | b [MyInt] | provenance | | -| main.rs:259:13:259:39 | MyInt {...} [MyInt] | main.rs:259:9:259:9 | b [MyInt] | provenance | | -| main.rs:259:28:259:37 | source(...) | main.rs:259:13:259:39 | MyInt {...} [MyInt] | provenance | | -| main.rs:261:27:261:32 | [post] &mut a [&ref, MyInt] | main.rs:261:32:261:32 | [post] a [MyInt] | provenance | | -| main.rs:261:32:261:32 | [post] a [MyInt] | main.rs:262:10:262:10 | a [MyInt] | provenance | | -| main.rs:261:35:261:35 | b [MyInt] | main.rs:227:30:227:39 | ...: MyInt [MyInt] | provenance | | -| main.rs:261:35:261:35 | b [MyInt] | main.rs:261:27:261:32 | [post] &mut a [&ref, MyInt] | provenance | | -| main.rs:262:10:262:10 | a [MyInt] | main.rs:262:10:262:16 | a.value | provenance | | -| main.rs:270:9:270:9 | a [MyInt] | main.rs:272:28:272:28 | a [MyInt] | provenance | | -| main.rs:270:13:270:39 | MyInt {...} [MyInt] | main.rs:270:9:270:9 | a [MyInt] | provenance | | -| main.rs:270:28:270:37 | source(...) | main.rs:270:13:270:39 | MyInt {...} [MyInt] | provenance | | -| main.rs:272:9:272:9 | c | main.rs:273:10:273:10 | c | provenance | | -| main.rs:272:13:272:29 | * ... | main.rs:272:9:272:9 | c | provenance | | -| main.rs:272:14:272:29 | ...::deref(...) [&ref] | main.rs:272:13:272:29 | * ... | provenance | | -| main.rs:272:27:272:28 | &a [&ref, MyInt] | main.rs:235:14:235:18 | SelfParam [&ref, MyInt] | provenance | | -| main.rs:272:27:272:28 | &a [&ref, MyInt] | main.rs:272:14:272:29 | ...::deref(...) [&ref] | provenance | | -| main.rs:272:28:272:28 | a [MyInt] | main.rs:272:27:272:28 | &a [&ref, MyInt] | provenance | | -| main.rs:289:18:289:21 | SelfParam [MyInt] | main.rs:289:48:291:5 | { ... } [MyInt] | provenance | | -| main.rs:293:26:293:37 | ...: MyInt [MyInt] | main.rs:293:49:295:5 | { ... } [MyInt] | provenance | | -| main.rs:299:9:299:9 | a [MyInt] | main.rs:301:50:301:50 | a [MyInt] | provenance | | -| main.rs:299:13:299:38 | MyInt {...} [MyInt] | main.rs:299:9:299:9 | a [MyInt] | provenance | | -| main.rs:299:28:299:36 | source(...) | main.rs:299:13:299:38 | MyInt {...} [MyInt] | provenance | | -| main.rs:301:9:301:26 | MyInt {...} [MyInt] | main.rs:301:24:301:24 | c | provenance | | -| main.rs:301:24:301:24 | c | main.rs:302:10:302:10 | c | provenance | | -| main.rs:301:30:301:54 | ...::take_self(...) [MyInt] | main.rs:301:9:301:26 | MyInt {...} [MyInt] | provenance | | -| main.rs:301:50:301:50 | a [MyInt] | main.rs:289:18:289:21 | SelfParam [MyInt] | provenance | | -| main.rs:301:50:301:50 | a [MyInt] | main.rs:301:30:301:54 | ...::take_self(...) [MyInt] | provenance | | -| main.rs:305:9:305:9 | b [MyInt] | main.rs:306:55:306:55 | b [MyInt] | provenance | | -| main.rs:305:13:305:39 | MyInt {...} [MyInt] | main.rs:305:9:305:9 | b [MyInt] | provenance | | -| main.rs:305:28:305:37 | source(...) | main.rs:305:13:305:39 | MyInt {...} [MyInt] | provenance | | -| main.rs:306:9:306:26 | MyInt {...} [MyInt] | main.rs:306:24:306:24 | c | provenance | | -| main.rs:306:24:306:24 | c | main.rs:307:10:307:10 | c | provenance | | -| main.rs:306:30:306:56 | ...::take_second(...) [MyInt] | main.rs:306:9:306:26 | MyInt {...} [MyInt] | provenance | | -| main.rs:306:55:306:55 | b [MyInt] | main.rs:293:26:293:37 | ...: MyInt [MyInt] | provenance | | -| main.rs:306:55:306:55 | b [MyInt] | main.rs:306:30:306:56 | ...::take_second(...) [MyInt] | provenance | | -| main.rs:315:32:319:1 | { ... } | main.rs:334:41:334:54 | async_source(...) | provenance | | -| main.rs:316:9:316:9 | a | main.rs:315:32:319:1 | { ... } | provenance | | -| main.rs:316:9:316:9 | a | main.rs:317:10:317:10 | a | provenance | | -| main.rs:316:13:316:21 | source(...) | main.rs:316:9:316:9 | a | provenance | | -| main.rs:326:13:326:13 | c | main.rs:327:14:327:14 | c | provenance | | -| main.rs:326:17:326:25 | source(...) | main.rs:326:13:326:13 | c | provenance | | -| main.rs:334:9:334:9 | a | main.rs:335:10:335:10 | a | provenance | | -| main.rs:334:13:334:55 | ...::block_on(...) | main.rs:334:9:334:9 | a | provenance | | -| main.rs:334:41:334:54 | async_source(...) | main.rs:334:13:334:55 | ...::block_on(...) | provenance | MaD:1 | +| main.rs:108:30:114:5 | { ... } | main.rs:154:13:154:25 | mn.get_data() | provenance | | +| main.rs:112:13:112:21 | source(...) | main.rs:108:30:114:5 | { ... } | provenance | | +| main.rs:116:27:116:32 | ...: i64 | main.rs:116:42:122:5 | { ... } | provenance | | +| main.rs:126:28:126:33 | ...: i64 | main.rs:127:14:127:14 | n | provenance | | +| main.rs:130:36:136:5 | { ... } | main.rs:148:13:148:30 | x.get_data_trait() | provenance | | +| main.rs:130:36:136:5 | { ... } | main.rs:158:13:158:31 | mn.get_data_trait() | provenance | | +| main.rs:134:13:134:22 | source(...) | main.rs:130:36:136:5 | { ... } | provenance | | +| main.rs:138:33:138:38 | ...: i64 | main.rs:138:48:144:5 | { ... } | provenance | | +| main.rs:148:9:148:9 | a | main.rs:149:10:149:10 | a | provenance | | +| main.rs:148:13:148:30 | x.get_data_trait() | main.rs:148:9:148:9 | a | provenance | | +| main.rs:154:9:154:9 | a | main.rs:155:10:155:10 | a | provenance | | +| main.rs:154:13:154:25 | mn.get_data() | main.rs:154:9:154:9 | a | provenance | | +| main.rs:158:9:158:9 | a | main.rs:159:10:159:10 | a | provenance | | +| main.rs:158:13:158:31 | mn.get_data_trait() | main.rs:158:9:158:9 | a | provenance | | +| main.rs:165:9:165:9 | a | main.rs:166:21:166:21 | a | provenance | | +| main.rs:165:13:165:22 | source(...) | main.rs:165:9:165:9 | a | provenance | | +| main.rs:166:21:166:21 | a | main.rs:126:28:126:33 | ...: i64 | provenance | | +| main.rs:171:9:171:9 | a | main.rs:172:16:172:16 | a | provenance | | +| main.rs:171:13:171:21 | source(...) | main.rs:171:9:171:9 | a | provenance | | +| main.rs:172:16:172:16 | a | main.rs:104:22:104:27 | ...: i64 | provenance | | +| main.rs:175:9:175:9 | a | main.rs:176:22:176:22 | a | provenance | | +| main.rs:175:13:175:22 | source(...) | main.rs:175:9:175:9 | a | provenance | | +| main.rs:176:22:176:22 | a | main.rs:126:28:126:33 | ...: i64 | provenance | | +| main.rs:182:9:182:9 | a | main.rs:183:34:183:34 | a | provenance | | +| main.rs:182:13:182:22 | source(...) | main.rs:182:9:182:9 | a | provenance | | +| main.rs:183:9:183:9 | b | main.rs:184:10:184:10 | b | provenance | | +| main.rs:183:13:183:35 | x.data_through_trait(...) | main.rs:183:9:183:9 | b | provenance | | +| main.rs:183:34:183:34 | a | main.rs:138:33:138:38 | ...: i64 | provenance | | +| main.rs:183:34:183:34 | a | main.rs:183:13:183:35 | x.data_through_trait(...) | provenance | | +| main.rs:189:9:189:9 | a | main.rs:190:29:190:29 | a | provenance | | +| main.rs:189:13:189:21 | source(...) | main.rs:189:9:189:9 | a | provenance | | +| main.rs:190:9:190:9 | b | main.rs:191:10:191:10 | b | provenance | | +| main.rs:190:13:190:30 | mn.data_through(...) | main.rs:190:9:190:9 | b | provenance | | +| main.rs:190:29:190:29 | a | main.rs:116:27:116:32 | ...: i64 | provenance | | +| main.rs:190:29:190:29 | a | main.rs:190:13:190:30 | mn.data_through(...) | provenance | | +| main.rs:194:9:194:9 | a | main.rs:195:35:195:35 | a | provenance | | +| main.rs:194:13:194:22 | source(...) | main.rs:194:9:194:9 | a | provenance | | +| main.rs:195:9:195:9 | b | main.rs:196:10:196:10 | b | provenance | | +| main.rs:195:13:195:36 | mn.data_through_trait(...) | main.rs:195:9:195:9 | b | provenance | | +| main.rs:195:35:195:35 | a | main.rs:138:33:138:38 | ...: i64 | provenance | | +| main.rs:195:35:195:35 | a | main.rs:195:13:195:36 | mn.data_through_trait(...) | provenance | | +| main.rs:203:9:203:9 | a | main.rs:204:25:204:25 | a | provenance | | +| main.rs:203:13:203:21 | source(...) | main.rs:203:9:203:9 | a | provenance | | +| main.rs:204:25:204:25 | a | main.rs:104:22:104:27 | ...: i64 | provenance | | +| main.rs:209:9:209:9 | a | main.rs:210:38:210:38 | a | provenance | | +| main.rs:209:13:209:22 | source(...) | main.rs:209:9:209:9 | a | provenance | | +| main.rs:210:9:210:9 | b | main.rs:211:10:211:10 | b | provenance | | +| main.rs:210:13:210:39 | ...::data_through(...) | main.rs:210:9:210:9 | b | provenance | | +| main.rs:210:38:210:38 | a | main.rs:116:27:116:32 | ...: i64 | provenance | | +| main.rs:210:38:210:38 | a | main.rs:210:13:210:39 | ...::data_through(...) | provenance | | +| main.rs:222:12:222:17 | ...: i64 | main.rs:223:24:223:24 | n | provenance | | +| main.rs:223:9:223:26 | MyInt {...} [MyInt] | main.rs:222:28:224:5 | { ... } [MyInt] | provenance | | +| main.rs:223:24:223:24 | n | main.rs:223:9:223:26 | MyInt {...} [MyInt] | provenance | | +| main.rs:228:9:228:9 | n [MyInt] | main.rs:229:9:229:26 | MyInt {...} [MyInt] | provenance | | +| main.rs:228:13:228:34 | ...::new(...) [MyInt] | main.rs:228:9:228:9 | n [MyInt] | provenance | | +| main.rs:228:24:228:33 | source(...) | main.rs:222:12:222:17 | ...: i64 | provenance | | +| main.rs:228:24:228:33 | source(...) | main.rs:228:13:228:34 | ...::new(...) [MyInt] | provenance | | +| main.rs:229:9:229:26 | MyInt {...} [MyInt] | main.rs:229:24:229:24 | m | provenance | | +| main.rs:229:24:229:24 | m | main.rs:230:10:230:10 | m | provenance | | +| main.rs:236:12:236:15 | SelfParam [MyInt] | main.rs:238:24:238:27 | self [MyInt] | provenance | | +| main.rs:238:9:238:35 | MyInt {...} [MyInt] | main.rs:236:42:239:5 | { ... } [MyInt] | provenance | | +| main.rs:238:24:238:27 | self [MyInt] | main.rs:238:24:238:33 | self.value | provenance | | +| main.rs:238:24:238:33 | self.value | main.rs:238:9:238:35 | MyInt {...} [MyInt] | provenance | | +| main.rs:243:30:243:39 | ...: MyInt [MyInt] | main.rs:244:22:244:24 | rhs [MyInt] | provenance | | +| main.rs:244:9:244:12 | [post] self [&ref, MyInt] | main.rs:243:19:243:27 | SelfParam [Return] [&ref, MyInt] | provenance | | +| main.rs:244:22:244:24 | rhs [MyInt] | main.rs:244:22:244:30 | rhs.value | provenance | | +| main.rs:244:22:244:30 | rhs.value | main.rs:244:9:244:12 | [post] self [&ref, MyInt] | provenance | | +| main.rs:251:14:251:18 | SelfParam [&ref, MyInt] | main.rs:252:12:252:15 | self [&ref, MyInt] | provenance | | +| main.rs:252:9:252:22 | &... [&ref] | main.rs:251:38:253:5 | { ... } [&ref] | provenance | | +| main.rs:252:10:252:22 | ... .value | main.rs:252:9:252:22 | &... [&ref] | provenance | | +| main.rs:252:11:252:15 | * ... [MyInt] | main.rs:252:10:252:22 | ... .value | provenance | | +| main.rs:252:12:252:15 | self [&ref, MyInt] | main.rs:252:11:252:15 | * ... [MyInt] | provenance | MaD:1 | +| main.rs:258:9:258:9 | a [MyInt] | main.rs:260:13:260:13 | a [MyInt] | provenance | | +| main.rs:258:13:258:38 | MyInt {...} [MyInt] | main.rs:258:9:258:9 | a [MyInt] | provenance | | +| main.rs:258:28:258:36 | source(...) | main.rs:258:13:258:38 | MyInt {...} [MyInt] | provenance | | +| main.rs:260:9:260:9 | c [MyInt] | main.rs:261:10:261:10 | c [MyInt] | provenance | | +| main.rs:260:13:260:13 | a [MyInt] | main.rs:236:12:236:15 | SelfParam [MyInt] | provenance | | +| main.rs:260:13:260:13 | a [MyInt] | main.rs:260:13:260:17 | ... + ... [MyInt] | provenance | | +| main.rs:260:13:260:17 | ... + ... [MyInt] | main.rs:260:9:260:9 | c [MyInt] | provenance | | +| main.rs:261:10:261:10 | c [MyInt] | main.rs:261:10:261:16 | c.value | provenance | | +| main.rs:268:9:268:9 | a [MyInt] | main.rs:270:13:270:13 | a [MyInt] | provenance | | +| main.rs:268:13:268:38 | MyInt {...} [MyInt] | main.rs:268:9:268:9 | a [MyInt] | provenance | | +| main.rs:268:28:268:36 | source(...) | main.rs:268:13:268:38 | MyInt {...} [MyInt] | provenance | | +| main.rs:270:9:270:9 | d [MyInt] | main.rs:271:10:271:10 | d [MyInt] | provenance | | +| main.rs:270:13:270:13 | a [MyInt] | main.rs:236:12:236:15 | SelfParam [MyInt] | provenance | | +| main.rs:270:13:270:13 | a [MyInt] | main.rs:270:13:270:20 | a.add(...) [MyInt] | provenance | | +| main.rs:270:13:270:20 | a.add(...) [MyInt] | main.rs:270:9:270:9 | d [MyInt] | provenance | | +| main.rs:271:10:271:10 | d [MyInt] | main.rs:271:10:271:16 | d.value | provenance | | +| main.rs:275:9:275:9 | b [MyInt] | main.rs:277:35:277:35 | b [MyInt] | provenance | | +| main.rs:275:13:275:39 | MyInt {...} [MyInt] | main.rs:275:9:275:9 | b [MyInt] | provenance | | +| main.rs:275:28:275:37 | source(...) | main.rs:275:13:275:39 | MyInt {...} [MyInt] | provenance | | +| main.rs:277:27:277:32 | [post] &mut a [&ref, MyInt] | main.rs:277:32:277:32 | [post] a [MyInt] | provenance | | +| main.rs:277:32:277:32 | [post] a [MyInt] | main.rs:278:10:278:10 | a [MyInt] | provenance | | +| main.rs:277:35:277:35 | b [MyInt] | main.rs:243:30:243:39 | ...: MyInt [MyInt] | provenance | | +| main.rs:277:35:277:35 | b [MyInt] | main.rs:277:27:277:32 | [post] &mut a [&ref, MyInt] | provenance | | +| main.rs:278:10:278:10 | a [MyInt] | main.rs:278:10:278:16 | a.value | provenance | | +| main.rs:281:9:281:9 | b [MyInt] | main.rs:282:10:282:10 | b [MyInt] | provenance | | +| main.rs:281:13:281:39 | MyInt {...} [MyInt] | main.rs:281:9:281:9 | b [MyInt] | provenance | | +| main.rs:281:28:281:37 | source(...) | main.rs:281:13:281:39 | MyInt {...} [MyInt] | provenance | | +| main.rs:282:10:282:10 | b [MyInt] | main.rs:243:30:243:39 | ...: MyInt [MyInt] | provenance | | +| main.rs:282:10:282:10 | b [MyInt] | main.rs:283:10:283:10 | a [MyInt] | provenance | | +| main.rs:283:10:283:10 | a [MyInt] | main.rs:283:10:283:16 | a.value | provenance | | +| main.rs:286:9:286:9 | a [MyInt] | main.rs:288:28:288:28 | a [MyInt] | provenance | | +| main.rs:286:13:286:39 | MyInt {...} [MyInt] | main.rs:286:9:286:9 | a [MyInt] | provenance | | +| main.rs:286:28:286:37 | source(...) | main.rs:286:13:286:39 | MyInt {...} [MyInt] | provenance | | +| main.rs:288:9:288:9 | c | main.rs:289:10:289:10 | c | provenance | | +| main.rs:288:13:288:29 | * ... | main.rs:288:9:288:9 | c | provenance | | +| main.rs:288:14:288:29 | ...::deref(...) [&ref] | main.rs:288:13:288:29 | * ... | provenance | MaD:1 | +| main.rs:288:27:288:28 | &a [&ref, MyInt] | main.rs:251:14:251:18 | SelfParam [&ref, MyInt] | provenance | | +| main.rs:288:27:288:28 | &a [&ref, MyInt] | main.rs:288:14:288:29 | ...::deref(...) [&ref] | provenance | MaD:1 | +| main.rs:288:28:288:28 | a [MyInt] | main.rs:288:27:288:28 | &a [&ref, MyInt] | provenance | | +| main.rs:291:9:291:9 | a [MyInt] | main.rs:292:14:292:14 | a [MyInt] | provenance | | +| main.rs:291:13:291:39 | MyInt {...} [MyInt] | main.rs:291:9:291:9 | a [MyInt] | provenance | | +| main.rs:291:28:291:37 | source(...) | main.rs:291:13:291:39 | MyInt {...} [MyInt] | provenance | | +| main.rs:292:9:292:9 | c | main.rs:293:10:293:10 | c | provenance | | +| main.rs:292:13:292:14 | * ... | main.rs:292:9:292:9 | c | provenance | | +| main.rs:292:14:292:14 | a [MyInt] | main.rs:251:14:251:18 | SelfParam [&ref, MyInt] | provenance | | +| main.rs:292:14:292:14 | a [MyInt] | main.rs:292:13:292:14 | * ... | provenance | MaD:1 | +| main.rs:309:18:309:21 | SelfParam [MyInt] | main.rs:309:48:311:5 | { ... } [MyInt] | provenance | | +| main.rs:313:26:313:37 | ...: MyInt [MyInt] | main.rs:313:49:315:5 | { ... } [MyInt] | provenance | | +| main.rs:319:9:319:9 | a [MyInt] | main.rs:321:50:321:50 | a [MyInt] | provenance | | +| main.rs:319:13:319:38 | MyInt {...} [MyInt] | main.rs:319:9:319:9 | a [MyInt] | provenance | | +| main.rs:319:28:319:36 | source(...) | main.rs:319:13:319:38 | MyInt {...} [MyInt] | provenance | | +| main.rs:321:9:321:26 | MyInt {...} [MyInt] | main.rs:321:24:321:24 | c | provenance | | +| main.rs:321:24:321:24 | c | main.rs:322:10:322:10 | c | provenance | | +| main.rs:321:30:321:54 | ...::take_self(...) [MyInt] | main.rs:321:9:321:26 | MyInt {...} [MyInt] | provenance | | +| main.rs:321:50:321:50 | a [MyInt] | main.rs:309:18:309:21 | SelfParam [MyInt] | provenance | | +| main.rs:321:50:321:50 | a [MyInt] | main.rs:321:30:321:54 | ...::take_self(...) [MyInt] | provenance | | +| main.rs:325:9:325:9 | b [MyInt] | main.rs:326:55:326:55 | b [MyInt] | provenance | | +| main.rs:325:13:325:39 | MyInt {...} [MyInt] | main.rs:325:9:325:9 | b [MyInt] | provenance | | +| main.rs:325:28:325:37 | source(...) | main.rs:325:13:325:39 | MyInt {...} [MyInt] | provenance | | +| main.rs:326:9:326:26 | MyInt {...} [MyInt] | main.rs:326:24:326:24 | c | provenance | | +| main.rs:326:24:326:24 | c | main.rs:327:10:327:10 | c | provenance | | +| main.rs:326:30:326:56 | ...::take_second(...) [MyInt] | main.rs:326:9:326:26 | MyInt {...} [MyInt] | provenance | | +| main.rs:326:55:326:55 | b [MyInt] | main.rs:313:26:313:37 | ...: MyInt [MyInt] | provenance | | +| main.rs:326:55:326:55 | b [MyInt] | main.rs:326:30:326:56 | ...::take_second(...) [MyInt] | provenance | | +| main.rs:335:32:339:1 | { ... } | main.rs:342:13:342:26 | async_source(...) | provenance | | +| main.rs:335:32:339:1 | { ... } | main.rs:354:41:354:54 | async_source(...) | provenance | | +| main.rs:336:9:336:9 | a | main.rs:335:32:339:1 | { ... } | provenance | | +| main.rs:336:9:336:9 | a | main.rs:337:10:337:10 | a | provenance | | +| main.rs:336:13:336:21 | source(...) | main.rs:336:9:336:9 | a | provenance | | +| main.rs:342:9:342:9 | a | main.rs:343:10:343:10 | a | provenance | | +| main.rs:342:13:342:26 | async_source(...) | main.rs:342:9:342:9 | a | provenance | | +| main.rs:346:13:346:13 | c | main.rs:347:14:347:14 | c | provenance | | +| main.rs:346:17:346:25 | source(...) | main.rs:346:13:346:13 | c | provenance | | +| main.rs:354:9:354:9 | a | main.rs:355:10:355:10 | a | provenance | | +| main.rs:354:13:354:55 | ...::block_on(...) | main.rs:354:9:354:9 | a | provenance | | +| main.rs:354:41:354:54 | async_source(...) | main.rs:354:13:354:55 | ...::block_on(...) | provenance | MaD:3 | +| main.rs:366:44:368:9 | { ... } | main.rs:403:18:403:38 | t.get_double_number() | provenance | | +| main.rs:366:44:368:9 | { ... } | main.rs:407:18:407:50 | ...::get_double_number(...) | provenance | | +| main.rs:367:13:367:29 | self.get_number() | main.rs:367:13:367:33 | ... * ... | provenance | MaD:2 | +| main.rs:367:13:367:33 | ... * ... | main.rs:366:44:368:9 | { ... } | provenance | | +| main.rs:370:33:372:9 | { ... } | main.rs:411:18:411:37 | ...::get_default(...) | provenance | | +| main.rs:371:13:371:21 | source(...) | main.rs:370:33:372:9 | { ... } | provenance | | +| main.rs:378:37:380:9 | { ... } | main.rs:367:13:367:29 | self.get_number() | provenance | | +| main.rs:379:13:379:21 | source(...) | main.rs:378:37:380:9 | { ... } | provenance | | +| main.rs:390:44:392:9 | { ... } | main.rs:415:18:415:38 | i.get_double_number() | provenance | | +| main.rs:391:13:391:22 | source(...) | main.rs:390:44:392:9 | { ... } | provenance | | +| main.rs:394:33:396:9 | { ... } | main.rs:418:18:418:41 | ...::get_default(...) | provenance | | +| main.rs:395:13:395:21 | source(...) | main.rs:394:33:396:9 | { ... } | provenance | | +| main.rs:403:13:403:14 | n1 | main.rs:404:14:404:15 | n1 | provenance | | +| main.rs:403:18:403:38 | t.get_double_number() | main.rs:403:13:403:14 | n1 | provenance | | +| main.rs:407:13:407:14 | n2 | main.rs:408:14:408:15 | n2 | provenance | | +| main.rs:407:18:407:50 | ...::get_double_number(...) | main.rs:407:13:407:14 | n2 | provenance | | +| main.rs:411:13:411:14 | n3 | main.rs:412:14:412:15 | n3 | provenance | | +| main.rs:411:18:411:37 | ...::get_default(...) | main.rs:411:13:411:14 | n3 | provenance | | +| main.rs:415:13:415:14 | n4 | main.rs:416:14:416:15 | n4 | provenance | | +| main.rs:415:18:415:38 | i.get_double_number() | main.rs:415:13:415:14 | n4 | provenance | | +| main.rs:418:13:418:14 | n5 | main.rs:419:14:419:15 | n5 | provenance | | +| main.rs:418:18:418:41 | ...::get_default(...) | main.rs:418:13:418:14 | n5 | provenance | | nodes | main.rs:12:28:14:1 | { ... } | semmle.label | { ... } | | main.rs:13:5:13:13 | source(...) | semmle.label | source(...) | @@ -189,14 +227,12 @@ nodes | main.rs:18:10:18:10 | a | semmle.label | a | | main.rs:26:17:26:25 | SelfParam [Return] [&ref, MyStruct] | semmle.label | SelfParam [Return] [&ref, MyStruct] | | main.rs:26:28:26:33 | ...: i64 | semmle.label | ...: i64 | -| main.rs:27:10:27:14 | [post] * ... [MyStruct] | semmle.label | [post] * ... [MyStruct] | -| main.rs:27:11:27:14 | [post] self [&ref, MyStruct] | semmle.label | [post] self [&ref, MyStruct] | -| main.rs:27:24:27:24 | n | semmle.label | n | +| main.rs:27:9:27:12 | [post] self [&ref, MyStruct] | semmle.label | [post] self [&ref, MyStruct] | +| main.rs:27:21:27:21 | n | semmle.label | n | | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | semmle.label | SelfParam [&ref, MyStruct] | | main.rs:30:31:32:5 | { ... } | semmle.label | { ... } | -| main.rs:31:9:31:20 | ... .data | semmle.label | ... .data | -| main.rs:31:10:31:14 | * ... [MyStruct] | semmle.label | * ... [MyStruct] | -| main.rs:31:11:31:14 | self [&ref, MyStruct] | semmle.label | self [&ref, MyStruct] | +| main.rs:31:9:31:12 | self [&ref, MyStruct] | semmle.label | self [&ref, MyStruct] | +| main.rs:31:9:31:17 | self.data | semmle.label | self.data | | main.rs:38:6:38:11 | [post] &mut a [&ref, MyStruct] | semmle.label | [post] &mut a [&ref, MyStruct] | | main.rs:38:11:38:11 | [post] a [MyStruct] | semmle.label | [post] a [MyStruct] | | main.rs:38:23:38:31 | source(...) | semmle.label | source(...) | @@ -235,151 +271,193 @@ nodes | main.rs:87:10:87:10 | b | semmle.label | b | | main.rs:104:22:104:27 | ...: i64 | semmle.label | ...: i64 | | main.rs:105:14:105:14 | n | semmle.label | n | -| main.rs:108:30:110:5 | { ... } | semmle.label | { ... } | -| main.rs:109:35:109:43 | source(...) | semmle.label | source(...) | -| main.rs:112:27:112:32 | ...: i64 | semmle.label | ...: i64 | -| main.rs:112:42:114:5 | { ... } | semmle.label | { ... } | -| main.rs:118:28:118:33 | ...: i64 | semmle.label | ...: i64 | -| main.rs:119:14:119:14 | n | semmle.label | n | -| main.rs:122:36:124:5 | { ... } | semmle.label | { ... } | -| main.rs:123:35:123:44 | source(...) | semmle.label | source(...) | -| main.rs:126:33:126:38 | ...: i64 | semmle.label | ...: i64 | -| main.rs:126:48:128:5 | { ... } | semmle.label | { ... } | -| main.rs:132:9:132:9 | a | semmle.label | a | -| main.rs:132:13:132:30 | x.get_data_trait() | semmle.label | x.get_data_trait() | -| main.rs:133:10:133:10 | a | semmle.label | a | -| main.rs:138:9:138:9 | a | semmle.label | a | -| main.rs:138:13:138:25 | mn.get_data() | semmle.label | mn.get_data() | -| main.rs:139:10:139:10 | a | semmle.label | a | -| main.rs:142:9:142:9 | a | semmle.label | a | -| main.rs:142:13:142:31 | mn.get_data_trait() | semmle.label | mn.get_data_trait() | -| main.rs:143:10:143:10 | a | semmle.label | a | -| main.rs:149:9:149:9 | a | semmle.label | a | -| main.rs:149:13:149:22 | source(...) | semmle.label | source(...) | -| main.rs:150:21:150:21 | a | semmle.label | a | -| main.rs:155:9:155:9 | a | semmle.label | a | -| main.rs:155:13:155:21 | source(...) | semmle.label | source(...) | -| main.rs:156:16:156:16 | a | semmle.label | a | -| main.rs:159:9:159:9 | a | semmle.label | a | -| main.rs:159:13:159:22 | source(...) | semmle.label | source(...) | -| main.rs:160:22:160:22 | a | semmle.label | a | -| main.rs:166:9:166:9 | a | semmle.label | a | -| main.rs:166:13:166:22 | source(...) | semmle.label | source(...) | -| main.rs:167:9:167:9 | b | semmle.label | b | -| main.rs:167:13:167:35 | x.data_through_trait(...) | semmle.label | x.data_through_trait(...) | -| main.rs:167:34:167:34 | a | semmle.label | a | -| main.rs:168:10:168:10 | b | semmle.label | b | -| main.rs:173:9:173:9 | a | semmle.label | a | -| main.rs:173:13:173:21 | source(...) | semmle.label | source(...) | -| main.rs:174:9:174:9 | b | semmle.label | b | -| main.rs:174:13:174:30 | mn.data_through(...) | semmle.label | mn.data_through(...) | -| main.rs:174:29:174:29 | a | semmle.label | a | -| main.rs:175:10:175:10 | b | semmle.label | b | -| main.rs:178:9:178:9 | a | semmle.label | a | -| main.rs:178:13:178:22 | source(...) | semmle.label | source(...) | -| main.rs:179:9:179:9 | b | semmle.label | b | -| main.rs:179:13:179:36 | mn.data_through_trait(...) | semmle.label | mn.data_through_trait(...) | -| main.rs:179:35:179:35 | a | semmle.label | a | -| main.rs:180:10:180:10 | b | semmle.label | b | -| main.rs:187:9:187:9 | a | semmle.label | a | -| main.rs:187:13:187:21 | source(...) | semmle.label | source(...) | -| main.rs:188:25:188:25 | a | semmle.label | a | -| main.rs:193:9:193:9 | a | semmle.label | a | -| main.rs:193:13:193:22 | source(...) | semmle.label | source(...) | -| main.rs:194:9:194:9 | b | semmle.label | b | -| main.rs:194:13:194:39 | ...::data_through(...) | semmle.label | ...::data_through(...) | -| main.rs:194:38:194:38 | a | semmle.label | a | -| main.rs:195:10:195:10 | b | semmle.label | b | -| main.rs:206:12:206:17 | ...: i64 | semmle.label | ...: i64 | -| main.rs:206:28:208:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | -| main.rs:207:9:207:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:207:24:207:24 | n | semmle.label | n | -| main.rs:212:9:212:9 | n [MyInt] | semmle.label | n [MyInt] | -| main.rs:212:13:212:34 | ...::new(...) [MyInt] | semmle.label | ...::new(...) [MyInt] | -| main.rs:212:24:212:33 | source(...) | semmle.label | source(...) | -| main.rs:213:9:213:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:213:24:213:24 | m | semmle.label | m | -| main.rs:214:10:214:10 | m | semmle.label | m | -| main.rs:220:12:220:15 | SelfParam [MyInt] | semmle.label | SelfParam [MyInt] | -| main.rs:220:42:223:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | -| main.rs:222:9:222:35 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:222:24:222:27 | self [MyInt] | semmle.label | self [MyInt] | -| main.rs:222:24:222:33 | self.value | semmle.label | self.value | -| main.rs:227:19:227:27 | SelfParam [Return] [&ref, MyInt] | semmle.label | SelfParam [Return] [&ref, MyInt] | -| main.rs:227:30:227:39 | ...: MyInt [MyInt] | semmle.label | ...: MyInt [MyInt] | -| main.rs:228:10:228:14 | [post] * ... [MyInt] | semmle.label | [post] * ... [MyInt] | -| main.rs:228:11:228:14 | [post] self [&ref, MyInt] | semmle.label | [post] self [&ref, MyInt] | -| main.rs:228:25:228:27 | rhs [MyInt] | semmle.label | rhs [MyInt] | -| main.rs:228:25:228:33 | rhs.value | semmle.label | rhs.value | -| main.rs:235:14:235:18 | SelfParam [&ref, MyInt] | semmle.label | SelfParam [&ref, MyInt] | -| main.rs:235:38:237:5 | { ... } [&ref] | semmle.label | { ... } [&ref] | -| main.rs:236:9:236:22 | &... [&ref] | semmle.label | &... [&ref] | -| main.rs:236:10:236:22 | ... .value | semmle.label | ... .value | -| main.rs:236:11:236:15 | * ... [MyInt] | semmle.label | * ... [MyInt] | -| main.rs:236:12:236:15 | self [&ref, MyInt] | semmle.label | self [&ref, MyInt] | -| main.rs:242:9:242:9 | a [MyInt] | semmle.label | a [MyInt] | -| main.rs:242:13:242:38 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:242:28:242:36 | source(...) | semmle.label | source(...) | -| main.rs:244:9:244:9 | c [MyInt] | semmle.label | c [MyInt] | -| main.rs:244:13:244:13 | a [MyInt] | semmle.label | a [MyInt] | -| main.rs:244:13:244:17 | ... + ... [MyInt] | semmle.label | ... + ... [MyInt] | -| main.rs:245:10:245:10 | c [MyInt] | semmle.label | c [MyInt] | -| main.rs:245:10:245:16 | c.value | semmle.label | c.value | -| main.rs:252:9:252:9 | a [MyInt] | semmle.label | a [MyInt] | -| main.rs:252:13:252:38 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:252:28:252:36 | source(...) | semmle.label | source(...) | -| main.rs:254:9:254:9 | d [MyInt] | semmle.label | d [MyInt] | -| main.rs:254:13:254:20 | a.add(...) [MyInt] | semmle.label | a.add(...) [MyInt] | -| main.rs:255:10:255:10 | d [MyInt] | semmle.label | d [MyInt] | -| main.rs:255:10:255:16 | d.value | semmle.label | d.value | -| main.rs:259:9:259:9 | b [MyInt] | semmle.label | b [MyInt] | -| main.rs:259:13:259:39 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:259:28:259:37 | source(...) | semmle.label | source(...) | -| main.rs:261:27:261:32 | [post] &mut a [&ref, MyInt] | semmle.label | [post] &mut a [&ref, MyInt] | -| main.rs:261:32:261:32 | [post] a [MyInt] | semmle.label | [post] a [MyInt] | -| main.rs:261:35:261:35 | b [MyInt] | semmle.label | b [MyInt] | -| main.rs:262:10:262:10 | a [MyInt] | semmle.label | a [MyInt] | -| main.rs:262:10:262:16 | a.value | semmle.label | a.value | -| main.rs:270:9:270:9 | a [MyInt] | semmle.label | a [MyInt] | -| main.rs:270:13:270:39 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:270:28:270:37 | source(...) | semmle.label | source(...) | -| main.rs:272:9:272:9 | c | semmle.label | c | -| main.rs:272:13:272:29 | * ... | semmle.label | * ... | -| main.rs:272:14:272:29 | ...::deref(...) [&ref] | semmle.label | ...::deref(...) [&ref] | -| main.rs:272:27:272:28 | &a [&ref, MyInt] | semmle.label | &a [&ref, MyInt] | -| main.rs:272:28:272:28 | a [MyInt] | semmle.label | a [MyInt] | -| main.rs:273:10:273:10 | c | semmle.label | c | -| main.rs:289:18:289:21 | SelfParam [MyInt] | semmle.label | SelfParam [MyInt] | -| main.rs:289:48:291:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | -| main.rs:293:26:293:37 | ...: MyInt [MyInt] | semmle.label | ...: MyInt [MyInt] | -| main.rs:293:49:295:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | -| main.rs:299:9:299:9 | a [MyInt] | semmle.label | a [MyInt] | -| main.rs:299:13:299:38 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:299:28:299:36 | source(...) | semmle.label | source(...) | -| main.rs:301:9:301:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:301:24:301:24 | c | semmle.label | c | -| main.rs:301:30:301:54 | ...::take_self(...) [MyInt] | semmle.label | ...::take_self(...) [MyInt] | -| main.rs:301:50:301:50 | a [MyInt] | semmle.label | a [MyInt] | -| main.rs:302:10:302:10 | c | semmle.label | c | -| main.rs:305:9:305:9 | b [MyInt] | semmle.label | b [MyInt] | -| main.rs:305:13:305:39 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:305:28:305:37 | source(...) | semmle.label | source(...) | -| main.rs:306:9:306:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:306:24:306:24 | c | semmle.label | c | -| main.rs:306:30:306:56 | ...::take_second(...) [MyInt] | semmle.label | ...::take_second(...) [MyInt] | -| main.rs:306:55:306:55 | b [MyInt] | semmle.label | b [MyInt] | -| main.rs:307:10:307:10 | c | semmle.label | c | -| main.rs:315:32:319:1 | { ... } | semmle.label | { ... } | -| main.rs:316:9:316:9 | a | semmle.label | a | -| main.rs:316:13:316:21 | source(...) | semmle.label | source(...) | -| main.rs:317:10:317:10 | a | semmle.label | a | -| main.rs:326:13:326:13 | c | semmle.label | c | -| main.rs:326:17:326:25 | source(...) | semmle.label | source(...) | -| main.rs:327:14:327:14 | c | semmle.label | c | -| main.rs:334:9:334:9 | a | semmle.label | a | -| main.rs:334:13:334:55 | ...::block_on(...) | semmle.label | ...::block_on(...) | -| main.rs:334:41:334:54 | async_source(...) | semmle.label | async_source(...) | -| main.rs:335:10:335:10 | a | semmle.label | a | +| main.rs:108:30:114:5 | { ... } | semmle.label | { ... } | +| main.rs:112:13:112:21 | source(...) | semmle.label | source(...) | +| main.rs:116:27:116:32 | ...: i64 | semmle.label | ...: i64 | +| main.rs:116:42:122:5 | { ... } | semmle.label | { ... } | +| main.rs:126:28:126:33 | ...: i64 | semmle.label | ...: i64 | +| main.rs:127:14:127:14 | n | semmle.label | n | +| main.rs:130:36:136:5 | { ... } | semmle.label | { ... } | +| main.rs:134:13:134:22 | source(...) | semmle.label | source(...) | +| main.rs:138:33:138:38 | ...: i64 | semmle.label | ...: i64 | +| main.rs:138:48:144:5 | { ... } | semmle.label | { ... } | +| main.rs:148:9:148:9 | a | semmle.label | a | +| main.rs:148:13:148:30 | x.get_data_trait() | semmle.label | x.get_data_trait() | +| main.rs:149:10:149:10 | a | semmle.label | a | +| main.rs:154:9:154:9 | a | semmle.label | a | +| main.rs:154:13:154:25 | mn.get_data() | semmle.label | mn.get_data() | +| main.rs:155:10:155:10 | a | semmle.label | a | +| main.rs:158:9:158:9 | a | semmle.label | a | +| main.rs:158:13:158:31 | mn.get_data_trait() | semmle.label | mn.get_data_trait() | +| main.rs:159:10:159:10 | a | semmle.label | a | +| main.rs:165:9:165:9 | a | semmle.label | a | +| main.rs:165:13:165:22 | source(...) | semmle.label | source(...) | +| main.rs:166:21:166:21 | a | semmle.label | a | +| main.rs:171:9:171:9 | a | semmle.label | a | +| main.rs:171:13:171:21 | source(...) | semmle.label | source(...) | +| main.rs:172:16:172:16 | a | semmle.label | a | +| main.rs:175:9:175:9 | a | semmle.label | a | +| main.rs:175:13:175:22 | source(...) | semmle.label | source(...) | +| main.rs:176:22:176:22 | a | semmle.label | a | +| main.rs:182:9:182:9 | a | semmle.label | a | +| main.rs:182:13:182:22 | source(...) | semmle.label | source(...) | +| main.rs:183:9:183:9 | b | semmle.label | b | +| main.rs:183:13:183:35 | x.data_through_trait(...) | semmle.label | x.data_through_trait(...) | +| main.rs:183:34:183:34 | a | semmle.label | a | +| main.rs:184:10:184:10 | b | semmle.label | b | +| main.rs:189:9:189:9 | a | semmle.label | a | +| main.rs:189:13:189:21 | source(...) | semmle.label | source(...) | +| main.rs:190:9:190:9 | b | semmle.label | b | +| main.rs:190:13:190:30 | mn.data_through(...) | semmle.label | mn.data_through(...) | +| main.rs:190:29:190:29 | a | semmle.label | a | +| main.rs:191:10:191:10 | b | semmle.label | b | +| main.rs:194:9:194:9 | a | semmle.label | a | +| main.rs:194:13:194:22 | source(...) | semmle.label | source(...) | +| main.rs:195:9:195:9 | b | semmle.label | b | +| main.rs:195:13:195:36 | mn.data_through_trait(...) | semmle.label | mn.data_through_trait(...) | +| main.rs:195:35:195:35 | a | semmle.label | a | +| main.rs:196:10:196:10 | b | semmle.label | b | +| main.rs:203:9:203:9 | a | semmle.label | a | +| main.rs:203:13:203:21 | source(...) | semmle.label | source(...) | +| main.rs:204:25:204:25 | a | semmle.label | a | +| main.rs:209:9:209:9 | a | semmle.label | a | +| main.rs:209:13:209:22 | source(...) | semmle.label | source(...) | +| main.rs:210:9:210:9 | b | semmle.label | b | +| main.rs:210:13:210:39 | ...::data_through(...) | semmle.label | ...::data_through(...) | +| main.rs:210:38:210:38 | a | semmle.label | a | +| main.rs:211:10:211:10 | b | semmle.label | b | +| main.rs:222:12:222:17 | ...: i64 | semmle.label | ...: i64 | +| main.rs:222:28:224:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | +| main.rs:223:9:223:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:223:24:223:24 | n | semmle.label | n | +| main.rs:228:9:228:9 | n [MyInt] | semmle.label | n [MyInt] | +| main.rs:228:13:228:34 | ...::new(...) [MyInt] | semmle.label | ...::new(...) [MyInt] | +| main.rs:228:24:228:33 | source(...) | semmle.label | source(...) | +| main.rs:229:9:229:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:229:24:229:24 | m | semmle.label | m | +| main.rs:230:10:230:10 | m | semmle.label | m | +| main.rs:236:12:236:15 | SelfParam [MyInt] | semmle.label | SelfParam [MyInt] | +| main.rs:236:42:239:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | +| main.rs:238:9:238:35 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:238:24:238:27 | self [MyInt] | semmle.label | self [MyInt] | +| main.rs:238:24:238:33 | self.value | semmle.label | self.value | +| main.rs:243:19:243:27 | SelfParam [Return] [&ref, MyInt] | semmle.label | SelfParam [Return] [&ref, MyInt] | +| main.rs:243:30:243:39 | ...: MyInt [MyInt] | semmle.label | ...: MyInt [MyInt] | +| main.rs:244:9:244:12 | [post] self [&ref, MyInt] | semmle.label | [post] self [&ref, MyInt] | +| main.rs:244:22:244:24 | rhs [MyInt] | semmle.label | rhs [MyInt] | +| main.rs:244:22:244:30 | rhs.value | semmle.label | rhs.value | +| main.rs:251:14:251:18 | SelfParam [&ref, MyInt] | semmle.label | SelfParam [&ref, MyInt] | +| main.rs:251:38:253:5 | { ... } [&ref] | semmle.label | { ... } [&ref] | +| main.rs:252:9:252:22 | &... [&ref] | semmle.label | &... [&ref] | +| main.rs:252:10:252:22 | ... .value | semmle.label | ... .value | +| main.rs:252:11:252:15 | * ... [MyInt] | semmle.label | * ... [MyInt] | +| main.rs:252:12:252:15 | self [&ref, MyInt] | semmle.label | self [&ref, MyInt] | +| main.rs:258:9:258:9 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:258:13:258:38 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:258:28:258:36 | source(...) | semmle.label | source(...) | +| main.rs:260:9:260:9 | c [MyInt] | semmle.label | c [MyInt] | +| main.rs:260:13:260:13 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:260:13:260:17 | ... + ... [MyInt] | semmle.label | ... + ... [MyInt] | +| main.rs:261:10:261:10 | c [MyInt] | semmle.label | c [MyInt] | +| main.rs:261:10:261:16 | c.value | semmle.label | c.value | +| main.rs:268:9:268:9 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:268:13:268:38 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:268:28:268:36 | source(...) | semmle.label | source(...) | +| main.rs:270:9:270:9 | d [MyInt] | semmle.label | d [MyInt] | +| main.rs:270:13:270:13 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:270:13:270:20 | a.add(...) [MyInt] | semmle.label | a.add(...) [MyInt] | +| main.rs:271:10:271:10 | d [MyInt] | semmle.label | d [MyInt] | +| main.rs:271:10:271:16 | d.value | semmle.label | d.value | +| main.rs:275:9:275:9 | b [MyInt] | semmle.label | b [MyInt] | +| main.rs:275:13:275:39 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:275:28:275:37 | source(...) | semmle.label | source(...) | +| main.rs:277:27:277:32 | [post] &mut a [&ref, MyInt] | semmle.label | [post] &mut a [&ref, MyInt] | +| main.rs:277:32:277:32 | [post] a [MyInt] | semmle.label | [post] a [MyInt] | +| main.rs:277:35:277:35 | b [MyInt] | semmle.label | b [MyInt] | +| main.rs:278:10:278:10 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:278:10:278:16 | a.value | semmle.label | a.value | +| main.rs:281:9:281:9 | b [MyInt] | semmle.label | b [MyInt] | +| main.rs:281:13:281:39 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:281:28:281:37 | source(...) | semmle.label | source(...) | +| main.rs:282:10:282:10 | b [MyInt] | semmle.label | b [MyInt] | +| main.rs:283:10:283:10 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:283:10:283:16 | a.value | semmle.label | a.value | +| main.rs:286:9:286:9 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:286:13:286:39 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:286:28:286:37 | source(...) | semmle.label | source(...) | +| main.rs:288:9:288:9 | c | semmle.label | c | +| main.rs:288:13:288:29 | * ... | semmle.label | * ... | +| main.rs:288:14:288:29 | ...::deref(...) [&ref] | semmle.label | ...::deref(...) [&ref] | +| main.rs:288:27:288:28 | &a [&ref, MyInt] | semmle.label | &a [&ref, MyInt] | +| main.rs:288:28:288:28 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:289:10:289:10 | c | semmle.label | c | +| main.rs:291:9:291:9 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:291:13:291:39 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:291:28:291:37 | source(...) | semmle.label | source(...) | +| main.rs:292:9:292:9 | c | semmle.label | c | +| main.rs:292:13:292:14 | * ... | semmle.label | * ... | +| main.rs:292:14:292:14 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:293:10:293:10 | c | semmle.label | c | +| main.rs:309:18:309:21 | SelfParam [MyInt] | semmle.label | SelfParam [MyInt] | +| main.rs:309:48:311:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | +| main.rs:313:26:313:37 | ...: MyInt [MyInt] | semmle.label | ...: MyInt [MyInt] | +| main.rs:313:49:315:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | +| main.rs:319:9:319:9 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:319:13:319:38 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:319:28:319:36 | source(...) | semmle.label | source(...) | +| main.rs:321:9:321:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:321:24:321:24 | c | semmle.label | c | +| main.rs:321:30:321:54 | ...::take_self(...) [MyInt] | semmle.label | ...::take_self(...) [MyInt] | +| main.rs:321:50:321:50 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:322:10:322:10 | c | semmle.label | c | +| main.rs:325:9:325:9 | b [MyInt] | semmle.label | b [MyInt] | +| main.rs:325:13:325:39 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:325:28:325:37 | source(...) | semmle.label | source(...) | +| main.rs:326:9:326:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:326:24:326:24 | c | semmle.label | c | +| main.rs:326:30:326:56 | ...::take_second(...) [MyInt] | semmle.label | ...::take_second(...) [MyInt] | +| main.rs:326:55:326:55 | b [MyInt] | semmle.label | b [MyInt] | +| main.rs:327:10:327:10 | c | semmle.label | c | +| main.rs:335:32:339:1 | { ... } | semmle.label | { ... } | +| main.rs:336:9:336:9 | a | semmle.label | a | +| main.rs:336:13:336:21 | source(...) | semmle.label | source(...) | +| main.rs:337:10:337:10 | a | semmle.label | a | +| main.rs:342:9:342:9 | a | semmle.label | a | +| main.rs:342:13:342:26 | async_source(...) | semmle.label | async_source(...) | +| main.rs:343:10:343:10 | a | semmle.label | a | +| main.rs:346:13:346:13 | c | semmle.label | c | +| main.rs:346:17:346:25 | source(...) | semmle.label | source(...) | +| main.rs:347:14:347:14 | c | semmle.label | c | +| main.rs:354:9:354:9 | a | semmle.label | a | +| main.rs:354:13:354:55 | ...::block_on(...) | semmle.label | ...::block_on(...) | +| main.rs:354:41:354:54 | async_source(...) | semmle.label | async_source(...) | +| main.rs:355:10:355:10 | a | semmle.label | a | +| main.rs:366:44:368:9 | { ... } | semmle.label | { ... } | +| main.rs:367:13:367:29 | self.get_number() | semmle.label | self.get_number() | +| main.rs:367:13:367:33 | ... * ... | semmle.label | ... * ... | +| main.rs:370:33:372:9 | { ... } | semmle.label | { ... } | +| main.rs:371:13:371:21 | source(...) | semmle.label | source(...) | +| main.rs:378:37:380:9 | { ... } | semmle.label | { ... } | +| main.rs:379:13:379:21 | source(...) | semmle.label | source(...) | +| main.rs:390:44:392:9 | { ... } | semmle.label | { ... } | +| main.rs:391:13:391:22 | source(...) | semmle.label | source(...) | +| main.rs:394:33:396:9 | { ... } | semmle.label | { ... } | +| main.rs:395:13:395:21 | source(...) | semmle.label | source(...) | +| main.rs:403:13:403:14 | n1 | semmle.label | n1 | +| main.rs:403:18:403:38 | t.get_double_number() | semmle.label | t.get_double_number() | +| main.rs:404:14:404:15 | n1 | semmle.label | n1 | +| main.rs:407:13:407:14 | n2 | semmle.label | n2 | +| main.rs:407:18:407:50 | ...::get_double_number(...) | semmle.label | ...::get_double_number(...) | +| main.rs:408:14:408:15 | n2 | semmle.label | n2 | +| main.rs:411:13:411:14 | n3 | semmle.label | n3 | +| main.rs:411:18:411:37 | ...::get_default(...) | semmle.label | ...::get_default(...) | +| main.rs:412:14:412:15 | n3 | semmle.label | n3 | +| main.rs:415:13:415:14 | n4 | semmle.label | n4 | +| main.rs:415:18:415:38 | i.get_double_number() | semmle.label | i.get_double_number() | +| main.rs:416:14:416:15 | n4 | semmle.label | n4 | +| main.rs:418:13:418:14 | n5 | semmle.label | n5 | +| main.rs:418:18:418:41 | ...::get_default(...) | semmle.label | ...::get_default(...) | +| main.rs:419:14:419:15 | n5 | semmle.label | n5 | subpaths | main.rs:38:23:38:31 | source(...) | main.rs:26:28:26:33 | ...: i64 | main.rs:26:17:26:25 | SelfParam [Return] [&ref, MyStruct] | main.rs:38:6:38:11 | [post] &mut a [&ref, MyStruct] | | main.rs:39:10:39:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:30:31:32:5 | { ... } | main.rs:39:10:39:21 | a.get_data() | @@ -388,17 +466,19 @@ subpaths | main.rs:67:26:67:26 | a | main.rs:61:17:61:22 | ...: i64 | main.rs:61:32:63:1 | { ... } | main.rs:67:13:67:27 | pass_through(...) | | main.rs:72:26:75:5 | { ... } | main.rs:61:17:61:22 | ...: i64 | main.rs:61:32:63:1 | { ... } | main.rs:72:13:75:6 | pass_through(...) | | main.rs:86:26:86:26 | a | main.rs:82:21:82:26 | ...: i64 | main.rs:82:36:84:5 | { ... } | main.rs:86:13:86:27 | pass_through(...) | -| main.rs:167:34:167:34 | a | main.rs:126:33:126:38 | ...: i64 | main.rs:126:48:128:5 | { ... } | main.rs:167:13:167:35 | x.data_through_trait(...) | -| main.rs:174:29:174:29 | a | main.rs:112:27:112:32 | ...: i64 | main.rs:112:42:114:5 | { ... } | main.rs:174:13:174:30 | mn.data_through(...) | -| main.rs:179:35:179:35 | a | main.rs:126:33:126:38 | ...: i64 | main.rs:126:48:128:5 | { ... } | main.rs:179:13:179:36 | mn.data_through_trait(...) | -| main.rs:194:38:194:38 | a | main.rs:112:27:112:32 | ...: i64 | main.rs:112:42:114:5 | { ... } | main.rs:194:13:194:39 | ...::data_through(...) | -| main.rs:212:24:212:33 | source(...) | main.rs:206:12:206:17 | ...: i64 | main.rs:206:28:208:5 | { ... } [MyInt] | main.rs:212:13:212:34 | ...::new(...) [MyInt] | -| main.rs:244:13:244:13 | a [MyInt] | main.rs:220:12:220:15 | SelfParam [MyInt] | main.rs:220:42:223:5 | { ... } [MyInt] | main.rs:244:13:244:17 | ... + ... [MyInt] | -| main.rs:252:9:252:9 | a [MyInt] | main.rs:220:12:220:15 | SelfParam [MyInt] | main.rs:220:42:223:5 | { ... } [MyInt] | main.rs:254:13:254:20 | a.add(...) [MyInt] | -| main.rs:261:35:261:35 | b [MyInt] | main.rs:227:30:227:39 | ...: MyInt [MyInt] | main.rs:227:19:227:27 | SelfParam [Return] [&ref, MyInt] | main.rs:261:27:261:32 | [post] &mut a [&ref, MyInt] | -| main.rs:272:27:272:28 | &a [&ref, MyInt] | main.rs:235:14:235:18 | SelfParam [&ref, MyInt] | main.rs:235:38:237:5 | { ... } [&ref] | main.rs:272:14:272:29 | ...::deref(...) [&ref] | -| main.rs:301:50:301:50 | a [MyInt] | main.rs:289:18:289:21 | SelfParam [MyInt] | main.rs:289:48:291:5 | { ... } [MyInt] | main.rs:301:30:301:54 | ...::take_self(...) [MyInt] | -| main.rs:306:55:306:55 | b [MyInt] | main.rs:293:26:293:37 | ...: MyInt [MyInt] | main.rs:293:49:295:5 | { ... } [MyInt] | main.rs:306:30:306:56 | ...::take_second(...) [MyInt] | +| main.rs:183:34:183:34 | a | main.rs:138:33:138:38 | ...: i64 | main.rs:138:48:144:5 | { ... } | main.rs:183:13:183:35 | x.data_through_trait(...) | +| main.rs:190:29:190:29 | a | main.rs:116:27:116:32 | ...: i64 | main.rs:116:42:122:5 | { ... } | main.rs:190:13:190:30 | mn.data_through(...) | +| main.rs:195:35:195:35 | a | main.rs:138:33:138:38 | ...: i64 | main.rs:138:48:144:5 | { ... } | main.rs:195:13:195:36 | mn.data_through_trait(...) | +| main.rs:210:38:210:38 | a | main.rs:116:27:116:32 | ...: i64 | main.rs:116:42:122:5 | { ... } | main.rs:210:13:210:39 | ...::data_through(...) | +| main.rs:228:24:228:33 | source(...) | main.rs:222:12:222:17 | ...: i64 | main.rs:222:28:224:5 | { ... } [MyInt] | main.rs:228:13:228:34 | ...::new(...) [MyInt] | +| main.rs:260:13:260:13 | a [MyInt] | main.rs:236:12:236:15 | SelfParam [MyInt] | main.rs:236:42:239:5 | { ... } [MyInt] | main.rs:260:13:260:17 | ... + ... [MyInt] | +| main.rs:270:13:270:13 | a [MyInt] | main.rs:236:12:236:15 | SelfParam [MyInt] | main.rs:236:42:239:5 | { ... } [MyInt] | main.rs:270:13:270:20 | a.add(...) [MyInt] | +| main.rs:277:35:277:35 | b [MyInt] | main.rs:243:30:243:39 | ...: MyInt [MyInt] | main.rs:243:19:243:27 | SelfParam [Return] [&ref, MyInt] | main.rs:277:27:277:32 | [post] &mut a [&ref, MyInt] | +| main.rs:282:10:282:10 | b [MyInt] | main.rs:243:30:243:39 | ...: MyInt [MyInt] | main.rs:243:19:243:27 | SelfParam [Return] [&ref, MyInt] | main.rs:283:10:283:10 | a [MyInt] | +| main.rs:288:27:288:28 | &a [&ref, MyInt] | main.rs:251:14:251:18 | SelfParam [&ref, MyInt] | main.rs:251:38:253:5 | { ... } [&ref] | main.rs:288:14:288:29 | ...::deref(...) [&ref] | +| main.rs:292:14:292:14 | a [MyInt] | main.rs:251:14:251:18 | SelfParam [&ref, MyInt] | main.rs:251:38:253:5 | { ... } [&ref] | main.rs:292:13:292:14 | * ... | +| main.rs:321:50:321:50 | a [MyInt] | main.rs:309:18:309:21 | SelfParam [MyInt] | main.rs:309:48:311:5 | { ... } [MyInt] | main.rs:321:30:321:54 | ...::take_self(...) [MyInt] | +| main.rs:326:55:326:55 | b [MyInt] | main.rs:313:26:313:37 | ...: MyInt [MyInt] | main.rs:313:49:315:5 | { ... } [MyInt] | main.rs:326:30:326:56 | ...::take_second(...) [MyInt] | testFailures #select | main.rs:18:10:18:10 | a | main.rs:13:5:13:13 | source(...) | main.rs:18:10:18:10 | a | $@ | main.rs:13:5:13:13 | source(...) | source(...) | @@ -408,24 +488,32 @@ testFailures | main.rs:68:10:68:10 | b | main.rs:66:13:66:21 | source(...) | main.rs:68:10:68:10 | b | $@ | main.rs:66:13:66:21 | source(...) | source(...) | | main.rs:76:10:76:10 | a | main.rs:74:9:74:18 | source(...) | main.rs:76:10:76:10 | a | $@ | main.rs:74:9:74:18 | source(...) | source(...) | | main.rs:87:10:87:10 | b | main.rs:80:13:80:22 | source(...) | main.rs:87:10:87:10 | b | $@ | main.rs:80:13:80:22 | source(...) | source(...) | -| main.rs:105:14:105:14 | n | main.rs:155:13:155:21 | source(...) | main.rs:105:14:105:14 | n | $@ | main.rs:155:13:155:21 | source(...) | source(...) | -| main.rs:105:14:105:14 | n | main.rs:187:13:187:21 | source(...) | main.rs:105:14:105:14 | n | $@ | main.rs:187:13:187:21 | source(...) | source(...) | -| main.rs:119:14:119:14 | n | main.rs:149:13:149:22 | source(...) | main.rs:119:14:119:14 | n | $@ | main.rs:149:13:149:22 | source(...) | source(...) | -| main.rs:119:14:119:14 | n | main.rs:159:13:159:22 | source(...) | main.rs:119:14:119:14 | n | $@ | main.rs:159:13:159:22 | source(...) | source(...) | -| main.rs:133:10:133:10 | a | main.rs:123:35:123:44 | source(...) | main.rs:133:10:133:10 | a | $@ | main.rs:123:35:123:44 | source(...) | source(...) | -| main.rs:139:10:139:10 | a | main.rs:109:35:109:43 | source(...) | main.rs:139:10:139:10 | a | $@ | main.rs:109:35:109:43 | source(...) | source(...) | -| main.rs:143:10:143:10 | a | main.rs:123:35:123:44 | source(...) | main.rs:143:10:143:10 | a | $@ | main.rs:123:35:123:44 | source(...) | source(...) | -| main.rs:168:10:168:10 | b | main.rs:166:13:166:22 | source(...) | main.rs:168:10:168:10 | b | $@ | main.rs:166:13:166:22 | source(...) | source(...) | -| main.rs:175:10:175:10 | b | main.rs:173:13:173:21 | source(...) | main.rs:175:10:175:10 | b | $@ | main.rs:173:13:173:21 | source(...) | source(...) | -| main.rs:180:10:180:10 | b | main.rs:178:13:178:22 | source(...) | main.rs:180:10:180:10 | b | $@ | main.rs:178:13:178:22 | source(...) | source(...) | -| main.rs:195:10:195:10 | b | main.rs:193:13:193:22 | source(...) | main.rs:195:10:195:10 | b | $@ | main.rs:193:13:193:22 | source(...) | source(...) | -| main.rs:214:10:214:10 | m | main.rs:212:24:212:33 | source(...) | main.rs:214:10:214:10 | m | $@ | main.rs:212:24:212:33 | source(...) | source(...) | -| main.rs:245:10:245:16 | c.value | main.rs:242:28:242:36 | source(...) | main.rs:245:10:245:16 | c.value | $@ | main.rs:242:28:242:36 | source(...) | source(...) | -| main.rs:255:10:255:16 | d.value | main.rs:252:28:252:36 | source(...) | main.rs:255:10:255:16 | d.value | $@ | main.rs:252:28:252:36 | source(...) | source(...) | -| main.rs:262:10:262:16 | a.value | main.rs:259:28:259:37 | source(...) | main.rs:262:10:262:16 | a.value | $@ | main.rs:259:28:259:37 | source(...) | source(...) | -| main.rs:273:10:273:10 | c | main.rs:270:28:270:37 | source(...) | main.rs:273:10:273:10 | c | $@ | main.rs:270:28:270:37 | source(...) | source(...) | -| main.rs:302:10:302:10 | c | main.rs:299:28:299:36 | source(...) | main.rs:302:10:302:10 | c | $@ | main.rs:299:28:299:36 | source(...) | source(...) | -| main.rs:307:10:307:10 | c | main.rs:305:28:305:37 | source(...) | main.rs:307:10:307:10 | c | $@ | main.rs:305:28:305:37 | source(...) | source(...) | -| main.rs:317:10:317:10 | a | main.rs:316:13:316:21 | source(...) | main.rs:317:10:317:10 | a | $@ | main.rs:316:13:316:21 | source(...) | source(...) | -| main.rs:327:14:327:14 | c | main.rs:326:17:326:25 | source(...) | main.rs:327:14:327:14 | c | $@ | main.rs:326:17:326:25 | source(...) | source(...) | -| main.rs:335:10:335:10 | a | main.rs:316:13:316:21 | source(...) | main.rs:335:10:335:10 | a | $@ | main.rs:316:13:316:21 | source(...) | source(...) | +| main.rs:105:14:105:14 | n | main.rs:171:13:171:21 | source(...) | main.rs:105:14:105:14 | n | $@ | main.rs:171:13:171:21 | source(...) | source(...) | +| main.rs:105:14:105:14 | n | main.rs:203:13:203:21 | source(...) | main.rs:105:14:105:14 | n | $@ | main.rs:203:13:203:21 | source(...) | source(...) | +| main.rs:127:14:127:14 | n | main.rs:165:13:165:22 | source(...) | main.rs:127:14:127:14 | n | $@ | main.rs:165:13:165:22 | source(...) | source(...) | +| main.rs:127:14:127:14 | n | main.rs:175:13:175:22 | source(...) | main.rs:127:14:127:14 | n | $@ | main.rs:175:13:175:22 | source(...) | source(...) | +| main.rs:149:10:149:10 | a | main.rs:134:13:134:22 | source(...) | main.rs:149:10:149:10 | a | $@ | main.rs:134:13:134:22 | source(...) | source(...) | +| main.rs:155:10:155:10 | a | main.rs:112:13:112:21 | source(...) | main.rs:155:10:155:10 | a | $@ | main.rs:112:13:112:21 | source(...) | source(...) | +| main.rs:159:10:159:10 | a | main.rs:134:13:134:22 | source(...) | main.rs:159:10:159:10 | a | $@ | main.rs:134:13:134:22 | source(...) | source(...) | +| main.rs:184:10:184:10 | b | main.rs:182:13:182:22 | source(...) | main.rs:184:10:184:10 | b | $@ | main.rs:182:13:182:22 | source(...) | source(...) | +| main.rs:191:10:191:10 | b | main.rs:189:13:189:21 | source(...) | main.rs:191:10:191:10 | b | $@ | main.rs:189:13:189:21 | source(...) | source(...) | +| main.rs:196:10:196:10 | b | main.rs:194:13:194:22 | source(...) | main.rs:196:10:196:10 | b | $@ | main.rs:194:13:194:22 | source(...) | source(...) | +| main.rs:211:10:211:10 | b | main.rs:209:13:209:22 | source(...) | main.rs:211:10:211:10 | b | $@ | main.rs:209:13:209:22 | source(...) | source(...) | +| main.rs:230:10:230:10 | m | main.rs:228:24:228:33 | source(...) | main.rs:230:10:230:10 | m | $@ | main.rs:228:24:228:33 | source(...) | source(...) | +| main.rs:261:10:261:16 | c.value | main.rs:258:28:258:36 | source(...) | main.rs:261:10:261:16 | c.value | $@ | main.rs:258:28:258:36 | source(...) | source(...) | +| main.rs:271:10:271:16 | d.value | main.rs:268:28:268:36 | source(...) | main.rs:271:10:271:16 | d.value | $@ | main.rs:268:28:268:36 | source(...) | source(...) | +| main.rs:278:10:278:16 | a.value | main.rs:275:28:275:37 | source(...) | main.rs:278:10:278:16 | a.value | $@ | main.rs:275:28:275:37 | source(...) | source(...) | +| main.rs:283:10:283:16 | a.value | main.rs:281:28:281:37 | source(...) | main.rs:283:10:283:16 | a.value | $@ | main.rs:281:28:281:37 | source(...) | source(...) | +| main.rs:289:10:289:10 | c | main.rs:286:28:286:37 | source(...) | main.rs:289:10:289:10 | c | $@ | main.rs:286:28:286:37 | source(...) | source(...) | +| main.rs:293:10:293:10 | c | main.rs:291:28:291:37 | source(...) | main.rs:293:10:293:10 | c | $@ | main.rs:291:28:291:37 | source(...) | source(...) | +| main.rs:322:10:322:10 | c | main.rs:319:28:319:36 | source(...) | main.rs:322:10:322:10 | c | $@ | main.rs:319:28:319:36 | source(...) | source(...) | +| main.rs:327:10:327:10 | c | main.rs:325:28:325:37 | source(...) | main.rs:327:10:327:10 | c | $@ | main.rs:325:28:325:37 | source(...) | source(...) | +| main.rs:337:10:337:10 | a | main.rs:336:13:336:21 | source(...) | main.rs:337:10:337:10 | a | $@ | main.rs:336:13:336:21 | source(...) | source(...) | +| main.rs:343:10:343:10 | a | main.rs:336:13:336:21 | source(...) | main.rs:343:10:343:10 | a | $@ | main.rs:336:13:336:21 | source(...) | source(...) | +| main.rs:347:14:347:14 | c | main.rs:346:17:346:25 | source(...) | main.rs:347:14:347:14 | c | $@ | main.rs:346:17:346:25 | source(...) | source(...) | +| main.rs:355:10:355:10 | a | main.rs:336:13:336:21 | source(...) | main.rs:355:10:355:10 | a | $@ | main.rs:336:13:336:21 | source(...) | source(...) | +| main.rs:404:14:404:15 | n1 | main.rs:379:13:379:21 | source(...) | main.rs:404:14:404:15 | n1 | $@ | main.rs:379:13:379:21 | source(...) | source(...) | +| main.rs:408:14:408:15 | n2 | main.rs:379:13:379:21 | source(...) | main.rs:408:14:408:15 | n2 | $@ | main.rs:379:13:379:21 | source(...) | source(...) | +| main.rs:412:14:412:15 | n3 | main.rs:371:13:371:21 | source(...) | main.rs:412:14:412:15 | n3 | $@ | main.rs:371:13:371:21 | source(...) | source(...) | +| main.rs:416:14:416:15 | n4 | main.rs:391:13:391:22 | source(...) | main.rs:416:14:416:15 | n4 | $@ | main.rs:391:13:391:22 | source(...) | source(...) | +| main.rs:419:14:419:15 | n5 | main.rs:395:13:395:21 | source(...) | main.rs:419:14:419:15 | n5 | $@ | main.rs:395:13:395:21 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/global/inline-flow.ql b/rust/ql/test/library-tests/dataflow/global/inline-flow.ql index e399ea0e5d71..5dcb7ee70a9d 100644 --- a/rust/ql/test/library-tests/dataflow/global/inline-flow.ql +++ b/rust/ql/test/library-tests/dataflow/global/inline-flow.ql @@ -5,8 +5,8 @@ import rust import utils.test.InlineFlowTest import DefaultFlowTest -import ValueFlow::PathGraph +import TaintFlow::PathGraph -from ValueFlow::PathNode source, ValueFlow::PathNode sink -where ValueFlow::flowPath(source, sink) +from TaintFlow::PathNode source, TaintFlow::PathNode sink +where TaintFlow::flowPath(source, sink) select sink, source, sink, "$@", source, source.toString() diff --git a/rust/ql/test/library-tests/dataflow/global/main.rs b/rust/ql/test/library-tests/dataflow/global/main.rs index e378f16b4dea..bd910c03b426 100644 --- a/rust/ql/test/library-tests/dataflow/global/main.rs +++ b/rust/ql/test/library-tests/dataflow/global/main.rs @@ -24,11 +24,11 @@ struct MyStruct { impl MyStruct { fn set_data(&mut self, n: i64) { - (*self).data = n // todo: implicit deref not yet supported + self.data = n } fn get_data(&self) -> i64 { - (*self).data // todo: implicit deref not yet supported + self.data } } @@ -106,11 +106,19 @@ impl MyFlag { } fn get_data(self) -> i64 { - if self.flag { 0 } else { source(2) } + if self.flag { + 0 + } else { + source(2) + } } fn data_through(self, n: i64) -> i64 { - if self.flag { 0 } else { n } + if self.flag { + 0 + } else { + n + } } } @@ -120,11 +128,19 @@ impl MyTrait for MyFlag { } fn get_data_trait(self) -> i64 { - if self.flag { 0 } else { source(21) } + if self.flag { + 0 + } else { + source(21) + } } fn data_through_trait(self, n: i64) -> i64 { - if self.flag { 0 } else { n } + if self.flag { + 0 + } else { + n + } } } @@ -225,7 +241,7 @@ impl Add for MyInt { impl MulAssign for MyInt { fn mul_assign(&mut self, rhs: MyInt) { - (*self).value = rhs.value; // todo: implicit deref not yet supported + self.value = rhs.value; } } @@ -264,7 +280,7 @@ fn test_operator_overloading() { let mut a = MyInt { value: 0 }; let b = MyInt { value: source(35) }; a *= b; - sink(a.value); // $ MISSING: hasValueFlow=35 + sink(a.value); // $ hasValueFlow=35 // Tests for deref operator. let a = MyInt { value: source(27) }; @@ -274,7 +290,11 @@ fn test_operator_overloading() { let a = MyInt { value: source(28) }; let c = *a; - sink(c); // $ hasTaintFlow=28 MISSING: hasValueFlow=28 + sink(c); // $ hasValueFlow=28 + + let a = MyInt { value: source(29) }; + let c = a.min(1042); + sink(c); // $ MISSING: hasValueFlow=29 } trait MyTrait2 { @@ -320,7 +340,7 @@ async fn async_source() -> i64 { async fn test_async_await_async_part() { let a = async_source().await; - sink(a); // $ MISSING: hasValueFlow=1 + sink(a); // $ hasTaintFlow=1 MISSING: hasValueFlow=1 let b = async { let c = source(2); @@ -337,6 +357,69 @@ fn test_async_await() { futures::executor::block_on(test_async_await_async_part()); } +mod not_trait_dispatch { + use super::{sink, source}; + + trait HasNumbers { + fn get_number(&self) -> i64; + + fn get_double_number(&self) -> i64 { + self.get_number() * 2 + } + + fn get_default() -> i64 { + source(0) + } + } + + struct Three; + + impl HasNumbers for Three { + fn get_number(&self) -> i64 { + source(3) + } + } + + struct TwentyTwo; + + impl HasNumbers for TwentyTwo { + fn get_number(&self) -> i64 { + 22 + } + + fn get_double_number(&self) -> i64 { + source(44) + } + + fn get_default() -> i64 { + source(1) + } + } + + fn test_non_trait_dispatch() { + let t = Three; + + // This call is to the default method implementation. + let n1 = t.get_double_number(); + sink(n1); // $ hasTaintFlow=3 + + // This call is to the default method implementation. + let n2 = HasNumbers::get_double_number(&t); + sink(n2); // $ hasTaintFlow=3 + + // This call is to the default function implementation. + let n3 = Three::get_default(); + sink(n3); // $ hasValueFlow=0 + + let i = TwentyTwo; + let n4 = i.get_double_number(); + sink(n4); // $ hasValueFlow=44 + + let n5 = TwentyTwo::get_default(); + sink(n5); // $ hasValueFlow=1 + } +} + fn main() { data_out_of_call(); data_out_of_call_side_effect1(); diff --git a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected index e26d70d80d63..fa2d58f5a3a5 100644 --- a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected +++ b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected @@ -1,3 +1,4 @@ +| main.rs:2:5:2:12 | ... + ... | {EXTERNAL LOCATION} | fn add | | main.rs:13:5:13:13 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:17:13:17:23 | get_data(...) | main.rs:12:1:14:1 | fn get_data | | main.rs:18:5:18:11 | sink(...) | main.rs:5:1:7:1 | fn sink | @@ -24,91 +25,114 @@ | main.rs:86:13:86:27 | pass_through(...) | main.rs:82:5:84:5 | fn pass_through | | main.rs:87:5:87:11 | sink(...) | main.rs:5:1:7:1 | fn sink | | main.rs:105:9:105:15 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:109:35:109:43 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:119:9:119:15 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:123:35:123:44 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:132:13:132:30 | x.get_data_trait() | main.rs:122:5:124:5 | fn get_data_trait | -| main.rs:133:5:133:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:138:13:138:25 | mn.get_data() | main.rs:108:5:110:5 | fn get_data | -| main.rs:139:5:139:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:142:13:142:31 | mn.get_data_trait() | main.rs:122:5:124:5 | fn get_data_trait | -| main.rs:143:5:143:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:145:5:145:60 | data_out_of_method_trait_dispatch(...) | main.rs:131:1:134:1 | fn data_out_of_method_trait_dispatch | -| main.rs:149:13:149:22 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:150:5:150:22 | x.data_in_trait(...) | main.rs:118:5:120:5 | fn data_in_trait | -| main.rs:155:13:155:21 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:156:5:156:17 | mn.data_in(...) | main.rs:104:5:106:5 | fn data_in | -| main.rs:159:13:159:22 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:160:5:160:23 | mn.data_in_trait(...) | main.rs:118:5:120:5 | fn data_in_trait | -| main.rs:162:5:162:64 | data_in_to_method_call_trait_dispatch(...) | main.rs:148:1:151:1 | fn data_in_to_method_call_trait_dispatch | -| main.rs:166:13:166:22 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:167:13:167:35 | x.data_through_trait(...) | main.rs:126:5:128:5 | fn data_through_trait | -| main.rs:168:5:168:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:173:13:173:21 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:174:13:174:30 | mn.data_through(...) | main.rs:112:5:114:5 | fn data_through | -| main.rs:175:5:175:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:178:13:178:22 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:179:13:179:36 | mn.data_through_trait(...) | main.rs:126:5:128:5 | fn data_through_trait | -| main.rs:180:5:180:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:182:5:182:61 | data_through_method_trait_dispatch(...) | main.rs:165:1:169:1 | fn data_through_method_trait_dispatch | -| main.rs:187:13:187:21 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:188:5:188:26 | ...::data_in(...) | main.rs:104:5:106:5 | fn data_in | -| main.rs:193:13:193:22 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:194:13:194:39 | ...::data_through(...) | main.rs:112:5:114:5 | fn data_through | -| main.rs:195:5:195:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:212:13:212:34 | ...::new(...) | main.rs:205:5:208:5 | fn new | -| main.rs:212:24:212:33 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:214:5:214:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:242:28:242:36 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:244:13:244:17 | ... + ... | main.rs:220:5:223:5 | fn add | -| main.rs:245:5:245:17 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:248:28:248:36 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:249:13:249:17 | ... + ... | main.rs:220:5:223:5 | fn add | -| main.rs:250:5:250:17 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:252:28:252:36 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:254:13:254:20 | a.add(...) | main.rs:220:5:223:5 | fn add | -| main.rs:255:5:255:17 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:259:28:259:37 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:261:5:261:36 | ...::mul_assign(...) | main.rs:227:5:229:5 | fn mul_assign | -| main.rs:262:5:262:17 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:265:28:265:37 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:266:5:266:10 | ... *= ... | main.rs:227:5:229:5 | fn mul_assign | -| main.rs:267:5:267:17 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:270:28:270:37 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:272:14:272:29 | ...::deref(...) | main.rs:235:5:237:5 | fn deref | -| main.rs:273:5:273:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:112:13:112:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:127:9:127:15 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:134:13:134:22 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:148:13:148:30 | x.get_data_trait() | main.rs:130:5:136:5 | fn get_data_trait | +| main.rs:149:5:149:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:154:13:154:25 | mn.get_data() | main.rs:108:5:114:5 | fn get_data | +| main.rs:155:5:155:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:158:13:158:31 | mn.get_data_trait() | main.rs:130:5:136:5 | fn get_data_trait | +| main.rs:159:5:159:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:161:5:161:60 | data_out_of_method_trait_dispatch(...) | main.rs:147:1:150:1 | fn data_out_of_method_trait_dispatch | +| main.rs:165:13:165:22 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:166:5:166:22 | x.data_in_trait(...) | main.rs:126:5:128:5 | fn data_in_trait | +| main.rs:171:13:171:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:172:5:172:17 | mn.data_in(...) | main.rs:104:5:106:5 | fn data_in | +| main.rs:175:13:175:22 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:176:5:176:23 | mn.data_in_trait(...) | main.rs:126:5:128:5 | fn data_in_trait | +| main.rs:178:5:178:64 | data_in_to_method_call_trait_dispatch(...) | main.rs:164:1:167:1 | fn data_in_to_method_call_trait_dispatch | +| main.rs:182:13:182:22 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:183:13:183:35 | x.data_through_trait(...) | main.rs:138:5:144:5 | fn data_through_trait | +| main.rs:184:5:184:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:189:13:189:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:190:13:190:30 | mn.data_through(...) | main.rs:116:5:122:5 | fn data_through | +| main.rs:191:5:191:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:194:13:194:22 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:195:13:195:36 | mn.data_through_trait(...) | main.rs:138:5:144:5 | fn data_through_trait | +| main.rs:196:5:196:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:198:5:198:61 | data_through_method_trait_dispatch(...) | main.rs:181:1:185:1 | fn data_through_method_trait_dispatch | +| main.rs:203:13:203:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:204:5:204:26 | ...::data_in(...) | main.rs:104:5:106:5 | fn data_in | +| main.rs:209:13:209:22 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:210:13:210:39 | ...::data_through(...) | main.rs:116:5:122:5 | fn data_through | +| main.rs:211:5:211:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:228:13:228:34 | ...::new(...) | main.rs:221:5:224:5 | fn new | +| main.rs:228:24:228:33 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:230:5:230:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:252:11:252:15 | * ... | {EXTERNAL LOCATION} | fn deref | +| main.rs:252:11:252:15 | * ... | {EXTERNAL LOCATION} | fn deref | +| main.rs:258:28:258:36 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:260:13:260:17 | ... + ... | main.rs:236:5:239:5 | fn add | +| main.rs:261:5:261:17 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:264:28:264:36 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:265:13:265:17 | ... + ... | main.rs:236:5:239:5 | fn add | +| main.rs:266:5:266:17 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:268:28:268:36 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:270:13:270:20 | a.add(...) | main.rs:236:5:239:5 | fn add | +| main.rs:271:5:271:17 | sink(...) | main.rs:5:1:7:1 | fn sink | | main.rs:275:28:275:37 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:276:13:276:14 | * ... | main.rs:235:5:237:5 | fn deref | -| main.rs:277:5:277:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:299:28:299:36 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:301:30:301:54 | ...::take_self(...) | main.rs:289:5:291:5 | fn take_self | -| main.rs:302:5:302:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:305:28:305:37 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:306:30:306:56 | ...::take_second(...) | main.rs:293:5:295:5 | fn take_second | -| main.rs:307:5:307:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:310:28:310:37 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:311:30:311:54 | ...::take_self(...) | main.rs:289:5:291:5 | fn take_self | -| main.rs:312:5:312:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:316:13:316:21 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:317:5:317:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:322:13:322:26 | async_source(...) | main.rs:315:1:319:1 | fn async_source | -| main.rs:323:5:323:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:326:17:326:25 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:327:9:327:15 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:330:5:330:17 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:334:13:334:55 | ...::block_on(...) | {EXTERNAL LOCATION} | fn block_on | -| main.rs:334:41:334:54 | async_source(...) | main.rs:315:1:319:1 | fn async_source | -| main.rs:335:5:335:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:337:5:337:62 | ...::block_on(...) | {EXTERNAL LOCATION} | fn block_on | -| main.rs:337:33:337:61 | test_async_await_async_part(...) | main.rs:321:1:331:1 | fn test_async_await_async_part | -| main.rs:341:5:341:22 | data_out_of_call(...) | main.rs:16:1:19:1 | fn data_out_of_call | -| main.rs:342:5:342:35 | data_out_of_call_side_effect1(...) | main.rs:35:1:40:1 | fn data_out_of_call_side_effect1 | -| main.rs:343:5:343:35 | data_out_of_call_side_effect2(...) | main.rs:42:1:50:1 | fn data_out_of_call_side_effect2 | -| main.rs:344:5:344:21 | data_in_to_call(...) | main.rs:56:1:59:1 | fn data_in_to_call | -| main.rs:345:5:345:23 | data_through_call(...) | main.rs:65:1:69:1 | fn data_through_call | -| main.rs:346:5:346:34 | data_through_nested_function(...) | main.rs:79:1:88:1 | fn data_through_nested_function | -| main.rs:348:5:348:24 | data_out_of_method(...) | main.rs:136:1:146:1 | fn data_out_of_method | -| main.rs:349:5:349:28 | data_in_to_method_call(...) | main.rs:153:1:163:1 | fn data_in_to_method_call | -| main.rs:350:5:350:25 | data_through_method(...) | main.rs:171:1:183:1 | fn data_through_method | -| main.rs:352:5:352:31 | test_operator_overloading(...) | main.rs:240:1:278:1 | fn test_operator_overloading | -| main.rs:353:5:353:22 | test_async_await(...) | main.rs:333:1:338:1 | fn test_async_await | +| main.rs:277:5:277:36 | ...::mul_assign(...) | main.rs:243:5:245:5 | fn mul_assign | +| main.rs:278:5:278:17 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:281:28:281:37 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:282:5:282:10 | ... *= ... | main.rs:243:5:245:5 | fn mul_assign | +| main.rs:283:5:283:17 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:286:28:286:37 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:288:13:288:29 | * ... | {EXTERNAL LOCATION} | fn deref | +| main.rs:288:13:288:29 | * ... | {EXTERNAL LOCATION} | fn deref | +| main.rs:288:14:288:29 | ...::deref(...) | main.rs:251:5:253:5 | fn deref | +| main.rs:289:5:289:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:291:28:291:37 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:292:13:292:14 | * ... | main.rs:251:5:253:5 | fn deref | +| main.rs:293:5:293:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:295:28:295:37 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:297:5:297:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:319:28:319:36 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:321:30:321:54 | ...::take_self(...) | main.rs:309:5:311:5 | fn take_self | +| main.rs:322:5:322:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:325:28:325:37 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:326:30:326:56 | ...::take_second(...) | main.rs:313:5:315:5 | fn take_second | +| main.rs:327:5:327:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:330:28:330:37 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:331:30:331:54 | ...::take_self(...) | main.rs:309:5:311:5 | fn take_self | +| main.rs:332:5:332:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:336:13:336:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:337:5:337:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:342:13:342:26 | async_source(...) | main.rs:335:1:339:1 | fn async_source | +| main.rs:343:5:343:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:346:17:346:25 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:347:9:347:15 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:350:5:350:17 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:354:13:354:55 | ...::block_on(...) | {EXTERNAL LOCATION} | fn block_on | +| main.rs:354:41:354:54 | async_source(...) | main.rs:335:1:339:1 | fn async_source | +| main.rs:355:5:355:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:357:5:357:62 | ...::block_on(...) | {EXTERNAL LOCATION} | fn block_on | +| main.rs:357:33:357:61 | test_async_await_async_part(...) | main.rs:341:1:351:1 | fn test_async_await_async_part | +| main.rs:367:13:367:29 | self.get_number() | main.rs:378:9:380:9 | fn get_number | +| main.rs:367:13:367:29 | self.get_number() | main.rs:386:9:388:9 | fn get_number | +| main.rs:367:13:367:33 | ... * ... | {EXTERNAL LOCATION} | fn mul | +| main.rs:371:13:371:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:379:13:379:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:391:13:391:22 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:395:13:395:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:403:18:403:38 | t.get_double_number() | main.rs:366:9:368:9 | fn get_double_number | +| main.rs:404:9:404:16 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:407:18:407:50 | ...::get_double_number(...) | main.rs:366:9:368:9 | fn get_double_number | +| main.rs:408:9:408:16 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:411:18:411:37 | ...::get_default(...) | main.rs:370:9:372:9 | fn get_default | +| main.rs:412:9:412:16 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:415:18:415:38 | i.get_double_number() | main.rs:390:9:392:9 | fn get_double_number | +| main.rs:416:9:416:16 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:418:18:418:41 | ...::get_default(...) | main.rs:394:9:396:9 | fn get_default | +| main.rs:419:9:419:16 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:424:5:424:22 | data_out_of_call(...) | main.rs:16:1:19:1 | fn data_out_of_call | +| main.rs:425:5:425:35 | data_out_of_call_side_effect1(...) | main.rs:35:1:40:1 | fn data_out_of_call_side_effect1 | +| main.rs:426:5:426:35 | data_out_of_call_side_effect2(...) | main.rs:42:1:50:1 | fn data_out_of_call_side_effect2 | +| main.rs:427:5:427:21 | data_in_to_call(...) | main.rs:56:1:59:1 | fn data_in_to_call | +| main.rs:428:5:428:23 | data_through_call(...) | main.rs:65:1:69:1 | fn data_through_call | +| main.rs:429:5:429:34 | data_through_nested_function(...) | main.rs:79:1:88:1 | fn data_through_nested_function | +| main.rs:431:5:431:24 | data_out_of_method(...) | main.rs:152:1:162:1 | fn data_out_of_method | +| main.rs:432:5:432:28 | data_in_to_method_call(...) | main.rs:169:1:179:1 | fn data_in_to_method_call | +| main.rs:433:5:433:25 | data_through_method(...) | main.rs:187:1:199:1 | fn data_through_method | +| main.rs:435:5:435:31 | test_operator_overloading(...) | main.rs:256:1:298:1 | fn test_operator_overloading | +| main.rs:436:5:436:22 | test_async_await(...) | main.rs:353:1:358:1 | fn test_async_await | diff --git a/rust/ql/test/library-tests/dataflow/lambdas/inline-flow.ql b/rust/ql/test/library-tests/dataflow/lambdas/inline-flow.ql index e399ea0e5d71..5dcb7ee70a9d 100644 --- a/rust/ql/test/library-tests/dataflow/lambdas/inline-flow.ql +++ b/rust/ql/test/library-tests/dataflow/lambdas/inline-flow.ql @@ -5,8 +5,8 @@ import rust import utils.test.InlineFlowTest import DefaultFlowTest -import ValueFlow::PathGraph +import TaintFlow::PathGraph -from ValueFlow::PathNode source, ValueFlow::PathNode sink -where ValueFlow::flowPath(source, sink) +from TaintFlow::PathNode source, TaintFlow::PathNode sink +where TaintFlow::flowPath(source, sink) select sink, source, sink, "$@", source, source.toString() diff --git a/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..f99062c73d14 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,2 @@ +multipleResolvedTargets +| main.rs:562:10:562:15 | * ... | diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index 36a1c74018ed..d607e5fe31cb 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -156,8 +156,6 @@ localStep | main.rs:115:9:115:9 | i | main.rs:115:9:115:9 | [SSA] i | | main.rs:115:9:115:9 | i | main.rs:115:9:115:9 | i | | main.rs:115:13:115:31 | ...::new(...) | main.rs:115:9:115:9 | i | -| main.rs:116:11:116:11 | [post] receiver for i | main.rs:116:11:116:11 | [post] i | -| main.rs:116:11:116:11 | i | main.rs:116:11:116:11 | receiver for i | | main.rs:123:9:123:9 | [SSA] a | main.rs:124:10:124:10 | a | | main.rs:123:9:123:9 | a | main.rs:123:9:123:9 | [SSA] a | | main.rs:123:9:123:9 | a | main.rs:123:9:123:9 | a | @@ -340,32 +338,22 @@ localStep | main.rs:278:9:278:10 | s1 | main.rs:278:9:278:10 | [SSA] s1 | | main.rs:278:9:278:10 | s1 | main.rs:278:9:278:10 | s1 | | main.rs:278:14:278:29 | Some(...) | main.rs:278:9:278:10 | s1 | -| main.rs:279:10:279:11 | [post] receiver for s1 | main.rs:279:10:279:11 | [post] s1 | -| main.rs:279:10:279:11 | s1 | main.rs:279:10:279:11 | receiver for s1 | | main.rs:283:9:283:10 | [SSA] s1 | main.rs:284:10:284:11 | s1 | | main.rs:283:9:283:10 | s1 | main.rs:283:9:283:10 | [SSA] s1 | | main.rs:283:9:283:10 | s1 | main.rs:283:9:283:10 | s1 | | main.rs:283:14:283:29 | Some(...) | main.rs:283:9:283:10 | s1 | -| main.rs:284:10:284:11 | [post] receiver for s1 | main.rs:284:10:284:11 | [post] s1 | -| main.rs:284:10:284:11 | s1 | main.rs:284:10:284:11 | receiver for s1 | | main.rs:286:9:286:10 | [SSA] s2 | main.rs:287:10:287:11 | s2 | | main.rs:286:9:286:10 | s2 | main.rs:286:9:286:10 | [SSA] s2 | | main.rs:286:9:286:10 | s2 | main.rs:286:9:286:10 | s2 | | main.rs:286:14:286:20 | Some(...) | main.rs:286:9:286:10 | s2 | -| main.rs:287:10:287:11 | [post] receiver for s2 | main.rs:287:10:287:11 | [post] s2 | -| main.rs:287:10:287:11 | s2 | main.rs:287:10:287:11 | receiver for s2 | | main.rs:291:9:291:10 | [SSA] s1 | main.rs:292:10:292:11 | s1 | | main.rs:291:9:291:10 | s1 | main.rs:291:9:291:10 | [SSA] s1 | | main.rs:291:9:291:10 | s1 | main.rs:291:9:291:10 | s1 | | main.rs:291:14:291:29 | Some(...) | main.rs:291:9:291:10 | s1 | -| main.rs:292:10:292:11 | [post] receiver for s1 | main.rs:292:10:292:11 | [post] s1 | -| main.rs:292:10:292:11 | s1 | main.rs:292:10:292:11 | receiver for s1 | | main.rs:294:9:294:10 | [SSA] s2 | main.rs:295:10:295:11 | s2 | | main.rs:294:9:294:10 | s2 | main.rs:294:9:294:10 | [SSA] s2 | | main.rs:294:9:294:10 | s2 | main.rs:294:9:294:10 | s2 | | main.rs:294:14:294:17 | None | main.rs:294:9:294:10 | s2 | -| main.rs:295:10:295:11 | [post] receiver for s2 | main.rs:295:10:295:11 | [post] s2 | -| main.rs:295:10:295:11 | s2 | main.rs:295:10:295:11 | receiver for s2 | | main.rs:299:9:299:10 | [SSA] s1 | main.rs:301:14:301:15 | s1 | | main.rs:299:9:299:10 | s1 | main.rs:299:9:299:10 | [SSA] s1 | | main.rs:299:9:299:10 | s1 | main.rs:299:9:299:10 | s1 | @@ -387,20 +375,12 @@ localStep | main.rs:309:9:309:11 | o1a | main.rs:309:9:309:11 | [SSA] o1a | | main.rs:309:9:309:11 | o1a | main.rs:309:9:309:11 | o1a | | main.rs:309:28:309:29 | [post] r1 | main.rs:310:28:310:29 | r1 | -| main.rs:309:28:309:29 | [post] receiver for r1 | main.rs:309:28:309:29 | [post] r1 | -| main.rs:309:28:309:29 | r1 | main.rs:309:28:309:29 | receiver for r1 | | main.rs:309:28:309:29 | r1 | main.rs:310:28:310:29 | r1 | | main.rs:309:28:309:34 | r1.ok() | main.rs:309:9:309:11 | o1a | | main.rs:310:9:310:11 | [SSA] o1b | main.rs:312:10:312:12 | o1b | | main.rs:310:9:310:11 | o1b | main.rs:310:9:310:11 | [SSA] o1b | | main.rs:310:9:310:11 | o1b | main.rs:310:9:310:11 | o1b | -| main.rs:310:28:310:29 | [post] receiver for r1 | main.rs:310:28:310:29 | [post] r1 | -| main.rs:310:28:310:29 | r1 | main.rs:310:28:310:29 | receiver for r1 | | main.rs:310:28:310:35 | r1.err() | main.rs:310:9:310:11 | o1b | -| main.rs:311:10:311:12 | [post] receiver for o1a | main.rs:311:10:311:12 | [post] o1a | -| main.rs:311:10:311:12 | o1a | main.rs:311:10:311:12 | receiver for o1a | -| main.rs:312:10:312:12 | [post] receiver for o1b | main.rs:312:10:312:12 | [post] o1b | -| main.rs:312:10:312:12 | o1b | main.rs:312:10:312:12 | receiver for o1b | | main.rs:314:9:314:10 | [SSA] r2 | main.rs:315:28:315:29 | r2 | | main.rs:314:9:314:10 | r2 | main.rs:314:9:314:10 | [SSA] r2 | | main.rs:314:9:314:10 | r2 | main.rs:314:9:314:10 | r2 | @@ -409,20 +389,12 @@ localStep | main.rs:315:9:315:11 | o2a | main.rs:315:9:315:11 | [SSA] o2a | | main.rs:315:9:315:11 | o2a | main.rs:315:9:315:11 | o2a | | main.rs:315:28:315:29 | [post] r2 | main.rs:316:28:316:29 | r2 | -| main.rs:315:28:315:29 | [post] receiver for r2 | main.rs:315:28:315:29 | [post] r2 | -| main.rs:315:28:315:29 | r2 | main.rs:315:28:315:29 | receiver for r2 | | main.rs:315:28:315:29 | r2 | main.rs:316:28:316:29 | r2 | | main.rs:315:28:315:34 | r2.ok() | main.rs:315:9:315:11 | o2a | | main.rs:316:9:316:11 | [SSA] o2b | main.rs:318:10:318:12 | o2b | | main.rs:316:9:316:11 | o2b | main.rs:316:9:316:11 | [SSA] o2b | | main.rs:316:9:316:11 | o2b | main.rs:316:9:316:11 | o2b | -| main.rs:316:28:316:29 | [post] receiver for r2 | main.rs:316:28:316:29 | [post] r2 | -| main.rs:316:28:316:29 | r2 | main.rs:316:28:316:29 | receiver for r2 | | main.rs:316:28:316:35 | r2.err() | main.rs:316:9:316:11 | o2b | -| main.rs:317:10:317:12 | [post] receiver for o2a | main.rs:317:10:317:12 | [post] o2a | -| main.rs:317:10:317:12 | o2a | main.rs:317:10:317:12 | receiver for o2a | -| main.rs:318:10:318:12 | [post] receiver for o2b | main.rs:318:10:318:12 | [post] o2b | -| main.rs:318:10:318:12 | o2b | main.rs:318:10:318:12 | receiver for o2b | | main.rs:322:9:322:10 | [SSA] s1 | main.rs:325:14:325:15 | s1 | | main.rs:322:9:322:10 | s1 | main.rs:322:9:322:10 | [SSA] s1 | | main.rs:322:9:322:10 | s1 | main.rs:322:9:322:10 | s1 | @@ -452,22 +424,14 @@ localStep | main.rs:335:9:335:10 | s1 | main.rs:335:9:335:10 | [SSA] s1 | | main.rs:335:9:335:10 | s1 | main.rs:335:9:335:10 | s1 | | main.rs:335:32:335:45 | Ok(...) | main.rs:335:9:335:10 | s1 | -| main.rs:336:10:336:11 | [post] receiver for s1 | main.rs:336:10:336:11 | [post] s1 | | main.rs:336:10:336:11 | [post] s1 | main.rs:337:10:337:11 | s1 | -| main.rs:336:10:336:11 | s1 | main.rs:336:10:336:11 | receiver for s1 | | main.rs:336:10:336:11 | s1 | main.rs:337:10:337:11 | s1 | -| main.rs:337:10:337:11 | [post] receiver for s1 | main.rs:337:10:337:11 | [post] s1 | -| main.rs:337:10:337:11 | s1 | main.rs:337:10:337:11 | receiver for s1 | | main.rs:339:9:339:10 | [SSA] s2 | main.rs:340:10:340:11 | s2 | | main.rs:339:9:339:10 | s2 | main.rs:339:9:339:10 | [SSA] s2 | | main.rs:339:9:339:10 | s2 | main.rs:339:9:339:10 | s2 | | main.rs:339:32:339:46 | Err(...) | main.rs:339:9:339:10 | s2 | -| main.rs:340:10:340:11 | [post] receiver for s2 | main.rs:340:10:340:11 | [post] s2 | | main.rs:340:10:340:11 | [post] s2 | main.rs:341:10:341:11 | s2 | -| main.rs:340:10:340:11 | s2 | main.rs:340:10:340:11 | receiver for s2 | | main.rs:340:10:340:11 | s2 | main.rs:341:10:341:11 | s2 | -| main.rs:341:10:341:11 | [post] receiver for s2 | main.rs:341:10:341:11 | [post] s2 | -| main.rs:341:10:341:11 | s2 | main.rs:341:10:341:11 | receiver for s2 | | main.rs:350:9:350:10 | [SSA] s1 | main.rs:352:11:352:12 | s1 | | main.rs:350:9:350:10 | s1 | main.rs:350:9:350:10 | [SSA] s1 | | main.rs:350:9:350:10 | s1 | main.rs:350:9:350:10 | s1 | @@ -704,8 +668,6 @@ localStep | main.rs:478:39:478:72 | ...: Vec::<...> | main.rs:478:39:478:43 | names | | main.rs:479:9:479:20 | default_name | main.rs:479:9:479:20 | [SSA] default_name | | main.rs:479:9:479:20 | default_name | main.rs:479:9:479:20 | default_name | -| main.rs:479:24:479:33 | [post] receiver for source(...) | main.rs:479:24:479:33 | [post] source(...) | -| main.rs:479:24:479:33 | source(...) | main.rs:479:24:479:33 | receiver for source(...) | | main.rs:479:24:479:45 | ... .to_string() | main.rs:479:9:479:20 | default_name | | main.rs:479:24:479:45 | ... .to_string() | main.rs:480:9:480:20 | SSA phi read(default_name) | | main.rs:480:5:486:5 | for ... in ... { ... } | main.rs:478:75:487:1 | { ... } | @@ -721,16 +683,10 @@ localStep | main.rs:482:17:482:17 | [SSA] n | main.rs:483:18:483:18 | n | | main.rs:482:17:482:17 | n | main.rs:482:17:482:17 | [SSA] n | | main.rs:482:17:482:17 | n | main.rs:482:17:482:17 | n | -| main.rs:482:21:482:24 | [post] receiver for name | main.rs:482:21:482:24 | [post] name | -| main.rs:482:21:482:24 | name | main.rs:482:21:482:24 | receiver for name | | main.rs:482:21:482:68 | name.unwrap_or_else(...) | main.rs:482:17:482:17 | n | | main.rs:482:41:482:67 | [post] default_name | main.rs:480:9:480:20 | SSA phi read(default_name) | | main.rs:482:41:482:67 | closure self in \|...\| ... | main.rs:482:44:482:55 | this | | main.rs:482:41:482:67 | default_name | main.rs:480:9:480:20 | SSA phi read(default_name) | -| main.rs:482:44:482:55 | [post] receiver for default_name | main.rs:482:44:482:55 | [post] default_name | -| main.rs:482:44:482:55 | default_name | main.rs:482:44:482:55 | receiver for default_name | -| main.rs:483:18:483:18 | [post] receiver for n | main.rs:483:18:483:18 | [post] n | -| main.rs:483:18:483:18 | n | main.rs:483:18:483:18 | receiver for n | | main.rs:496:9:496:9 | [SSA] s | main.rs:497:10:497:10 | s | | main.rs:496:9:496:9 | s | main.rs:496:9:496:9 | [SSA] s | | main.rs:496:9:496:9 | s | main.rs:496:9:496:9 | s | @@ -752,29 +708,19 @@ localStep | main.rs:506:9:506:9 | b | main.rs:506:9:506:9 | [SSA] b | | main.rs:506:9:506:9 | b | main.rs:506:9:506:9 | b | | main.rs:506:13:506:13 | [post] a | main.rs:510:10:510:10 | a | -| main.rs:506:13:506:13 | [post] receiver for a | main.rs:506:13:506:13 | [post] a | -| main.rs:506:13:506:13 | a | main.rs:506:13:506:13 | receiver for a | | main.rs:506:13:506:13 | a | main.rs:510:10:510:10 | a | | main.rs:506:13:506:25 | a.to_string() | main.rs:506:9:506:9 | b | | main.rs:507:9:507:9 | [SSA] c | main.rs:512:10:512:10 | c | | main.rs:507:9:507:9 | c | main.rs:507:9:507:9 | [SSA] c | | main.rs:507:9:507:9 | c | main.rs:507:9:507:9 | c | | main.rs:507:13:507:13 | [post] b | main.rs:508:18:508:18 | b | -| main.rs:507:13:507:13 | [post] receiver for b | main.rs:507:13:507:13 | [post] b | -| main.rs:507:13:507:13 | b | main.rs:507:13:507:13 | receiver for b | | main.rs:507:13:507:13 | b | main.rs:508:18:508:18 | b | -| main.rs:507:13:507:28 | [post] receiver for b.parse() | main.rs:507:13:507:28 | [post] b.parse() | -| main.rs:507:13:507:28 | b.parse() | main.rs:507:13:507:28 | receiver for b.parse() | | main.rs:507:13:507:37 | ... .unwrap() | main.rs:507:9:507:9 | c | | main.rs:508:9:508:9 | [SSA] d | main.rs:513:10:513:10 | d | | main.rs:508:9:508:9 | d | main.rs:508:9:508:9 | [SSA] d | | main.rs:508:9:508:9 | d | main.rs:508:9:508:9 | d | | main.rs:508:18:508:18 | [post] b | main.rs:511:17:511:17 | b | -| main.rs:508:18:508:18 | [post] receiver for b | main.rs:508:18:508:18 | [post] b | -| main.rs:508:18:508:18 | b | main.rs:508:18:508:18 | receiver for b | | main.rs:508:18:508:18 | b | main.rs:511:17:511:17 | b | -| main.rs:508:18:508:26 | [post] receiver for b.parse() | main.rs:508:18:508:26 | [post] b.parse() | -| main.rs:508:18:508:26 | b.parse() | main.rs:508:18:508:26 | receiver for b.parse() | | main.rs:508:18:508:35 | ... .unwrap() | main.rs:508:9:508:9 | d | | main.rs:517:9:517:10 | [SSA] vs | main.rs:519:10:519:11 | vs | | main.rs:517:9:517:10 | vs | main.rs:517:9:517:10 | [SSA] vs | @@ -782,26 +728,10 @@ localStep | main.rs:517:14:517:34 | [...] | main.rs:517:9:517:10 | vs | | main.rs:519:10:519:11 | [post] vs | main.rs:520:11:520:12 | vs | | main.rs:519:10:519:11 | vs | main.rs:520:11:520:12 | vs | -| main.rs:520:11:520:12 | [post] receiver for vs | main.rs:520:11:520:12 | [post] vs | | main.rs:520:11:520:12 | [post] vs | main.rs:521:11:521:12 | vs | -| main.rs:520:11:520:12 | vs | main.rs:520:11:520:12 | receiver for vs | | main.rs:520:11:520:12 | vs | main.rs:521:11:521:12 | vs | -| main.rs:520:11:520:19 | [post] receiver for vs.iter() | main.rs:520:11:520:19 | [post] vs.iter() | -| main.rs:520:11:520:19 | vs.iter() | main.rs:520:11:520:19 | receiver for vs.iter() | -| main.rs:520:11:520:26 | ... .next() | main.rs:520:11:520:26 | receiver for ... .next() | -| main.rs:520:11:520:26 | [post] receiver for ... .next() | main.rs:520:11:520:26 | [post] ... .next() | -| main.rs:520:11:520:35 | ... .unwrap() | main.rs:520:11:520:35 | receiver for ... .unwrap() | -| main.rs:520:11:520:35 | [post] receiver for ... .unwrap() | main.rs:520:11:520:35 | [post] ... .unwrap() | -| main.rs:521:11:521:12 | [post] receiver for vs | main.rs:521:11:521:12 | [post] vs | | main.rs:521:11:521:12 | [post] vs | main.rs:523:14:523:15 | vs | -| main.rs:521:11:521:12 | vs | main.rs:521:11:521:12 | receiver for vs | | main.rs:521:11:521:12 | vs | main.rs:523:14:523:15 | vs | -| main.rs:521:11:521:19 | [post] receiver for vs.iter() | main.rs:521:11:521:19 | [post] vs.iter() | -| main.rs:521:11:521:19 | vs.iter() | main.rs:521:11:521:19 | receiver for vs.iter() | -| main.rs:521:11:521:26 | ... .nth(...) | main.rs:521:11:521:26 | receiver for ... .nth(...) | -| main.rs:521:11:521:26 | [post] receiver for ... .nth(...) | main.rs:521:11:521:26 | [post] ... .nth(...) | -| main.rs:521:11:521:35 | ... .unwrap() | main.rs:521:11:521:35 | receiver for ... .unwrap() | -| main.rs:521:11:521:35 | [post] receiver for ... .unwrap() | main.rs:521:11:521:35 | [post] ... .unwrap() | | main.rs:523:9:523:9 | [SSA] v | main.rs:524:14:524:14 | v | | main.rs:523:9:523:9 | v | main.rs:523:9:523:9 | [SSA] v | | main.rs:523:9:523:9 | v | main.rs:523:9:523:9 | v | @@ -809,52 +739,32 @@ localStep | main.rs:526:10:526:10 | [SSA] v | main.rs:527:14:527:14 | v | | main.rs:526:10:526:10 | v | main.rs:526:10:526:10 | [SSA] v | | main.rs:526:10:526:10 | v | main.rs:526:10:526:10 | v | -| main.rs:526:15:526:16 | [post] receiver for vs | main.rs:526:15:526:16 | [post] vs | | main.rs:526:15:526:16 | [post] vs | main.rs:530:26:530:27 | vs | -| main.rs:526:15:526:16 | vs | main.rs:526:15:526:16 | receiver for vs | | main.rs:526:15:526:16 | vs | main.rs:530:26:530:27 | vs | | main.rs:530:9:530:11 | [SSA] vs2 | main.rs:531:15:531:17 | vs2 | | main.rs:530:9:530:11 | vs2 | main.rs:530:9:530:11 | [SSA] vs2 | | main.rs:530:9:530:11 | vs2 | main.rs:530:9:530:11 | vs2 | -| main.rs:530:26:530:27 | [post] receiver for vs | main.rs:530:26:530:27 | [post] vs | | main.rs:530:26:530:27 | [post] vs | main.rs:535:5:535:6 | vs | -| main.rs:530:26:530:27 | vs | main.rs:530:26:530:27 | receiver for vs | | main.rs:530:26:530:27 | vs | main.rs:535:5:535:6 | vs | -| main.rs:530:26:530:34 | [post] receiver for vs.iter() | main.rs:530:26:530:34 | [post] vs.iter() | -| main.rs:530:26:530:34 | vs.iter() | main.rs:530:26:530:34 | receiver for vs.iter() | | main.rs:530:26:530:44 | ... .collect() | main.rs:530:9:530:11 | vs2 | | main.rs:531:10:531:10 | [SSA] v | main.rs:532:14:532:14 | v | | main.rs:531:10:531:10 | v | main.rs:531:10:531:10 | [SSA] v | | main.rs:531:10:531:10 | v | main.rs:531:10:531:10 | v | -| main.rs:535:5:535:6 | [post] receiver for vs | main.rs:535:5:535:6 | [post] vs | | main.rs:535:5:535:6 | [post] vs | main.rs:536:5:536:6 | vs | -| main.rs:535:5:535:6 | vs | main.rs:535:5:535:6 | receiver for vs | | main.rs:535:5:535:6 | vs | main.rs:536:5:536:6 | vs | -| main.rs:535:5:535:13 | [post] receiver for vs.iter() | main.rs:535:5:535:13 | [post] vs.iter() | -| main.rs:535:5:535:13 | vs.iter() | main.rs:535:5:535:13 | receiver for vs.iter() | | main.rs:535:20:535:20 | ... | main.rs:535:20:535:20 | x | | main.rs:535:20:535:20 | [SSA] x | main.rs:535:29:535:29 | x | | main.rs:535:20:535:20 | x | main.rs:535:20:535:20 | [SSA] x | | main.rs:535:20:535:20 | x | main.rs:535:20:535:20 | x | -| main.rs:535:29:535:29 | [post] receiver for x | main.rs:535:29:535:29 | [post] x | -| main.rs:535:29:535:29 | x | main.rs:535:29:535:29 | receiver for x | -| main.rs:536:5:536:6 | [post] receiver for vs | main.rs:536:5:536:6 | [post] vs | | main.rs:536:5:536:6 | [post] vs | main.rs:538:14:538:15 | vs | -| main.rs:536:5:536:6 | vs | main.rs:536:5:536:6 | receiver for vs | | main.rs:536:5:536:6 | vs | main.rs:538:14:538:15 | vs | -| main.rs:536:5:536:13 | [post] receiver for vs.iter() | main.rs:536:5:536:13 | [post] vs.iter() | -| main.rs:536:5:536:13 | vs.iter() | main.rs:536:5:536:13 | receiver for vs.iter() | | main.rs:536:25:536:25 | ... | main.rs:536:25:536:25 | x | | main.rs:536:25:536:25 | [SSA] x | main.rs:536:34:536:34 | x | | main.rs:536:25:536:25 | x | main.rs:536:25:536:25 | [SSA] x | | main.rs:536:25:536:25 | x | main.rs:536:25:536:25 | x | -| main.rs:536:34:536:34 | [post] receiver for x | main.rs:536:34:536:34 | [post] x | -| main.rs:536:34:536:34 | x | main.rs:536:34:536:34 | receiver for x | | main.rs:538:9:538:9 | [SSA] v | main.rs:539:14:539:14 | v | | main.rs:538:9:538:9 | v | main.rs:538:9:538:9 | [SSA] v | | main.rs:538:9:538:9 | v | main.rs:538:9:538:9 | v | -| main.rs:538:14:538:15 | [post] receiver for vs | main.rs:538:14:538:15 | [post] vs | -| main.rs:538:14:538:15 | vs | main.rs:538:14:538:15 | receiver for vs | | main.rs:542:9:542:18 | mut vs_mut | main.rs:542:13:542:18 | vs_mut | | main.rs:542:13:542:18 | [SSA] vs_mut | main.rs:544:10:544:15 | vs_mut | | main.rs:542:13:542:18 | vs_mut | main.rs:542:13:542:18 | [SSA] vs_mut | @@ -865,35 +775,17 @@ localStep | main.rs:544:10:544:15 | vs_mut | main.rs:545:11:545:16 | vs_mut | | main.rs:545:11:545:16 | [SSA] vs_mut | main.rs:546:11:546:16 | [SSA] vs_mut | | main.rs:545:11:545:16 | [SSA] vs_mut | main.rs:546:11:546:16 | vs_mut | -| main.rs:545:11:545:16 | [post] receiver for vs_mut | main.rs:545:11:545:16 | [post] vs_mut | | main.rs:545:11:545:16 | [post] vs_mut | main.rs:546:11:546:16 | [SSA] vs_mut | | main.rs:545:11:545:16 | [post] vs_mut | main.rs:546:11:546:16 | vs_mut | -| main.rs:545:11:545:16 | vs_mut | main.rs:545:11:545:16 | receiver for vs_mut | | main.rs:545:11:545:16 | vs_mut | main.rs:546:11:546:16 | [SSA] vs_mut | | main.rs:545:11:545:16 | vs_mut | main.rs:546:11:546:16 | vs_mut | -| main.rs:545:11:545:23 | [post] receiver for vs_mut.iter() | main.rs:545:11:545:23 | [post] vs_mut.iter() | -| main.rs:545:11:545:23 | vs_mut.iter() | main.rs:545:11:545:23 | receiver for vs_mut.iter() | -| main.rs:545:11:545:30 | ... .next() | main.rs:545:11:545:30 | receiver for ... .next() | -| main.rs:545:11:545:30 | [post] receiver for ... .next() | main.rs:545:11:545:30 | [post] ... .next() | -| main.rs:545:11:545:39 | ... .unwrap() | main.rs:545:11:545:39 | receiver for ... .unwrap() | -| main.rs:545:11:545:39 | [post] receiver for ... .unwrap() | main.rs:545:11:545:39 | [post] ... .unwrap() | | main.rs:546:11:546:16 | [SSA] vs_mut | main.rs:548:19:548:24 | vs_mut | -| main.rs:546:11:546:16 | [post] receiver for vs_mut | main.rs:546:11:546:16 | [post] vs_mut | | main.rs:546:11:546:16 | [post] vs_mut | main.rs:548:19:548:24 | vs_mut | -| main.rs:546:11:546:16 | vs_mut | main.rs:546:11:546:16 | receiver for vs_mut | | main.rs:546:11:546:16 | vs_mut | main.rs:548:19:548:24 | vs_mut | -| main.rs:546:11:546:23 | [post] receiver for vs_mut.iter() | main.rs:546:11:546:23 | [post] vs_mut.iter() | -| main.rs:546:11:546:23 | vs_mut.iter() | main.rs:546:11:546:23 | receiver for vs_mut.iter() | -| main.rs:546:11:546:30 | ... .nth(...) | main.rs:546:11:546:30 | receiver for ... .nth(...) | -| main.rs:546:11:546:30 | [post] receiver for ... .nth(...) | main.rs:546:11:546:30 | [post] ... .nth(...) | -| main.rs:546:11:546:39 | ... .unwrap() | main.rs:546:11:546:39 | receiver for ... .unwrap() | -| main.rs:546:11:546:39 | [post] receiver for ... .unwrap() | main.rs:546:11:546:39 | [post] ... .unwrap() | | main.rs:548:5:550:5 | for ... in ... { ... } | main.rs:516:16:551:1 | { ... } | | main.rs:548:14:548:14 | [SSA] v | main.rs:549:14:549:14 | v | | main.rs:548:14:548:14 | v | main.rs:548:14:548:14 | [SSA] v | | main.rs:548:14:548:14 | v | main.rs:548:14:548:14 | v | -| main.rs:548:19:548:24 | [post] receiver for vs_mut | main.rs:548:19:548:24 | [post] vs_mut | -| main.rs:548:19:548:24 | vs_mut | main.rs:548:19:548:24 | receiver for vs_mut | | main.rs:554:9:554:9 | [SSA] a | main.rs:559:10:559:10 | a | | main.rs:554:9:554:9 | a | main.rs:554:9:554:9 | [SSA] a | | main.rs:554:9:554:9 | a | main.rs:554:9:554:9 | a | @@ -912,8 +804,6 @@ localStep | main.rs:557:17:557:18 | &c | main.rs:557:9:557:13 | c_ref | | main.rs:561:14:561:18 | [post] c_ref | main.rs:562:11:562:15 | c_ref | | main.rs:561:14:561:18 | c_ref | main.rs:562:11:562:15 | c_ref | -| main.rs:562:11:562:15 | [post] receiver for c_ref | main.rs:562:11:562:15 | [post] c_ref | -| main.rs:562:11:562:15 | c_ref | main.rs:562:11:562:15 | receiver for c_ref | | main.rs:566:9:566:9 | [SSA] a | main.rs:568:10:568:10 | a | | main.rs:566:9:566:9 | a | main.rs:566:9:566:9 | [SSA] a | | main.rs:566:9:566:9 | a | main.rs:566:9:566:9 | a | @@ -921,8 +811,6 @@ localStep | main.rs:568:10:568:10 | [post] a | main.rs:569:10:569:10 | a | | main.rs:568:10:568:10 | a | main.rs:569:10:569:10 | a | | main.rs:569:10:569:10 | [post] a | main.rs:570:20:570:20 | a | -| main.rs:569:10:569:10 | [post] receiver for a | main.rs:569:10:569:10 | [post] a | -| main.rs:569:10:569:10 | a | main.rs:569:10:569:10 | receiver for a | | main.rs:569:10:569:10 | a | main.rs:570:20:570:20 | a | | main.rs:572:9:572:9 | [SSA] b | main.rs:574:10:574:10 | b | | main.rs:572:9:572:9 | b | main.rs:572:9:572:9 | [SSA] b | @@ -931,16 +819,14 @@ localStep | main.rs:574:10:574:10 | [post] b | main.rs:575:10:575:10 | b | | main.rs:574:10:574:10 | b | main.rs:575:10:575:10 | b | | main.rs:575:10:575:10 | [post] b | main.rs:576:20:576:20 | b | -| main.rs:575:10:575:10 | [post] receiver for b | main.rs:575:10:575:10 | [post] b | -| main.rs:575:10:575:10 | b | main.rs:575:10:575:10 | receiver for b | | main.rs:575:10:575:10 | b | main.rs:576:20:576:20 | b | | main.rs:604:13:604:33 | result_questionmark(...) | main.rs:604:9:604:9 | _ | | main.rs:616:36:616:39 | ...::new(...) | main.rs:616:36:616:41 | MacroExpr | | main.rs:616:36:616:41 | [post] MacroExpr | main.rs:616:36:616:39 | [post] ...::new(...) | readStep | main.rs:50:9:50:15 | Some(...) | {EXTERNAL LOCATION} | Some | main.rs:50:14:50:14 | _ | -| main.rs:116:11:116:11 | [post] receiver for i | file://:0:0:0:0 | &ref | main.rs:116:11:116:11 | [post] i | -| main.rs:116:11:116:11 | i | file://:0:0:0:0 | &ref | main.rs:116:10:116:11 | * ... | +| main.rs:116:10:116:11 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:116:10:116:11 | * ... | +| main.rs:116:11:116:11 | [post] i [borrowed] | file://:0:0:0:0 | &ref | main.rs:116:11:116:11 | [post] i | | main.rs:124:10:124:10 | a | file://:0:0:0:0 | tuple.0 | main.rs:124:10:124:12 | a.0 | | main.rs:125:10:125:10 | a | file://:0:0:0:0 | tuple.1 | main.rs:125:10:125:12 | a.1 | | main.rs:130:9:130:20 | TuplePat | file://:0:0:0:0 | tuple.0 | main.rs:130:10:130:11 | a0 | @@ -1018,53 +904,62 @@ readStep | main.rs:418:28:418:43 | D {...} | main.rs:385:9:385:20 | D | main.rs:418:41:418:41 | n | | main.rs:421:9:421:24 | C {...} | main.rs:384:9:384:20 | C | main.rs:421:22:421:22 | n | | main.rs:422:9:422:24 | D {...} | main.rs:385:9:385:20 | D | main.rs:422:22:422:22 | n | -| main.rs:431:14:431:17 | arr1 | file://:0:0:0:0 | element | main.rs:431:14:431:20 | arr1[2] | -| main.rs:435:14:435:17 | arr2 | file://:0:0:0:0 | element | main.rs:435:14:435:20 | arr2[4] | -| main.rs:439:14:439:17 | arr3 | file://:0:0:0:0 | element | main.rs:439:14:439:20 | arr3[2] | +| main.rs:431:14:431:17 | [post] arr1 [borrowed] | file://:0:0:0:0 | &ref | main.rs:431:14:431:17 | [post] arr1 | +| main.rs:431:14:431:20 | arr1[2] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:431:14:431:20 | arr1[2] | +| main.rs:435:14:435:17 | [post] arr2 [borrowed] | file://:0:0:0:0 | &ref | main.rs:435:14:435:17 | [post] arr2 | +| main.rs:435:14:435:20 | arr2[4] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:435:14:435:20 | arr2[4] | +| main.rs:439:14:439:17 | [post] arr3 [borrowed] | file://:0:0:0:0 | &ref | main.rs:439:14:439:17 | [post] arr3 | +| main.rs:439:14:439:20 | arr3[2] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:439:14:439:20 | arr3[2] | | main.rs:445:15:445:18 | arr1 | file://:0:0:0:0 | element | main.rs:445:9:445:10 | n1 | | main.rs:450:15:450:18 | arr2 | file://:0:0:0:0 | element | main.rs:450:9:450:10 | n2 | | main.rs:458:9:458:17 | SlicePat | file://:0:0:0:0 | element | main.rs:458:10:458:10 | a | | main.rs:458:9:458:17 | SlicePat | file://:0:0:0:0 | element | main.rs:458:13:458:13 | b | | main.rs:458:9:458:17 | SlicePat | file://:0:0:0:0 | element | main.rs:458:16:458:16 | c | -| main.rs:468:10:468:16 | mut_arr | file://:0:0:0:0 | element | main.rs:468:10:468:19 | mut_arr[1] | -| main.rs:470:5:470:11 | mut_arr | file://:0:0:0:0 | element | main.rs:470:5:470:14 | mut_arr[1] | -| main.rs:471:13:471:19 | mut_arr | file://:0:0:0:0 | element | main.rs:471:13:471:22 | mut_arr[1] | -| main.rs:473:10:473:16 | mut_arr | file://:0:0:0:0 | element | main.rs:473:10:473:19 | mut_arr[0] | -| main.rs:479:24:479:33 | [post] receiver for source(...) | file://:0:0:0:0 | &ref | main.rs:479:24:479:33 | [post] source(...) | +| main.rs:468:10:468:16 | [post] mut_arr [borrowed] | file://:0:0:0:0 | &ref | main.rs:468:10:468:16 | [post] mut_arr | +| main.rs:468:10:468:19 | mut_arr[1] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:468:10:468:19 | mut_arr[1] | +| main.rs:470:5:470:11 | [post] mut_arr [borrowed] | file://:0:0:0:0 | &ref | main.rs:470:5:470:11 | [post] mut_arr | +| main.rs:470:5:470:14 | mut_arr[1] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:470:5:470:14 | mut_arr[1] | +| main.rs:471:13:471:19 | [post] mut_arr [borrowed] | file://:0:0:0:0 | &ref | main.rs:471:13:471:19 | [post] mut_arr | +| main.rs:471:13:471:22 | mut_arr[1] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:471:13:471:22 | mut_arr[1] | +| main.rs:473:10:473:16 | [post] mut_arr [borrowed] | file://:0:0:0:0 | &ref | main.rs:473:10:473:16 | [post] mut_arr | +| main.rs:473:10:473:19 | mut_arr[0] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:473:10:473:19 | mut_arr[0] | +| main.rs:479:24:479:33 | [post] source(...) [borrowed] | file://:0:0:0:0 | &ref | main.rs:479:24:479:33 | [post] source(...) | | main.rs:480:9:480:20 | TuplePat | file://:0:0:0:0 | tuple.0 | main.rs:480:10:480:13 | cond | | main.rs:480:9:480:20 | TuplePat | file://:0:0:0:0 | tuple.1 | main.rs:480:16:480:19 | name | | main.rs:480:25:480:29 | names | file://:0:0:0:0 | element | main.rs:480:9:480:20 | TuplePat | | main.rs:482:41:482:67 | [post] \|...\| ... | main.rs:479:9:479:20 | captured default_name | main.rs:482:41:482:67 | [post] default_name | -| main.rs:482:44:482:55 | [post] receiver for default_name | file://:0:0:0:0 | &ref | main.rs:482:44:482:55 | [post] default_name | +| main.rs:482:44:482:55 | [post] default_name [borrowed] | file://:0:0:0:0 | &ref | main.rs:482:44:482:55 | [post] default_name | | main.rs:482:44:482:55 | this | main.rs:479:9:479:20 | captured default_name | main.rs:482:44:482:55 | default_name | -| main.rs:483:18:483:18 | [post] receiver for n | file://:0:0:0:0 | &ref | main.rs:483:18:483:18 | [post] n | -| main.rs:506:13:506:13 | [post] receiver for a | file://:0:0:0:0 | &ref | main.rs:506:13:506:13 | [post] a | -| main.rs:519:10:519:11 | vs | file://:0:0:0:0 | element | main.rs:519:10:519:14 | vs[0] | -| main.rs:520:11:520:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:520:10:520:35 | * ... | -| main.rs:520:11:520:35 | [post] receiver for ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:520:11:520:35 | [post] ... .unwrap() | -| main.rs:521:11:521:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:521:10:521:35 | * ... | -| main.rs:521:11:521:35 | [post] receiver for ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:521:11:521:35 | [post] ... .unwrap() | +| main.rs:483:18:483:18 | [post] n [borrowed] | file://:0:0:0:0 | &ref | main.rs:483:18:483:18 | [post] n | +| main.rs:506:13:506:13 | [post] a [borrowed] | file://:0:0:0:0 | &ref | main.rs:506:13:506:13 | [post] a | +| main.rs:519:10:519:11 | [post] vs [borrowed] | file://:0:0:0:0 | &ref | main.rs:519:10:519:11 | [post] vs | +| main.rs:519:10:519:14 | vs[0] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:519:10:519:14 | vs[0] | +| main.rs:520:10:520:35 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:520:10:520:35 | * ... | +| main.rs:520:11:520:35 | [post] ... .unwrap() [borrowed] | file://:0:0:0:0 | &ref | main.rs:520:11:520:35 | [post] ... .unwrap() | +| main.rs:521:10:521:35 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:521:10:521:35 | * ... | +| main.rs:521:11:521:35 | [post] ... .unwrap() [borrowed] | file://:0:0:0:0 | &ref | main.rs:521:11:521:35 | [post] ... .unwrap() | | main.rs:523:14:523:15 | vs | file://:0:0:0:0 | element | main.rs:523:9:523:9 | v | | main.rs:526:9:526:10 | &... | file://:0:0:0:0 | &ref | main.rs:526:10:526:10 | v | | main.rs:526:15:526:23 | vs.iter() | file://:0:0:0:0 | element | main.rs:526:9:526:10 | &... | | main.rs:531:9:531:10 | &... | file://:0:0:0:0 | &ref | main.rs:531:10:531:10 | v | | main.rs:531:15:531:17 | vs2 | file://:0:0:0:0 | element | main.rs:531:9:531:10 | &... | -| main.rs:535:29:535:29 | [post] receiver for x | file://:0:0:0:0 | &ref | main.rs:535:29:535:29 | [post] x | -| main.rs:535:29:535:29 | x | file://:0:0:0:0 | &ref | main.rs:535:28:535:29 | * ... | -| main.rs:536:34:536:34 | [post] receiver for x | file://:0:0:0:0 | &ref | main.rs:536:34:536:34 | [post] x | -| main.rs:536:34:536:34 | x | file://:0:0:0:0 | &ref | main.rs:536:33:536:34 | * ... | +| main.rs:535:28:535:29 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:535:28:535:29 | * ... | +| main.rs:535:29:535:29 | [post] x [borrowed] | file://:0:0:0:0 | &ref | main.rs:535:29:535:29 | [post] x | +| main.rs:536:33:536:34 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:536:33:536:34 | * ... | +| main.rs:536:34:536:34 | [post] x [borrowed] | file://:0:0:0:0 | &ref | main.rs:536:34:536:34 | [post] x | | main.rs:538:14:538:27 | vs.into_iter() | file://:0:0:0:0 | element | main.rs:538:9:538:9 | v | -| main.rs:544:10:544:15 | vs_mut | file://:0:0:0:0 | element | main.rs:544:10:544:18 | vs_mut[0] | -| main.rs:545:11:545:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:545:10:545:39 | * ... | -| main.rs:545:11:545:39 | [post] receiver for ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:545:11:545:39 | [post] ... .unwrap() | -| main.rs:546:11:546:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:546:10:546:39 | * ... | -| main.rs:546:11:546:39 | [post] receiver for ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:546:11:546:39 | [post] ... .unwrap() | +| main.rs:544:10:544:15 | [post] vs_mut [borrowed] | file://:0:0:0:0 | &ref | main.rs:544:10:544:15 | [post] vs_mut | +| main.rs:544:10:544:18 | vs_mut[0] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:544:10:544:18 | vs_mut[0] | +| main.rs:545:10:545:39 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:545:10:545:39 | * ... | +| main.rs:545:11:545:39 | [post] ... .unwrap() [borrowed] | file://:0:0:0:0 | &ref | main.rs:545:11:545:39 | [post] ... .unwrap() | +| main.rs:546:10:546:39 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:546:10:546:39 | * ... | +| main.rs:546:11:546:39 | [post] ... .unwrap() [borrowed] | file://:0:0:0:0 | &ref | main.rs:546:11:546:39 | [post] ... .unwrap() | | main.rs:548:9:548:14 | &mut ... | file://:0:0:0:0 | &ref | main.rs:548:14:548:14 | v | | main.rs:548:19:548:35 | vs_mut.iter_mut() | file://:0:0:0:0 | element | main.rs:548:9:548:14 | &mut ... | -| main.rs:562:11:562:15 | [post] receiver for c_ref | file://:0:0:0:0 | &ref | main.rs:562:11:562:15 | [post] c_ref | -| main.rs:562:11:562:15 | c_ref | file://:0:0:0:0 | &ref | main.rs:562:10:562:15 | * ... | +| main.rs:562:10:562:15 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:562:10:562:15 | * ... | +| main.rs:562:11:562:15 | [post] c_ref [borrowed] | file://:0:0:0:0 | &ref | main.rs:562:11:562:15 | [post] c_ref | storeStep -| main.rs:116:11:116:11 | i | file://:0:0:0:0 | &ref | main.rs:116:11:116:11 | receiver for i | +| main.rs:116:11:116:11 | i | file://:0:0:0:0 | &ref | main.rs:116:11:116:11 | i [borrowed] | | main.rs:123:14:123:22 | source(...) | file://:0:0:0:0 | tuple.0 | main.rs:123:13:123:26 | TupleExpr | | main.rs:123:25:123:25 | 2 | file://:0:0:0:0 | tuple.1 | main.rs:123:13:123:26 | TupleExpr | | main.rs:129:14:129:14 | 2 | file://:0:0:0:0 | tuple.0 | main.rs:129:13:129:30 | TupleExpr | @@ -1126,10 +1021,13 @@ storeStep | main.rs:430:17:430:17 | 1 | file://:0:0:0:0 | element | main.rs:430:16:430:33 | [...] | | main.rs:430:20:430:20 | 2 | file://:0:0:0:0 | element | main.rs:430:16:430:33 | [...] | | main.rs:430:23:430:32 | source(...) | file://:0:0:0:0 | element | main.rs:430:16:430:33 | [...] | +| main.rs:431:14:431:17 | arr1 | file://:0:0:0:0 | &ref | main.rs:431:14:431:17 | arr1 [borrowed] | | main.rs:434:17:434:26 | source(...) | file://:0:0:0:0 | element | main.rs:434:16:434:31 | [...; 10] | +| main.rs:435:14:435:17 | arr2 | file://:0:0:0:0 | &ref | main.rs:435:14:435:17 | arr2 [borrowed] | | main.rs:438:17:438:17 | 1 | file://:0:0:0:0 | element | main.rs:438:16:438:24 | [...] | | main.rs:438:20:438:20 | 2 | file://:0:0:0:0 | element | main.rs:438:16:438:24 | [...] | | main.rs:438:23:438:23 | 3 | file://:0:0:0:0 | element | main.rs:438:16:438:24 | [...] | +| main.rs:439:14:439:17 | arr3 | file://:0:0:0:0 | &ref | main.rs:439:14:439:17 | arr3 [borrowed] | | main.rs:444:17:444:17 | 1 | file://:0:0:0:0 | element | main.rs:444:16:444:33 | [...] | | main.rs:444:20:444:20 | 2 | file://:0:0:0:0 | element | main.rs:444:16:444:33 | [...] | | main.rs:444:23:444:32 | source(...) | file://:0:0:0:0 | element | main.rs:444:16:444:33 | [...] | @@ -1142,27 +1040,34 @@ storeStep | main.rs:467:24:467:24 | 1 | file://:0:0:0:0 | element | main.rs:467:23:467:31 | [...] | | main.rs:467:27:467:27 | 2 | file://:0:0:0:0 | element | main.rs:467:23:467:31 | [...] | | main.rs:467:30:467:30 | 3 | file://:0:0:0:0 | element | main.rs:467:23:467:31 | [...] | +| main.rs:468:10:468:16 | mut_arr | file://:0:0:0:0 | &ref | main.rs:468:10:468:16 | mut_arr [borrowed] | +| main.rs:470:5:470:11 | mut_arr | file://:0:0:0:0 | &ref | main.rs:470:5:470:11 | mut_arr [borrowed] | +| main.rs:470:18:470:27 | source(...) | file://:0:0:0:0 | &ref | main.rs:470:5:470:14 | [post] mut_arr[1] [pre-dereferenced] | | main.rs:470:18:470:27 | source(...) | file://:0:0:0:0 | element | main.rs:470:5:470:11 | [post] mut_arr | -| main.rs:479:24:479:33 | source(...) | file://:0:0:0:0 | &ref | main.rs:479:24:479:33 | receiver for source(...) | +| main.rs:471:13:471:19 | mut_arr | file://:0:0:0:0 | &ref | main.rs:471:13:471:19 | mut_arr [borrowed] | +| main.rs:473:10:473:16 | mut_arr | file://:0:0:0:0 | &ref | main.rs:473:10:473:16 | mut_arr [borrowed] | +| main.rs:479:24:479:33 | source(...) | file://:0:0:0:0 | &ref | main.rs:479:24:479:33 | source(...) [borrowed] | | main.rs:482:41:482:67 | default_name | main.rs:479:9:479:20 | captured default_name | main.rs:482:41:482:67 | \|...\| ... | -| main.rs:482:44:482:55 | default_name | file://:0:0:0:0 | &ref | main.rs:482:44:482:55 | receiver for default_name | -| main.rs:483:18:483:18 | n | file://:0:0:0:0 | &ref | main.rs:483:18:483:18 | receiver for n | -| main.rs:506:13:506:13 | a | file://:0:0:0:0 | &ref | main.rs:506:13:506:13 | receiver for a | +| main.rs:482:44:482:55 | default_name | file://:0:0:0:0 | &ref | main.rs:482:44:482:55 | default_name [borrowed] | +| main.rs:483:18:483:18 | n | file://:0:0:0:0 | &ref | main.rs:483:18:483:18 | n [borrowed] | +| main.rs:506:13:506:13 | a | file://:0:0:0:0 | &ref | main.rs:506:13:506:13 | a [borrowed] | | main.rs:517:15:517:24 | source(...) | file://:0:0:0:0 | element | main.rs:517:14:517:34 | [...] | | main.rs:517:27:517:27 | 2 | file://:0:0:0:0 | element | main.rs:517:14:517:34 | [...] | | main.rs:517:30:517:30 | 3 | file://:0:0:0:0 | element | main.rs:517:14:517:34 | [...] | | main.rs:517:33:517:33 | 4 | file://:0:0:0:0 | element | main.rs:517:14:517:34 | [...] | -| main.rs:520:11:520:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:520:11:520:35 | receiver for ... .unwrap() | -| main.rs:521:11:521:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:521:11:521:35 | receiver for ... .unwrap() | -| main.rs:535:29:535:29 | x | file://:0:0:0:0 | &ref | main.rs:535:29:535:29 | receiver for x | -| main.rs:536:34:536:34 | x | file://:0:0:0:0 | &ref | main.rs:536:34:536:34 | receiver for x | +| main.rs:519:10:519:11 | vs | file://:0:0:0:0 | &ref | main.rs:519:10:519:11 | vs [borrowed] | +| main.rs:520:11:520:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:520:11:520:35 | ... .unwrap() [borrowed] | +| main.rs:521:11:521:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:521:11:521:35 | ... .unwrap() [borrowed] | +| main.rs:535:29:535:29 | x | file://:0:0:0:0 | &ref | main.rs:535:29:535:29 | x [borrowed] | +| main.rs:536:34:536:34 | x | file://:0:0:0:0 | &ref | main.rs:536:34:536:34 | x [borrowed] | | main.rs:542:23:542:32 | source(...) | file://:0:0:0:0 | element | main.rs:542:22:542:42 | [...] | | main.rs:542:35:542:35 | 2 | file://:0:0:0:0 | element | main.rs:542:22:542:42 | [...] | | main.rs:542:38:542:38 | 3 | file://:0:0:0:0 | element | main.rs:542:22:542:42 | [...] | | main.rs:542:41:542:41 | 4 | file://:0:0:0:0 | element | main.rs:542:22:542:42 | [...] | -| main.rs:545:11:545:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:545:11:545:39 | receiver for ... .unwrap() | -| main.rs:546:11:546:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:546:11:546:39 | receiver for ... .unwrap() | +| main.rs:544:10:544:15 | vs_mut | file://:0:0:0:0 | &ref | main.rs:544:10:544:15 | vs_mut [borrowed] | +| main.rs:545:11:545:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:545:11:545:39 | ... .unwrap() [borrowed] | +| main.rs:546:11:546:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:546:11:546:39 | ... .unwrap() [borrowed] | | main.rs:557:18:557:18 | c | file://:0:0:0:0 | &ref | main.rs:557:17:557:18 | &c | | main.rs:560:15:560:15 | b | file://:0:0:0:0 | &ref | main.rs:560:14:560:15 | &b | -| main.rs:562:11:562:15 | c_ref | file://:0:0:0:0 | &ref | main.rs:562:11:562:15 | receiver for c_ref | +| main.rs:562:11:562:15 | c_ref | file://:0:0:0:0 | &ref | main.rs:562:11:562:15 | c_ref [borrowed] | | main.rs:583:27:583:27 | 0 | {EXTERNAL LOCATION} | Some | main.rs:583:22:583:28 | Some(...) | diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected index 7b6fd011d031..61c4771068bf 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -1,14 +1,22 @@ models -| 1 | Summary: ::new; Argument[0]; ReturnValue.Reference; value | -| 2 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 3 | Summary: ::unwrap_or; Argument[0]; ReturnValue; value | -| 4 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 5 | Summary: ::unwrap_or_else; Argument[0].ReturnValue; ReturnValue; value | -| 6 | Summary: ::unwrap_or_else; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 7 | Summary: ::err; Argument[self].Field[core::result::Result::Err(0)]; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 8 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 9 | Summary: ::expect_err; Argument[self].Field[core::result::Result::Err(0)]; ReturnValue; value | -| 10 | Summary: ::ok; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value | +| 2 | Summary: <_ as alloc::string::ToString>::to_string; Argument[self].Reference; ReturnValue; taint | +| 3 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint | +| 4 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 5 | Summary: ::deref; Argument[self].Reference.Field[alloc::boxed::Box(0)]; ReturnValue.Reference; value | +| 6 | Summary: ::new; Argument[0]; ReturnValue.Field[alloc::boxed::Box(0)]; value | +| 7 | Summary: ::from; Argument[0]; ReturnValue; taint | +| 8 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 9 | Summary: ::unwrap_or; Argument[0]; ReturnValue; value | +| 10 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 11 | Summary: ::unwrap_or_else; Argument[0].ReturnValue; ReturnValue; value | +| 12 | Summary: ::unwrap_or_else; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 13 | Summary: ::err; Argument[self].Field[core::result::Result::Err(0)]; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 14 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 15 | Summary: ::expect_err; Argument[self].Field[core::result::Result::Err(0)]; ReturnValue; value | +| 16 | Summary: ::ok; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 17 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 18 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | edges | main.rs:23:9:23:9 | s | main.rs:24:10:24:10 | s | provenance | | | main.rs:23:9:23:9 | s | main.rs:26:12:26:12 | x | provenance | | @@ -34,10 +42,10 @@ edges | main.rs:81:9:81:13 | mut l | main.rs:82:5:82:5 | l | provenance | | | main.rs:81:17:81:25 | source(...) | main.rs:81:9:81:13 | mut l | provenance | | | main.rs:82:5:82:5 | l | main.rs:83:10:83:10 | l | provenance | | -| main.rs:115:9:115:9 | i [&ref] | main.rs:116:11:116:11 | i [&ref] | provenance | | -| main.rs:115:13:115:31 | ...::new(...) [&ref] | main.rs:115:9:115:9 | i [&ref] | provenance | | -| main.rs:115:22:115:30 | source(...) | main.rs:115:13:115:31 | ...::new(...) [&ref] | provenance | MaD:1 | -| main.rs:116:11:116:11 | i [&ref] | main.rs:116:10:116:11 | * ... | provenance | | +| main.rs:115:9:115:9 | i [Box(0)] | main.rs:116:11:116:11 | i [Box(0)] | provenance | | +| main.rs:115:13:115:31 | ...::new(...) [Box(0)] | main.rs:115:9:115:9 | i [Box(0)] | provenance | | +| main.rs:115:22:115:30 | source(...) | main.rs:115:13:115:31 | ...::new(...) [Box(0)] | provenance | MaD:6 | +| main.rs:116:11:116:11 | i [Box(0)] | main.rs:116:10:116:11 | * ... | provenance | MaD:5 | | main.rs:123:9:123:9 | a [tuple.0] | main.rs:124:10:124:10 | a [tuple.0] | provenance | | | main.rs:123:13:123:26 | TupleExpr [tuple.0] | main.rs:123:9:123:9 | a [tuple.0] | provenance | | | main.rs:123:14:123:22 | source(...) | main.rs:123:13:123:26 | TupleExpr [tuple.0] | provenance | | @@ -117,45 +125,54 @@ edges | main.rs:267:12:267:18 | Some(...) [Some] | main.rs:267:17:267:17 | n | provenance | | | main.rs:267:17:267:17 | n | main.rs:269:18:269:18 | n | provenance | | | main.rs:267:17:267:17 | n | main.rs:273:14:273:14 | n | provenance | | -| main.rs:278:9:278:10 | s1 [Some] | main.rs:279:10:279:20 | s1.unwrap() | provenance | MaD:2 | +| main.rs:278:9:278:10 | s1 [Some] | main.rs:279:10:279:11 | s1 [Some] | provenance | | | main.rs:278:14:278:29 | Some(...) [Some] | main.rs:278:9:278:10 | s1 [Some] | provenance | | | main.rs:278:19:278:28 | source(...) | main.rs:278:14:278:29 | Some(...) [Some] | provenance | | -| main.rs:283:9:283:10 | s1 [Some] | main.rs:284:10:284:24 | s1.unwrap_or(...) | provenance | MaD:4 | +| main.rs:279:10:279:11 | s1 [Some] | main.rs:279:10:279:20 | s1.unwrap() | provenance | MaD:8 | +| main.rs:283:9:283:10 | s1 [Some] | main.rs:284:10:284:11 | s1 [Some] | provenance | | | main.rs:283:14:283:29 | Some(...) [Some] | main.rs:283:9:283:10 | s1 [Some] | provenance | | | main.rs:283:19:283:28 | source(...) | main.rs:283:14:283:29 | Some(...) [Some] | provenance | | -| main.rs:287:23:287:32 | source(...) | main.rs:287:10:287:33 | s2.unwrap_or(...) | provenance | MaD:3 | -| main.rs:291:9:291:10 | s1 [Some] | main.rs:292:10:292:32 | s1.unwrap_or_else(...) | provenance | MaD:6 | +| main.rs:284:10:284:11 | s1 [Some] | main.rs:284:10:284:24 | s1.unwrap_or(...) | provenance | MaD:10 | +| main.rs:287:23:287:32 | source(...) | main.rs:287:10:287:33 | s2.unwrap_or(...) | provenance | MaD:9 | +| main.rs:291:9:291:10 | s1 [Some] | main.rs:292:10:292:11 | s1 [Some] | provenance | | | main.rs:291:14:291:29 | Some(...) [Some] | main.rs:291:9:291:10 | s1 [Some] | provenance | | | main.rs:291:19:291:28 | source(...) | main.rs:291:14:291:29 | Some(...) [Some] | provenance | | -| main.rs:295:31:295:40 | source(...) | main.rs:295:10:295:41 | s2.unwrap_or_else(...) | provenance | MaD:5 | +| main.rs:292:10:292:11 | s1 [Some] | main.rs:292:10:292:32 | s1.unwrap_or_else(...) | provenance | MaD:12 | +| main.rs:295:31:295:40 | source(...) | main.rs:295:10:295:41 | s2.unwrap_or_else(...) | provenance | MaD:11 | | main.rs:299:9:299:10 | s1 [Some] | main.rs:301:14:301:15 | s1 [Some] | provenance | | | main.rs:299:14:299:29 | Some(...) [Some] | main.rs:299:9:299:10 | s1 [Some] | provenance | | | main.rs:299:19:299:28 | source(...) | main.rs:299:14:299:29 | Some(...) [Some] | provenance | | | main.rs:301:9:301:10 | i1 | main.rs:302:10:302:11 | i1 | provenance | | | main.rs:301:14:301:15 | s1 [Some] | main.rs:301:14:301:16 | TryExpr | provenance | | | main.rs:301:14:301:16 | TryExpr | main.rs:301:9:301:10 | i1 | provenance | | -| main.rs:308:9:308:10 | r1 [Ok] | main.rs:309:28:309:34 | r1.ok() [Some] | provenance | MaD:10 | +| main.rs:308:9:308:10 | r1 [Ok] | main.rs:309:28:309:29 | r1 [Ok] | provenance | | | main.rs:308:32:308:45 | Ok(...) [Ok] | main.rs:308:9:308:10 | r1 [Ok] | provenance | | | main.rs:308:35:308:44 | source(...) | main.rs:308:32:308:45 | Ok(...) [Ok] | provenance | | -| main.rs:309:9:309:11 | o1a [Some] | main.rs:311:10:311:21 | o1a.unwrap() | provenance | MaD:2 | +| main.rs:309:9:309:11 | o1a [Some] | main.rs:311:10:311:12 | o1a [Some] | provenance | | +| main.rs:309:28:309:29 | r1 [Ok] | main.rs:309:28:309:34 | r1.ok() [Some] | provenance | MaD:16 | | main.rs:309:28:309:34 | r1.ok() [Some] | main.rs:309:9:309:11 | o1a [Some] | provenance | | -| main.rs:314:9:314:10 | r2 [Err] | main.rs:316:28:316:35 | r2.err() [Some] | provenance | MaD:7 | +| main.rs:311:10:311:12 | o1a [Some] | main.rs:311:10:311:21 | o1a.unwrap() | provenance | MaD:8 | +| main.rs:314:9:314:10 | r2 [Err] | main.rs:316:28:316:29 | r2 [Err] | provenance | | | main.rs:314:32:314:46 | Err(...) [Err] | main.rs:314:9:314:10 | r2 [Err] | provenance | | | main.rs:314:36:314:45 | source(...) | main.rs:314:32:314:46 | Err(...) [Err] | provenance | | -| main.rs:316:9:316:11 | o2b [Some] | main.rs:318:10:318:21 | o2b.unwrap() | provenance | MaD:2 | +| main.rs:316:9:316:11 | o2b [Some] | main.rs:318:10:318:12 | o2b [Some] | provenance | | +| main.rs:316:28:316:29 | r2 [Err] | main.rs:316:28:316:35 | r2.err() [Some] | provenance | MaD:13 | | main.rs:316:28:316:35 | r2.err() [Some] | main.rs:316:9:316:11 | o2b [Some] | provenance | | +| main.rs:318:10:318:12 | o2b [Some] | main.rs:318:10:318:21 | o2b.unwrap() | provenance | MaD:8 | | main.rs:322:9:322:10 | s1 [Ok] | main.rs:325:14:325:15 | s1 [Ok] | provenance | | | main.rs:322:32:322:45 | Ok(...) [Ok] | main.rs:322:9:322:10 | s1 [Ok] | provenance | | | main.rs:322:35:322:44 | source(...) | main.rs:322:32:322:45 | Ok(...) [Ok] | provenance | | | main.rs:325:9:325:10 | i1 | main.rs:327:10:327:11 | i1 | provenance | | | main.rs:325:14:325:15 | s1 [Ok] | main.rs:325:14:325:16 | TryExpr | provenance | | | main.rs:325:14:325:16 | TryExpr | main.rs:325:9:325:10 | i1 | provenance | | -| main.rs:335:9:335:10 | s1 [Ok] | main.rs:336:10:336:22 | s1.expect(...) | provenance | MaD:8 | +| main.rs:335:9:335:10 | s1 [Ok] | main.rs:336:10:336:11 | s1 [Ok] | provenance | | | main.rs:335:32:335:45 | Ok(...) [Ok] | main.rs:335:9:335:10 | s1 [Ok] | provenance | | | main.rs:335:35:335:44 | source(...) | main.rs:335:32:335:45 | Ok(...) [Ok] | provenance | | -| main.rs:339:9:339:10 | s2 [Err] | main.rs:341:10:341:26 | s2.expect_err(...) | provenance | MaD:9 | +| main.rs:336:10:336:11 | s1 [Ok] | main.rs:336:10:336:22 | s1.expect(...) | provenance | MaD:14 | +| main.rs:339:9:339:10 | s2 [Err] | main.rs:341:10:341:11 | s2 [Err] | provenance | | | main.rs:339:32:339:46 | Err(...) [Err] | main.rs:339:9:339:10 | s2 [Err] | provenance | | | main.rs:339:36:339:45 | source(...) | main.rs:339:32:339:46 | Err(...) [Err] | provenance | | +| main.rs:341:10:341:11 | s2 [Err] | main.rs:341:10:341:26 | s2.expect_err(...) | provenance | MaD:15 | | main.rs:350:9:350:10 | s1 [A] | main.rs:352:11:352:12 | s1 [A] | provenance | | | main.rs:350:14:350:39 | ...::A(...) [A] | main.rs:350:9:350:10 | s1 [A] | provenance | | | main.rs:350:29:350:38 | source(...) | main.rs:350:14:350:39 | ...::A(...) [A] | provenance | | @@ -204,13 +221,13 @@ edges | main.rs:430:16:430:33 | [...] [element] | main.rs:430:9:430:12 | arr1 [element] | provenance | | | main.rs:430:23:430:32 | source(...) | main.rs:430:16:430:33 | [...] [element] | provenance | | | main.rs:431:9:431:10 | n1 | main.rs:432:10:432:11 | n1 | provenance | | -| main.rs:431:14:431:17 | arr1 [element] | main.rs:431:14:431:20 | arr1[2] | provenance | | +| main.rs:431:14:431:17 | arr1 [element] | main.rs:431:14:431:20 | arr1[2] | provenance | MaD:4 | | main.rs:431:14:431:20 | arr1[2] | main.rs:431:9:431:10 | n1 | provenance | | | main.rs:434:9:434:12 | arr2 [element] | main.rs:435:14:435:17 | arr2 [element] | provenance | | | main.rs:434:16:434:31 | [...; 10] [element] | main.rs:434:9:434:12 | arr2 [element] | provenance | | | main.rs:434:17:434:26 | source(...) | main.rs:434:16:434:31 | [...; 10] [element] | provenance | | | main.rs:435:9:435:10 | n2 | main.rs:436:10:436:11 | n2 | provenance | | -| main.rs:435:14:435:17 | arr2 [element] | main.rs:435:14:435:20 | arr2[4] | provenance | | +| main.rs:435:14:435:17 | arr2 [element] | main.rs:435:14:435:20 | arr2[4] | provenance | MaD:4 | | main.rs:435:14:435:20 | arr2[4] | main.rs:435:9:435:10 | n2 | provenance | | | main.rs:444:9:444:12 | arr1 [element] | main.rs:445:15:445:18 | arr1 [element] | provenance | | | main.rs:444:16:444:33 | [...] [element] | main.rs:444:9:444:12 | arr1 [element] | provenance | | @@ -231,32 +248,57 @@ edges | main.rs:470:5:470:11 | [post] mut_arr [element] | main.rs:473:10:473:16 | mut_arr [element] | provenance | | | main.rs:470:18:470:27 | source(...) | main.rs:470:5:470:11 | [post] mut_arr [element] | provenance | | | main.rs:471:9:471:9 | d | main.rs:472:10:472:10 | d | provenance | | -| main.rs:471:13:471:19 | mut_arr [element] | main.rs:471:13:471:22 | mut_arr[1] | provenance | | +| main.rs:471:13:471:19 | mut_arr [element] | main.rs:471:13:471:22 | mut_arr[1] | provenance | MaD:4 | | main.rs:471:13:471:22 | mut_arr[1] | main.rs:471:9:471:9 | d | provenance | | -| main.rs:473:10:473:16 | mut_arr [element] | main.rs:473:10:473:19 | mut_arr[0] | provenance | | +| main.rs:473:10:473:16 | mut_arr [element] | main.rs:473:10:473:19 | mut_arr[0] | provenance | MaD:4 | | main.rs:496:9:496:9 | s | main.rs:497:10:497:10 | s | provenance | | | main.rs:496:25:496:26 | source(...) | main.rs:496:9:496:9 | s | provenance | | +| main.rs:505:9:505:9 | a | main.rs:506:13:506:13 | a | provenance | | | main.rs:505:9:505:9 | a | main.rs:510:10:510:10 | a | provenance | | | main.rs:505:13:505:22 | source(...) | main.rs:505:9:505:9 | a | provenance | | +| main.rs:506:9:506:9 | b | main.rs:507:13:507:13 | b | provenance | | +| main.rs:506:9:506:9 | b | main.rs:508:18:508:18 | b | provenance | | +| main.rs:506:9:506:9 | b | main.rs:511:17:511:17 | b | provenance | | +| main.rs:506:13:506:13 | a | main.rs:506:13:506:25 | a.to_string() | provenance | MaD:2 | +| main.rs:506:13:506:25 | a.to_string() | main.rs:506:9:506:9 | b | provenance | | +| main.rs:507:9:507:9 | c | main.rs:512:10:512:10 | c | provenance | | +| main.rs:507:13:507:13 | b | main.rs:507:13:507:28 | b.parse() [Ok] | provenance | MaD:18 | +| main.rs:507:13:507:28 | b.parse() [Ok] | main.rs:507:13:507:37 | ... .unwrap() | provenance | MaD:17 | +| main.rs:507:13:507:37 | ... .unwrap() | main.rs:507:9:507:9 | c | provenance | | +| main.rs:508:9:508:9 | d | main.rs:513:10:513:10 | d | provenance | | +| main.rs:508:18:508:18 | b | main.rs:508:18:508:26 | b.parse() [Ok] | provenance | MaD:18 | +| main.rs:508:18:508:26 | b.parse() [Ok] | main.rs:508:18:508:35 | ... .unwrap() | provenance | MaD:17 | +| main.rs:508:18:508:35 | ... .unwrap() | main.rs:508:9:508:9 | d | provenance | | | main.rs:517:9:517:10 | vs [element] | main.rs:519:10:519:11 | vs [element] | provenance | | | main.rs:517:9:517:10 | vs [element] | main.rs:523:14:523:15 | vs [element] | provenance | | | main.rs:517:14:517:34 | [...] [element] | main.rs:517:9:517:10 | vs [element] | provenance | | | main.rs:517:15:517:24 | source(...) | main.rs:517:14:517:34 | [...] [element] | provenance | | -| main.rs:519:10:519:11 | vs [element] | main.rs:519:10:519:14 | vs[0] | provenance | | +| main.rs:519:10:519:11 | vs [element] | main.rs:519:10:519:14 | vs[0] | provenance | MaD:4 | | main.rs:523:9:523:9 | v | main.rs:524:14:524:14 | v | provenance | | | main.rs:523:14:523:15 | vs [element] | main.rs:523:9:523:9 | v | provenance | | | main.rs:542:9:542:18 | mut vs_mut [element] | main.rs:544:10:544:15 | vs_mut [element] | provenance | | | main.rs:542:22:542:42 | [...] [element] | main.rs:542:9:542:18 | mut vs_mut [element] | provenance | | | main.rs:542:23:542:32 | source(...) | main.rs:542:22:542:42 | [...] [element] | provenance | | -| main.rs:544:10:544:15 | vs_mut [element] | main.rs:544:10:544:18 | vs_mut[0] | provenance | | +| main.rs:544:10:544:15 | vs_mut [element] | main.rs:544:10:544:18 | vs_mut[0] | provenance | MaD:4 | | main.rs:554:9:554:9 | a | main.rs:559:10:559:10 | a | provenance | | | main.rs:554:13:554:22 | source(...) | main.rs:554:9:554:9 | a | provenance | | +| main.rs:555:9:555:9 | b | main.rs:560:15:560:15 | b | provenance | | +| main.rs:555:13:555:22 | source(...) | main.rs:555:9:555:9 | b | provenance | | | main.rs:556:9:556:9 | c | main.rs:557:18:557:18 | c | provenance | | | main.rs:556:13:556:22 | source(...) | main.rs:556:9:556:9 | c | provenance | | +| main.rs:557:9:557:13 | c_ref [&ref] | main.rs:561:14:561:18 | c_ref | provenance | | | main.rs:557:9:557:13 | c_ref [&ref] | main.rs:562:11:562:15 | c_ref [&ref] | provenance | | | main.rs:557:17:557:18 | &c [&ref] | main.rs:557:9:557:13 | c_ref [&ref] | provenance | | | main.rs:557:18:557:18 | c | main.rs:557:17:557:18 | &c [&ref] | provenance | | -| main.rs:562:11:562:15 | c_ref [&ref] | main.rs:562:10:562:15 | * ... | provenance | | +| main.rs:560:15:560:15 | b | main.rs:560:14:560:15 | &b | provenance | | +| main.rs:562:11:562:15 | c_ref [&ref] | main.rs:562:10:562:15 | * ... | provenance | MaD:1 | +| main.rs:566:9:566:9 | a | main.rs:568:10:568:17 | a as i64 | provenance | | +| main.rs:566:18:566:27 | source(...) | main.rs:566:9:566:9 | a | provenance | | +| main.rs:572:9:572:9 | b | main.rs:574:10:574:17 | b as i64 | provenance | | +| main.rs:572:9:572:9 | b | main.rs:576:20:576:20 | b | provenance | | +| main.rs:572:18:572:27 | source(...) | main.rs:572:9:572:9 | b | provenance | | +| main.rs:576:20:576:20 | b | main.rs:576:10:576:21 | ...::from(...) | provenance | MaD:3 | +| main.rs:576:20:576:20 | b | main.rs:576:10:576:21 | ...::from(...) | provenance | MaD:7 | nodes | main.rs:19:10:19:18 | source(...) | semmle.label | source(...) | | main.rs:23:9:23:9 | s | semmle.label | s | @@ -290,11 +332,11 @@ nodes | main.rs:81:17:81:25 | source(...) | semmle.label | source(...) | | main.rs:82:5:82:5 | l | semmle.label | l | | main.rs:83:10:83:10 | l | semmle.label | l | -| main.rs:115:9:115:9 | i [&ref] | semmle.label | i [&ref] | -| main.rs:115:13:115:31 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| main.rs:115:9:115:9 | i [Box(0)] | semmle.label | i [Box(0)] | +| main.rs:115:13:115:31 | ...::new(...) [Box(0)] | semmle.label | ...::new(...) [Box(0)] | | main.rs:115:22:115:30 | source(...) | semmle.label | source(...) | | main.rs:116:10:116:11 | * ... | semmle.label | * ... | -| main.rs:116:11:116:11 | i [&ref] | semmle.label | i [&ref] | +| main.rs:116:11:116:11 | i [Box(0)] | semmle.label | i [Box(0)] | | main.rs:123:9:123:9 | a [tuple.0] | semmle.label | a [tuple.0] | | main.rs:123:13:123:26 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | | main.rs:123:14:123:22 | source(...) | semmle.label | source(...) | @@ -391,16 +433,19 @@ nodes | main.rs:278:9:278:10 | s1 [Some] | semmle.label | s1 [Some] | | main.rs:278:14:278:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | | main.rs:278:19:278:28 | source(...) | semmle.label | source(...) | +| main.rs:279:10:279:11 | s1 [Some] | semmle.label | s1 [Some] | | main.rs:279:10:279:20 | s1.unwrap() | semmle.label | s1.unwrap() | | main.rs:283:9:283:10 | s1 [Some] | semmle.label | s1 [Some] | | main.rs:283:14:283:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | | main.rs:283:19:283:28 | source(...) | semmle.label | source(...) | +| main.rs:284:10:284:11 | s1 [Some] | semmle.label | s1 [Some] | | main.rs:284:10:284:24 | s1.unwrap_or(...) | semmle.label | s1.unwrap_or(...) | | main.rs:287:10:287:33 | s2.unwrap_or(...) | semmle.label | s2.unwrap_or(...) | | main.rs:287:23:287:32 | source(...) | semmle.label | source(...) | | main.rs:291:9:291:10 | s1 [Some] | semmle.label | s1 [Some] | | main.rs:291:14:291:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | | main.rs:291:19:291:28 | source(...) | semmle.label | source(...) | +| main.rs:292:10:292:11 | s1 [Some] | semmle.label | s1 [Some] | | main.rs:292:10:292:32 | s1.unwrap_or_else(...) | semmle.label | s1.unwrap_or_else(...) | | main.rs:295:10:295:41 | s2.unwrap_or_else(...) | semmle.label | s2.unwrap_or_else(...) | | main.rs:295:31:295:40 | source(...) | semmle.label | source(...) | @@ -415,13 +460,17 @@ nodes | main.rs:308:32:308:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | | main.rs:308:35:308:44 | source(...) | semmle.label | source(...) | | main.rs:309:9:309:11 | o1a [Some] | semmle.label | o1a [Some] | +| main.rs:309:28:309:29 | r1 [Ok] | semmle.label | r1 [Ok] | | main.rs:309:28:309:34 | r1.ok() [Some] | semmle.label | r1.ok() [Some] | +| main.rs:311:10:311:12 | o1a [Some] | semmle.label | o1a [Some] | | main.rs:311:10:311:21 | o1a.unwrap() | semmle.label | o1a.unwrap() | | main.rs:314:9:314:10 | r2 [Err] | semmle.label | r2 [Err] | | main.rs:314:32:314:46 | Err(...) [Err] | semmle.label | Err(...) [Err] | | main.rs:314:36:314:45 | source(...) | semmle.label | source(...) | | main.rs:316:9:316:11 | o2b [Some] | semmle.label | o2b [Some] | +| main.rs:316:28:316:29 | r2 [Err] | semmle.label | r2 [Err] | | main.rs:316:28:316:35 | r2.err() [Some] | semmle.label | r2.err() [Some] | +| main.rs:318:10:318:12 | o2b [Some] | semmle.label | o2b [Some] | | main.rs:318:10:318:21 | o2b.unwrap() | semmle.label | o2b.unwrap() | | main.rs:322:9:322:10 | s1 [Ok] | semmle.label | s1 [Ok] | | main.rs:322:32:322:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | @@ -433,10 +482,12 @@ nodes | main.rs:335:9:335:10 | s1 [Ok] | semmle.label | s1 [Ok] | | main.rs:335:32:335:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | | main.rs:335:35:335:44 | source(...) | semmle.label | source(...) | +| main.rs:336:10:336:11 | s1 [Ok] | semmle.label | s1 [Ok] | | main.rs:336:10:336:22 | s1.expect(...) | semmle.label | s1.expect(...) | | main.rs:339:9:339:10 | s2 [Err] | semmle.label | s2 [Err] | | main.rs:339:32:339:46 | Err(...) [Err] | semmle.label | Err(...) [Err] | | main.rs:339:36:339:45 | source(...) | semmle.label | source(...) | +| main.rs:341:10:341:11 | s2 [Err] | semmle.label | s2 [Err] | | main.rs:341:10:341:26 | s2.expect_err(...) | semmle.label | s2.expect_err(...) | | main.rs:350:9:350:10 | s1 [A] | semmle.label | s1 [A] | | main.rs:350:14:350:39 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | @@ -530,7 +581,21 @@ nodes | main.rs:497:10:497:10 | s | semmle.label | s | | main.rs:505:9:505:9 | a | semmle.label | a | | main.rs:505:13:505:22 | source(...) | semmle.label | source(...) | +| main.rs:506:9:506:9 | b | semmle.label | b | +| main.rs:506:13:506:13 | a | semmle.label | a | +| main.rs:506:13:506:25 | a.to_string() | semmle.label | a.to_string() | +| main.rs:507:9:507:9 | c | semmle.label | c | +| main.rs:507:13:507:13 | b | semmle.label | b | +| main.rs:507:13:507:28 | b.parse() [Ok] | semmle.label | b.parse() [Ok] | +| main.rs:507:13:507:37 | ... .unwrap() | semmle.label | ... .unwrap() | +| main.rs:508:9:508:9 | d | semmle.label | d | +| main.rs:508:18:508:18 | b | semmle.label | b | +| main.rs:508:18:508:26 | b.parse() [Ok] | semmle.label | b.parse() [Ok] | +| main.rs:508:18:508:35 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:510:10:510:10 | a | semmle.label | a | +| main.rs:511:17:511:17 | b | semmle.label | b | +| main.rs:512:10:512:10 | c | semmle.label | c | +| main.rs:513:10:513:10 | d | semmle.label | d | | main.rs:517:9:517:10 | vs [element] | semmle.label | vs [element] | | main.rs:517:14:517:34 | [...] [element] | semmle.label | [...] [element] | | main.rs:517:15:517:24 | source(...) | semmle.label | source(...) | @@ -546,14 +611,27 @@ nodes | main.rs:544:10:544:18 | vs_mut[0] | semmle.label | vs_mut[0] | | main.rs:554:9:554:9 | a | semmle.label | a | | main.rs:554:13:554:22 | source(...) | semmle.label | source(...) | +| main.rs:555:9:555:9 | b | semmle.label | b | +| main.rs:555:13:555:22 | source(...) | semmle.label | source(...) | | main.rs:556:9:556:9 | c | semmle.label | c | | main.rs:556:13:556:22 | source(...) | semmle.label | source(...) | | main.rs:557:9:557:13 | c_ref [&ref] | semmle.label | c_ref [&ref] | | main.rs:557:17:557:18 | &c [&ref] | semmle.label | &c [&ref] | | main.rs:557:18:557:18 | c | semmle.label | c | | main.rs:559:10:559:10 | a | semmle.label | a | +| main.rs:560:14:560:15 | &b | semmle.label | &b | +| main.rs:560:15:560:15 | b | semmle.label | b | +| main.rs:561:14:561:18 | c_ref | semmle.label | c_ref | | main.rs:562:10:562:15 | * ... | semmle.label | * ... | | main.rs:562:11:562:15 | c_ref [&ref] | semmle.label | c_ref [&ref] | +| main.rs:566:9:566:9 | a | semmle.label | a | +| main.rs:566:18:566:27 | source(...) | semmle.label | source(...) | +| main.rs:568:10:568:17 | a as i64 | semmle.label | a as i64 | +| main.rs:572:9:572:9 | b | semmle.label | b | +| main.rs:572:18:572:27 | source(...) | semmle.label | source(...) | +| main.rs:574:10:574:17 | b as i64 | semmle.label | b as i64 | +| main.rs:576:10:576:21 | ...::from(...) | semmle.label | ...::from(...) | +| main.rs:576:20:576:20 | b | semmle.label | b | subpaths testFailures #select @@ -615,8 +693,16 @@ testFailures | main.rs:473:10:473:19 | mut_arr[0] | main.rs:470:18:470:27 | source(...) | main.rs:473:10:473:19 | mut_arr[0] | $@ | main.rs:470:18:470:27 | source(...) | source(...) | | main.rs:497:10:497:10 | s | main.rs:496:25:496:26 | source(...) | main.rs:497:10:497:10 | s | $@ | main.rs:496:25:496:26 | source(...) | source(...) | | main.rs:510:10:510:10 | a | main.rs:505:13:505:22 | source(...) | main.rs:510:10:510:10 | a | $@ | main.rs:505:13:505:22 | source(...) | source(...) | +| main.rs:511:17:511:17 | b | main.rs:505:13:505:22 | source(...) | main.rs:511:17:511:17 | b | $@ | main.rs:505:13:505:22 | source(...) | source(...) | +| main.rs:512:10:512:10 | c | main.rs:505:13:505:22 | source(...) | main.rs:512:10:512:10 | c | $@ | main.rs:505:13:505:22 | source(...) | source(...) | +| main.rs:513:10:513:10 | d | main.rs:505:13:505:22 | source(...) | main.rs:513:10:513:10 | d | $@ | main.rs:505:13:505:22 | source(...) | source(...) | | main.rs:519:10:519:14 | vs[0] | main.rs:517:15:517:24 | source(...) | main.rs:519:10:519:14 | vs[0] | $@ | main.rs:517:15:517:24 | source(...) | source(...) | | main.rs:524:14:524:14 | v | main.rs:517:15:517:24 | source(...) | main.rs:524:14:524:14 | v | $@ | main.rs:517:15:517:24 | source(...) | source(...) | | main.rs:544:10:544:18 | vs_mut[0] | main.rs:542:23:542:32 | source(...) | main.rs:544:10:544:18 | vs_mut[0] | $@ | main.rs:542:23:542:32 | source(...) | source(...) | | main.rs:559:10:559:10 | a | main.rs:554:13:554:22 | source(...) | main.rs:559:10:559:10 | a | $@ | main.rs:554:13:554:22 | source(...) | source(...) | +| main.rs:560:14:560:15 | &b | main.rs:555:13:555:22 | source(...) | main.rs:560:14:560:15 | &b | $@ | main.rs:555:13:555:22 | source(...) | source(...) | +| main.rs:561:14:561:18 | c_ref | main.rs:556:13:556:22 | source(...) | main.rs:561:14:561:18 | c_ref | $@ | main.rs:556:13:556:22 | source(...) | source(...) | | main.rs:562:10:562:15 | * ... | main.rs:556:13:556:22 | source(...) | main.rs:562:10:562:15 | * ... | $@ | main.rs:556:13:556:22 | source(...) | source(...) | +| main.rs:568:10:568:17 | a as i64 | main.rs:566:18:566:27 | source(...) | main.rs:568:10:568:17 | a as i64 | $@ | main.rs:566:18:566:27 | source(...) | source(...) | +| main.rs:574:10:574:17 | b as i64 | main.rs:572:18:572:27 | source(...) | main.rs:574:10:574:17 | b as i64 | $@ | main.rs:572:18:572:27 | source(...) | source(...) | +| main.rs:576:10:576:21 | ...::from(...) | main.rs:572:18:572:27 | source(...) | main.rs:576:10:576:21 | ...::from(...) | $@ | main.rs:572:18:572:27 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.ql b/rust/ql/test/library-tests/dataflow/local/inline-flow.ql index e399ea0e5d71..5dcb7ee70a9d 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.ql +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.ql @@ -5,8 +5,8 @@ import rust import utils.test.InlineFlowTest import DefaultFlowTest -import ValueFlow::PathGraph +import TaintFlow::PathGraph -from ValueFlow::PathNode source, ValueFlow::PathNode sink -where ValueFlow::flowPath(source, sink) +from TaintFlow::PathNode source, TaintFlow::PathNode sink +where TaintFlow::flowPath(source, sink) select sink, source, sink, "$@", source, source.toString() diff --git a/rust/ql/test/library-tests/dataflow/modeled/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/modeled/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..9ec1dde87a0a --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/modeled/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,2 @@ +multipleResolvedTargets +| main.rs:115:14:115:35 | * ... | diff --git a/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected b/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected index 3a9e28258d5e..043809e63395 100644 --- a/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected @@ -1,54 +1,67 @@ models -| 1 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | -| 2 | Summary: ::into_pin; Argument[0]; ReturnValue; value | -| 3 | Summary: ::new; Argument[0]; ReturnValue.Reference; value | -| 4 | Summary: ::pin; Argument[0]; ReturnValue.Reference; value | -| 5 | Summary: ::clone; Argument[self].Reference; ReturnValue; value | -| 6 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 7 | Summary: ::zip; Argument[0].Field[core::option::Option::Some(0)]; ReturnValue.Field[core::option::Option::Some(0)].Field[1]; value | -| 8 | Summary: ::into_inner; Argument[0]; ReturnValue; value | -| 9 | Summary: ::into_inner_unchecked; Argument[0]; ReturnValue; value | -| 10 | Summary: ::new; Argument[0].Reference; ReturnValue; value | -| 11 | Summary: ::new; Argument[0]; ReturnValue; value | -| 12 | Summary: ::new_unchecked; Argument[0].Reference; ReturnValue; value | -| 13 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 14 | Summary: core::ptr::read; Argument[0].Reference; ReturnValue; value | -| 15 | Summary: core::ptr::write; Argument[1]; Argument[0].Reference; value | +| 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value | +| 2 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | +| 3 | Summary: <_ as core::cmp::Ord>::clamp; Argument[self,0,1]; ReturnValue; value | +| 4 | Summary: <_ as core::cmp::Ord>::max; Argument[self,0]; ReturnValue; value | +| 5 | Summary: <_ as core::cmp::Ord>::min; Argument[self,0]; ReturnValue; value | +| 6 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | +| 7 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint | +| 8 | Summary: ::into_pin; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | +| 9 | Summary: ::new; Argument[0]; ReturnValue.Field[alloc::boxed::Box(0)]; value | +| 10 | Summary: ::pin; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]; value | +| 11 | Summary: ::clone; Argument[self].Reference; ReturnValue; value | +| 12 | Summary: ::map_or; Argument[1].ReturnValue; ReturnValue; value | +| 13 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 14 | Summary: ::zip; Argument[0].Field[core::option::Option::Some(0)]; ReturnValue.Field[core::option::Option::Some(0)].Field[1]; value | +| 15 | Summary: ::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]; ReturnValue.Reference; value | +| 16 | Summary: ::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Reference; ReturnValue.Reference; value | +| 17 | Summary: ::into_inner; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value | +| 18 | Summary: ::into_inner_unchecked; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value | +| 19 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | +| 20 | Summary: ::new_unchecked; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | +| 21 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 22 | Summary: core::ptr::read; Argument[0].Reference; ReturnValue; value | +| 23 | Summary: core::ptr::write; Argument[1]; Argument[0].Reference; value | edges -| main.rs:12:9:12:9 | a [Some] | main.rs:13:10:13:19 | a.unwrap() | provenance | MaD:6 | +| main.rs:12:9:12:9 | a [Some] | main.rs:13:10:13:10 | a [Some] | provenance | | | main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:13 | a [Some] | provenance | | | main.rs:12:13:12:28 | Some(...) [Some] | main.rs:12:9:12:9 | a [Some] | provenance | | | main.rs:12:18:12:27 | source(...) | main.rs:12:13:12:28 | Some(...) [Some] | provenance | | -| main.rs:14:9:14:9 | b [Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:6 | -| main.rs:14:13:14:13 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | MaD:1 | +| main.rs:13:10:13:10 | a [Some] | main.rs:13:10:13:19 | a.unwrap() | provenance | MaD:13 | +| main.rs:14:9:14:9 | b [Some] | main.rs:15:10:15:10 | b [Some] | provenance | | +| main.rs:14:13:14:13 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | MaD:2 | | main.rs:14:13:14:21 | a.clone() [Some] | main.rs:14:9:14:9 | b [Some] | provenance | | -| main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:13 | +| main.rs:15:10:15:10 | b [Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:13 | +| main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:10 | a [Ok] | provenance | | | main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:13 | a [Ok] | provenance | | | main.rs:19:31:19:44 | Ok(...) [Ok] | main.rs:19:9:19:9 | a [Ok] | provenance | | | main.rs:19:34:19:43 | source(...) | main.rs:19:31:19:44 | Ok(...) [Ok] | provenance | | -| main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:13 | -| main.rs:21:13:21:13 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | MaD:1 | +| main.rs:20:10:20:10 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:21 | +| main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:10 | b [Ok] | provenance | | +| main.rs:21:13:21:13 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | MaD:2 | | main.rs:21:13:21:21 | a.clone() [Ok] | main.rs:21:9:21:9 | b [Ok] | provenance | | +| main.rs:22:10:22:10 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:21 | | main.rs:26:9:26:9 | a | main.rs:27:10:27:10 | a | provenance | | | main.rs:26:9:26:9 | a | main.rs:28:13:28:13 | a | provenance | | | main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | a | provenance | | | main.rs:28:9:28:9 | b | main.rs:29:10:29:10 | b | provenance | | -| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:1 | -| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:5 | +| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:2 | +| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:11 | | main.rs:28:13:28:21 | a.clone() | main.rs:28:9:28:9 | b | provenance | | -| main.rs:43:18:43:22 | SelfParam [Wrapper] | main.rs:44:26:44:29 | self [Wrapper] | provenance | | +| main.rs:43:18:43:22 | SelfParam [&ref, Wrapper] | main.rs:44:26:44:29 | self [&ref, Wrapper] | provenance | | | main.rs:44:13:44:33 | Wrapper {...} [Wrapper] | main.rs:43:33:45:9 | { ... } [Wrapper] | provenance | | -| main.rs:44:26:44:29 | self [Wrapper] | main.rs:44:26:44:31 | self.n | provenance | | +| main.rs:44:26:44:29 | self [&ref, Wrapper] | main.rs:44:26:44:31 | self.n | provenance | | | main.rs:44:26:44:31 | self.n | main.rs:44:13:44:33 | Wrapper {...} [Wrapper] | provenance | | | main.rs:49:13:49:13 | w [Wrapper] | main.rs:50:15:50:15 | w [Wrapper] | provenance | | | main.rs:49:17:49:41 | Wrapper {...} [Wrapper] | main.rs:49:13:49:13 | w [Wrapper] | provenance | | | main.rs:49:30:49:39 | source(...) | main.rs:49:17:49:41 | Wrapper {...} [Wrapper] | provenance | | -| main.rs:50:15:50:15 | w [Wrapper] | main.rs:43:18:43:22 | SelfParam [Wrapper] | provenance | | | main.rs:50:15:50:15 | w [Wrapper] | main.rs:51:13:51:28 | Wrapper {...} [Wrapper] | provenance | | -| main.rs:50:15:50:15 | w [Wrapper] | main.rs:53:17:53:25 | w.clone() [Wrapper] | provenance | | +| main.rs:50:15:50:15 | w [Wrapper] | main.rs:53:17:53:17 | w [Wrapper] | provenance | | | main.rs:51:13:51:28 | Wrapper {...} [Wrapper] | main.rs:51:26:51:26 | n | provenance | | | main.rs:51:26:51:26 | n | main.rs:51:38:51:38 | n | provenance | | | main.rs:53:13:53:13 | u [Wrapper] | main.rs:54:15:54:15 | u [Wrapper] | provenance | | +| main.rs:53:17:53:17 | w [Wrapper] | main.rs:43:18:43:22 | SelfParam [&ref, Wrapper] | provenance | | +| main.rs:53:17:53:17 | w [Wrapper] | main.rs:53:17:53:25 | w.clone() [Wrapper] | provenance | | | main.rs:53:17:53:25 | w.clone() [Wrapper] | main.rs:53:13:53:13 | u [Wrapper] | provenance | | | main.rs:54:15:54:15 | u [Wrapper] | main.rs:55:13:55:28 | Wrapper {...} [Wrapper] | provenance | | | main.rs:55:13:55:28 | Wrapper {...} [Wrapper] | main.rs:55:26:55:26 | n | provenance | | @@ -58,72 +71,115 @@ edges | main.rs:66:22:66:31 | source(...) | main.rs:66:17:66:32 | Some(...) [Some] | provenance | | | main.rs:67:13:67:13 | z [Some, tuple.1] | main.rs:68:15:68:15 | z [Some, tuple.1] | provenance | | | main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | main.rs:67:13:67:13 | z [Some, tuple.1] | provenance | | -| main.rs:67:23:67:23 | b [Some] | main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | provenance | MaD:7 | +| main.rs:67:23:67:23 | b [Some] | main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | provenance | MaD:14 | | main.rs:68:15:68:15 | z [Some, tuple.1] | main.rs:69:13:69:24 | Some(...) [Some, tuple.1] | provenance | | | main.rs:69:13:69:24 | Some(...) [Some, tuple.1] | main.rs:69:18:69:23 | TuplePat [tuple.1] | provenance | | | main.rs:69:18:69:23 | TuplePat [tuple.1] | main.rs:69:22:69:22 | m | provenance | | | main.rs:69:22:69:22 | m | main.rs:71:22:71:22 | m | provenance | | +| main.rs:79:13:79:13 | b | main.rs:80:14:80:14 | b | provenance | | +| main.rs:79:17:79:47 | a.map_or(...) | main.rs:79:13:79:13 | b | provenance | | +| main.rs:79:33:79:46 | ... + ... | main.rs:79:17:79:47 | a.map_or(...) | provenance | MaD:12 | +| main.rs:79:37:79:46 | source(...) | main.rs:79:33:79:46 | ... + ... | provenance | MaD:6 | +| main.rs:79:37:79:46 | source(...) | main.rs:79:33:79:46 | ... + ... | provenance | MaD:7 | | main.rs:92:29:92:29 | [post] y [&ref] | main.rs:93:33:93:33 | y [&ref] | provenance | | -| main.rs:92:32:92:41 | source(...) | main.rs:92:29:92:29 | [post] y [&ref] | provenance | MaD:15 | -| main.rs:93:33:93:33 | y [&ref] | main.rs:93:18:93:34 | ...::read(...) | provenance | MaD:14 | +| main.rs:92:32:92:41 | source(...) | main.rs:92:29:92:29 | [post] y [&ref] | provenance | MaD:23 | +| main.rs:93:33:93:33 | y [&ref] | main.rs:93:18:93:34 | ...::read(...) | provenance | MaD:22 | | main.rs:108:13:108:17 | mut i | main.rs:109:34:109:34 | i | provenance | | | main.rs:108:13:108:17 | mut i | main.rs:110:33:110:33 | i | provenance | | | main.rs:108:13:108:17 | mut i | main.rs:111:47:111:47 | i | provenance | | +| main.rs:108:13:108:17 | mut i | main.rs:112:24:112:27 | mut pinned | provenance | | | main.rs:108:13:108:17 | mut i | main.rs:113:14:113:14 | i | provenance | | | main.rs:108:21:108:30 | source(...) | main.rs:108:13:108:17 | mut i | provenance | | -| main.rs:109:13:109:20 | mut pin1 [&ref] | main.rs:114:15:114:18 | pin1 [&ref] | provenance | | -| main.rs:109:13:109:20 | mut pin1 [&ref] | main.rs:115:31:115:34 | pin1 [&ref] | provenance | | -| main.rs:109:24:109:35 | ...::new(...) [&ref] | main.rs:109:13:109:20 | mut pin1 [&ref] | provenance | | -| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [&ref] | provenance | MaD:11 | +| main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | main.rs:114:15:114:18 | pin1 [Pin, &ref] | provenance | | +| main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | main.rs:115:31:115:34 | pin1 [Pin, &ref] | provenance | | +| main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | provenance | | +| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | provenance | MaD:19 | | main.rs:109:34:109:34 | i | main.rs:109:33:109:34 | &i [&ref] | provenance | | -| main.rs:110:13:110:20 | mut pin2 [&ref] | main.rs:116:15:116:18 | pin2 [&ref] | provenance | | -| main.rs:110:24:110:34 | ...::pin(...) [&ref] | main.rs:110:13:110:20 | mut pin2 [&ref] | provenance | | -| main.rs:110:33:110:33 | i | main.rs:110:24:110:34 | ...::pin(...) [&ref] | provenance | MaD:4 | -| main.rs:111:13:111:20 | mut pin3 [&ref] | main.rs:117:15:117:18 | pin3 [&ref] | provenance | | -| main.rs:111:24:111:49 | ...::into_pin(...) [&ref] | main.rs:111:13:111:20 | mut pin3 [&ref] | provenance | | -| main.rs:111:38:111:48 | ...::new(...) [&ref] | main.rs:111:24:111:49 | ...::into_pin(...) [&ref] | provenance | MaD:2 | -| main.rs:111:47:111:47 | i | main.rs:111:38:111:48 | ...::new(...) [&ref] | provenance | MaD:3 | -| main.rs:114:15:114:18 | pin1 [&ref] | main.rs:114:14:114:18 | * ... | provenance | | -| main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | main.rs:115:14:115:35 | * ... | provenance | | -| main.rs:115:31:115:34 | pin1 [&ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:8 | -| main.rs:116:15:116:18 | pin2 [&ref] | main.rs:116:14:116:18 | * ... | provenance | | -| main.rs:117:15:117:18 | pin3 [&ref] | main.rs:117:14:117:18 | * ... | provenance | | +| main.rs:110:13:110:20 | mut pin2 [Pin, Box(0)] | main.rs:116:15:116:18 | pin2 [Pin, Box(0)] | provenance | | +| main.rs:110:24:110:34 | ...::pin(...) [Pin, Box(0)] | main.rs:110:13:110:20 | mut pin2 [Pin, Box(0)] | provenance | | +| main.rs:110:33:110:33 | i | main.rs:110:24:110:34 | ...::pin(...) [Pin, Box(0)] | provenance | MaD:10 | +| main.rs:111:13:111:20 | mut pin3 [Pin, Box(0)] | main.rs:117:15:117:18 | pin3 [Pin, Box(0)] | provenance | | +| main.rs:111:24:111:49 | ...::into_pin(...) [Pin, Box(0)] | main.rs:111:13:111:20 | mut pin3 [Pin, Box(0)] | provenance | | +| main.rs:111:38:111:48 | ...::new(...) [Box(0)] | main.rs:111:24:111:49 | ...::into_pin(...) [Pin, Box(0)] | provenance | MaD:8 | +| main.rs:111:47:111:47 | i | main.rs:111:38:111:48 | ...::new(...) [Box(0)] | provenance | MaD:9 | +| main.rs:112:13:112:20 | mut pin4 [Pin, &ref] | main.rs:118:15:118:18 | pin4 [Pin, &ref] | provenance | | +| main.rs:112:24:112:27 | &mut pinned [&ref] | main.rs:112:24:112:27 | ...::new_unchecked(...) [Pin, &ref] | provenance | MaD:20 | +| main.rs:112:24:112:27 | ...::new_unchecked(...) [Pin, &ref] | main.rs:112:13:112:20 | mut pin4 [Pin, &ref] | provenance | | +| main.rs:112:24:112:27 | mut pinned | main.rs:112:24:112:27 | pinned | provenance | | +| main.rs:112:24:112:27 | pinned | main.rs:112:24:112:27 | &mut pinned [&ref] | provenance | | +| main.rs:114:15:114:18 | pin1 [Pin, &ref] | main.rs:114:14:114:18 | * ... | provenance | MaD:16 | +| main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | main.rs:115:14:115:35 | * ... | provenance | MaD:1 | +| main.rs:115:31:115:34 | pin1 [Pin, &ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:17 | +| main.rs:116:15:116:18 | pin2 [Pin, Box(0)] | main.rs:116:14:116:18 | * ... | provenance | MaD:15 | +| main.rs:117:15:117:18 | pin3 [Pin, Box(0)] | main.rs:117:14:117:18 | * ... | provenance | MaD:15 | +| main.rs:118:15:118:18 | pin4 [Pin, &ref] | main.rs:118:14:118:18 | * ... | provenance | MaD:16 | | main.rs:122:13:122:18 | mut ms [MyStruct] | main.rs:123:34:123:35 | ms [MyStruct] | provenance | | | main.rs:122:13:122:18 | mut ms [MyStruct] | main.rs:127:14:127:15 | ms [MyStruct] | provenance | | | main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | main.rs:122:13:122:18 | mut ms [MyStruct] | provenance | | | main.rs:122:38:122:47 | source(...) | main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | provenance | | -| main.rs:123:13:123:20 | mut pin1 [MyStruct] | main.rs:129:30:129:33 | pin1 [MyStruct] | provenance | | -| main.rs:123:24:123:36 | ...::new(...) [MyStruct] | main.rs:123:13:123:20 | mut pin1 [MyStruct] | provenance | | -| main.rs:123:33:123:35 | &ms [&ref, MyStruct] | main.rs:123:24:123:36 | ...::new(...) [MyStruct] | provenance | MaD:10 | +| main.rs:123:13:123:20 | mut pin1 [Pin, &ref, MyStruct] | main.rs:129:30:129:33 | pin1 [Pin, &ref, MyStruct] | provenance | | +| main.rs:123:24:123:36 | ...::new(...) [Pin, &ref, MyStruct] | main.rs:123:13:123:20 | mut pin1 [Pin, &ref, MyStruct] | provenance | | +| main.rs:123:33:123:35 | &ms [&ref, MyStruct] | main.rs:123:24:123:36 | ...::new(...) [Pin, &ref, MyStruct] | provenance | MaD:19 | | main.rs:123:34:123:35 | ms [MyStruct] | main.rs:123:33:123:35 | &ms [&ref, MyStruct] | provenance | | | main.rs:127:14:127:15 | ms [MyStruct] | main.rs:127:14:127:19 | ms.val | provenance | | -| main.rs:129:14:129:34 | ...::into_inner(...) [MyStruct] | main.rs:129:14:129:38 | ... .val | provenance | | -| main.rs:129:30:129:33 | pin1 [MyStruct] | main.rs:129:14:129:34 | ...::into_inner(...) [MyStruct] | provenance | MaD:8 | +| main.rs:129:14:129:34 | ...::into_inner(...) [&ref, MyStruct] | main.rs:129:14:129:38 | ... .val | provenance | | +| main.rs:129:30:129:33 | pin1 [Pin, &ref, MyStruct] | main.rs:129:14:129:34 | ...::into_inner(...) [&ref, MyStruct] | provenance | MaD:17 | | main.rs:136:13:136:18 | mut ms [MyStruct] | main.rs:137:44:137:45 | ms [MyStruct] | provenance | | | main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | main.rs:136:13:136:18 | mut ms [MyStruct] | provenance | | | main.rs:136:38:136:47 | source(...) | main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | provenance | | -| main.rs:137:13:137:20 | mut pin5 [MyStruct] | main.rs:139:40:139:43 | pin5 [MyStruct] | provenance | | -| main.rs:137:24:137:46 | ...::new_unchecked(...) [MyStruct] | main.rs:137:13:137:20 | mut pin5 [MyStruct] | provenance | | -| main.rs:137:43:137:45 | &ms [&ref, MyStruct] | main.rs:137:24:137:46 | ...::new_unchecked(...) [MyStruct] | provenance | MaD:12 | +| main.rs:137:13:137:20 | mut pin5 [Pin, &ref, MyStruct] | main.rs:139:40:139:43 | pin5 [Pin, &ref, MyStruct] | provenance | | +| main.rs:137:24:137:46 | ...::new_unchecked(...) [Pin, &ref, MyStruct] | main.rs:137:13:137:20 | mut pin5 [Pin, &ref, MyStruct] | provenance | | +| main.rs:137:43:137:45 | &ms [&ref, MyStruct] | main.rs:137:24:137:46 | ...::new_unchecked(...) [Pin, &ref, MyStruct] | provenance | MaD:20 | | main.rs:137:44:137:45 | ms [MyStruct] | main.rs:137:43:137:45 | &ms [&ref, MyStruct] | provenance | | -| main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [MyStruct] | main.rs:139:14:139:48 | ... .val | provenance | | -| main.rs:139:40:139:43 | pin5 [MyStruct] | main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [MyStruct] | provenance | MaD:9 | +| main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [&ref, MyStruct] | main.rs:139:14:139:48 | ... .val | provenance | | +| main.rs:139:40:139:43 | pin5 [Pin, &ref, MyStruct] | main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [&ref, MyStruct] | provenance | MaD:18 | +| main.rs:153:9:153:9 | a | main.rs:155:13:155:13 | a | provenance | | +| main.rs:153:13:153:22 | source(...) | main.rs:153:9:153:9 | a | provenance | | +| main.rs:154:9:154:9 | b | main.rs:155:19:155:19 | b | provenance | | +| main.rs:154:13:154:22 | source(...) | main.rs:154:9:154:9 | b | provenance | | +| main.rs:155:9:155:9 | c | main.rs:156:10:156:10 | c | provenance | | +| main.rs:155:13:155:13 | a | main.rs:155:13:155:20 | a.min(...) | provenance | MaD:5 | +| main.rs:155:13:155:20 | a.min(...) | main.rs:155:9:155:9 | c | provenance | | +| main.rs:155:19:155:19 | b | main.rs:155:13:155:20 | a.min(...) | provenance | MaD:5 | +| main.rs:158:9:158:9 | d | main.rs:160:13:160:13 | d | provenance | | +| main.rs:158:13:158:22 | source(...) | main.rs:158:9:158:9 | d | provenance | | +| main.rs:159:9:159:9 | e | main.rs:160:19:160:19 | e | provenance | | +| main.rs:159:13:159:22 | source(...) | main.rs:159:9:159:9 | e | provenance | | +| main.rs:160:9:160:9 | f | main.rs:161:10:161:10 | f | provenance | | +| main.rs:160:13:160:13 | d | main.rs:160:13:160:20 | d.max(...) | provenance | MaD:4 | +| main.rs:160:13:160:20 | d.max(...) | main.rs:160:9:160:9 | f | provenance | | +| main.rs:160:19:160:19 | e | main.rs:160:13:160:20 | d.max(...) | provenance | MaD:4 | +| main.rs:163:9:163:9 | g | main.rs:166:13:166:13 | g | provenance | | +| main.rs:163:13:163:22 | source(...) | main.rs:163:9:163:9 | g | provenance | | +| main.rs:164:9:164:9 | h | main.rs:166:21:166:21 | h | provenance | | +| main.rs:164:13:164:22 | source(...) | main.rs:164:9:164:9 | h | provenance | | +| main.rs:165:9:165:9 | i | main.rs:166:24:166:24 | i | provenance | | +| main.rs:165:13:165:22 | source(...) | main.rs:165:9:165:9 | i | provenance | | +| main.rs:166:9:166:9 | j | main.rs:167:10:167:10 | j | provenance | | +| main.rs:166:13:166:13 | g | main.rs:166:13:166:25 | g.clamp(...) | provenance | MaD:3 | +| main.rs:166:13:166:25 | g.clamp(...) | main.rs:166:9:166:9 | j | provenance | | +| main.rs:166:21:166:21 | h | main.rs:166:13:166:25 | g.clamp(...) | provenance | MaD:3 | +| main.rs:166:24:166:24 | i | main.rs:166:13:166:25 | g.clamp(...) | provenance | MaD:3 | nodes | main.rs:12:9:12:9 | a [Some] | semmle.label | a [Some] | | main.rs:12:13:12:28 | Some(...) [Some] | semmle.label | Some(...) [Some] | | main.rs:12:18:12:27 | source(...) | semmle.label | source(...) | +| main.rs:13:10:13:10 | a [Some] | semmle.label | a [Some] | | main.rs:13:10:13:19 | a.unwrap() | semmle.label | a.unwrap() | | main.rs:14:9:14:9 | b [Some] | semmle.label | b [Some] | | main.rs:14:13:14:13 | a [Some] | semmle.label | a [Some] | | main.rs:14:13:14:21 | a.clone() [Some] | semmle.label | a.clone() [Some] | +| main.rs:15:10:15:10 | b [Some] | semmle.label | b [Some] | | main.rs:15:10:15:19 | b.unwrap() | semmle.label | b.unwrap() | | main.rs:19:9:19:9 | a [Ok] | semmle.label | a [Ok] | | main.rs:19:31:19:44 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | | main.rs:19:34:19:43 | source(...) | semmle.label | source(...) | +| main.rs:20:10:20:10 | a [Ok] | semmle.label | a [Ok] | | main.rs:20:10:20:19 | a.unwrap() | semmle.label | a.unwrap() | | main.rs:21:9:21:9 | b [Ok] | semmle.label | b [Ok] | | main.rs:21:13:21:13 | a [Ok] | semmle.label | a [Ok] | | main.rs:21:13:21:21 | a.clone() [Ok] | semmle.label | a.clone() [Ok] | +| main.rs:22:10:22:10 | b [Ok] | semmle.label | b [Ok] | | main.rs:22:10:22:19 | b.unwrap() | semmle.label | b.unwrap() | | main.rs:26:9:26:9 | a | semmle.label | a | | main.rs:26:13:26:22 | source(...) | semmle.label | source(...) | @@ -132,10 +188,10 @@ nodes | main.rs:28:13:28:13 | a | semmle.label | a | | main.rs:28:13:28:21 | a.clone() | semmle.label | a.clone() | | main.rs:29:10:29:10 | b | semmle.label | b | -| main.rs:43:18:43:22 | SelfParam [Wrapper] | semmle.label | SelfParam [Wrapper] | +| main.rs:43:18:43:22 | SelfParam [&ref, Wrapper] | semmle.label | SelfParam [&ref, Wrapper] | | main.rs:43:33:45:9 | { ... } [Wrapper] | semmle.label | { ... } [Wrapper] | | main.rs:44:13:44:33 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] | -| main.rs:44:26:44:29 | self [Wrapper] | semmle.label | self [Wrapper] | +| main.rs:44:26:44:29 | self [&ref, Wrapper] | semmle.label | self [&ref, Wrapper] | | main.rs:44:26:44:31 | self.n | semmle.label | self.n | | main.rs:49:13:49:13 | w [Wrapper] | semmle.label | w [Wrapper] | | main.rs:49:17:49:41 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] | @@ -145,6 +201,7 @@ nodes | main.rs:51:26:51:26 | n | semmle.label | n | | main.rs:51:38:51:38 | n | semmle.label | n | | main.rs:53:13:53:13 | u [Wrapper] | semmle.label | u [Wrapper] | +| main.rs:53:17:53:17 | w [Wrapper] | semmle.label | w [Wrapper] | | main.rs:53:17:53:25 | w.clone() [Wrapper] | semmle.label | w.clone() [Wrapper] | | main.rs:54:15:54:15 | u [Wrapper] | semmle.label | u [Wrapper] | | main.rs:55:13:55:28 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] | @@ -161,57 +218,99 @@ nodes | main.rs:69:18:69:23 | TuplePat [tuple.1] | semmle.label | TuplePat [tuple.1] | | main.rs:69:22:69:22 | m | semmle.label | m | | main.rs:71:22:71:22 | m | semmle.label | m | +| main.rs:79:13:79:13 | b | semmle.label | b | +| main.rs:79:17:79:47 | a.map_or(...) | semmle.label | a.map_or(...) | +| main.rs:79:33:79:46 | ... + ... | semmle.label | ... + ... | +| main.rs:79:37:79:46 | source(...) | semmle.label | source(...) | +| main.rs:80:14:80:14 | b | semmle.label | b | | main.rs:92:29:92:29 | [post] y [&ref] | semmle.label | [post] y [&ref] | | main.rs:92:32:92:41 | source(...) | semmle.label | source(...) | | main.rs:93:18:93:34 | ...::read(...) | semmle.label | ...::read(...) | | main.rs:93:33:93:33 | y [&ref] | semmle.label | y [&ref] | | main.rs:108:13:108:17 | mut i | semmle.label | mut i | | main.rs:108:21:108:30 | source(...) | semmle.label | source(...) | -| main.rs:109:13:109:20 | mut pin1 [&ref] | semmle.label | mut pin1 [&ref] | -| main.rs:109:24:109:35 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | semmle.label | mut pin1 [Pin, &ref] | +| main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | | main.rs:109:33:109:34 | &i [&ref] | semmle.label | &i [&ref] | | main.rs:109:34:109:34 | i | semmle.label | i | -| main.rs:110:13:110:20 | mut pin2 [&ref] | semmle.label | mut pin2 [&ref] | -| main.rs:110:24:110:34 | ...::pin(...) [&ref] | semmle.label | ...::pin(...) [&ref] | +| main.rs:110:13:110:20 | mut pin2 [Pin, Box(0)] | semmle.label | mut pin2 [Pin, Box(0)] | +| main.rs:110:24:110:34 | ...::pin(...) [Pin, Box(0)] | semmle.label | ...::pin(...) [Pin, Box(0)] | | main.rs:110:33:110:33 | i | semmle.label | i | -| main.rs:111:13:111:20 | mut pin3 [&ref] | semmle.label | mut pin3 [&ref] | -| main.rs:111:24:111:49 | ...::into_pin(...) [&ref] | semmle.label | ...::into_pin(...) [&ref] | -| main.rs:111:38:111:48 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| main.rs:111:13:111:20 | mut pin3 [Pin, Box(0)] | semmle.label | mut pin3 [Pin, Box(0)] | +| main.rs:111:24:111:49 | ...::into_pin(...) [Pin, Box(0)] | semmle.label | ...::into_pin(...) [Pin, Box(0)] | +| main.rs:111:38:111:48 | ...::new(...) [Box(0)] | semmle.label | ...::new(...) [Box(0)] | | main.rs:111:47:111:47 | i | semmle.label | i | +| main.rs:112:13:112:20 | mut pin4 [Pin, &ref] | semmle.label | mut pin4 [Pin, &ref] | +| main.rs:112:24:112:27 | &mut pinned [&ref] | semmle.label | &mut pinned [&ref] | +| main.rs:112:24:112:27 | ...::new_unchecked(...) [Pin, &ref] | semmle.label | ...::new_unchecked(...) [Pin, &ref] | +| main.rs:112:24:112:27 | mut pinned | semmle.label | mut pinned | +| main.rs:112:24:112:27 | pinned | semmle.label | pinned | | main.rs:113:14:113:14 | i | semmle.label | i | | main.rs:114:14:114:18 | * ... | semmle.label | * ... | -| main.rs:114:15:114:18 | pin1 [&ref] | semmle.label | pin1 [&ref] | +| main.rs:114:15:114:18 | pin1 [Pin, &ref] | semmle.label | pin1 [Pin, &ref] | | main.rs:115:14:115:35 | * ... | semmle.label | * ... | | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | semmle.label | ...::into_inner(...) [&ref] | -| main.rs:115:31:115:34 | pin1 [&ref] | semmle.label | pin1 [&ref] | +| main.rs:115:31:115:34 | pin1 [Pin, &ref] | semmle.label | pin1 [Pin, &ref] | | main.rs:116:14:116:18 | * ... | semmle.label | * ... | -| main.rs:116:15:116:18 | pin2 [&ref] | semmle.label | pin2 [&ref] | +| main.rs:116:15:116:18 | pin2 [Pin, Box(0)] | semmle.label | pin2 [Pin, Box(0)] | | main.rs:117:14:117:18 | * ... | semmle.label | * ... | -| main.rs:117:15:117:18 | pin3 [&ref] | semmle.label | pin3 [&ref] | +| main.rs:117:15:117:18 | pin3 [Pin, Box(0)] | semmle.label | pin3 [Pin, Box(0)] | +| main.rs:118:14:118:18 | * ... | semmle.label | * ... | +| main.rs:118:15:118:18 | pin4 [Pin, &ref] | semmle.label | pin4 [Pin, &ref] | | main.rs:122:13:122:18 | mut ms [MyStruct] | semmle.label | mut ms [MyStruct] | | main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | semmle.label | MyStruct {...} [MyStruct] | | main.rs:122:38:122:47 | source(...) | semmle.label | source(...) | -| main.rs:123:13:123:20 | mut pin1 [MyStruct] | semmle.label | mut pin1 [MyStruct] | -| main.rs:123:24:123:36 | ...::new(...) [MyStruct] | semmle.label | ...::new(...) [MyStruct] | +| main.rs:123:13:123:20 | mut pin1 [Pin, &ref, MyStruct] | semmle.label | mut pin1 [Pin, &ref, MyStruct] | +| main.rs:123:24:123:36 | ...::new(...) [Pin, &ref, MyStruct] | semmle.label | ...::new(...) [Pin, &ref, MyStruct] | | main.rs:123:33:123:35 | &ms [&ref, MyStruct] | semmle.label | &ms [&ref, MyStruct] | | main.rs:123:34:123:35 | ms [MyStruct] | semmle.label | ms [MyStruct] | | main.rs:127:14:127:15 | ms [MyStruct] | semmle.label | ms [MyStruct] | | main.rs:127:14:127:19 | ms.val | semmle.label | ms.val | -| main.rs:129:14:129:34 | ...::into_inner(...) [MyStruct] | semmle.label | ...::into_inner(...) [MyStruct] | +| main.rs:129:14:129:34 | ...::into_inner(...) [&ref, MyStruct] | semmle.label | ...::into_inner(...) [&ref, MyStruct] | | main.rs:129:14:129:38 | ... .val | semmle.label | ... .val | -| main.rs:129:30:129:33 | pin1 [MyStruct] | semmle.label | pin1 [MyStruct] | +| main.rs:129:30:129:33 | pin1 [Pin, &ref, MyStruct] | semmle.label | pin1 [Pin, &ref, MyStruct] | | main.rs:136:13:136:18 | mut ms [MyStruct] | semmle.label | mut ms [MyStruct] | | main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | semmle.label | MyStruct {...} [MyStruct] | | main.rs:136:38:136:47 | source(...) | semmle.label | source(...) | -| main.rs:137:13:137:20 | mut pin5 [MyStruct] | semmle.label | mut pin5 [MyStruct] | -| main.rs:137:24:137:46 | ...::new_unchecked(...) [MyStruct] | semmle.label | ...::new_unchecked(...) [MyStruct] | +| main.rs:137:13:137:20 | mut pin5 [Pin, &ref, MyStruct] | semmle.label | mut pin5 [Pin, &ref, MyStruct] | +| main.rs:137:24:137:46 | ...::new_unchecked(...) [Pin, &ref, MyStruct] | semmle.label | ...::new_unchecked(...) [Pin, &ref, MyStruct] | | main.rs:137:43:137:45 | &ms [&ref, MyStruct] | semmle.label | &ms [&ref, MyStruct] | | main.rs:137:44:137:45 | ms [MyStruct] | semmle.label | ms [MyStruct] | -| main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [MyStruct] | semmle.label | ...::into_inner_unchecked(...) [MyStruct] | +| main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [&ref, MyStruct] | semmle.label | ...::into_inner_unchecked(...) [&ref, MyStruct] | | main.rs:139:14:139:48 | ... .val | semmle.label | ... .val | -| main.rs:139:40:139:43 | pin5 [MyStruct] | semmle.label | pin5 [MyStruct] | +| main.rs:139:40:139:43 | pin5 [Pin, &ref, MyStruct] | semmle.label | pin5 [Pin, &ref, MyStruct] | +| main.rs:153:9:153:9 | a | semmle.label | a | +| main.rs:153:13:153:22 | source(...) | semmle.label | source(...) | +| main.rs:154:9:154:9 | b | semmle.label | b | +| main.rs:154:13:154:22 | source(...) | semmle.label | source(...) | +| main.rs:155:9:155:9 | c | semmle.label | c | +| main.rs:155:13:155:13 | a | semmle.label | a | +| main.rs:155:13:155:20 | a.min(...) | semmle.label | a.min(...) | +| main.rs:155:19:155:19 | b | semmle.label | b | +| main.rs:156:10:156:10 | c | semmle.label | c | +| main.rs:158:9:158:9 | d | semmle.label | d | +| main.rs:158:13:158:22 | source(...) | semmle.label | source(...) | +| main.rs:159:9:159:9 | e | semmle.label | e | +| main.rs:159:13:159:22 | source(...) | semmle.label | source(...) | +| main.rs:160:9:160:9 | f | semmle.label | f | +| main.rs:160:13:160:13 | d | semmle.label | d | +| main.rs:160:13:160:20 | d.max(...) | semmle.label | d.max(...) | +| main.rs:160:19:160:19 | e | semmle.label | e | +| main.rs:161:10:161:10 | f | semmle.label | f | +| main.rs:163:9:163:9 | g | semmle.label | g | +| main.rs:163:13:163:22 | source(...) | semmle.label | source(...) | +| main.rs:164:9:164:9 | h | semmle.label | h | +| main.rs:164:13:164:22 | source(...) | semmle.label | source(...) | +| main.rs:165:9:165:9 | i | semmle.label | i | +| main.rs:165:13:165:22 | source(...) | semmle.label | source(...) | +| main.rs:166:9:166:9 | j | semmle.label | j | +| main.rs:166:13:166:13 | g | semmle.label | g | +| main.rs:166:13:166:25 | g.clamp(...) | semmle.label | g.clamp(...) | +| main.rs:166:21:166:21 | h | semmle.label | h | +| main.rs:166:24:166:24 | i | semmle.label | i | +| main.rs:167:10:167:10 | j | semmle.label | j | subpaths -| main.rs:50:15:50:15 | w [Wrapper] | main.rs:43:18:43:22 | SelfParam [Wrapper] | main.rs:43:33:45:9 | { ... } [Wrapper] | main.rs:53:17:53:25 | w.clone() [Wrapper] | +| main.rs:53:17:53:17 | w [Wrapper] | main.rs:43:18:43:22 | SelfParam [&ref, Wrapper] | main.rs:43:33:45:9 | { ... } [Wrapper] | main.rs:53:17:53:25 | w.clone() [Wrapper] | testFailures #select | main.rs:13:10:13:19 | a.unwrap() | main.rs:12:18:12:27 | source(...) | main.rs:13:10:13:19 | a.unwrap() | $@ | main.rs:12:18:12:27 | source(...) | source(...) | @@ -223,12 +322,21 @@ testFailures | main.rs:51:38:51:38 | n | main.rs:49:30:49:39 | source(...) | main.rs:51:38:51:38 | n | $@ | main.rs:49:30:49:39 | source(...) | source(...) | | main.rs:55:38:55:38 | n | main.rs:49:30:49:39 | source(...) | main.rs:55:38:55:38 | n | $@ | main.rs:49:30:49:39 | source(...) | source(...) | | main.rs:71:22:71:22 | m | main.rs:66:22:66:31 | source(...) | main.rs:71:22:71:22 | m | $@ | main.rs:66:22:66:31 | source(...) | source(...) | +| main.rs:80:14:80:14 | b | main.rs:79:37:79:46 | source(...) | main.rs:80:14:80:14 | b | $@ | main.rs:79:37:79:46 | source(...) | source(...) | | main.rs:93:18:93:34 | ...::read(...) | main.rs:92:32:92:41 | source(...) | main.rs:93:18:93:34 | ...::read(...) | $@ | main.rs:92:32:92:41 | source(...) | source(...) | | main.rs:113:14:113:14 | i | main.rs:108:21:108:30 | source(...) | main.rs:113:14:113:14 | i | $@ | main.rs:108:21:108:30 | source(...) | source(...) | | main.rs:114:14:114:18 | * ... | main.rs:108:21:108:30 | source(...) | main.rs:114:14:114:18 | * ... | $@ | main.rs:108:21:108:30 | source(...) | source(...) | | main.rs:115:14:115:35 | * ... | main.rs:108:21:108:30 | source(...) | main.rs:115:14:115:35 | * ... | $@ | main.rs:108:21:108:30 | source(...) | source(...) | | main.rs:116:14:116:18 | * ... | main.rs:108:21:108:30 | source(...) | main.rs:116:14:116:18 | * ... | $@ | main.rs:108:21:108:30 | source(...) | source(...) | | main.rs:117:14:117:18 | * ... | main.rs:108:21:108:30 | source(...) | main.rs:117:14:117:18 | * ... | $@ | main.rs:108:21:108:30 | source(...) | source(...) | +| main.rs:118:14:118:18 | * ... | main.rs:108:21:108:30 | source(...) | main.rs:118:14:118:18 | * ... | $@ | main.rs:108:21:108:30 | source(...) | source(...) | | main.rs:127:14:127:19 | ms.val | main.rs:122:38:122:47 | source(...) | main.rs:127:14:127:19 | ms.val | $@ | main.rs:122:38:122:47 | source(...) | source(...) | | main.rs:129:14:129:38 | ... .val | main.rs:122:38:122:47 | source(...) | main.rs:129:14:129:38 | ... .val | $@ | main.rs:122:38:122:47 | source(...) | source(...) | | main.rs:139:14:139:48 | ... .val | main.rs:136:38:136:47 | source(...) | main.rs:139:14:139:48 | ... .val | $@ | main.rs:136:38:136:47 | source(...) | source(...) | +| main.rs:156:10:156:10 | c | main.rs:153:13:153:22 | source(...) | main.rs:156:10:156:10 | c | $@ | main.rs:153:13:153:22 | source(...) | source(...) | +| main.rs:156:10:156:10 | c | main.rs:154:13:154:22 | source(...) | main.rs:156:10:156:10 | c | $@ | main.rs:154:13:154:22 | source(...) | source(...) | +| main.rs:161:10:161:10 | f | main.rs:158:13:158:22 | source(...) | main.rs:161:10:161:10 | f | $@ | main.rs:158:13:158:22 | source(...) | source(...) | +| main.rs:161:10:161:10 | f | main.rs:159:13:159:22 | source(...) | main.rs:161:10:161:10 | f | $@ | main.rs:159:13:159:22 | source(...) | source(...) | +| main.rs:167:10:167:10 | j | main.rs:163:13:163:22 | source(...) | main.rs:167:10:167:10 | j | $@ | main.rs:163:13:163:22 | source(...) | source(...) | +| main.rs:167:10:167:10 | j | main.rs:164:13:164:22 | source(...) | main.rs:167:10:167:10 | j | $@ | main.rs:164:13:164:22 | source(...) | source(...) | +| main.rs:167:10:167:10 | j | main.rs:165:13:165:22 | source(...) | main.rs:167:10:167:10 | j | $@ | main.rs:165:13:165:22 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/modeled/inline-flow.ql b/rust/ql/test/library-tests/dataflow/modeled/inline-flow.ql index e399ea0e5d71..5dcb7ee70a9d 100644 --- a/rust/ql/test/library-tests/dataflow/modeled/inline-flow.ql +++ b/rust/ql/test/library-tests/dataflow/modeled/inline-flow.ql @@ -5,8 +5,8 @@ import rust import utils.test.InlineFlowTest import DefaultFlowTest -import ValueFlow::PathGraph +import TaintFlow::PathGraph -from ValueFlow::PathNode source, ValueFlow::PathNode sink -where ValueFlow::flowPath(source, sink) +from TaintFlow::PathNode source, TaintFlow::PathNode sink +where TaintFlow::flowPath(source, sink) select sink, source, sink, "$@", source, source.toString() diff --git a/rust/ql/test/library-tests/dataflow/modeled/main.rs b/rust/ql/test/library-tests/dataflow/modeled/main.rs index 66a928782267..09943a81b8ac 100644 --- a/rust/ql/test/library-tests/dataflow/modeled/main.rs +++ b/rust/ql/test/library-tests/dataflow/modeled/main.rs @@ -115,7 +115,7 @@ fn test_pin() { sink(*Pin::into_inner(pin1)); // $ hasValueFlow=40 sink(*pin2); // $ hasValueFlow=40 sink(*pin3); // $ hasValueFlow=40 - sink(*pin4); // $ hasTaintFlow=40 + sink(*pin4); // $ hasValueFlow=40 } { @@ -149,10 +149,29 @@ fn test_pin() { } } +fn test_ord() { + let a = source(50); + let b = source(51); + let c = a.min(b); + sink(c); // $ hasValueFlow=50 hasValueFlow=51 + + let d = source(52); + let e = source(53); + let f = d.max(e); + sink(f); // $ hasValueFlow=52 hasValueFlow=53 + + let g = source(54); + let h = source(55); + let i = source(56); + let j = g.clamp(h, i); + sink(j); // $ hasValueFlow=54 hasValueFlow=55 hasValueFlow=56 +} + fn main() { option_clone(); result_clone(); i64_clone(); my_clone::wrapper_clone(); test_pin(); + test_ord(); } diff --git a/rust/ql/test/library-tests/dataflow/models/main.rs b/rust/ql/test/library-tests/dataflow/models/main.rs index 7daa883996f2..7395205a7fcf 100644 --- a/rust/ql/test/library-tests/dataflow/models/main.rs +++ b/rust/ql/test/library-tests/dataflow/models/main.rs @@ -31,6 +31,20 @@ enum MyPosEnum { B(i64), } +// has a manual flow model with flow from second argument to the return value +// and a wrong generated model with flow from first argument to the return value +fn snd(a: i64, b: i64) -> i64 { + 0 +} + +fn test_snd() { + let s1 = source(99); + sink(snd(0, s1)); // $ hasValueFlow=99 + + let s2 = source(88); + sink(snd(s2, 0)); +} + // has a flow model fn get_var_pos(e: MyPosEnum) -> i64 { 0 diff --git a/rust/ql/test/library-tests/dataflow/models/models.expected b/rust/ql/test/library-tests/dataflow/models/models.expected index 955b0b81b443..f9848542dd76 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.expected +++ b/rust/ql/test/library-tests/dataflow/models/models.expected @@ -7,22 +7,24 @@ models | 6 | Source: main::enum_source; ReturnValue.Field[main::MyFieldEnum::D::field_d]; test-source | | 7 | Source: main::simple_source; ReturnValue; test-source | | 8 | Source: main::source_into_function::pass_source; Argument[1].Parameter[0]; test-source | -| 9 | Summary: <_ as core::cmp::Ord>::max; Argument[self]; ReturnValue; value | +| 9 | Summary: <_ as core::cmp::Ord>::max; Argument[self,0]; ReturnValue; value | | 10 | Summary: <_ as core::cmp::PartialOrd>::lt; Argument[self].Reference; ReturnValue; taint | -| 11 | Summary: main::apply; Argument[0]; Argument[1].Parameter[0]; value | -| 12 | Summary: main::apply; Argument[1].ReturnValue; ReturnValue; value | -| 13 | Summary: main::coerce; Argument[0]; ReturnValue; taint | -| 14 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | -| 15 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | -| 16 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | -| 17 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | -| 18 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | -| 19 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | -| 20 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | -| 21 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | -| 22 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | -| 23 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | -| 24 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | +| 11 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 12 | Summary: main::apply; Argument[0]; Argument[1].Parameter[0]; value | +| 13 | Summary: main::apply; Argument[1].ReturnValue; ReturnValue; value | +| 14 | Summary: main::coerce; Argument[0]; ReturnValue; taint | +| 15 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | +| 16 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | +| 17 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | +| 18 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | +| 19 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | +| 20 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | +| 21 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | +| 22 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | +| 23 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | +| 24 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | +| 25 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | +| 26 | Summary: main::snd; Argument[1]; ReturnValue; value | edges | main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | | | main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | | @@ -32,285 +34,291 @@ edges | main.rs:16:19:16:19 | s | main.rs:16:10:16:20 | identity(...) | provenance | QL | | main.rs:25:9:25:9 | s | main.rs:26:17:26:17 | s | provenance | | | main.rs:25:13:25:22 | source(...) | main.rs:25:9:25:9 | s | provenance | | -| main.rs:26:17:26:17 | s | main.rs:26:10:26:18 | coerce(...) | provenance | MaD:13 | -| main.rs:40:9:40:9 | s | main.rs:41:27:41:27 | s | provenance | | -| main.rs:40:9:40:9 | s | main.rs:41:27:41:27 | s | provenance | | -| main.rs:40:13:40:21 | source(...) | main.rs:40:9:40:9 | s | provenance | | -| main.rs:40:13:40:21 | source(...) | main.rs:40:9:40:9 | s | provenance | | -| main.rs:41:9:41:10 | e1 [A] | main.rs:42:22:42:23 | e1 [A] | provenance | | -| main.rs:41:9:41:10 | e1 [A] | main.rs:42:22:42:23 | e1 [A] | provenance | | -| main.rs:41:14:41:28 | ...::A(...) [A] | main.rs:41:9:41:10 | e1 [A] | provenance | | -| main.rs:41:14:41:28 | ...::A(...) [A] | main.rs:41:9:41:10 | e1 [A] | provenance | | -| main.rs:41:27:41:27 | s | main.rs:41:14:41:28 | ...::A(...) [A] | provenance | | -| main.rs:41:27:41:27 | s | main.rs:41:14:41:28 | ...::A(...) [A] | provenance | | -| main.rs:42:22:42:23 | e1 [A] | main.rs:42:10:42:24 | get_var_pos(...) | provenance | MaD:19 | -| main.rs:42:22:42:23 | e1 [A] | main.rs:42:10:42:24 | get_var_pos(...) | provenance | MaD:19 | -| main.rs:53:9:53:9 | s | main.rs:54:26:54:26 | s | provenance | | -| main.rs:53:9:53:9 | s | main.rs:54:26:54:26 | s | provenance | | -| main.rs:53:13:53:21 | source(...) | main.rs:53:9:53:9 | s | provenance | | -| main.rs:53:13:53:21 | source(...) | main.rs:53:9:53:9 | s | provenance | | -| main.rs:54:9:54:10 | e1 [B] | main.rs:55:11:55:12 | e1 [B] | provenance | | -| main.rs:54:9:54:10 | e1 [B] | main.rs:55:11:55:12 | e1 [B] | provenance | | -| main.rs:54:14:54:27 | set_var_pos(...) [B] | main.rs:54:9:54:10 | e1 [B] | provenance | | -| main.rs:54:14:54:27 | set_var_pos(...) [B] | main.rs:54:9:54:10 | e1 [B] | provenance | | -| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:24 | -| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:24 | -| main.rs:55:11:55:12 | e1 [B] | main.rs:57:9:57:23 | ...::B(...) [B] | provenance | | -| main.rs:55:11:55:12 | e1 [B] | main.rs:57:9:57:23 | ...::B(...) [B] | provenance | | -| main.rs:57:9:57:23 | ...::B(...) [B] | main.rs:57:22:57:22 | i | provenance | | -| main.rs:57:9:57:23 | ...::B(...) [B] | main.rs:57:22:57:22 | i | provenance | | -| main.rs:57:22:57:22 | i | main.rs:57:33:57:33 | i | provenance | | -| main.rs:57:22:57:22 | i | main.rs:57:33:57:33 | i | provenance | | -| main.rs:72:9:72:9 | s | main.rs:73:40:73:40 | s | provenance | | -| main.rs:72:9:72:9 | s | main.rs:73:40:73:40 | s | provenance | | -| main.rs:72:13:72:21 | source(...) | main.rs:72:9:72:9 | s | provenance | | -| main.rs:72:13:72:21 | source(...) | main.rs:72:9:72:9 | s | provenance | | -| main.rs:73:9:73:10 | e1 [C] | main.rs:74:24:74:25 | e1 [C] | provenance | | -| main.rs:73:9:73:10 | e1 [C] | main.rs:74:24:74:25 | e1 [C] | provenance | | -| main.rs:73:14:73:42 | ...::C {...} [C] | main.rs:73:9:73:10 | e1 [C] | provenance | | -| main.rs:73:14:73:42 | ...::C {...} [C] | main.rs:73:9:73:10 | e1 [C] | provenance | | -| main.rs:73:40:73:40 | s | main.rs:73:14:73:42 | ...::C {...} [C] | provenance | | -| main.rs:73:40:73:40 | s | main.rs:73:14:73:42 | ...::C {...} [C] | provenance | | -| main.rs:74:24:74:25 | e1 [C] | main.rs:74:10:74:26 | get_var_field(...) | provenance | MaD:18 | -| main.rs:74:24:74:25 | e1 [C] | main.rs:74:10:74:26 | get_var_field(...) | provenance | MaD:18 | -| main.rs:85:9:85:9 | s | main.rs:86:28:86:28 | s | provenance | | -| main.rs:85:9:85:9 | s | main.rs:86:28:86:28 | s | provenance | | -| main.rs:85:13:85:21 | source(...) | main.rs:85:9:85:9 | s | provenance | | -| main.rs:85:13:85:21 | source(...) | main.rs:85:9:85:9 | s | provenance | | -| main.rs:86:9:86:10 | e1 [D] | main.rs:87:11:87:12 | e1 [D] | provenance | | -| main.rs:86:9:86:10 | e1 [D] | main.rs:87:11:87:12 | e1 [D] | provenance | | -| main.rs:86:14:86:29 | set_var_field(...) [D] | main.rs:86:9:86:10 | e1 [D] | provenance | | -| main.rs:86:14:86:29 | set_var_field(...) [D] | main.rs:86:9:86:10 | e1 [D] | provenance | | -| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:23 | -| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:23 | -| main.rs:87:11:87:12 | e1 [D] | main.rs:89:9:89:37 | ...::D {...} [D] | provenance | | -| main.rs:87:11:87:12 | e1 [D] | main.rs:89:9:89:37 | ...::D {...} [D] | provenance | | -| main.rs:89:9:89:37 | ...::D {...} [D] | main.rs:89:35:89:35 | i | provenance | | -| main.rs:89:9:89:37 | ...::D {...} [D] | main.rs:89:35:89:35 | i | provenance | | -| main.rs:89:35:89:35 | i | main.rs:89:47:89:47 | i | provenance | | -| main.rs:89:35:89:35 | i | main.rs:89:47:89:47 | i | provenance | | -| main.rs:104:9:104:9 | s | main.rs:106:17:106:17 | s | provenance | | -| main.rs:104:9:104:9 | s | main.rs:106:17:106:17 | s | provenance | | -| main.rs:104:13:104:21 | source(...) | main.rs:104:9:104:9 | s | provenance | | -| main.rs:104:13:104:21 | source(...) | main.rs:104:9:104:9 | s | provenance | | -| main.rs:105:9:105:17 | my_struct [MyStruct.field1] | main.rs:109:27:109:35 | my_struct [MyStruct.field1] | provenance | | -| main.rs:105:9:105:17 | my_struct [MyStruct.field1] | main.rs:109:27:109:35 | my_struct [MyStruct.field1] | provenance | | -| main.rs:105:21:108:5 | MyStruct {...} [MyStruct.field1] | main.rs:105:9:105:17 | my_struct [MyStruct.field1] | provenance | | -| main.rs:105:21:108:5 | MyStruct {...} [MyStruct.field1] | main.rs:105:9:105:17 | my_struct [MyStruct.field1] | provenance | | -| main.rs:106:17:106:17 | s | main.rs:105:21:108:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:106:17:106:17 | s | main.rs:105:21:108:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | main.rs:109:10:109:36 | get_struct_field(...) | provenance | MaD:16 | -| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | main.rs:109:10:109:36 | get_struct_field(...) | provenance | MaD:16 | -| main.rs:126:9:126:9 | s | main.rs:127:38:127:38 | s | provenance | | -| main.rs:126:9:126:9 | s | main.rs:127:38:127:38 | s | provenance | | -| main.rs:126:13:126:21 | source(...) | main.rs:126:9:126:9 | s | provenance | | -| main.rs:126:13:126:21 | source(...) | main.rs:126:9:126:9 | s | provenance | | -| main.rs:127:9:127:17 | my_struct [MyStruct.field2] | main.rs:129:10:129:18 | my_struct [MyStruct.field2] | provenance | | -| main.rs:127:9:127:17 | my_struct [MyStruct.field2] | main.rs:129:10:129:18 | my_struct [MyStruct.field2] | provenance | | -| main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | main.rs:127:9:127:17 | my_struct [MyStruct.field2] | provenance | | -| main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | main.rs:127:9:127:17 | my_struct [MyStruct.field2] | provenance | | -| main.rs:127:38:127:38 | s | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:21 | -| main.rs:127:38:127:38 | s | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:21 | -| main.rs:129:10:129:18 | my_struct [MyStruct.field2] | main.rs:129:10:129:25 | my_struct.field2 | provenance | | -| main.rs:129:10:129:18 | my_struct [MyStruct.field2] | main.rs:129:10:129:25 | my_struct.field2 | provenance | | -| main.rs:138:9:138:9 | s | main.rs:139:29:139:29 | s | provenance | | -| main.rs:138:9:138:9 | s | main.rs:139:29:139:29 | s | provenance | | -| main.rs:138:13:138:21 | source(...) | main.rs:138:9:138:9 | s | provenance | | -| main.rs:138:13:138:21 | source(...) | main.rs:138:9:138:9 | s | provenance | | -| main.rs:139:28:139:30 | [...] [element] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:14 | -| main.rs:139:28:139:30 | [...] [element] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:14 | -| main.rs:139:29:139:29 | s | main.rs:139:28:139:30 | [...] [element] | provenance | | -| main.rs:139:29:139:29 | s | main.rs:139:28:139:30 | [...] [element] | provenance | | -| main.rs:148:9:148:9 | s | main.rs:149:33:149:33 | s | provenance | | -| main.rs:148:9:148:9 | s | main.rs:149:33:149:33 | s | provenance | | -| main.rs:148:13:148:21 | source(...) | main.rs:148:9:148:9 | s | provenance | | -| main.rs:148:13:148:21 | source(...) | main.rs:148:9:148:9 | s | provenance | | -| main.rs:149:9:149:11 | arr [element] | main.rs:150:10:150:12 | arr [element] | provenance | | -| main.rs:149:9:149:11 | arr [element] | main.rs:150:10:150:12 | arr [element] | provenance | | -| main.rs:149:15:149:34 | set_array_element(...) [element] | main.rs:149:9:149:11 | arr [element] | provenance | | -| main.rs:149:15:149:34 | set_array_element(...) [element] | main.rs:149:9:149:11 | arr [element] | provenance | | -| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [element] | provenance | MaD:20 | -| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [element] | provenance | MaD:20 | -| main.rs:150:10:150:12 | arr [element] | main.rs:150:10:150:15 | arr[0] | provenance | | -| main.rs:150:10:150:12 | arr [element] | main.rs:150:10:150:15 | arr[0] | provenance | | -| main.rs:159:9:159:9 | s | main.rs:160:14:160:14 | s | provenance | | -| main.rs:159:9:159:9 | s | main.rs:160:14:160:14 | s | provenance | | -| main.rs:159:13:159:22 | source(...) | main.rs:159:9:159:9 | s | provenance | | -| main.rs:159:13:159:22 | source(...) | main.rs:159:9:159:9 | s | provenance | | -| main.rs:160:9:160:9 | t [tuple.0] | main.rs:161:28:161:28 | t [tuple.0] | provenance | | -| main.rs:160:9:160:9 | t [tuple.0] | main.rs:161:28:161:28 | t [tuple.0] | provenance | | -| main.rs:160:13:160:18 | TupleExpr [tuple.0] | main.rs:160:9:160:9 | t [tuple.0] | provenance | | -| main.rs:160:13:160:18 | TupleExpr [tuple.0] | main.rs:160:9:160:9 | t [tuple.0] | provenance | | -| main.rs:160:14:160:14 | s | main.rs:160:13:160:18 | TupleExpr [tuple.0] | provenance | | -| main.rs:160:14:160:14 | s | main.rs:160:13:160:18 | TupleExpr [tuple.0] | provenance | | -| main.rs:161:28:161:28 | t [tuple.0] | main.rs:161:10:161:29 | get_tuple_element(...) | provenance | MaD:17 | -| main.rs:161:28:161:28 | t [tuple.0] | main.rs:161:10:161:29 | get_tuple_element(...) | provenance | MaD:17 | -| main.rs:172:9:172:9 | s | main.rs:173:31:173:31 | s | provenance | | -| main.rs:172:9:172:9 | s | main.rs:173:31:173:31 | s | provenance | | -| main.rs:172:13:172:22 | source(...) | main.rs:172:9:172:9 | s | provenance | | -| main.rs:172:13:172:22 | source(...) | main.rs:172:9:172:9 | s | provenance | | -| main.rs:173:9:173:9 | t [tuple.1] | main.rs:175:10:175:10 | t [tuple.1] | provenance | | -| main.rs:173:9:173:9 | t [tuple.1] | main.rs:175:10:175:10 | t [tuple.1] | provenance | | -| main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | main.rs:173:9:173:9 | t [tuple.1] | provenance | | -| main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | main.rs:173:9:173:9 | t [tuple.1] | provenance | | -| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:22 | -| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:22 | -| main.rs:175:10:175:10 | t [tuple.1] | main.rs:175:10:175:12 | t.1 | provenance | | -| main.rs:175:10:175:10 | t [tuple.1] | main.rs:175:10:175:12 | t.1 | provenance | | -| main.rs:187:9:187:9 | s | main.rs:192:11:192:11 | s | provenance | | -| main.rs:187:9:187:9 | s | main.rs:192:11:192:11 | s | provenance | | -| main.rs:187:13:187:22 | source(...) | main.rs:187:9:187:9 | s | provenance | | -| main.rs:187:13:187:22 | source(...) | main.rs:187:9:187:9 | s | provenance | | -| main.rs:188:14:188:14 | ... | main.rs:189:14:189:14 | n | provenance | | -| main.rs:188:14:188:14 | ... | main.rs:189:14:189:14 | n | provenance | | -| main.rs:192:11:192:11 | s | main.rs:188:14:188:14 | ... | provenance | MaD:11 | -| main.rs:192:11:192:11 | s | main.rs:188:14:188:14 | ... | provenance | MaD:11 | -| main.rs:196:13:196:22 | source(...) | main.rs:198:23:198:23 | f [captured s] | provenance | | -| main.rs:196:13:196:22 | source(...) | main.rs:198:23:198:23 | f [captured s] | provenance | | -| main.rs:197:40:197:40 | s | main.rs:197:17:197:42 | if ... {...} else {...} | provenance | | -| main.rs:197:40:197:40 | s | main.rs:197:17:197:42 | if ... {...} else {...} | provenance | | -| main.rs:198:9:198:9 | t | main.rs:199:10:199:10 | t | provenance | | -| main.rs:198:9:198:9 | t | main.rs:199:10:199:10 | t | provenance | | -| main.rs:198:13:198:24 | apply(...) | main.rs:198:9:198:9 | t | provenance | | -| main.rs:198:13:198:24 | apply(...) | main.rs:198:9:198:9 | t | provenance | | -| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:11 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:11 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:12 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:12 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:11 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:11 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:12 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:12 | -| main.rs:203:9:203:9 | s | main.rs:205:19:205:19 | s | provenance | | -| main.rs:203:9:203:9 | s | main.rs:205:19:205:19 | s | provenance | | -| main.rs:203:13:203:22 | source(...) | main.rs:203:9:203:9 | s | provenance | | -| main.rs:203:13:203:22 | source(...) | main.rs:203:9:203:9 | s | provenance | | -| main.rs:204:14:204:14 | ... | main.rs:204:17:204:42 | if ... {...} else {...} | provenance | | -| main.rs:204:14:204:14 | ... | main.rs:204:17:204:42 | if ... {...} else {...} | provenance | | -| main.rs:205:9:205:9 | t | main.rs:206:10:206:10 | t | provenance | | -| main.rs:205:9:205:9 | t | main.rs:206:10:206:10 | t | provenance | | -| main.rs:205:13:205:23 | apply(...) | main.rs:205:9:205:9 | t | provenance | | -| main.rs:205:13:205:23 | apply(...) | main.rs:205:9:205:9 | t | provenance | | -| main.rs:205:19:205:19 | s | main.rs:204:14:204:14 | ... | provenance | MaD:11 | -| main.rs:205:19:205:19 | s | main.rs:204:14:204:14 | ... | provenance | MaD:11 | -| main.rs:205:19:205:19 | s | main.rs:205:13:205:23 | apply(...) | provenance | MaD:11 | -| main.rs:205:19:205:19 | s | main.rs:205:13:205:23 | apply(...) | provenance | MaD:11 | -| main.rs:215:9:215:9 | s | main.rs:216:30:216:30 | s | provenance | | -| main.rs:215:9:215:9 | s | main.rs:216:30:216:30 | s | provenance | | -| main.rs:215:13:215:22 | source(...) | main.rs:215:9:215:9 | s | provenance | | -| main.rs:215:13:215:22 | source(...) | main.rs:215:9:215:9 | s | provenance | | -| main.rs:216:9:216:9 | t | main.rs:217:10:217:10 | t | provenance | | -| main.rs:216:9:216:9 | t | main.rs:217:10:217:10 | t | provenance | | -| main.rs:216:13:216:31 | get_async_number(...) [future] | main.rs:216:13:216:37 | await ... | provenance | | -| main.rs:216:13:216:31 | get_async_number(...) [future] | main.rs:216:13:216:37 | await ... | provenance | | -| main.rs:216:13:216:37 | await ... | main.rs:216:9:216:9 | t | provenance | | -| main.rs:216:13:216:37 | await ... | main.rs:216:9:216:9 | t | provenance | | -| main.rs:216:30:216:30 | s | main.rs:216:13:216:31 | get_async_number(...) [future] | provenance | MaD:15 | -| main.rs:216:30:216:30 | s | main.rs:216:13:216:31 | get_async_number(...) [future] | provenance | MaD:15 | -| main.rs:236:9:236:9 | s [D] | main.rs:237:11:237:11 | s [D] | provenance | | -| main.rs:236:9:236:9 | s [D] | main.rs:237:11:237:11 | s [D] | provenance | | -| main.rs:236:13:236:23 | enum_source | main.rs:236:13:236:27 | enum_source(...) [D] | provenance | Src:MaD:6 | -| main.rs:236:13:236:23 | enum_source | main.rs:236:13:236:27 | enum_source(...) [D] | provenance | Src:MaD:6 | -| main.rs:236:13:236:27 | enum_source(...) [D] | main.rs:236:9:236:9 | s [D] | provenance | | -| main.rs:236:13:236:27 | enum_source(...) [D] | main.rs:236:9:236:9 | s [D] | provenance | | -| main.rs:237:11:237:11 | s [D] | main.rs:239:9:239:37 | ...::D {...} [D] | provenance | | -| main.rs:237:11:237:11 | s [D] | main.rs:239:9:239:37 | ...::D {...} [D] | provenance | | -| main.rs:239:9:239:37 | ...::D {...} [D] | main.rs:239:35:239:35 | i | provenance | | -| main.rs:239:9:239:37 | ...::D {...} [D] | main.rs:239:35:239:35 | i | provenance | | -| main.rs:239:35:239:35 | i | main.rs:239:47:239:47 | i | provenance | | -| main.rs:239:35:239:35 | i | main.rs:239:47:239:47 | i | provenance | | -| main.rs:245:9:245:9 | s [C] | main.rs:246:11:246:11 | s [C] | provenance | | -| main.rs:245:9:245:9 | s [C] | main.rs:246:11:246:11 | s [C] | provenance | | -| main.rs:245:13:245:24 | e.source(...) [C] | main.rs:245:9:245:9 | s [C] | provenance | | -| main.rs:245:13:245:24 | e.source(...) [C] | main.rs:245:9:245:9 | s [C] | provenance | | -| main.rs:245:15:245:20 | source | main.rs:245:13:245:24 | e.source(...) [C] | provenance | Src:MaD:4 | -| main.rs:245:15:245:20 | source | main.rs:245:13:245:24 | e.source(...) [C] | provenance | Src:MaD:4 | -| main.rs:246:11:246:11 | s [C] | main.rs:247:9:247:37 | ...::C {...} [C] | provenance | | -| main.rs:246:11:246:11 | s [C] | main.rs:247:9:247:37 | ...::C {...} [C] | provenance | | -| main.rs:247:9:247:37 | ...::C {...} [C] | main.rs:247:35:247:35 | i | provenance | | -| main.rs:247:9:247:37 | ...::C {...} [C] | main.rs:247:35:247:35 | i | provenance | | -| main.rs:247:35:247:35 | i | main.rs:247:47:247:47 | i | provenance | | -| main.rs:247:35:247:35 | i | main.rs:247:47:247:47 | i | provenance | | -| main.rs:261:18:261:18 | ... | main.rs:261:26:261:26 | a | provenance | | -| main.rs:261:18:261:18 | ... | main.rs:261:26:261:26 | a | provenance | | -| main.rs:262:9:262:19 | pass_source | main.rs:261:18:261:18 | ... | provenance | Src:MaD:8 | -| main.rs:262:9:262:19 | pass_source | main.rs:261:18:261:18 | ... | provenance | Src:MaD:8 | -| main.rs:264:9:264:19 | pass_source | main.rs:264:25:264:25 | ... | provenance | Src:MaD:8 | -| main.rs:264:9:264:19 | pass_source | main.rs:264:25:264:25 | ... | provenance | Src:MaD:8 | -| main.rs:264:25:264:25 | ... | main.rs:265:18:265:18 | a | provenance | | -| main.rs:264:25:264:25 | ... | main.rs:265:18:265:18 | a | provenance | | -| main.rs:268:14:268:19 | ...: i64 | main.rs:269:18:269:18 | a | provenance | | -| main.rs:268:14:268:19 | ...: i64 | main.rs:269:18:269:18 | a | provenance | | -| main.rs:271:9:271:19 | pass_source | main.rs:268:14:268:19 | ...: i64 | provenance | Src:MaD:8 | -| main.rs:271:9:271:19 | pass_source | main.rs:268:14:268:19 | ...: i64 | provenance | Src:MaD:8 | -| main.rs:273:9:273:19 | pass_source | main.rs:273:36:273:36 | ... | provenance | Src:MaD:8 | -| main.rs:273:9:273:19 | pass_source | main.rs:273:36:273:36 | ... | provenance | Src:MaD:8 | -| main.rs:273:36:273:36 | ... | main.rs:274:18:274:18 | a | provenance | | -| main.rs:273:36:273:36 | ... | main.rs:274:18:274:18 | a | provenance | | -| main.rs:283:9:283:9 | s | main.rs:284:41:284:41 | s | provenance | | -| main.rs:283:9:283:9 | s | main.rs:284:41:284:41 | s | provenance | | -| main.rs:283:13:283:22 | source(...) | main.rs:283:9:283:9 | s | provenance | | -| main.rs:283:13:283:22 | source(...) | main.rs:283:9:283:9 | s | provenance | | -| main.rs:284:15:284:43 | ...::C {...} [C] | main.rs:284:5:284:13 | enum_sink | provenance | MaD:2 Sink:MaD:2 | -| main.rs:284:15:284:43 | ...::C {...} [C] | main.rs:284:5:284:13 | enum_sink | provenance | MaD:2 Sink:MaD:2 | -| main.rs:284:41:284:41 | s | main.rs:284:15:284:43 | ...::C {...} [C] | provenance | | -| main.rs:284:41:284:41 | s | main.rs:284:15:284:43 | ...::C {...} [C] | provenance | | -| main.rs:289:9:289:9 | s | main.rs:290:39:290:39 | s | provenance | | -| main.rs:289:9:289:9 | s | main.rs:290:39:290:39 | s | provenance | | -| main.rs:289:13:289:22 | source(...) | main.rs:289:9:289:9 | s | provenance | | -| main.rs:289:13:289:22 | source(...) | main.rs:289:9:289:9 | s | provenance | | -| main.rs:290:9:290:9 | e [D] | main.rs:291:5:291:5 | e [D] | provenance | | -| main.rs:290:9:290:9 | e [D] | main.rs:291:5:291:5 | e [D] | provenance | | -| main.rs:290:13:290:41 | ...::D {...} [D] | main.rs:290:9:290:9 | e [D] | provenance | | -| main.rs:290:13:290:41 | ...::D {...} [D] | main.rs:290:9:290:9 | e [D] | provenance | | -| main.rs:290:39:290:39 | s | main.rs:290:13:290:41 | ...::D {...} [D] | provenance | | -| main.rs:290:39:290:39 | s | main.rs:290:13:290:41 | ...::D {...} [D] | provenance | | -| main.rs:291:5:291:5 | e [D] | main.rs:291:7:291:10 | sink | provenance | MaD:1 Sink:MaD:1 | -| main.rs:291:5:291:5 | e [D] | main.rs:291:7:291:10 | sink | provenance | MaD:1 Sink:MaD:1 | -| main.rs:300:9:300:9 | s | main.rs:301:10:301:10 | s | provenance | | -| main.rs:300:9:300:9 | s | main.rs:301:10:301:10 | s | provenance | | -| main.rs:300:13:300:25 | simple_source | main.rs:300:13:300:29 | simple_source(...) | provenance | Src:MaD:7 MaD:7 | -| main.rs:300:13:300:25 | simple_source | main.rs:300:13:300:29 | simple_source(...) | provenance | Src:MaD:7 MaD:7 | -| main.rs:300:13:300:29 | simple_source(...) | main.rs:300:9:300:9 | s | provenance | | -| main.rs:300:13:300:29 | simple_source(...) | main.rs:300:9:300:9 | s | provenance | | -| main.rs:308:9:308:9 | s | main.rs:309:17:309:17 | s | provenance | | -| main.rs:308:9:308:9 | s | main.rs:309:17:309:17 | s | provenance | | -| main.rs:308:13:308:22 | source(...) | main.rs:308:9:308:9 | s | provenance | | -| main.rs:308:13:308:22 | source(...) | main.rs:308:9:308:9 | s | provenance | | -| main.rs:309:17:309:17 | s | main.rs:309:5:309:15 | simple_sink | provenance | MaD:3 Sink:MaD:3 | -| main.rs:309:17:309:17 | s | main.rs:309:5:309:15 | simple_sink | provenance | MaD:3 Sink:MaD:3 | -| main.rs:317:5:317:14 | arg_source | main.rs:317:16:317:16 | [post] i | provenance | Src:MaD:5 MaD:5 | -| main.rs:317:5:317:14 | arg_source | main.rs:317:16:317:16 | [post] i | provenance | Src:MaD:5 MaD:5 | -| main.rs:317:16:317:16 | [post] i | main.rs:318:10:318:10 | i | provenance | | -| main.rs:317:16:317:16 | [post] i | main.rs:318:10:318:10 | i | provenance | | -| main.rs:370:9:370:10 | x1 | main.rs:371:10:371:11 | x1 | provenance | | -| main.rs:370:9:370:10 | x1 | main.rs:371:10:371:11 | x1 | provenance | | -| main.rs:370:14:370:23 | source(...) | main.rs:370:14:370:30 | ... .max(...) | provenance | MaD:9 | -| main.rs:370:14:370:23 | source(...) | main.rs:370:14:370:30 | ... .max(...) | provenance | MaD:9 | -| main.rs:370:14:370:30 | ... .max(...) | main.rs:370:9:370:10 | x1 | provenance | | -| main.rs:370:14:370:30 | ... .max(...) | main.rs:370:9:370:10 | x1 | provenance | | -| main.rs:373:9:373:10 | x2 [MyStruct.field1] | main.rs:381:10:381:11 | x2 [MyStruct.field1] | provenance | | -| main.rs:373:9:373:10 | x2 [MyStruct.field1] | main.rs:381:10:381:11 | x2 [MyStruct.field1] | provenance | | -| main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | main.rs:373:9:373:10 | x2 [MyStruct.field1] | provenance | | -| main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | main.rs:373:9:373:10 | x2 [MyStruct.field1] | provenance | | -| main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:9 | -| main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:9 | -| main.rs:374:17:374:26 | source(...) | main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:374:17:374:26 | source(...) | main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:381:10:381:11 | x2 [MyStruct.field1] | main.rs:381:10:381:18 | x2.field1 | provenance | | -| main.rs:381:10:381:11 | x2 [MyStruct.field1] | main.rs:381:10:381:18 | x2.field1 | provenance | | -| main.rs:386:9:386:10 | x4 | main.rs:387:10:387:11 | x4 | provenance | | -| main.rs:386:9:386:10 | x4 | main.rs:387:10:387:11 | x4 | provenance | | -| main.rs:386:14:386:23 | source(...) | main.rs:386:14:386:30 | ... .max(...) | provenance | MaD:9 | -| main.rs:386:14:386:23 | source(...) | main.rs:386:14:386:30 | ... .max(...) | provenance | MaD:9 | -| main.rs:386:14:386:30 | ... .max(...) | main.rs:386:9:386:10 | x4 | provenance | | -| main.rs:386:14:386:30 | ... .max(...) | main.rs:386:9:386:10 | x4 | provenance | | -| main.rs:389:9:389:10 | x5 | main.rs:390:10:390:11 | x5 | provenance | | -| main.rs:389:14:389:23 | source(...) | main.rs:389:14:389:30 | ... .lt(...) | provenance | MaD:10 | -| main.rs:389:14:389:30 | ... .lt(...) | main.rs:389:9:389:10 | x5 | provenance | | -| main.rs:392:9:392:10 | x6 | main.rs:393:10:393:11 | x6 | provenance | | -| main.rs:392:14:392:23 | source(...) | main.rs:392:14:392:27 | ... < ... | provenance | MaD:10 | -| main.rs:392:14:392:27 | ... < ... | main.rs:392:9:392:10 | x6 | provenance | | +| main.rs:26:17:26:17 | s | main.rs:26:10:26:18 | coerce(...) | provenance | MaD:14 | +| main.rs:41:9:41:10 | s1 | main.rs:42:17:42:18 | s1 | provenance | | +| main.rs:41:9:41:10 | s1 | main.rs:42:17:42:18 | s1 | provenance | | +| main.rs:41:14:41:23 | source(...) | main.rs:41:9:41:10 | s1 | provenance | | +| main.rs:41:14:41:23 | source(...) | main.rs:41:9:41:10 | s1 | provenance | | +| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:26 | +| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:26 | +| main.rs:54:9:54:9 | s | main.rs:55:27:55:27 | s | provenance | | +| main.rs:54:9:54:9 | s | main.rs:55:27:55:27 | s | provenance | | +| main.rs:54:13:54:21 | source(...) | main.rs:54:9:54:9 | s | provenance | | +| main.rs:54:13:54:21 | source(...) | main.rs:54:9:54:9 | s | provenance | | +| main.rs:55:9:55:10 | e1 [A] | main.rs:56:22:56:23 | e1 [A] | provenance | | +| main.rs:55:9:55:10 | e1 [A] | main.rs:56:22:56:23 | e1 [A] | provenance | | +| main.rs:55:14:55:28 | ...::A(...) [A] | main.rs:55:9:55:10 | e1 [A] | provenance | | +| main.rs:55:14:55:28 | ...::A(...) [A] | main.rs:55:9:55:10 | e1 [A] | provenance | | +| main.rs:55:27:55:27 | s | main.rs:55:14:55:28 | ...::A(...) [A] | provenance | | +| main.rs:55:27:55:27 | s | main.rs:55:14:55:28 | ...::A(...) [A] | provenance | | +| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:20 | +| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:20 | +| main.rs:67:9:67:9 | s | main.rs:68:26:68:26 | s | provenance | | +| main.rs:67:9:67:9 | s | main.rs:68:26:68:26 | s | provenance | | +| main.rs:67:13:67:21 | source(...) | main.rs:67:9:67:9 | s | provenance | | +| main.rs:67:13:67:21 | source(...) | main.rs:67:9:67:9 | s | provenance | | +| main.rs:68:9:68:10 | e1 [B] | main.rs:69:11:69:12 | e1 [B] | provenance | | +| main.rs:68:9:68:10 | e1 [B] | main.rs:69:11:69:12 | e1 [B] | provenance | | +| main.rs:68:14:68:27 | set_var_pos(...) [B] | main.rs:68:9:68:10 | e1 [B] | provenance | | +| main.rs:68:14:68:27 | set_var_pos(...) [B] | main.rs:68:9:68:10 | e1 [B] | provenance | | +| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:25 | +| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:25 | +| main.rs:69:11:69:12 | e1 [B] | main.rs:71:9:71:23 | ...::B(...) [B] | provenance | | +| main.rs:69:11:69:12 | e1 [B] | main.rs:71:9:71:23 | ...::B(...) [B] | provenance | | +| main.rs:71:9:71:23 | ...::B(...) [B] | main.rs:71:22:71:22 | i | provenance | | +| main.rs:71:9:71:23 | ...::B(...) [B] | main.rs:71:22:71:22 | i | provenance | | +| main.rs:71:22:71:22 | i | main.rs:71:33:71:33 | i | provenance | | +| main.rs:71:22:71:22 | i | main.rs:71:33:71:33 | i | provenance | | +| main.rs:86:9:86:9 | s | main.rs:87:40:87:40 | s | provenance | | +| main.rs:86:9:86:9 | s | main.rs:87:40:87:40 | s | provenance | | +| main.rs:86:13:86:21 | source(...) | main.rs:86:9:86:9 | s | provenance | | +| main.rs:86:13:86:21 | source(...) | main.rs:86:9:86:9 | s | provenance | | +| main.rs:87:9:87:10 | e1 [C] | main.rs:88:24:88:25 | e1 [C] | provenance | | +| main.rs:87:9:87:10 | e1 [C] | main.rs:88:24:88:25 | e1 [C] | provenance | | +| main.rs:87:14:87:42 | ...::C {...} [C] | main.rs:87:9:87:10 | e1 [C] | provenance | | +| main.rs:87:14:87:42 | ...::C {...} [C] | main.rs:87:9:87:10 | e1 [C] | provenance | | +| main.rs:87:40:87:40 | s | main.rs:87:14:87:42 | ...::C {...} [C] | provenance | | +| main.rs:87:40:87:40 | s | main.rs:87:14:87:42 | ...::C {...} [C] | provenance | | +| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:19 | +| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:19 | +| main.rs:99:9:99:9 | s | main.rs:100:28:100:28 | s | provenance | | +| main.rs:99:9:99:9 | s | main.rs:100:28:100:28 | s | provenance | | +| main.rs:99:13:99:21 | source(...) | main.rs:99:9:99:9 | s | provenance | | +| main.rs:99:13:99:21 | source(...) | main.rs:99:9:99:9 | s | provenance | | +| main.rs:100:9:100:10 | e1 [D] | main.rs:101:11:101:12 | e1 [D] | provenance | | +| main.rs:100:9:100:10 | e1 [D] | main.rs:101:11:101:12 | e1 [D] | provenance | | +| main.rs:100:14:100:29 | set_var_field(...) [D] | main.rs:100:9:100:10 | e1 [D] | provenance | | +| main.rs:100:14:100:29 | set_var_field(...) [D] | main.rs:100:9:100:10 | e1 [D] | provenance | | +| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:24 | +| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:24 | +| main.rs:101:11:101:12 | e1 [D] | main.rs:103:9:103:37 | ...::D {...} [D] | provenance | | +| main.rs:101:11:101:12 | e1 [D] | main.rs:103:9:103:37 | ...::D {...} [D] | provenance | | +| main.rs:103:9:103:37 | ...::D {...} [D] | main.rs:103:35:103:35 | i | provenance | | +| main.rs:103:9:103:37 | ...::D {...} [D] | main.rs:103:35:103:35 | i | provenance | | +| main.rs:103:35:103:35 | i | main.rs:103:47:103:47 | i | provenance | | +| main.rs:103:35:103:35 | i | main.rs:103:47:103:47 | i | provenance | | +| main.rs:118:9:118:9 | s | main.rs:120:17:120:17 | s | provenance | | +| main.rs:118:9:118:9 | s | main.rs:120:17:120:17 | s | provenance | | +| main.rs:118:13:118:21 | source(...) | main.rs:118:9:118:9 | s | provenance | | +| main.rs:118:13:118:21 | source(...) | main.rs:118:9:118:9 | s | provenance | | +| main.rs:119:9:119:17 | my_struct [MyStruct.field1] | main.rs:123:27:123:35 | my_struct [MyStruct.field1] | provenance | | +| main.rs:119:9:119:17 | my_struct [MyStruct.field1] | main.rs:123:27:123:35 | my_struct [MyStruct.field1] | provenance | | +| main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | main.rs:119:9:119:17 | my_struct [MyStruct.field1] | provenance | | +| main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | main.rs:119:9:119:17 | my_struct [MyStruct.field1] | provenance | | +| main.rs:120:17:120:17 | s | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | provenance | | +| main.rs:120:17:120:17 | s | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | provenance | | +| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:17 | +| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:17 | +| main.rs:140:9:140:9 | s | main.rs:141:38:141:38 | s | provenance | | +| main.rs:140:9:140:9 | s | main.rs:141:38:141:38 | s | provenance | | +| main.rs:140:13:140:21 | source(...) | main.rs:140:9:140:9 | s | provenance | | +| main.rs:140:13:140:21 | source(...) | main.rs:140:9:140:9 | s | provenance | | +| main.rs:141:9:141:17 | my_struct [MyStruct.field2] | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | provenance | | +| main.rs:141:9:141:17 | my_struct [MyStruct.field2] | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | provenance | | +| main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | provenance | | +| main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | provenance | | +| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:22 | +| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:22 | +| main.rs:143:10:143:18 | my_struct [MyStruct.field2] | main.rs:143:10:143:25 | my_struct.field2 | provenance | | +| main.rs:143:10:143:18 | my_struct [MyStruct.field2] | main.rs:143:10:143:25 | my_struct.field2 | provenance | | +| main.rs:152:9:152:9 | s | main.rs:153:29:153:29 | s | provenance | | +| main.rs:152:9:152:9 | s | main.rs:153:29:153:29 | s | provenance | | +| main.rs:152:13:152:21 | source(...) | main.rs:152:9:152:9 | s | provenance | | +| main.rs:152:13:152:21 | source(...) | main.rs:152:9:152:9 | s | provenance | | +| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:15 | +| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:15 | +| main.rs:153:29:153:29 | s | main.rs:153:28:153:30 | [...] [element] | provenance | | +| main.rs:153:29:153:29 | s | main.rs:153:28:153:30 | [...] [element] | provenance | | +| main.rs:162:9:162:9 | s | main.rs:163:33:163:33 | s | provenance | | +| main.rs:162:9:162:9 | s | main.rs:163:33:163:33 | s | provenance | | +| main.rs:162:13:162:21 | source(...) | main.rs:162:9:162:9 | s | provenance | | +| main.rs:162:13:162:21 | source(...) | main.rs:162:9:162:9 | s | provenance | | +| main.rs:163:9:163:11 | arr [element] | main.rs:164:10:164:12 | arr [element] | provenance | | +| main.rs:163:9:163:11 | arr [element] | main.rs:164:10:164:12 | arr [element] | provenance | | +| main.rs:163:15:163:34 | set_array_element(...) [element] | main.rs:163:9:163:11 | arr [element] | provenance | | +| main.rs:163:15:163:34 | set_array_element(...) [element] | main.rs:163:9:163:11 | arr [element] | provenance | | +| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:21 | +| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:21 | +| main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:11 | +| main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:11 | +| main.rs:173:9:173:9 | s | main.rs:174:14:174:14 | s | provenance | | +| main.rs:173:9:173:9 | s | main.rs:174:14:174:14 | s | provenance | | +| main.rs:173:13:173:22 | source(...) | main.rs:173:9:173:9 | s | provenance | | +| main.rs:173:13:173:22 | source(...) | main.rs:173:9:173:9 | s | provenance | | +| main.rs:174:9:174:9 | t [tuple.0] | main.rs:175:28:175:28 | t [tuple.0] | provenance | | +| main.rs:174:9:174:9 | t [tuple.0] | main.rs:175:28:175:28 | t [tuple.0] | provenance | | +| main.rs:174:13:174:18 | TupleExpr [tuple.0] | main.rs:174:9:174:9 | t [tuple.0] | provenance | | +| main.rs:174:13:174:18 | TupleExpr [tuple.0] | main.rs:174:9:174:9 | t [tuple.0] | provenance | | +| main.rs:174:14:174:14 | s | main.rs:174:13:174:18 | TupleExpr [tuple.0] | provenance | | +| main.rs:174:14:174:14 | s | main.rs:174:13:174:18 | TupleExpr [tuple.0] | provenance | | +| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:18 | +| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:18 | +| main.rs:186:9:186:9 | s | main.rs:187:31:187:31 | s | provenance | | +| main.rs:186:9:186:9 | s | main.rs:187:31:187:31 | s | provenance | | +| main.rs:186:13:186:22 | source(...) | main.rs:186:9:186:9 | s | provenance | | +| main.rs:186:13:186:22 | source(...) | main.rs:186:9:186:9 | s | provenance | | +| main.rs:187:9:187:9 | t [tuple.1] | main.rs:189:10:189:10 | t [tuple.1] | provenance | | +| main.rs:187:9:187:9 | t [tuple.1] | main.rs:189:10:189:10 | t [tuple.1] | provenance | | +| main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | main.rs:187:9:187:9 | t [tuple.1] | provenance | | +| main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | main.rs:187:9:187:9 | t [tuple.1] | provenance | | +| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:23 | +| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:23 | +| main.rs:189:10:189:10 | t [tuple.1] | main.rs:189:10:189:12 | t.1 | provenance | | +| main.rs:189:10:189:10 | t [tuple.1] | main.rs:189:10:189:12 | t.1 | provenance | | +| main.rs:201:9:201:9 | s | main.rs:206:11:206:11 | s | provenance | | +| main.rs:201:9:201:9 | s | main.rs:206:11:206:11 | s | provenance | | +| main.rs:201:13:201:22 | source(...) | main.rs:201:9:201:9 | s | provenance | | +| main.rs:201:13:201:22 | source(...) | main.rs:201:9:201:9 | s | provenance | | +| main.rs:202:14:202:14 | ... | main.rs:203:14:203:14 | n | provenance | | +| main.rs:202:14:202:14 | ... | main.rs:203:14:203:14 | n | provenance | | +| main.rs:206:11:206:11 | s | main.rs:202:14:202:14 | ... | provenance | MaD:12 | +| main.rs:206:11:206:11 | s | main.rs:202:14:202:14 | ... | provenance | MaD:12 | +| main.rs:210:13:210:22 | source(...) | main.rs:212:23:212:23 | f [captured s] | provenance | | +| main.rs:210:13:210:22 | source(...) | main.rs:212:23:212:23 | f [captured s] | provenance | | +| main.rs:211:40:211:40 | s | main.rs:211:17:211:42 | if ... {...} else {...} | provenance | | +| main.rs:211:40:211:40 | s | main.rs:211:17:211:42 | if ... {...} else {...} | provenance | | +| main.rs:212:9:212:9 | t | main.rs:213:10:213:10 | t | provenance | | +| main.rs:212:9:212:9 | t | main.rs:213:10:213:10 | t | provenance | | +| main.rs:212:13:212:24 | apply(...) | main.rs:212:9:212:9 | t | provenance | | +| main.rs:212:13:212:24 | apply(...) | main.rs:212:9:212:9 | t | provenance | | +| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:12 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:12 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:13 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:13 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:12 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:12 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:13 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:13 | +| main.rs:217:9:217:9 | s | main.rs:219:19:219:19 | s | provenance | | +| main.rs:217:9:217:9 | s | main.rs:219:19:219:19 | s | provenance | | +| main.rs:217:13:217:22 | source(...) | main.rs:217:9:217:9 | s | provenance | | +| main.rs:217:13:217:22 | source(...) | main.rs:217:9:217:9 | s | provenance | | +| main.rs:218:14:218:14 | ... | main.rs:218:17:218:42 | if ... {...} else {...} | provenance | | +| main.rs:218:14:218:14 | ... | main.rs:218:17:218:42 | if ... {...} else {...} | provenance | | +| main.rs:219:9:219:9 | t | main.rs:220:10:220:10 | t | provenance | | +| main.rs:219:9:219:9 | t | main.rs:220:10:220:10 | t | provenance | | +| main.rs:219:13:219:23 | apply(...) | main.rs:219:9:219:9 | t | provenance | | +| main.rs:219:13:219:23 | apply(...) | main.rs:219:9:219:9 | t | provenance | | +| main.rs:219:19:219:19 | s | main.rs:218:14:218:14 | ... | provenance | MaD:12 | +| main.rs:219:19:219:19 | s | main.rs:218:14:218:14 | ... | provenance | MaD:12 | +| main.rs:219:19:219:19 | s | main.rs:219:13:219:23 | apply(...) | provenance | MaD:12 | +| main.rs:219:19:219:19 | s | main.rs:219:13:219:23 | apply(...) | provenance | MaD:12 | +| main.rs:229:9:229:9 | s | main.rs:230:30:230:30 | s | provenance | | +| main.rs:229:9:229:9 | s | main.rs:230:30:230:30 | s | provenance | | +| main.rs:229:13:229:22 | source(...) | main.rs:229:9:229:9 | s | provenance | | +| main.rs:229:13:229:22 | source(...) | main.rs:229:9:229:9 | s | provenance | | +| main.rs:230:9:230:9 | t | main.rs:231:10:231:10 | t | provenance | | +| main.rs:230:9:230:9 | t | main.rs:231:10:231:10 | t | provenance | | +| main.rs:230:13:230:31 | get_async_number(...) [future] | main.rs:230:13:230:37 | await ... | provenance | | +| main.rs:230:13:230:31 | get_async_number(...) [future] | main.rs:230:13:230:37 | await ... | provenance | | +| main.rs:230:13:230:37 | await ... | main.rs:230:9:230:9 | t | provenance | | +| main.rs:230:13:230:37 | await ... | main.rs:230:9:230:9 | t | provenance | | +| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:16 | +| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:16 | +| main.rs:250:9:250:9 | s [D] | main.rs:251:11:251:11 | s [D] | provenance | | +| main.rs:250:9:250:9 | s [D] | main.rs:251:11:251:11 | s [D] | provenance | | +| main.rs:250:13:250:23 | enum_source | main.rs:250:13:250:27 | enum_source(...) [D] | provenance | Src:MaD:6 | +| main.rs:250:13:250:23 | enum_source | main.rs:250:13:250:27 | enum_source(...) [D] | provenance | Src:MaD:6 | +| main.rs:250:13:250:27 | enum_source(...) [D] | main.rs:250:9:250:9 | s [D] | provenance | | +| main.rs:250:13:250:27 | enum_source(...) [D] | main.rs:250:9:250:9 | s [D] | provenance | | +| main.rs:251:11:251:11 | s [D] | main.rs:253:9:253:37 | ...::D {...} [D] | provenance | | +| main.rs:251:11:251:11 | s [D] | main.rs:253:9:253:37 | ...::D {...} [D] | provenance | | +| main.rs:253:9:253:37 | ...::D {...} [D] | main.rs:253:35:253:35 | i | provenance | | +| main.rs:253:9:253:37 | ...::D {...} [D] | main.rs:253:35:253:35 | i | provenance | | +| main.rs:253:35:253:35 | i | main.rs:253:47:253:47 | i | provenance | | +| main.rs:253:35:253:35 | i | main.rs:253:47:253:47 | i | provenance | | +| main.rs:259:9:259:9 | s [C] | main.rs:260:11:260:11 | s [C] | provenance | | +| main.rs:259:9:259:9 | s [C] | main.rs:260:11:260:11 | s [C] | provenance | | +| main.rs:259:13:259:24 | e.source(...) [C] | main.rs:259:9:259:9 | s [C] | provenance | | +| main.rs:259:13:259:24 | e.source(...) [C] | main.rs:259:9:259:9 | s [C] | provenance | | +| main.rs:259:15:259:20 | source | main.rs:259:13:259:24 | e.source(...) [C] | provenance | Src:MaD:4 | +| main.rs:259:15:259:20 | source | main.rs:259:13:259:24 | e.source(...) [C] | provenance | Src:MaD:4 | +| main.rs:260:11:260:11 | s [C] | main.rs:261:9:261:37 | ...::C {...} [C] | provenance | | +| main.rs:260:11:260:11 | s [C] | main.rs:261:9:261:37 | ...::C {...} [C] | provenance | | +| main.rs:261:9:261:37 | ...::C {...} [C] | main.rs:261:35:261:35 | i | provenance | | +| main.rs:261:9:261:37 | ...::C {...} [C] | main.rs:261:35:261:35 | i | provenance | | +| main.rs:261:35:261:35 | i | main.rs:261:47:261:47 | i | provenance | | +| main.rs:261:35:261:35 | i | main.rs:261:47:261:47 | i | provenance | | +| main.rs:275:18:275:18 | ... | main.rs:275:26:275:26 | a | provenance | | +| main.rs:275:18:275:18 | ... | main.rs:275:26:275:26 | a | provenance | | +| main.rs:276:9:276:19 | pass_source | main.rs:275:18:275:18 | ... | provenance | Src:MaD:8 | +| main.rs:276:9:276:19 | pass_source | main.rs:275:18:275:18 | ... | provenance | Src:MaD:8 | +| main.rs:278:9:278:19 | pass_source | main.rs:278:25:278:25 | ... | provenance | Src:MaD:8 | +| main.rs:278:9:278:19 | pass_source | main.rs:278:25:278:25 | ... | provenance | Src:MaD:8 | +| main.rs:278:25:278:25 | ... | main.rs:279:18:279:18 | a | provenance | | +| main.rs:278:25:278:25 | ... | main.rs:279:18:279:18 | a | provenance | | +| main.rs:282:14:282:19 | ...: i64 | main.rs:283:18:283:18 | a | provenance | | +| main.rs:282:14:282:19 | ...: i64 | main.rs:283:18:283:18 | a | provenance | | +| main.rs:285:9:285:19 | pass_source | main.rs:282:14:282:19 | ...: i64 | provenance | Src:MaD:8 | +| main.rs:285:9:285:19 | pass_source | main.rs:282:14:282:19 | ...: i64 | provenance | Src:MaD:8 | +| main.rs:287:9:287:19 | pass_source | main.rs:287:36:287:36 | ... | provenance | Src:MaD:8 | +| main.rs:287:9:287:19 | pass_source | main.rs:287:36:287:36 | ... | provenance | Src:MaD:8 | +| main.rs:287:36:287:36 | ... | main.rs:288:18:288:18 | a | provenance | | +| main.rs:287:36:287:36 | ... | main.rs:288:18:288:18 | a | provenance | | +| main.rs:297:9:297:9 | s | main.rs:298:41:298:41 | s | provenance | | +| main.rs:297:9:297:9 | s | main.rs:298:41:298:41 | s | provenance | | +| main.rs:297:13:297:22 | source(...) | main.rs:297:9:297:9 | s | provenance | | +| main.rs:297:13:297:22 | source(...) | main.rs:297:9:297:9 | s | provenance | | +| main.rs:298:15:298:43 | ...::C {...} [C] | main.rs:298:5:298:13 | enum_sink | provenance | MaD:2 Sink:MaD:2 | +| main.rs:298:15:298:43 | ...::C {...} [C] | main.rs:298:5:298:13 | enum_sink | provenance | MaD:2 Sink:MaD:2 | +| main.rs:298:41:298:41 | s | main.rs:298:15:298:43 | ...::C {...} [C] | provenance | | +| main.rs:298:41:298:41 | s | main.rs:298:15:298:43 | ...::C {...} [C] | provenance | | +| main.rs:303:9:303:9 | s | main.rs:304:39:304:39 | s | provenance | | +| main.rs:303:9:303:9 | s | main.rs:304:39:304:39 | s | provenance | | +| main.rs:303:13:303:22 | source(...) | main.rs:303:9:303:9 | s | provenance | | +| main.rs:303:13:303:22 | source(...) | main.rs:303:9:303:9 | s | provenance | | +| main.rs:304:9:304:9 | e [D] | main.rs:305:5:305:5 | e [D] | provenance | | +| main.rs:304:9:304:9 | e [D] | main.rs:305:5:305:5 | e [D] | provenance | | +| main.rs:304:13:304:41 | ...::D {...} [D] | main.rs:304:9:304:9 | e [D] | provenance | | +| main.rs:304:13:304:41 | ...::D {...} [D] | main.rs:304:9:304:9 | e [D] | provenance | | +| main.rs:304:39:304:39 | s | main.rs:304:13:304:41 | ...::D {...} [D] | provenance | | +| main.rs:304:39:304:39 | s | main.rs:304:13:304:41 | ...::D {...} [D] | provenance | | +| main.rs:305:5:305:5 | e [D] | main.rs:305:7:305:10 | sink | provenance | MaD:1 Sink:MaD:1 | +| main.rs:305:5:305:5 | e [D] | main.rs:305:7:305:10 | sink | provenance | MaD:1 Sink:MaD:1 | +| main.rs:314:9:314:9 | s | main.rs:315:10:315:10 | s | provenance | | +| main.rs:314:9:314:9 | s | main.rs:315:10:315:10 | s | provenance | | +| main.rs:314:13:314:25 | simple_source | main.rs:314:13:314:29 | simple_source(...) | provenance | Src:MaD:7 MaD:7 | +| main.rs:314:13:314:25 | simple_source | main.rs:314:13:314:29 | simple_source(...) | provenance | Src:MaD:7 MaD:7 | +| main.rs:314:13:314:29 | simple_source(...) | main.rs:314:9:314:9 | s | provenance | | +| main.rs:314:13:314:29 | simple_source(...) | main.rs:314:9:314:9 | s | provenance | | +| main.rs:322:9:322:9 | s | main.rs:323:17:323:17 | s | provenance | | +| main.rs:322:9:322:9 | s | main.rs:323:17:323:17 | s | provenance | | +| main.rs:322:13:322:22 | source(...) | main.rs:322:9:322:9 | s | provenance | | +| main.rs:322:13:322:22 | source(...) | main.rs:322:9:322:9 | s | provenance | | +| main.rs:323:17:323:17 | s | main.rs:323:5:323:15 | simple_sink | provenance | MaD:3 Sink:MaD:3 | +| main.rs:323:17:323:17 | s | main.rs:323:5:323:15 | simple_sink | provenance | MaD:3 Sink:MaD:3 | +| main.rs:331:5:331:14 | arg_source | main.rs:331:16:331:16 | [post] i | provenance | Src:MaD:5 MaD:5 | +| main.rs:331:5:331:14 | arg_source | main.rs:331:16:331:16 | [post] i | provenance | Src:MaD:5 MaD:5 | +| main.rs:331:16:331:16 | [post] i | main.rs:332:10:332:10 | i | provenance | | +| main.rs:331:16:331:16 | [post] i | main.rs:332:10:332:10 | i | provenance | | +| main.rs:384:9:384:10 | x1 | main.rs:385:10:385:11 | x1 | provenance | | +| main.rs:384:9:384:10 | x1 | main.rs:385:10:385:11 | x1 | provenance | | +| main.rs:384:14:384:23 | source(...) | main.rs:384:14:384:30 | ... .max(...) | provenance | MaD:9 | +| main.rs:384:14:384:23 | source(...) | main.rs:384:14:384:30 | ... .max(...) | provenance | MaD:9 | +| main.rs:384:14:384:30 | ... .max(...) | main.rs:384:9:384:10 | x1 | provenance | | +| main.rs:384:14:384:30 | ... .max(...) | main.rs:384:9:384:10 | x1 | provenance | | +| main.rs:387:9:387:10 | x2 [MyStruct.field1] | main.rs:395:10:395:11 | x2 [MyStruct.field1] | provenance | | +| main.rs:387:9:387:10 | x2 [MyStruct.field1] | main.rs:395:10:395:11 | x2 [MyStruct.field1] | provenance | | +| main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | main.rs:387:9:387:10 | x2 [MyStruct.field1] | provenance | | +| main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | main.rs:387:9:387:10 | x2 [MyStruct.field1] | provenance | | +| main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:9 | +| main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:9 | +| main.rs:388:17:388:26 | source(...) | main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | provenance | | +| main.rs:388:17:388:26 | source(...) | main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | provenance | | +| main.rs:395:10:395:11 | x2 [MyStruct.field1] | main.rs:395:10:395:18 | x2.field1 | provenance | | +| main.rs:395:10:395:11 | x2 [MyStruct.field1] | main.rs:395:10:395:18 | x2.field1 | provenance | | +| main.rs:400:9:400:10 | x4 | main.rs:401:10:401:11 | x4 | provenance | | +| main.rs:400:9:400:10 | x4 | main.rs:401:10:401:11 | x4 | provenance | | +| main.rs:400:14:400:23 | source(...) | main.rs:400:14:400:30 | ... .max(...) | provenance | MaD:9 | +| main.rs:400:14:400:23 | source(...) | main.rs:400:14:400:30 | ... .max(...) | provenance | MaD:9 | +| main.rs:400:14:400:30 | ... .max(...) | main.rs:400:9:400:10 | x4 | provenance | | +| main.rs:400:14:400:30 | ... .max(...) | main.rs:400:9:400:10 | x4 | provenance | | +| main.rs:403:9:403:10 | x5 | main.rs:404:10:404:11 | x5 | provenance | | +| main.rs:403:14:403:23 | source(...) | main.rs:403:14:403:30 | ... .lt(...) | provenance | MaD:10 | +| main.rs:403:14:403:30 | ... .lt(...) | main.rs:403:9:403:10 | x5 | provenance | | +| main.rs:406:9:406:10 | x6 | main.rs:407:10:407:11 | x6 | provenance | | +| main.rs:406:14:406:23 | source(...) | main.rs:406:14:406:27 | ... < ... | provenance | MaD:10 | +| main.rs:406:14:406:27 | ... < ... | main.rs:406:9:406:10 | x6 | provenance | | nodes | main.rs:15:9:15:9 | s | semmle.label | s | | main.rs:15:9:15:9 | s | semmle.label | s | @@ -324,404 +332,414 @@ nodes | main.rs:25:13:25:22 | source(...) | semmle.label | source(...) | | main.rs:26:10:26:18 | coerce(...) | semmle.label | coerce(...) | | main.rs:26:17:26:17 | s | semmle.label | s | -| main.rs:40:9:40:9 | s | semmle.label | s | -| main.rs:40:9:40:9 | s | semmle.label | s | -| main.rs:40:13:40:21 | source(...) | semmle.label | source(...) | -| main.rs:40:13:40:21 | source(...) | semmle.label | source(...) | -| main.rs:41:9:41:10 | e1 [A] | semmle.label | e1 [A] | -| main.rs:41:9:41:10 | e1 [A] | semmle.label | e1 [A] | -| main.rs:41:14:41:28 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | -| main.rs:41:14:41:28 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | -| main.rs:41:27:41:27 | s | semmle.label | s | -| main.rs:41:27:41:27 | s | semmle.label | s | -| main.rs:42:10:42:24 | get_var_pos(...) | semmle.label | get_var_pos(...) | -| main.rs:42:10:42:24 | get_var_pos(...) | semmle.label | get_var_pos(...) | -| main.rs:42:22:42:23 | e1 [A] | semmle.label | e1 [A] | -| main.rs:42:22:42:23 | e1 [A] | semmle.label | e1 [A] | -| main.rs:53:9:53:9 | s | semmle.label | s | -| main.rs:53:9:53:9 | s | semmle.label | s | -| main.rs:53:13:53:21 | source(...) | semmle.label | source(...) | -| main.rs:53:13:53:21 | source(...) | semmle.label | source(...) | -| main.rs:54:9:54:10 | e1 [B] | semmle.label | e1 [B] | -| main.rs:54:9:54:10 | e1 [B] | semmle.label | e1 [B] | -| main.rs:54:14:54:27 | set_var_pos(...) [B] | semmle.label | set_var_pos(...) [B] | -| main.rs:54:14:54:27 | set_var_pos(...) [B] | semmle.label | set_var_pos(...) [B] | -| main.rs:54:26:54:26 | s | semmle.label | s | -| main.rs:54:26:54:26 | s | semmle.label | s | -| main.rs:55:11:55:12 | e1 [B] | semmle.label | e1 [B] | -| main.rs:55:11:55:12 | e1 [B] | semmle.label | e1 [B] | -| main.rs:57:9:57:23 | ...::B(...) [B] | semmle.label | ...::B(...) [B] | -| main.rs:57:9:57:23 | ...::B(...) [B] | semmle.label | ...::B(...) [B] | -| main.rs:57:22:57:22 | i | semmle.label | i | -| main.rs:57:22:57:22 | i | semmle.label | i | -| main.rs:57:33:57:33 | i | semmle.label | i | -| main.rs:57:33:57:33 | i | semmle.label | i | -| main.rs:72:9:72:9 | s | semmle.label | s | -| main.rs:72:9:72:9 | s | semmle.label | s | -| main.rs:72:13:72:21 | source(...) | semmle.label | source(...) | -| main.rs:72:13:72:21 | source(...) | semmle.label | source(...) | -| main.rs:73:9:73:10 | e1 [C] | semmle.label | e1 [C] | -| main.rs:73:9:73:10 | e1 [C] | semmle.label | e1 [C] | -| main.rs:73:14:73:42 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:73:14:73:42 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:73:40:73:40 | s | semmle.label | s | -| main.rs:73:40:73:40 | s | semmle.label | s | -| main.rs:74:10:74:26 | get_var_field(...) | semmle.label | get_var_field(...) | -| main.rs:74:10:74:26 | get_var_field(...) | semmle.label | get_var_field(...) | -| main.rs:74:24:74:25 | e1 [C] | semmle.label | e1 [C] | -| main.rs:74:24:74:25 | e1 [C] | semmle.label | e1 [C] | -| main.rs:85:9:85:9 | s | semmle.label | s | -| main.rs:85:9:85:9 | s | semmle.label | s | -| main.rs:85:13:85:21 | source(...) | semmle.label | source(...) | -| main.rs:85:13:85:21 | source(...) | semmle.label | source(...) | -| main.rs:86:9:86:10 | e1 [D] | semmle.label | e1 [D] | -| main.rs:86:9:86:10 | e1 [D] | semmle.label | e1 [D] | -| main.rs:86:14:86:29 | set_var_field(...) [D] | semmle.label | set_var_field(...) [D] | -| main.rs:86:14:86:29 | set_var_field(...) [D] | semmle.label | set_var_field(...) [D] | -| main.rs:86:28:86:28 | s | semmle.label | s | -| main.rs:86:28:86:28 | s | semmle.label | s | -| main.rs:87:11:87:12 | e1 [D] | semmle.label | e1 [D] | -| main.rs:87:11:87:12 | e1 [D] | semmle.label | e1 [D] | -| main.rs:89:9:89:37 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | -| main.rs:89:9:89:37 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | -| main.rs:89:35:89:35 | i | semmle.label | i | -| main.rs:89:35:89:35 | i | semmle.label | i | -| main.rs:89:47:89:47 | i | semmle.label | i | -| main.rs:89:47:89:47 | i | semmle.label | i | -| main.rs:104:9:104:9 | s | semmle.label | s | -| main.rs:104:9:104:9 | s | semmle.label | s | -| main.rs:104:13:104:21 | source(...) | semmle.label | source(...) | -| main.rs:104:13:104:21 | source(...) | semmle.label | source(...) | -| main.rs:105:9:105:17 | my_struct [MyStruct.field1] | semmle.label | my_struct [MyStruct.field1] | -| main.rs:105:9:105:17 | my_struct [MyStruct.field1] | semmle.label | my_struct [MyStruct.field1] | -| main.rs:105:21:108:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | -| main.rs:105:21:108:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | -| main.rs:106:17:106:17 | s | semmle.label | s | -| main.rs:106:17:106:17 | s | semmle.label | s | -| main.rs:109:10:109:36 | get_struct_field(...) | semmle.label | get_struct_field(...) | -| main.rs:109:10:109:36 | get_struct_field(...) | semmle.label | get_struct_field(...) | -| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | semmle.label | my_struct [MyStruct.field1] | -| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | semmle.label | my_struct [MyStruct.field1] | -| main.rs:126:9:126:9 | s | semmle.label | s | -| main.rs:126:9:126:9 | s | semmle.label | s | -| main.rs:126:13:126:21 | source(...) | semmle.label | source(...) | -| main.rs:126:13:126:21 | source(...) | semmle.label | source(...) | -| main.rs:127:9:127:17 | my_struct [MyStruct.field2] | semmle.label | my_struct [MyStruct.field2] | -| main.rs:127:9:127:17 | my_struct [MyStruct.field2] | semmle.label | my_struct [MyStruct.field2] | -| main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | semmle.label | set_struct_field(...) [MyStruct.field2] | -| main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | semmle.label | set_struct_field(...) [MyStruct.field2] | -| main.rs:127:38:127:38 | s | semmle.label | s | -| main.rs:127:38:127:38 | s | semmle.label | s | -| main.rs:129:10:129:18 | my_struct [MyStruct.field2] | semmle.label | my_struct [MyStruct.field2] | -| main.rs:129:10:129:18 | my_struct [MyStruct.field2] | semmle.label | my_struct [MyStruct.field2] | -| main.rs:129:10:129:25 | my_struct.field2 | semmle.label | my_struct.field2 | -| main.rs:129:10:129:25 | my_struct.field2 | semmle.label | my_struct.field2 | -| main.rs:138:9:138:9 | s | semmle.label | s | -| main.rs:138:9:138:9 | s | semmle.label | s | -| main.rs:138:13:138:21 | source(...) | semmle.label | source(...) | -| main.rs:138:13:138:21 | source(...) | semmle.label | source(...) | -| main.rs:139:10:139:31 | get_array_element(...) | semmle.label | get_array_element(...) | -| main.rs:139:10:139:31 | get_array_element(...) | semmle.label | get_array_element(...) | -| main.rs:139:28:139:30 | [...] [element] | semmle.label | [...] [element] | -| main.rs:139:28:139:30 | [...] [element] | semmle.label | [...] [element] | -| main.rs:139:29:139:29 | s | semmle.label | s | -| main.rs:139:29:139:29 | s | semmle.label | s | -| main.rs:148:9:148:9 | s | semmle.label | s | -| main.rs:148:9:148:9 | s | semmle.label | s | -| main.rs:148:13:148:21 | source(...) | semmle.label | source(...) | -| main.rs:148:13:148:21 | source(...) | semmle.label | source(...) | -| main.rs:149:9:149:11 | arr [element] | semmle.label | arr [element] | -| main.rs:149:9:149:11 | arr [element] | semmle.label | arr [element] | -| main.rs:149:15:149:34 | set_array_element(...) [element] | semmle.label | set_array_element(...) [element] | -| main.rs:149:15:149:34 | set_array_element(...) [element] | semmle.label | set_array_element(...) [element] | -| main.rs:149:33:149:33 | s | semmle.label | s | -| main.rs:149:33:149:33 | s | semmle.label | s | -| main.rs:150:10:150:12 | arr [element] | semmle.label | arr [element] | -| main.rs:150:10:150:12 | arr [element] | semmle.label | arr [element] | -| main.rs:150:10:150:15 | arr[0] | semmle.label | arr[0] | -| main.rs:150:10:150:15 | arr[0] | semmle.label | arr[0] | -| main.rs:159:9:159:9 | s | semmle.label | s | -| main.rs:159:9:159:9 | s | semmle.label | s | -| main.rs:159:13:159:22 | source(...) | semmle.label | source(...) | -| main.rs:159:13:159:22 | source(...) | semmle.label | source(...) | -| main.rs:160:9:160:9 | t [tuple.0] | semmle.label | t [tuple.0] | -| main.rs:160:9:160:9 | t [tuple.0] | semmle.label | t [tuple.0] | -| main.rs:160:13:160:18 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| main.rs:160:13:160:18 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| main.rs:160:14:160:14 | s | semmle.label | s | -| main.rs:160:14:160:14 | s | semmle.label | s | -| main.rs:161:10:161:29 | get_tuple_element(...) | semmle.label | get_tuple_element(...) | -| main.rs:161:10:161:29 | get_tuple_element(...) | semmle.label | get_tuple_element(...) | -| main.rs:161:28:161:28 | t [tuple.0] | semmle.label | t [tuple.0] | -| main.rs:161:28:161:28 | t [tuple.0] | semmle.label | t [tuple.0] | -| main.rs:172:9:172:9 | s | semmle.label | s | -| main.rs:172:9:172:9 | s | semmle.label | s | -| main.rs:172:13:172:22 | source(...) | semmle.label | source(...) | -| main.rs:172:13:172:22 | source(...) | semmle.label | source(...) | -| main.rs:173:9:173:9 | t [tuple.1] | semmle.label | t [tuple.1] | -| main.rs:173:9:173:9 | t [tuple.1] | semmle.label | t [tuple.1] | -| main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | semmle.label | set_tuple_element(...) [tuple.1] | -| main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | semmle.label | set_tuple_element(...) [tuple.1] | -| main.rs:173:31:173:31 | s | semmle.label | s | -| main.rs:173:31:173:31 | s | semmle.label | s | -| main.rs:175:10:175:10 | t [tuple.1] | semmle.label | t [tuple.1] | -| main.rs:175:10:175:10 | t [tuple.1] | semmle.label | t [tuple.1] | -| main.rs:175:10:175:12 | t.1 | semmle.label | t.1 | -| main.rs:175:10:175:12 | t.1 | semmle.label | t.1 | -| main.rs:187:9:187:9 | s | semmle.label | s | -| main.rs:187:9:187:9 | s | semmle.label | s | -| main.rs:187:13:187:22 | source(...) | semmle.label | source(...) | -| main.rs:187:13:187:22 | source(...) | semmle.label | source(...) | -| main.rs:188:14:188:14 | ... | semmle.label | ... | -| main.rs:188:14:188:14 | ... | semmle.label | ... | -| main.rs:189:14:189:14 | n | semmle.label | n | -| main.rs:189:14:189:14 | n | semmle.label | n | -| main.rs:192:11:192:11 | s | semmle.label | s | -| main.rs:192:11:192:11 | s | semmle.label | s | -| main.rs:196:13:196:22 | source(...) | semmle.label | source(...) | -| main.rs:196:13:196:22 | source(...) | semmle.label | source(...) | -| main.rs:197:17:197:42 | if ... {...} else {...} | semmle.label | if ... {...} else {...} | -| main.rs:197:17:197:42 | if ... {...} else {...} | semmle.label | if ... {...} else {...} | -| main.rs:197:40:197:40 | s | semmle.label | s | -| main.rs:197:40:197:40 | s | semmle.label | s | -| main.rs:198:9:198:9 | t | semmle.label | t | -| main.rs:198:9:198:9 | t | semmle.label | t | -| main.rs:198:13:198:24 | apply(...) | semmle.label | apply(...) | -| main.rs:198:13:198:24 | apply(...) | semmle.label | apply(...) | -| main.rs:198:23:198:23 | f [captured s] | semmle.label | f [captured s] | -| main.rs:198:23:198:23 | f [captured s] | semmle.label | f [captured s] | -| main.rs:199:10:199:10 | t | semmle.label | t | -| main.rs:199:10:199:10 | t | semmle.label | t | -| main.rs:203:9:203:9 | s | semmle.label | s | -| main.rs:203:9:203:9 | s | semmle.label | s | -| main.rs:203:13:203:22 | source(...) | semmle.label | source(...) | -| main.rs:203:13:203:22 | source(...) | semmle.label | source(...) | -| main.rs:204:14:204:14 | ... | semmle.label | ... | -| main.rs:204:14:204:14 | ... | semmle.label | ... | -| main.rs:204:17:204:42 | if ... {...} else {...} | semmle.label | if ... {...} else {...} | -| main.rs:204:17:204:42 | if ... {...} else {...} | semmle.label | if ... {...} else {...} | -| main.rs:205:9:205:9 | t | semmle.label | t | -| main.rs:205:9:205:9 | t | semmle.label | t | -| main.rs:205:13:205:23 | apply(...) | semmle.label | apply(...) | -| main.rs:205:13:205:23 | apply(...) | semmle.label | apply(...) | -| main.rs:205:19:205:19 | s | semmle.label | s | -| main.rs:205:19:205:19 | s | semmle.label | s | -| main.rs:206:10:206:10 | t | semmle.label | t | -| main.rs:206:10:206:10 | t | semmle.label | t | -| main.rs:215:9:215:9 | s | semmle.label | s | -| main.rs:215:9:215:9 | s | semmle.label | s | -| main.rs:215:13:215:22 | source(...) | semmle.label | source(...) | -| main.rs:215:13:215:22 | source(...) | semmle.label | source(...) | -| main.rs:216:9:216:9 | t | semmle.label | t | -| main.rs:216:9:216:9 | t | semmle.label | t | -| main.rs:216:13:216:31 | get_async_number(...) [future] | semmle.label | get_async_number(...) [future] | -| main.rs:216:13:216:31 | get_async_number(...) [future] | semmle.label | get_async_number(...) [future] | -| main.rs:216:13:216:37 | await ... | semmle.label | await ... | -| main.rs:216:13:216:37 | await ... | semmle.label | await ... | -| main.rs:216:30:216:30 | s | semmle.label | s | -| main.rs:216:30:216:30 | s | semmle.label | s | -| main.rs:217:10:217:10 | t | semmle.label | t | -| main.rs:217:10:217:10 | t | semmle.label | t | -| main.rs:236:9:236:9 | s [D] | semmle.label | s [D] | -| main.rs:236:9:236:9 | s [D] | semmle.label | s [D] | -| main.rs:236:13:236:23 | enum_source | semmle.label | enum_source | -| main.rs:236:13:236:23 | enum_source | semmle.label | enum_source | -| main.rs:236:13:236:27 | enum_source(...) [D] | semmle.label | enum_source(...) [D] | -| main.rs:236:13:236:27 | enum_source(...) [D] | semmle.label | enum_source(...) [D] | -| main.rs:237:11:237:11 | s [D] | semmle.label | s [D] | -| main.rs:237:11:237:11 | s [D] | semmle.label | s [D] | -| main.rs:239:9:239:37 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | -| main.rs:239:9:239:37 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | -| main.rs:239:35:239:35 | i | semmle.label | i | -| main.rs:239:35:239:35 | i | semmle.label | i | -| main.rs:239:47:239:47 | i | semmle.label | i | -| main.rs:239:47:239:47 | i | semmle.label | i | -| main.rs:245:9:245:9 | s [C] | semmle.label | s [C] | -| main.rs:245:9:245:9 | s [C] | semmle.label | s [C] | -| main.rs:245:13:245:24 | e.source(...) [C] | semmle.label | e.source(...) [C] | -| main.rs:245:13:245:24 | e.source(...) [C] | semmle.label | e.source(...) [C] | -| main.rs:245:15:245:20 | source | semmle.label | source | -| main.rs:245:15:245:20 | source | semmle.label | source | -| main.rs:246:11:246:11 | s [C] | semmle.label | s [C] | -| main.rs:246:11:246:11 | s [C] | semmle.label | s [C] | -| main.rs:247:9:247:37 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:247:9:247:37 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:247:35:247:35 | i | semmle.label | i | -| main.rs:247:35:247:35 | i | semmle.label | i | -| main.rs:247:47:247:47 | i | semmle.label | i | -| main.rs:247:47:247:47 | i | semmle.label | i | -| main.rs:261:18:261:18 | ... | semmle.label | ... | -| main.rs:261:18:261:18 | ... | semmle.label | ... | -| main.rs:261:26:261:26 | a | semmle.label | a | -| main.rs:261:26:261:26 | a | semmle.label | a | -| main.rs:262:9:262:19 | pass_source | semmle.label | pass_source | -| main.rs:262:9:262:19 | pass_source | semmle.label | pass_source | -| main.rs:264:9:264:19 | pass_source | semmle.label | pass_source | -| main.rs:264:9:264:19 | pass_source | semmle.label | pass_source | -| main.rs:264:25:264:25 | ... | semmle.label | ... | -| main.rs:264:25:264:25 | ... | semmle.label | ... | -| main.rs:265:18:265:18 | a | semmle.label | a | -| main.rs:265:18:265:18 | a | semmle.label | a | -| main.rs:268:14:268:19 | ...: i64 | semmle.label | ...: i64 | -| main.rs:268:14:268:19 | ...: i64 | semmle.label | ...: i64 | -| main.rs:269:18:269:18 | a | semmle.label | a | -| main.rs:269:18:269:18 | a | semmle.label | a | -| main.rs:271:9:271:19 | pass_source | semmle.label | pass_source | -| main.rs:271:9:271:19 | pass_source | semmle.label | pass_source | -| main.rs:273:9:273:19 | pass_source | semmle.label | pass_source | -| main.rs:273:9:273:19 | pass_source | semmle.label | pass_source | -| main.rs:273:36:273:36 | ... | semmle.label | ... | -| main.rs:273:36:273:36 | ... | semmle.label | ... | -| main.rs:274:18:274:18 | a | semmle.label | a | -| main.rs:274:18:274:18 | a | semmle.label | a | -| main.rs:283:9:283:9 | s | semmle.label | s | -| main.rs:283:9:283:9 | s | semmle.label | s | -| main.rs:283:13:283:22 | source(...) | semmle.label | source(...) | -| main.rs:283:13:283:22 | source(...) | semmle.label | source(...) | -| main.rs:284:5:284:13 | enum_sink | semmle.label | enum_sink | -| main.rs:284:5:284:13 | enum_sink | semmle.label | enum_sink | -| main.rs:284:15:284:43 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:284:15:284:43 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:284:41:284:41 | s | semmle.label | s | -| main.rs:284:41:284:41 | s | semmle.label | s | -| main.rs:289:9:289:9 | s | semmle.label | s | -| main.rs:289:9:289:9 | s | semmle.label | s | -| main.rs:289:13:289:22 | source(...) | semmle.label | source(...) | -| main.rs:289:13:289:22 | source(...) | semmle.label | source(...) | -| main.rs:290:9:290:9 | e [D] | semmle.label | e [D] | -| main.rs:290:9:290:9 | e [D] | semmle.label | e [D] | -| main.rs:290:13:290:41 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | -| main.rs:290:13:290:41 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | -| main.rs:290:39:290:39 | s | semmle.label | s | -| main.rs:290:39:290:39 | s | semmle.label | s | -| main.rs:291:5:291:5 | e [D] | semmle.label | e [D] | -| main.rs:291:5:291:5 | e [D] | semmle.label | e [D] | -| main.rs:291:7:291:10 | sink | semmle.label | sink | -| main.rs:291:7:291:10 | sink | semmle.label | sink | -| main.rs:300:9:300:9 | s | semmle.label | s | -| main.rs:300:9:300:9 | s | semmle.label | s | -| main.rs:300:13:300:25 | simple_source | semmle.label | simple_source | -| main.rs:300:13:300:25 | simple_source | semmle.label | simple_source | -| main.rs:300:13:300:29 | simple_source(...) | semmle.label | simple_source(...) | -| main.rs:300:13:300:29 | simple_source(...) | semmle.label | simple_source(...) | -| main.rs:301:10:301:10 | s | semmle.label | s | -| main.rs:301:10:301:10 | s | semmle.label | s | -| main.rs:308:9:308:9 | s | semmle.label | s | -| main.rs:308:9:308:9 | s | semmle.label | s | -| main.rs:308:13:308:22 | source(...) | semmle.label | source(...) | -| main.rs:308:13:308:22 | source(...) | semmle.label | source(...) | -| main.rs:309:5:309:15 | simple_sink | semmle.label | simple_sink | -| main.rs:309:5:309:15 | simple_sink | semmle.label | simple_sink | -| main.rs:309:17:309:17 | s | semmle.label | s | -| main.rs:309:17:309:17 | s | semmle.label | s | -| main.rs:317:5:317:14 | arg_source | semmle.label | arg_source | -| main.rs:317:5:317:14 | arg_source | semmle.label | arg_source | -| main.rs:317:16:317:16 | [post] i | semmle.label | [post] i | -| main.rs:317:16:317:16 | [post] i | semmle.label | [post] i | -| main.rs:318:10:318:10 | i | semmle.label | i | -| main.rs:318:10:318:10 | i | semmle.label | i | -| main.rs:370:9:370:10 | x1 | semmle.label | x1 | -| main.rs:370:9:370:10 | x1 | semmle.label | x1 | -| main.rs:370:14:370:23 | source(...) | semmle.label | source(...) | -| main.rs:370:14:370:23 | source(...) | semmle.label | source(...) | -| main.rs:370:14:370:30 | ... .max(...) | semmle.label | ... .max(...) | -| main.rs:370:14:370:30 | ... .max(...) | semmle.label | ... .max(...) | -| main.rs:371:10:371:11 | x1 | semmle.label | x1 | -| main.rs:371:10:371:11 | x1 | semmle.label | x1 | -| main.rs:373:9:373:10 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | -| main.rs:373:9:373:10 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | -| main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | semmle.label | ... .max(...) [MyStruct.field1] | -| main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | semmle.label | ... .max(...) [MyStruct.field1] | -| main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | -| main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | -| main.rs:374:17:374:26 | source(...) | semmle.label | source(...) | -| main.rs:374:17:374:26 | source(...) | semmle.label | source(...) | -| main.rs:381:10:381:11 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | -| main.rs:381:10:381:11 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | -| main.rs:381:10:381:18 | x2.field1 | semmle.label | x2.field1 | -| main.rs:381:10:381:18 | x2.field1 | semmle.label | x2.field1 | -| main.rs:386:9:386:10 | x4 | semmle.label | x4 | -| main.rs:386:9:386:10 | x4 | semmle.label | x4 | -| main.rs:386:14:386:23 | source(...) | semmle.label | source(...) | -| main.rs:386:14:386:23 | source(...) | semmle.label | source(...) | -| main.rs:386:14:386:30 | ... .max(...) | semmle.label | ... .max(...) | -| main.rs:386:14:386:30 | ... .max(...) | semmle.label | ... .max(...) | -| main.rs:387:10:387:11 | x4 | semmle.label | x4 | -| main.rs:387:10:387:11 | x4 | semmle.label | x4 | -| main.rs:389:9:389:10 | x5 | semmle.label | x5 | -| main.rs:389:14:389:23 | source(...) | semmle.label | source(...) | -| main.rs:389:14:389:30 | ... .lt(...) | semmle.label | ... .lt(...) | -| main.rs:390:10:390:11 | x5 | semmle.label | x5 | -| main.rs:392:9:392:10 | x6 | semmle.label | x6 | -| main.rs:392:14:392:23 | source(...) | semmle.label | source(...) | -| main.rs:392:14:392:27 | ... < ... | semmle.label | ... < ... | -| main.rs:393:10:393:11 | x6 | semmle.label | x6 | +| main.rs:41:9:41:10 | s1 | semmle.label | s1 | +| main.rs:41:9:41:10 | s1 | semmle.label | s1 | +| main.rs:41:14:41:23 | source(...) | semmle.label | source(...) | +| main.rs:41:14:41:23 | source(...) | semmle.label | source(...) | +| main.rs:42:10:42:19 | snd(...) | semmle.label | snd(...) | +| main.rs:42:10:42:19 | snd(...) | semmle.label | snd(...) | +| main.rs:42:17:42:18 | s1 | semmle.label | s1 | +| main.rs:42:17:42:18 | s1 | semmle.label | s1 | +| main.rs:54:9:54:9 | s | semmle.label | s | +| main.rs:54:9:54:9 | s | semmle.label | s | +| main.rs:54:13:54:21 | source(...) | semmle.label | source(...) | +| main.rs:54:13:54:21 | source(...) | semmle.label | source(...) | +| main.rs:55:9:55:10 | e1 [A] | semmle.label | e1 [A] | +| main.rs:55:9:55:10 | e1 [A] | semmle.label | e1 [A] | +| main.rs:55:14:55:28 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | +| main.rs:55:14:55:28 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | +| main.rs:55:27:55:27 | s | semmle.label | s | +| main.rs:55:27:55:27 | s | semmle.label | s | +| main.rs:56:10:56:24 | get_var_pos(...) | semmle.label | get_var_pos(...) | +| main.rs:56:10:56:24 | get_var_pos(...) | semmle.label | get_var_pos(...) | +| main.rs:56:22:56:23 | e1 [A] | semmle.label | e1 [A] | +| main.rs:56:22:56:23 | e1 [A] | semmle.label | e1 [A] | +| main.rs:67:9:67:9 | s | semmle.label | s | +| main.rs:67:9:67:9 | s | semmle.label | s | +| main.rs:67:13:67:21 | source(...) | semmle.label | source(...) | +| main.rs:67:13:67:21 | source(...) | semmle.label | source(...) | +| main.rs:68:9:68:10 | e1 [B] | semmle.label | e1 [B] | +| main.rs:68:9:68:10 | e1 [B] | semmle.label | e1 [B] | +| main.rs:68:14:68:27 | set_var_pos(...) [B] | semmle.label | set_var_pos(...) [B] | +| main.rs:68:14:68:27 | set_var_pos(...) [B] | semmle.label | set_var_pos(...) [B] | +| main.rs:68:26:68:26 | s | semmle.label | s | +| main.rs:68:26:68:26 | s | semmle.label | s | +| main.rs:69:11:69:12 | e1 [B] | semmle.label | e1 [B] | +| main.rs:69:11:69:12 | e1 [B] | semmle.label | e1 [B] | +| main.rs:71:9:71:23 | ...::B(...) [B] | semmle.label | ...::B(...) [B] | +| main.rs:71:9:71:23 | ...::B(...) [B] | semmle.label | ...::B(...) [B] | +| main.rs:71:22:71:22 | i | semmle.label | i | +| main.rs:71:22:71:22 | i | semmle.label | i | +| main.rs:71:33:71:33 | i | semmle.label | i | +| main.rs:71:33:71:33 | i | semmle.label | i | +| main.rs:86:9:86:9 | s | semmle.label | s | +| main.rs:86:9:86:9 | s | semmle.label | s | +| main.rs:86:13:86:21 | source(...) | semmle.label | source(...) | +| main.rs:86:13:86:21 | source(...) | semmle.label | source(...) | +| main.rs:87:9:87:10 | e1 [C] | semmle.label | e1 [C] | +| main.rs:87:9:87:10 | e1 [C] | semmle.label | e1 [C] | +| main.rs:87:14:87:42 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:87:14:87:42 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:87:40:87:40 | s | semmle.label | s | +| main.rs:87:40:87:40 | s | semmle.label | s | +| main.rs:88:10:88:26 | get_var_field(...) | semmle.label | get_var_field(...) | +| main.rs:88:10:88:26 | get_var_field(...) | semmle.label | get_var_field(...) | +| main.rs:88:24:88:25 | e1 [C] | semmle.label | e1 [C] | +| main.rs:88:24:88:25 | e1 [C] | semmle.label | e1 [C] | +| main.rs:99:9:99:9 | s | semmle.label | s | +| main.rs:99:9:99:9 | s | semmle.label | s | +| main.rs:99:13:99:21 | source(...) | semmle.label | source(...) | +| main.rs:99:13:99:21 | source(...) | semmle.label | source(...) | +| main.rs:100:9:100:10 | e1 [D] | semmle.label | e1 [D] | +| main.rs:100:9:100:10 | e1 [D] | semmle.label | e1 [D] | +| main.rs:100:14:100:29 | set_var_field(...) [D] | semmle.label | set_var_field(...) [D] | +| main.rs:100:14:100:29 | set_var_field(...) [D] | semmle.label | set_var_field(...) [D] | +| main.rs:100:28:100:28 | s | semmle.label | s | +| main.rs:100:28:100:28 | s | semmle.label | s | +| main.rs:101:11:101:12 | e1 [D] | semmle.label | e1 [D] | +| main.rs:101:11:101:12 | e1 [D] | semmle.label | e1 [D] | +| main.rs:103:9:103:37 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | +| main.rs:103:9:103:37 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | +| main.rs:103:35:103:35 | i | semmle.label | i | +| main.rs:103:35:103:35 | i | semmle.label | i | +| main.rs:103:47:103:47 | i | semmle.label | i | +| main.rs:103:47:103:47 | i | semmle.label | i | +| main.rs:118:9:118:9 | s | semmle.label | s | +| main.rs:118:9:118:9 | s | semmle.label | s | +| main.rs:118:13:118:21 | source(...) | semmle.label | source(...) | +| main.rs:118:13:118:21 | source(...) | semmle.label | source(...) | +| main.rs:119:9:119:17 | my_struct [MyStruct.field1] | semmle.label | my_struct [MyStruct.field1] | +| main.rs:119:9:119:17 | my_struct [MyStruct.field1] | semmle.label | my_struct [MyStruct.field1] | +| main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | +| main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | +| main.rs:120:17:120:17 | s | semmle.label | s | +| main.rs:120:17:120:17 | s | semmle.label | s | +| main.rs:123:10:123:36 | get_struct_field(...) | semmle.label | get_struct_field(...) | +| main.rs:123:10:123:36 | get_struct_field(...) | semmle.label | get_struct_field(...) | +| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | semmle.label | my_struct [MyStruct.field1] | +| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | semmle.label | my_struct [MyStruct.field1] | +| main.rs:140:9:140:9 | s | semmle.label | s | +| main.rs:140:9:140:9 | s | semmle.label | s | +| main.rs:140:13:140:21 | source(...) | semmle.label | source(...) | +| main.rs:140:13:140:21 | source(...) | semmle.label | source(...) | +| main.rs:141:9:141:17 | my_struct [MyStruct.field2] | semmle.label | my_struct [MyStruct.field2] | +| main.rs:141:9:141:17 | my_struct [MyStruct.field2] | semmle.label | my_struct [MyStruct.field2] | +| main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | semmle.label | set_struct_field(...) [MyStruct.field2] | +| main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | semmle.label | set_struct_field(...) [MyStruct.field2] | +| main.rs:141:38:141:38 | s | semmle.label | s | +| main.rs:141:38:141:38 | s | semmle.label | s | +| main.rs:143:10:143:18 | my_struct [MyStruct.field2] | semmle.label | my_struct [MyStruct.field2] | +| main.rs:143:10:143:18 | my_struct [MyStruct.field2] | semmle.label | my_struct [MyStruct.field2] | +| main.rs:143:10:143:25 | my_struct.field2 | semmle.label | my_struct.field2 | +| main.rs:143:10:143:25 | my_struct.field2 | semmle.label | my_struct.field2 | +| main.rs:152:9:152:9 | s | semmle.label | s | +| main.rs:152:9:152:9 | s | semmle.label | s | +| main.rs:152:13:152:21 | source(...) | semmle.label | source(...) | +| main.rs:152:13:152:21 | source(...) | semmle.label | source(...) | +| main.rs:153:10:153:31 | get_array_element(...) | semmle.label | get_array_element(...) | +| main.rs:153:10:153:31 | get_array_element(...) | semmle.label | get_array_element(...) | +| main.rs:153:28:153:30 | [...] [element] | semmle.label | [...] [element] | +| main.rs:153:28:153:30 | [...] [element] | semmle.label | [...] [element] | +| main.rs:153:29:153:29 | s | semmle.label | s | +| main.rs:153:29:153:29 | s | semmle.label | s | +| main.rs:162:9:162:9 | s | semmle.label | s | +| main.rs:162:9:162:9 | s | semmle.label | s | +| main.rs:162:13:162:21 | source(...) | semmle.label | source(...) | +| main.rs:162:13:162:21 | source(...) | semmle.label | source(...) | +| main.rs:163:9:163:11 | arr [element] | semmle.label | arr [element] | +| main.rs:163:9:163:11 | arr [element] | semmle.label | arr [element] | +| main.rs:163:15:163:34 | set_array_element(...) [element] | semmle.label | set_array_element(...) [element] | +| main.rs:163:15:163:34 | set_array_element(...) [element] | semmle.label | set_array_element(...) [element] | +| main.rs:163:33:163:33 | s | semmle.label | s | +| main.rs:163:33:163:33 | s | semmle.label | s | +| main.rs:164:10:164:12 | arr [element] | semmle.label | arr [element] | +| main.rs:164:10:164:12 | arr [element] | semmle.label | arr [element] | +| main.rs:164:10:164:15 | arr[0] | semmle.label | arr[0] | +| main.rs:164:10:164:15 | arr[0] | semmle.label | arr[0] | +| main.rs:173:9:173:9 | s | semmle.label | s | +| main.rs:173:9:173:9 | s | semmle.label | s | +| main.rs:173:13:173:22 | source(...) | semmle.label | source(...) | +| main.rs:173:13:173:22 | source(...) | semmle.label | source(...) | +| main.rs:174:9:174:9 | t [tuple.0] | semmle.label | t [tuple.0] | +| main.rs:174:9:174:9 | t [tuple.0] | semmle.label | t [tuple.0] | +| main.rs:174:13:174:18 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| main.rs:174:13:174:18 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| main.rs:174:14:174:14 | s | semmle.label | s | +| main.rs:174:14:174:14 | s | semmle.label | s | +| main.rs:175:10:175:29 | get_tuple_element(...) | semmle.label | get_tuple_element(...) | +| main.rs:175:10:175:29 | get_tuple_element(...) | semmle.label | get_tuple_element(...) | +| main.rs:175:28:175:28 | t [tuple.0] | semmle.label | t [tuple.0] | +| main.rs:175:28:175:28 | t [tuple.0] | semmle.label | t [tuple.0] | +| main.rs:186:9:186:9 | s | semmle.label | s | +| main.rs:186:9:186:9 | s | semmle.label | s | +| main.rs:186:13:186:22 | source(...) | semmle.label | source(...) | +| main.rs:186:13:186:22 | source(...) | semmle.label | source(...) | +| main.rs:187:9:187:9 | t [tuple.1] | semmle.label | t [tuple.1] | +| main.rs:187:9:187:9 | t [tuple.1] | semmle.label | t [tuple.1] | +| main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | semmle.label | set_tuple_element(...) [tuple.1] | +| main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | semmle.label | set_tuple_element(...) [tuple.1] | +| main.rs:187:31:187:31 | s | semmle.label | s | +| main.rs:187:31:187:31 | s | semmle.label | s | +| main.rs:189:10:189:10 | t [tuple.1] | semmle.label | t [tuple.1] | +| main.rs:189:10:189:10 | t [tuple.1] | semmle.label | t [tuple.1] | +| main.rs:189:10:189:12 | t.1 | semmle.label | t.1 | +| main.rs:189:10:189:12 | t.1 | semmle.label | t.1 | +| main.rs:201:9:201:9 | s | semmle.label | s | +| main.rs:201:9:201:9 | s | semmle.label | s | +| main.rs:201:13:201:22 | source(...) | semmle.label | source(...) | +| main.rs:201:13:201:22 | source(...) | semmle.label | source(...) | +| main.rs:202:14:202:14 | ... | semmle.label | ... | +| main.rs:202:14:202:14 | ... | semmle.label | ... | +| main.rs:203:14:203:14 | n | semmle.label | n | +| main.rs:203:14:203:14 | n | semmle.label | n | +| main.rs:206:11:206:11 | s | semmle.label | s | +| main.rs:206:11:206:11 | s | semmle.label | s | +| main.rs:210:13:210:22 | source(...) | semmle.label | source(...) | +| main.rs:210:13:210:22 | source(...) | semmle.label | source(...) | +| main.rs:211:17:211:42 | if ... {...} else {...} | semmle.label | if ... {...} else {...} | +| main.rs:211:17:211:42 | if ... {...} else {...} | semmle.label | if ... {...} else {...} | +| main.rs:211:40:211:40 | s | semmle.label | s | +| main.rs:211:40:211:40 | s | semmle.label | s | +| main.rs:212:9:212:9 | t | semmle.label | t | +| main.rs:212:9:212:9 | t | semmle.label | t | +| main.rs:212:13:212:24 | apply(...) | semmle.label | apply(...) | +| main.rs:212:13:212:24 | apply(...) | semmle.label | apply(...) | +| main.rs:212:23:212:23 | f [captured s] | semmle.label | f [captured s] | +| main.rs:212:23:212:23 | f [captured s] | semmle.label | f [captured s] | +| main.rs:213:10:213:10 | t | semmle.label | t | +| main.rs:213:10:213:10 | t | semmle.label | t | +| main.rs:217:9:217:9 | s | semmle.label | s | +| main.rs:217:9:217:9 | s | semmle.label | s | +| main.rs:217:13:217:22 | source(...) | semmle.label | source(...) | +| main.rs:217:13:217:22 | source(...) | semmle.label | source(...) | +| main.rs:218:14:218:14 | ... | semmle.label | ... | +| main.rs:218:14:218:14 | ... | semmle.label | ... | +| main.rs:218:17:218:42 | if ... {...} else {...} | semmle.label | if ... {...} else {...} | +| main.rs:218:17:218:42 | if ... {...} else {...} | semmle.label | if ... {...} else {...} | +| main.rs:219:9:219:9 | t | semmle.label | t | +| main.rs:219:9:219:9 | t | semmle.label | t | +| main.rs:219:13:219:23 | apply(...) | semmle.label | apply(...) | +| main.rs:219:13:219:23 | apply(...) | semmle.label | apply(...) | +| main.rs:219:19:219:19 | s | semmle.label | s | +| main.rs:219:19:219:19 | s | semmle.label | s | +| main.rs:220:10:220:10 | t | semmle.label | t | +| main.rs:220:10:220:10 | t | semmle.label | t | +| main.rs:229:9:229:9 | s | semmle.label | s | +| main.rs:229:9:229:9 | s | semmle.label | s | +| main.rs:229:13:229:22 | source(...) | semmle.label | source(...) | +| main.rs:229:13:229:22 | source(...) | semmle.label | source(...) | +| main.rs:230:9:230:9 | t | semmle.label | t | +| main.rs:230:9:230:9 | t | semmle.label | t | +| main.rs:230:13:230:31 | get_async_number(...) [future] | semmle.label | get_async_number(...) [future] | +| main.rs:230:13:230:31 | get_async_number(...) [future] | semmle.label | get_async_number(...) [future] | +| main.rs:230:13:230:37 | await ... | semmle.label | await ... | +| main.rs:230:13:230:37 | await ... | semmle.label | await ... | +| main.rs:230:30:230:30 | s | semmle.label | s | +| main.rs:230:30:230:30 | s | semmle.label | s | +| main.rs:231:10:231:10 | t | semmle.label | t | +| main.rs:231:10:231:10 | t | semmle.label | t | +| main.rs:250:9:250:9 | s [D] | semmle.label | s [D] | +| main.rs:250:9:250:9 | s [D] | semmle.label | s [D] | +| main.rs:250:13:250:23 | enum_source | semmle.label | enum_source | +| main.rs:250:13:250:23 | enum_source | semmle.label | enum_source | +| main.rs:250:13:250:27 | enum_source(...) [D] | semmle.label | enum_source(...) [D] | +| main.rs:250:13:250:27 | enum_source(...) [D] | semmle.label | enum_source(...) [D] | +| main.rs:251:11:251:11 | s [D] | semmle.label | s [D] | +| main.rs:251:11:251:11 | s [D] | semmle.label | s [D] | +| main.rs:253:9:253:37 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | +| main.rs:253:9:253:37 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | +| main.rs:253:35:253:35 | i | semmle.label | i | +| main.rs:253:35:253:35 | i | semmle.label | i | +| main.rs:253:47:253:47 | i | semmle.label | i | +| main.rs:253:47:253:47 | i | semmle.label | i | +| main.rs:259:9:259:9 | s [C] | semmle.label | s [C] | +| main.rs:259:9:259:9 | s [C] | semmle.label | s [C] | +| main.rs:259:13:259:24 | e.source(...) [C] | semmle.label | e.source(...) [C] | +| main.rs:259:13:259:24 | e.source(...) [C] | semmle.label | e.source(...) [C] | +| main.rs:259:15:259:20 | source | semmle.label | source | +| main.rs:259:15:259:20 | source | semmle.label | source | +| main.rs:260:11:260:11 | s [C] | semmle.label | s [C] | +| main.rs:260:11:260:11 | s [C] | semmle.label | s [C] | +| main.rs:261:9:261:37 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:261:9:261:37 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:261:35:261:35 | i | semmle.label | i | +| main.rs:261:35:261:35 | i | semmle.label | i | +| main.rs:261:47:261:47 | i | semmle.label | i | +| main.rs:261:47:261:47 | i | semmle.label | i | +| main.rs:275:18:275:18 | ... | semmle.label | ... | +| main.rs:275:18:275:18 | ... | semmle.label | ... | +| main.rs:275:26:275:26 | a | semmle.label | a | +| main.rs:275:26:275:26 | a | semmle.label | a | +| main.rs:276:9:276:19 | pass_source | semmle.label | pass_source | +| main.rs:276:9:276:19 | pass_source | semmle.label | pass_source | +| main.rs:278:9:278:19 | pass_source | semmle.label | pass_source | +| main.rs:278:9:278:19 | pass_source | semmle.label | pass_source | +| main.rs:278:25:278:25 | ... | semmle.label | ... | +| main.rs:278:25:278:25 | ... | semmle.label | ... | +| main.rs:279:18:279:18 | a | semmle.label | a | +| main.rs:279:18:279:18 | a | semmle.label | a | +| main.rs:282:14:282:19 | ...: i64 | semmle.label | ...: i64 | +| main.rs:282:14:282:19 | ...: i64 | semmle.label | ...: i64 | +| main.rs:283:18:283:18 | a | semmle.label | a | +| main.rs:283:18:283:18 | a | semmle.label | a | +| main.rs:285:9:285:19 | pass_source | semmle.label | pass_source | +| main.rs:285:9:285:19 | pass_source | semmle.label | pass_source | +| main.rs:287:9:287:19 | pass_source | semmle.label | pass_source | +| main.rs:287:9:287:19 | pass_source | semmle.label | pass_source | +| main.rs:287:36:287:36 | ... | semmle.label | ... | +| main.rs:287:36:287:36 | ... | semmle.label | ... | +| main.rs:288:18:288:18 | a | semmle.label | a | +| main.rs:288:18:288:18 | a | semmle.label | a | +| main.rs:297:9:297:9 | s | semmle.label | s | +| main.rs:297:9:297:9 | s | semmle.label | s | +| main.rs:297:13:297:22 | source(...) | semmle.label | source(...) | +| main.rs:297:13:297:22 | source(...) | semmle.label | source(...) | +| main.rs:298:5:298:13 | enum_sink | semmle.label | enum_sink | +| main.rs:298:5:298:13 | enum_sink | semmle.label | enum_sink | +| main.rs:298:15:298:43 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:298:15:298:43 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:298:41:298:41 | s | semmle.label | s | +| main.rs:298:41:298:41 | s | semmle.label | s | +| main.rs:303:9:303:9 | s | semmle.label | s | +| main.rs:303:9:303:9 | s | semmle.label | s | +| main.rs:303:13:303:22 | source(...) | semmle.label | source(...) | +| main.rs:303:13:303:22 | source(...) | semmle.label | source(...) | +| main.rs:304:9:304:9 | e [D] | semmle.label | e [D] | +| main.rs:304:9:304:9 | e [D] | semmle.label | e [D] | +| main.rs:304:13:304:41 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | +| main.rs:304:13:304:41 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | +| main.rs:304:39:304:39 | s | semmle.label | s | +| main.rs:304:39:304:39 | s | semmle.label | s | +| main.rs:305:5:305:5 | e [D] | semmle.label | e [D] | +| main.rs:305:5:305:5 | e [D] | semmle.label | e [D] | +| main.rs:305:7:305:10 | sink | semmle.label | sink | +| main.rs:305:7:305:10 | sink | semmle.label | sink | +| main.rs:314:9:314:9 | s | semmle.label | s | +| main.rs:314:9:314:9 | s | semmle.label | s | +| main.rs:314:13:314:25 | simple_source | semmle.label | simple_source | +| main.rs:314:13:314:25 | simple_source | semmle.label | simple_source | +| main.rs:314:13:314:29 | simple_source(...) | semmle.label | simple_source(...) | +| main.rs:314:13:314:29 | simple_source(...) | semmle.label | simple_source(...) | +| main.rs:315:10:315:10 | s | semmle.label | s | +| main.rs:315:10:315:10 | s | semmle.label | s | +| main.rs:322:9:322:9 | s | semmle.label | s | +| main.rs:322:9:322:9 | s | semmle.label | s | +| main.rs:322:13:322:22 | source(...) | semmle.label | source(...) | +| main.rs:322:13:322:22 | source(...) | semmle.label | source(...) | +| main.rs:323:5:323:15 | simple_sink | semmle.label | simple_sink | +| main.rs:323:5:323:15 | simple_sink | semmle.label | simple_sink | +| main.rs:323:17:323:17 | s | semmle.label | s | +| main.rs:323:17:323:17 | s | semmle.label | s | +| main.rs:331:5:331:14 | arg_source | semmle.label | arg_source | +| main.rs:331:5:331:14 | arg_source | semmle.label | arg_source | +| main.rs:331:16:331:16 | [post] i | semmle.label | [post] i | +| main.rs:331:16:331:16 | [post] i | semmle.label | [post] i | +| main.rs:332:10:332:10 | i | semmle.label | i | +| main.rs:332:10:332:10 | i | semmle.label | i | +| main.rs:384:9:384:10 | x1 | semmle.label | x1 | +| main.rs:384:9:384:10 | x1 | semmle.label | x1 | +| main.rs:384:14:384:23 | source(...) | semmle.label | source(...) | +| main.rs:384:14:384:23 | source(...) | semmle.label | source(...) | +| main.rs:384:14:384:30 | ... .max(...) | semmle.label | ... .max(...) | +| main.rs:384:14:384:30 | ... .max(...) | semmle.label | ... .max(...) | +| main.rs:385:10:385:11 | x1 | semmle.label | x1 | +| main.rs:385:10:385:11 | x1 | semmle.label | x1 | +| main.rs:387:9:387:10 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | +| main.rs:387:9:387:10 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | +| main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | semmle.label | ... .max(...) [MyStruct.field1] | +| main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | semmle.label | ... .max(...) [MyStruct.field1] | +| main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | +| main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | +| main.rs:388:17:388:26 | source(...) | semmle.label | source(...) | +| main.rs:388:17:388:26 | source(...) | semmle.label | source(...) | +| main.rs:395:10:395:11 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | +| main.rs:395:10:395:11 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | +| main.rs:395:10:395:18 | x2.field1 | semmle.label | x2.field1 | +| main.rs:395:10:395:18 | x2.field1 | semmle.label | x2.field1 | +| main.rs:400:9:400:10 | x4 | semmle.label | x4 | +| main.rs:400:9:400:10 | x4 | semmle.label | x4 | +| main.rs:400:14:400:23 | source(...) | semmle.label | source(...) | +| main.rs:400:14:400:23 | source(...) | semmle.label | source(...) | +| main.rs:400:14:400:30 | ... .max(...) | semmle.label | ... .max(...) | +| main.rs:400:14:400:30 | ... .max(...) | semmle.label | ... .max(...) | +| main.rs:401:10:401:11 | x4 | semmle.label | x4 | +| main.rs:401:10:401:11 | x4 | semmle.label | x4 | +| main.rs:403:9:403:10 | x5 | semmle.label | x5 | +| main.rs:403:14:403:23 | source(...) | semmle.label | source(...) | +| main.rs:403:14:403:30 | ... .lt(...) | semmle.label | ... .lt(...) | +| main.rs:404:10:404:11 | x5 | semmle.label | x5 | +| main.rs:406:9:406:10 | x6 | semmle.label | x6 | +| main.rs:406:14:406:23 | source(...) | semmle.label | source(...) | +| main.rs:406:14:406:27 | ... < ... | semmle.label | ... < ... | +| main.rs:407:10:407:11 | x6 | semmle.label | x6 | subpaths -| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | main.rs:197:17:197:42 | if ... {...} else {...} | main.rs:198:13:198:24 | apply(...) | -| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | main.rs:197:17:197:42 | if ... {...} else {...} | main.rs:198:13:198:24 | apply(...) | -| main.rs:205:19:205:19 | s | main.rs:204:14:204:14 | ... | main.rs:204:17:204:42 | if ... {...} else {...} | main.rs:205:13:205:23 | apply(...) | -| main.rs:205:19:205:19 | s | main.rs:204:14:204:14 | ... | main.rs:204:17:204:42 | if ... {...} else {...} | main.rs:205:13:205:23 | apply(...) | +| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | main.rs:211:17:211:42 | if ... {...} else {...} | main.rs:212:13:212:24 | apply(...) | +| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | main.rs:211:17:211:42 | if ... {...} else {...} | main.rs:212:13:212:24 | apply(...) | +| main.rs:219:19:219:19 | s | main.rs:218:14:218:14 | ... | main.rs:218:17:218:42 | if ... {...} else {...} | main.rs:219:13:219:23 | apply(...) | +| main.rs:219:19:219:19 | s | main.rs:218:14:218:14 | ... | main.rs:218:17:218:42 | if ... {...} else {...} | main.rs:219:13:219:23 | apply(...) | testFailures invalidSpecComponent #select | main.rs:16:10:16:20 | identity(...) | main.rs:15:13:15:21 | source(...) | main.rs:16:10:16:20 | identity(...) | $@ | main.rs:15:13:15:21 | source(...) | source(...) | | main.rs:16:10:16:20 | identity(...) | main.rs:15:13:15:21 | source(...) | main.rs:16:10:16:20 | identity(...) | $@ | main.rs:15:13:15:21 | source(...) | source(...) | | main.rs:26:10:26:18 | coerce(...) | main.rs:25:13:25:22 | source(...) | main.rs:26:10:26:18 | coerce(...) | $@ | main.rs:25:13:25:22 | source(...) | source(...) | -| main.rs:42:10:42:24 | get_var_pos(...) | main.rs:40:13:40:21 | source(...) | main.rs:42:10:42:24 | get_var_pos(...) | $@ | main.rs:40:13:40:21 | source(...) | source(...) | -| main.rs:42:10:42:24 | get_var_pos(...) | main.rs:40:13:40:21 | source(...) | main.rs:42:10:42:24 | get_var_pos(...) | $@ | main.rs:40:13:40:21 | source(...) | source(...) | -| main.rs:57:33:57:33 | i | main.rs:53:13:53:21 | source(...) | main.rs:57:33:57:33 | i | $@ | main.rs:53:13:53:21 | source(...) | source(...) | -| main.rs:57:33:57:33 | i | main.rs:53:13:53:21 | source(...) | main.rs:57:33:57:33 | i | $@ | main.rs:53:13:53:21 | source(...) | source(...) | -| main.rs:74:10:74:26 | get_var_field(...) | main.rs:72:13:72:21 | source(...) | main.rs:74:10:74:26 | get_var_field(...) | $@ | main.rs:72:13:72:21 | source(...) | source(...) | -| main.rs:74:10:74:26 | get_var_field(...) | main.rs:72:13:72:21 | source(...) | main.rs:74:10:74:26 | get_var_field(...) | $@ | main.rs:72:13:72:21 | source(...) | source(...) | -| main.rs:89:47:89:47 | i | main.rs:85:13:85:21 | source(...) | main.rs:89:47:89:47 | i | $@ | main.rs:85:13:85:21 | source(...) | source(...) | -| main.rs:89:47:89:47 | i | main.rs:85:13:85:21 | source(...) | main.rs:89:47:89:47 | i | $@ | main.rs:85:13:85:21 | source(...) | source(...) | -| main.rs:109:10:109:36 | get_struct_field(...) | main.rs:104:13:104:21 | source(...) | main.rs:109:10:109:36 | get_struct_field(...) | $@ | main.rs:104:13:104:21 | source(...) | source(...) | -| main.rs:109:10:109:36 | get_struct_field(...) | main.rs:104:13:104:21 | source(...) | main.rs:109:10:109:36 | get_struct_field(...) | $@ | main.rs:104:13:104:21 | source(...) | source(...) | -| main.rs:129:10:129:25 | my_struct.field2 | main.rs:126:13:126:21 | source(...) | main.rs:129:10:129:25 | my_struct.field2 | $@ | main.rs:126:13:126:21 | source(...) | source(...) | -| main.rs:129:10:129:25 | my_struct.field2 | main.rs:126:13:126:21 | source(...) | main.rs:129:10:129:25 | my_struct.field2 | $@ | main.rs:126:13:126:21 | source(...) | source(...) | -| main.rs:139:10:139:31 | get_array_element(...) | main.rs:138:13:138:21 | source(...) | main.rs:139:10:139:31 | get_array_element(...) | $@ | main.rs:138:13:138:21 | source(...) | source(...) | -| main.rs:139:10:139:31 | get_array_element(...) | main.rs:138:13:138:21 | source(...) | main.rs:139:10:139:31 | get_array_element(...) | $@ | main.rs:138:13:138:21 | source(...) | source(...) | -| main.rs:150:10:150:15 | arr[0] | main.rs:148:13:148:21 | source(...) | main.rs:150:10:150:15 | arr[0] | $@ | main.rs:148:13:148:21 | source(...) | source(...) | -| main.rs:150:10:150:15 | arr[0] | main.rs:148:13:148:21 | source(...) | main.rs:150:10:150:15 | arr[0] | $@ | main.rs:148:13:148:21 | source(...) | source(...) | -| main.rs:161:10:161:29 | get_tuple_element(...) | main.rs:159:13:159:22 | source(...) | main.rs:161:10:161:29 | get_tuple_element(...) | $@ | main.rs:159:13:159:22 | source(...) | source(...) | -| main.rs:161:10:161:29 | get_tuple_element(...) | main.rs:159:13:159:22 | source(...) | main.rs:161:10:161:29 | get_tuple_element(...) | $@ | main.rs:159:13:159:22 | source(...) | source(...) | -| main.rs:175:10:175:12 | t.1 | main.rs:172:13:172:22 | source(...) | main.rs:175:10:175:12 | t.1 | $@ | main.rs:172:13:172:22 | source(...) | source(...) | -| main.rs:175:10:175:12 | t.1 | main.rs:172:13:172:22 | source(...) | main.rs:175:10:175:12 | t.1 | $@ | main.rs:172:13:172:22 | source(...) | source(...) | -| main.rs:189:14:189:14 | n | main.rs:187:13:187:22 | source(...) | main.rs:189:14:189:14 | n | $@ | main.rs:187:13:187:22 | source(...) | source(...) | -| main.rs:189:14:189:14 | n | main.rs:187:13:187:22 | source(...) | main.rs:189:14:189:14 | n | $@ | main.rs:187:13:187:22 | source(...) | source(...) | -| main.rs:199:10:199:10 | t | main.rs:196:13:196:22 | source(...) | main.rs:199:10:199:10 | t | $@ | main.rs:196:13:196:22 | source(...) | source(...) | -| main.rs:199:10:199:10 | t | main.rs:196:13:196:22 | source(...) | main.rs:199:10:199:10 | t | $@ | main.rs:196:13:196:22 | source(...) | source(...) | -| main.rs:206:10:206:10 | t | main.rs:203:13:203:22 | source(...) | main.rs:206:10:206:10 | t | $@ | main.rs:203:13:203:22 | source(...) | source(...) | -| main.rs:206:10:206:10 | t | main.rs:203:13:203:22 | source(...) | main.rs:206:10:206:10 | t | $@ | main.rs:203:13:203:22 | source(...) | source(...) | -| main.rs:217:10:217:10 | t | main.rs:215:13:215:22 | source(...) | main.rs:217:10:217:10 | t | $@ | main.rs:215:13:215:22 | source(...) | source(...) | -| main.rs:217:10:217:10 | t | main.rs:215:13:215:22 | source(...) | main.rs:217:10:217:10 | t | $@ | main.rs:215:13:215:22 | source(...) | source(...) | -| main.rs:239:47:239:47 | i | main.rs:236:13:236:23 | enum_source | main.rs:239:47:239:47 | i | $@ | main.rs:236:13:236:23 | enum_source | enum_source | -| main.rs:239:47:239:47 | i | main.rs:236:13:236:23 | enum_source | main.rs:239:47:239:47 | i | $@ | main.rs:236:13:236:23 | enum_source | enum_source | -| main.rs:247:47:247:47 | i | main.rs:245:15:245:20 | source | main.rs:247:47:247:47 | i | $@ | main.rs:245:15:245:20 | source | source | -| main.rs:247:47:247:47 | i | main.rs:245:15:245:20 | source | main.rs:247:47:247:47 | i | $@ | main.rs:245:15:245:20 | source | source | -| main.rs:261:26:261:26 | a | main.rs:262:9:262:19 | pass_source | main.rs:261:26:261:26 | a | $@ | main.rs:262:9:262:19 | pass_source | pass_source | -| main.rs:261:26:261:26 | a | main.rs:262:9:262:19 | pass_source | main.rs:261:26:261:26 | a | $@ | main.rs:262:9:262:19 | pass_source | pass_source | -| main.rs:265:18:265:18 | a | main.rs:264:9:264:19 | pass_source | main.rs:265:18:265:18 | a | $@ | main.rs:264:9:264:19 | pass_source | pass_source | -| main.rs:265:18:265:18 | a | main.rs:264:9:264:19 | pass_source | main.rs:265:18:265:18 | a | $@ | main.rs:264:9:264:19 | pass_source | pass_source | -| main.rs:269:18:269:18 | a | main.rs:271:9:271:19 | pass_source | main.rs:269:18:269:18 | a | $@ | main.rs:271:9:271:19 | pass_source | pass_source | -| main.rs:269:18:269:18 | a | main.rs:271:9:271:19 | pass_source | main.rs:269:18:269:18 | a | $@ | main.rs:271:9:271:19 | pass_source | pass_source | -| main.rs:274:18:274:18 | a | main.rs:273:9:273:19 | pass_source | main.rs:274:18:274:18 | a | $@ | main.rs:273:9:273:19 | pass_source | pass_source | -| main.rs:274:18:274:18 | a | main.rs:273:9:273:19 | pass_source | main.rs:274:18:274:18 | a | $@ | main.rs:273:9:273:19 | pass_source | pass_source | -| main.rs:284:5:284:13 | enum_sink | main.rs:283:13:283:22 | source(...) | main.rs:284:5:284:13 | enum_sink | $@ | main.rs:283:13:283:22 | source(...) | source(...) | -| main.rs:284:5:284:13 | enum_sink | main.rs:283:13:283:22 | source(...) | main.rs:284:5:284:13 | enum_sink | $@ | main.rs:283:13:283:22 | source(...) | source(...) | -| main.rs:291:7:291:10 | sink | main.rs:289:13:289:22 | source(...) | main.rs:291:7:291:10 | sink | $@ | main.rs:289:13:289:22 | source(...) | source(...) | -| main.rs:291:7:291:10 | sink | main.rs:289:13:289:22 | source(...) | main.rs:291:7:291:10 | sink | $@ | main.rs:289:13:289:22 | source(...) | source(...) | -| main.rs:301:10:301:10 | s | main.rs:300:13:300:25 | simple_source | main.rs:301:10:301:10 | s | $@ | main.rs:300:13:300:25 | simple_source | simple_source | -| main.rs:301:10:301:10 | s | main.rs:300:13:300:25 | simple_source | main.rs:301:10:301:10 | s | $@ | main.rs:300:13:300:25 | simple_source | simple_source | -| main.rs:309:5:309:15 | simple_sink | main.rs:308:13:308:22 | source(...) | main.rs:309:5:309:15 | simple_sink | $@ | main.rs:308:13:308:22 | source(...) | source(...) | -| main.rs:309:5:309:15 | simple_sink | main.rs:308:13:308:22 | source(...) | main.rs:309:5:309:15 | simple_sink | $@ | main.rs:308:13:308:22 | source(...) | source(...) | -| main.rs:318:10:318:10 | i | main.rs:317:5:317:14 | arg_source | main.rs:318:10:318:10 | i | $@ | main.rs:317:5:317:14 | arg_source | arg_source | -| main.rs:318:10:318:10 | i | main.rs:317:5:317:14 | arg_source | main.rs:318:10:318:10 | i | $@ | main.rs:317:5:317:14 | arg_source | arg_source | -| main.rs:371:10:371:11 | x1 | main.rs:370:14:370:23 | source(...) | main.rs:371:10:371:11 | x1 | $@ | main.rs:370:14:370:23 | source(...) | source(...) | -| main.rs:371:10:371:11 | x1 | main.rs:370:14:370:23 | source(...) | main.rs:371:10:371:11 | x1 | $@ | main.rs:370:14:370:23 | source(...) | source(...) | -| main.rs:381:10:381:18 | x2.field1 | main.rs:374:17:374:26 | source(...) | main.rs:381:10:381:18 | x2.field1 | $@ | main.rs:374:17:374:26 | source(...) | source(...) | -| main.rs:381:10:381:18 | x2.field1 | main.rs:374:17:374:26 | source(...) | main.rs:381:10:381:18 | x2.field1 | $@ | main.rs:374:17:374:26 | source(...) | source(...) | -| main.rs:387:10:387:11 | x4 | main.rs:386:14:386:23 | source(...) | main.rs:387:10:387:11 | x4 | $@ | main.rs:386:14:386:23 | source(...) | source(...) | -| main.rs:387:10:387:11 | x4 | main.rs:386:14:386:23 | source(...) | main.rs:387:10:387:11 | x4 | $@ | main.rs:386:14:386:23 | source(...) | source(...) | -| main.rs:390:10:390:11 | x5 | main.rs:389:14:389:23 | source(...) | main.rs:390:10:390:11 | x5 | $@ | main.rs:389:14:389:23 | source(...) | source(...) | -| main.rs:393:10:393:11 | x6 | main.rs:392:14:392:23 | source(...) | main.rs:393:10:393:11 | x6 | $@ | main.rs:392:14:392:23 | source(...) | source(...) | +| main.rs:42:10:42:19 | snd(...) | main.rs:41:14:41:23 | source(...) | main.rs:42:10:42:19 | snd(...) | $@ | main.rs:41:14:41:23 | source(...) | source(...) | +| main.rs:42:10:42:19 | snd(...) | main.rs:41:14:41:23 | source(...) | main.rs:42:10:42:19 | snd(...) | $@ | main.rs:41:14:41:23 | source(...) | source(...) | +| main.rs:56:10:56:24 | get_var_pos(...) | main.rs:54:13:54:21 | source(...) | main.rs:56:10:56:24 | get_var_pos(...) | $@ | main.rs:54:13:54:21 | source(...) | source(...) | +| main.rs:56:10:56:24 | get_var_pos(...) | main.rs:54:13:54:21 | source(...) | main.rs:56:10:56:24 | get_var_pos(...) | $@ | main.rs:54:13:54:21 | source(...) | source(...) | +| main.rs:71:33:71:33 | i | main.rs:67:13:67:21 | source(...) | main.rs:71:33:71:33 | i | $@ | main.rs:67:13:67:21 | source(...) | source(...) | +| main.rs:71:33:71:33 | i | main.rs:67:13:67:21 | source(...) | main.rs:71:33:71:33 | i | $@ | main.rs:67:13:67:21 | source(...) | source(...) | +| main.rs:88:10:88:26 | get_var_field(...) | main.rs:86:13:86:21 | source(...) | main.rs:88:10:88:26 | get_var_field(...) | $@ | main.rs:86:13:86:21 | source(...) | source(...) | +| main.rs:88:10:88:26 | get_var_field(...) | main.rs:86:13:86:21 | source(...) | main.rs:88:10:88:26 | get_var_field(...) | $@ | main.rs:86:13:86:21 | source(...) | source(...) | +| main.rs:103:47:103:47 | i | main.rs:99:13:99:21 | source(...) | main.rs:103:47:103:47 | i | $@ | main.rs:99:13:99:21 | source(...) | source(...) | +| main.rs:103:47:103:47 | i | main.rs:99:13:99:21 | source(...) | main.rs:103:47:103:47 | i | $@ | main.rs:99:13:99:21 | source(...) | source(...) | +| main.rs:123:10:123:36 | get_struct_field(...) | main.rs:118:13:118:21 | source(...) | main.rs:123:10:123:36 | get_struct_field(...) | $@ | main.rs:118:13:118:21 | source(...) | source(...) | +| main.rs:123:10:123:36 | get_struct_field(...) | main.rs:118:13:118:21 | source(...) | main.rs:123:10:123:36 | get_struct_field(...) | $@ | main.rs:118:13:118:21 | source(...) | source(...) | +| main.rs:143:10:143:25 | my_struct.field2 | main.rs:140:13:140:21 | source(...) | main.rs:143:10:143:25 | my_struct.field2 | $@ | main.rs:140:13:140:21 | source(...) | source(...) | +| main.rs:143:10:143:25 | my_struct.field2 | main.rs:140:13:140:21 | source(...) | main.rs:143:10:143:25 | my_struct.field2 | $@ | main.rs:140:13:140:21 | source(...) | source(...) | +| main.rs:153:10:153:31 | get_array_element(...) | main.rs:152:13:152:21 | source(...) | main.rs:153:10:153:31 | get_array_element(...) | $@ | main.rs:152:13:152:21 | source(...) | source(...) | +| main.rs:153:10:153:31 | get_array_element(...) | main.rs:152:13:152:21 | source(...) | main.rs:153:10:153:31 | get_array_element(...) | $@ | main.rs:152:13:152:21 | source(...) | source(...) | +| main.rs:164:10:164:15 | arr[0] | main.rs:162:13:162:21 | source(...) | main.rs:164:10:164:15 | arr[0] | $@ | main.rs:162:13:162:21 | source(...) | source(...) | +| main.rs:164:10:164:15 | arr[0] | main.rs:162:13:162:21 | source(...) | main.rs:164:10:164:15 | arr[0] | $@ | main.rs:162:13:162:21 | source(...) | source(...) | +| main.rs:175:10:175:29 | get_tuple_element(...) | main.rs:173:13:173:22 | source(...) | main.rs:175:10:175:29 | get_tuple_element(...) | $@ | main.rs:173:13:173:22 | source(...) | source(...) | +| main.rs:175:10:175:29 | get_tuple_element(...) | main.rs:173:13:173:22 | source(...) | main.rs:175:10:175:29 | get_tuple_element(...) | $@ | main.rs:173:13:173:22 | source(...) | source(...) | +| main.rs:189:10:189:12 | t.1 | main.rs:186:13:186:22 | source(...) | main.rs:189:10:189:12 | t.1 | $@ | main.rs:186:13:186:22 | source(...) | source(...) | +| main.rs:189:10:189:12 | t.1 | main.rs:186:13:186:22 | source(...) | main.rs:189:10:189:12 | t.1 | $@ | main.rs:186:13:186:22 | source(...) | source(...) | +| main.rs:203:14:203:14 | n | main.rs:201:13:201:22 | source(...) | main.rs:203:14:203:14 | n | $@ | main.rs:201:13:201:22 | source(...) | source(...) | +| main.rs:203:14:203:14 | n | main.rs:201:13:201:22 | source(...) | main.rs:203:14:203:14 | n | $@ | main.rs:201:13:201:22 | source(...) | source(...) | +| main.rs:213:10:213:10 | t | main.rs:210:13:210:22 | source(...) | main.rs:213:10:213:10 | t | $@ | main.rs:210:13:210:22 | source(...) | source(...) | +| main.rs:213:10:213:10 | t | main.rs:210:13:210:22 | source(...) | main.rs:213:10:213:10 | t | $@ | main.rs:210:13:210:22 | source(...) | source(...) | +| main.rs:220:10:220:10 | t | main.rs:217:13:217:22 | source(...) | main.rs:220:10:220:10 | t | $@ | main.rs:217:13:217:22 | source(...) | source(...) | +| main.rs:220:10:220:10 | t | main.rs:217:13:217:22 | source(...) | main.rs:220:10:220:10 | t | $@ | main.rs:217:13:217:22 | source(...) | source(...) | +| main.rs:231:10:231:10 | t | main.rs:229:13:229:22 | source(...) | main.rs:231:10:231:10 | t | $@ | main.rs:229:13:229:22 | source(...) | source(...) | +| main.rs:231:10:231:10 | t | main.rs:229:13:229:22 | source(...) | main.rs:231:10:231:10 | t | $@ | main.rs:229:13:229:22 | source(...) | source(...) | +| main.rs:253:47:253:47 | i | main.rs:250:13:250:23 | enum_source | main.rs:253:47:253:47 | i | $@ | main.rs:250:13:250:23 | enum_source | enum_source | +| main.rs:253:47:253:47 | i | main.rs:250:13:250:23 | enum_source | main.rs:253:47:253:47 | i | $@ | main.rs:250:13:250:23 | enum_source | enum_source | +| main.rs:261:47:261:47 | i | main.rs:259:15:259:20 | source | main.rs:261:47:261:47 | i | $@ | main.rs:259:15:259:20 | source | source | +| main.rs:261:47:261:47 | i | main.rs:259:15:259:20 | source | main.rs:261:47:261:47 | i | $@ | main.rs:259:15:259:20 | source | source | +| main.rs:275:26:275:26 | a | main.rs:276:9:276:19 | pass_source | main.rs:275:26:275:26 | a | $@ | main.rs:276:9:276:19 | pass_source | pass_source | +| main.rs:275:26:275:26 | a | main.rs:276:9:276:19 | pass_source | main.rs:275:26:275:26 | a | $@ | main.rs:276:9:276:19 | pass_source | pass_source | +| main.rs:279:18:279:18 | a | main.rs:278:9:278:19 | pass_source | main.rs:279:18:279:18 | a | $@ | main.rs:278:9:278:19 | pass_source | pass_source | +| main.rs:279:18:279:18 | a | main.rs:278:9:278:19 | pass_source | main.rs:279:18:279:18 | a | $@ | main.rs:278:9:278:19 | pass_source | pass_source | +| main.rs:283:18:283:18 | a | main.rs:285:9:285:19 | pass_source | main.rs:283:18:283:18 | a | $@ | main.rs:285:9:285:19 | pass_source | pass_source | +| main.rs:283:18:283:18 | a | main.rs:285:9:285:19 | pass_source | main.rs:283:18:283:18 | a | $@ | main.rs:285:9:285:19 | pass_source | pass_source | +| main.rs:288:18:288:18 | a | main.rs:287:9:287:19 | pass_source | main.rs:288:18:288:18 | a | $@ | main.rs:287:9:287:19 | pass_source | pass_source | +| main.rs:288:18:288:18 | a | main.rs:287:9:287:19 | pass_source | main.rs:288:18:288:18 | a | $@ | main.rs:287:9:287:19 | pass_source | pass_source | +| main.rs:298:5:298:13 | enum_sink | main.rs:297:13:297:22 | source(...) | main.rs:298:5:298:13 | enum_sink | $@ | main.rs:297:13:297:22 | source(...) | source(...) | +| main.rs:298:5:298:13 | enum_sink | main.rs:297:13:297:22 | source(...) | main.rs:298:5:298:13 | enum_sink | $@ | main.rs:297:13:297:22 | source(...) | source(...) | +| main.rs:305:7:305:10 | sink | main.rs:303:13:303:22 | source(...) | main.rs:305:7:305:10 | sink | $@ | main.rs:303:13:303:22 | source(...) | source(...) | +| main.rs:305:7:305:10 | sink | main.rs:303:13:303:22 | source(...) | main.rs:305:7:305:10 | sink | $@ | main.rs:303:13:303:22 | source(...) | source(...) | +| main.rs:315:10:315:10 | s | main.rs:314:13:314:25 | simple_source | main.rs:315:10:315:10 | s | $@ | main.rs:314:13:314:25 | simple_source | simple_source | +| main.rs:315:10:315:10 | s | main.rs:314:13:314:25 | simple_source | main.rs:315:10:315:10 | s | $@ | main.rs:314:13:314:25 | simple_source | simple_source | +| main.rs:323:5:323:15 | simple_sink | main.rs:322:13:322:22 | source(...) | main.rs:323:5:323:15 | simple_sink | $@ | main.rs:322:13:322:22 | source(...) | source(...) | +| main.rs:323:5:323:15 | simple_sink | main.rs:322:13:322:22 | source(...) | main.rs:323:5:323:15 | simple_sink | $@ | main.rs:322:13:322:22 | source(...) | source(...) | +| main.rs:332:10:332:10 | i | main.rs:331:5:331:14 | arg_source | main.rs:332:10:332:10 | i | $@ | main.rs:331:5:331:14 | arg_source | arg_source | +| main.rs:332:10:332:10 | i | main.rs:331:5:331:14 | arg_source | main.rs:332:10:332:10 | i | $@ | main.rs:331:5:331:14 | arg_source | arg_source | +| main.rs:385:10:385:11 | x1 | main.rs:384:14:384:23 | source(...) | main.rs:385:10:385:11 | x1 | $@ | main.rs:384:14:384:23 | source(...) | source(...) | +| main.rs:385:10:385:11 | x1 | main.rs:384:14:384:23 | source(...) | main.rs:385:10:385:11 | x1 | $@ | main.rs:384:14:384:23 | source(...) | source(...) | +| main.rs:395:10:395:18 | x2.field1 | main.rs:388:17:388:26 | source(...) | main.rs:395:10:395:18 | x2.field1 | $@ | main.rs:388:17:388:26 | source(...) | source(...) | +| main.rs:395:10:395:18 | x2.field1 | main.rs:388:17:388:26 | source(...) | main.rs:395:10:395:18 | x2.field1 | $@ | main.rs:388:17:388:26 | source(...) | source(...) | +| main.rs:401:10:401:11 | x4 | main.rs:400:14:400:23 | source(...) | main.rs:401:10:401:11 | x4 | $@ | main.rs:400:14:400:23 | source(...) | source(...) | +| main.rs:401:10:401:11 | x4 | main.rs:400:14:400:23 | source(...) | main.rs:401:10:401:11 | x4 | $@ | main.rs:400:14:400:23 | source(...) | source(...) | +| main.rs:404:10:404:11 | x5 | main.rs:403:14:403:23 | source(...) | main.rs:404:10:404:11 | x5 | $@ | main.rs:403:14:403:23 | source(...) | source(...) | +| main.rs:407:10:407:11 | x6 | main.rs:406:14:406:23 | source(...) | main.rs:407:10:407:11 | x6 | $@ | main.rs:406:14:406:23 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/models/models.ext.yml b/rust/ql/test/library-tests/dataflow/models/models.ext.yml index 52342e880224..01333c4e6a54 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.ext.yml +++ b/rust/ql/test/library-tests/dataflow/models/models.ext.yml @@ -20,6 +20,9 @@ extensions: extensible: summaryModel data: - ["main::coerce", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["main::snd", "Argument[1]", "ReturnValue", "value", "manual"] + # Wrong generated model which should not take effect due to the manual model above + - ["main::snd", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["main::get_var_pos", "Argument[0].Field[main::MyPosEnum::A(0)]", "ReturnValue", "value", "manual"] - ["main::set_var_pos", "Argument[0]", "ReturnValue.Field[main::MyPosEnum::B(0)]", "value", "manual"] - ["main::get_var_field", "Argument[0].Field[main::MyFieldEnum::C::field_c]", "ReturnValue", "value", "manual"] @@ -33,5 +36,4 @@ extensions: - ["main::apply", "Argument[0]", "Argument[1].Parameter[0]", "value", "manual"] - ["main::apply", "Argument[1].ReturnValue", "ReturnValue", "value", "manual"] - ["main::get_async_number", "Argument[0]", "ReturnValue.Future", "value", "manual"] - - ["<_ as core::cmp::Ord>::max", "Argument[self]", "ReturnValue", "value", "manual"] - ["<_ as core::cmp::PartialOrd>::lt", "Argument[self].Reference", "ReturnValue", "taint", "manual"] diff --git a/rust/ql/test/library-tests/dataflow/pointers/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/pointers/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..3610f0614060 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/pointers/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,26 @@ +multipleResolvedTargets +| main.rs:19:17:19:18 | * ... | +| main.rs:53:14:53:15 | * ... | +| main.rs:59:33:59:34 | * ... | +| main.rs:72:14:72:15 | * ... | +| main.rs:73:9:73:10 | * ... | +| main.rs:74:14:74:15 | * ... | +| main.rs:75:9:75:10 | * ... | +| main.rs:76:14:76:15 | * ... | +| main.rs:83:9:83:10 | * ... | +| main.rs:90:9:90:17 | * ... | +| main.rs:97:9:97:10 | * ... | +| main.rs:105:9:105:10 | * ... | +| main.rs:106:14:106:15 | * ... | +| main.rs:113:14:113:15 | * ... | +| main.rs:114:9:114:10 | * ... | +| main.rs:115:14:115:15 | * ... | +| main.rs:122:9:122:10 | * ... | +| main.rs:125:9:125:10 | * ... | +| main.rs:135:17:135:18 | * ... | +| main.rs:136:17:136:18 | * ... | +| main.rs:201:9:201:10 | * ... | +| main.rs:209:14:209:15 | * ... | +| main.rs:211:14:211:15 | * ... | +| main.rs:224:13:224:17 | * ... | +| main.rs:229:9:229:10 | * ... | diff --git a/rust/ql/test/library-tests/dataflow/pointers/inline-flow.expected b/rust/ql/test/library-tests/dataflow/pointers/inline-flow.expected index 8da24883ea7b..2c7fbc9381f8 100644 --- a/rust/ql/test/library-tests/dataflow/pointers/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/pointers/inline-flow.expected @@ -1,4 +1,5 @@ models +| 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value | edges | main.rs:17:13:17:13 | a | main.rs:18:18:18:18 | a | provenance | | | main.rs:17:17:17:26 | source(...) | main.rs:17:13:17:13 | a | provenance | | @@ -7,7 +8,7 @@ edges | main.rs:18:18:18:18 | a | main.rs:18:17:18:18 | &a [&ref] | provenance | | | main.rs:19:13:19:13 | c | main.rs:20:14:20:14 | c | provenance | | | main.rs:19:17:19:18 | * ... | main.rs:19:13:19:13 | c | provenance | | -| main.rs:19:18:19:18 | b [&ref] | main.rs:19:17:19:18 | * ... | provenance | | +| main.rs:19:18:19:18 | b [&ref] | main.rs:19:17:19:18 | * ... | provenance | MaD:1 | | main.rs:23:29:23:30 | &... [&ref] | main.rs:23:30:23:30 | n | provenance | | | main.rs:23:29:23:36 | ...: ... [&ref] | main.rs:23:29:23:30 | &... [&ref] | provenance | | | main.rs:23:30:23:30 | n | main.rs:24:14:24:14 | n | provenance | | @@ -28,7 +29,7 @@ edges | main.rs:51:17:51:26 | source(...) | main.rs:51:13:51:13 | a | provenance | | | main.rs:52:13:52:17 | ref p | main.rs:52:17:52:17 | p [&ref] | provenance | | | main.rs:52:17:52:17 | p [&ref] | main.rs:53:15:53:15 | p [&ref] | provenance | | -| main.rs:53:15:53:15 | p [&ref] | main.rs:53:14:53:15 | * ... | provenance | | +| main.rs:53:15:53:15 | p [&ref] | main.rs:53:14:53:15 | * ... | provenance | MaD:1 | | main.rs:57:13:57:13 | a [Some] | main.rs:58:15:58:15 | a [Some] | provenance | | | main.rs:57:17:57:32 | Some(...) [Some] | main.rs:57:13:57:13 | a [Some] | provenance | | | main.rs:57:22:57:31 | source(...) | main.rs:57:17:57:32 | Some(...) [Some] | provenance | | @@ -36,17 +37,20 @@ edges | main.rs:59:13:59:23 | Some(...) [Some] | main.rs:59:18:59:22 | ref p | provenance | | | main.rs:59:18:59:22 | ref p | main.rs:59:22:59:22 | p [&ref] | provenance | | | main.rs:59:22:59:22 | p [&ref] | main.rs:59:34:59:34 | p [&ref] | provenance | | -| main.rs:59:34:59:34 | p [&ref] | main.rs:59:33:59:34 | * ... | provenance | | +| main.rs:59:34:59:34 | p [&ref] | main.rs:59:33:59:34 | * ... | provenance | MaD:1 | | main.rs:73:10:73:10 | [post] b [&ref] | main.rs:74:15:74:15 | b [&ref] | provenance | | | main.rs:73:14:73:23 | source(...) | main.rs:73:10:73:10 | [post] b [&ref] | provenance | | -| main.rs:74:15:74:15 | b [&ref] | main.rs:74:14:74:15 | * ... | provenance | | +| main.rs:74:15:74:15 | b [&ref] | main.rs:74:14:74:15 | * ... | provenance | MaD:1 | +| main.rs:90:11:90:16 | [post] &mut a [&ref] | main.rs:90:16:90:16 | [post] a | provenance | | +| main.rs:90:16:90:16 | [post] a | main.rs:91:14:91:14 | a | provenance | | +| main.rs:90:21:90:30 | source(...) | main.rs:90:11:90:16 | [post] &mut a [&ref] | provenance | | | main.rs:105:10:105:10 | [post] c [&ref] | main.rs:106:15:106:15 | c [&ref] | provenance | | | main.rs:105:14:105:23 | source(...) | main.rs:105:10:105:10 | [post] c [&ref] | provenance | | -| main.rs:106:15:106:15 | c [&ref] | main.rs:106:14:106:15 | * ... | provenance | | +| main.rs:106:15:106:15 | c [&ref] | main.rs:106:14:106:15 | * ... | provenance | MaD:1 | | main.rs:112:13:112:21 | ref mut a | main.rs:112:21:112:21 | a [&ref] | provenance | | | main.rs:112:21:112:21 | a [&ref] | main.rs:113:15:113:15 | a [&ref] | provenance | | | main.rs:112:25:112:34 | source(...) | main.rs:112:13:112:21 | ref mut a | provenance | | -| main.rs:113:15:113:15 | a [&ref] | main.rs:113:14:113:15 | * ... | provenance | | +| main.rs:113:15:113:15 | a [&ref] | main.rs:113:14:113:15 | * ... | provenance | MaD:1 | | main.rs:149:14:149:24 | ...: MyNumber [MyNumber] | main.rs:150:11:150:11 | m [MyNumber] | provenance | | | main.rs:150:11:150:11 | m [MyNumber] | main.rs:151:9:151:34 | ...::MyNumber(...) [MyNumber] | provenance | | | main.rs:151:9:151:34 | ...::MyNumber(...) [MyNumber] | main.rs:151:28:151:33 | number | provenance | | @@ -60,10 +64,11 @@ edges | main.rs:164:13:164:39 | &... [&ref, MyNumber] | main.rs:164:14:164:39 | ...::MyNumber(...) [MyNumber] | provenance | | | main.rs:164:14:164:39 | ...::MyNumber(...) [MyNumber] | main.rs:164:33:164:38 | number | provenance | | | main.rs:164:33:164:38 | number | main.rs:162:26:166:5 | { ... } | provenance | | -| main.rs:174:13:174:21 | my_number [MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | provenance | | -| main.rs:174:13:174:21 | my_number [MyNumber] | main.rs:175:14:175:34 | my_number.to_number() | provenance | | +| main.rs:174:13:174:21 | my_number [MyNumber] | main.rs:175:14:175:22 | my_number [MyNumber] | provenance | | | main.rs:174:25:174:54 | ...::MyNumber(...) [MyNumber] | main.rs:174:13:174:21 | my_number [MyNumber] | provenance | | | main.rs:174:44:174:53 | source(...) | main.rs:174:25:174:54 | ...::MyNumber(...) [MyNumber] | provenance | | +| main.rs:175:14:175:22 | my_number [MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | provenance | | +| main.rs:175:14:175:22 | my_number [MyNumber] | main.rs:175:14:175:34 | my_number.to_number() | provenance | | | main.rs:179:13:179:21 | my_number [MyNumber] | main.rs:180:16:180:24 | my_number [MyNumber] | provenance | | | main.rs:179:25:179:54 | ...::MyNumber(...) [MyNumber] | main.rs:179:13:179:21 | my_number [MyNumber] | provenance | | | main.rs:179:44:179:53 | source(...) | main.rs:179:25:179:54 | ...::MyNumber(...) [MyNumber] | provenance | | @@ -87,7 +92,7 @@ edges | main.rs:210:17:210:17 | [post] p [&ref] | main.rs:211:15:211:15 | p [&ref] | provenance | | | main.rs:210:20:210:29 | source(...) | main.rs:200:29:200:38 | ...: i64 | provenance | | | main.rs:210:20:210:29 | source(...) | main.rs:210:17:210:17 | [post] p [&ref] | provenance | | -| main.rs:211:15:211:15 | p [&ref] | main.rs:211:14:211:15 | * ... | provenance | | +| main.rs:211:15:211:15 | p [&ref] | main.rs:211:14:211:15 | * ... | provenance | MaD:1 | | main.rs:218:17:218:22 | [post] &mut n [&ref] | main.rs:218:22:218:22 | [post] n | provenance | | | main.rs:218:22:218:22 | [post] n | main.rs:219:14:219:14 | n | provenance | | | main.rs:218:25:218:34 | source(...) | main.rs:200:29:200:38 | ...: i64 | provenance | | @@ -173,6 +178,10 @@ nodes | main.rs:73:14:73:23 | source(...) | semmle.label | source(...) | | main.rs:74:14:74:15 | * ... | semmle.label | * ... | | main.rs:74:15:74:15 | b [&ref] | semmle.label | b [&ref] | +| main.rs:90:11:90:16 | [post] &mut a [&ref] | semmle.label | [post] &mut a [&ref] | +| main.rs:90:16:90:16 | [post] a | semmle.label | [post] a | +| main.rs:90:21:90:30 | source(...) | semmle.label | source(...) | +| main.rs:91:14:91:14 | a | semmle.label | a | | main.rs:105:10:105:10 | [post] c [&ref] | semmle.label | [post] c [&ref] | | main.rs:105:14:105:23 | source(...) | semmle.label | source(...) | | main.rs:106:14:106:15 | * ... | semmle.label | * ... | @@ -201,6 +210,7 @@ nodes | main.rs:174:13:174:21 | my_number [MyNumber] | semmle.label | my_number [MyNumber] | | main.rs:174:25:174:54 | ...::MyNumber(...) [MyNumber] | semmle.label | ...::MyNumber(...) [MyNumber] | | main.rs:174:44:174:53 | source(...) | semmle.label | source(...) | +| main.rs:175:14:175:22 | my_number [MyNumber] | semmle.label | my_number [MyNumber] | | main.rs:175:14:175:34 | my_number.to_number() | semmle.label | my_number.to_number() | | main.rs:179:13:179:21 | my_number [MyNumber] | semmle.label | my_number [MyNumber] | | main.rs:179:25:179:54 | ...::MyNumber(...) [MyNumber] | semmle.label | ...::MyNumber(...) [MyNumber] | @@ -262,7 +272,7 @@ nodes | main.rs:255:14:255:33 | to_number(...) | semmle.label | to_number(...) | | main.rs:255:24:255:32 | my_number [MyNumber] | semmle.label | my_number [MyNumber] | subpaths -| main.rs:174:13:174:21 | my_number [MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | main.rs:156:31:160:5 | { ... } | main.rs:175:14:175:34 | my_number.to_number() | +| main.rs:175:14:175:22 | my_number [MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | main.rs:156:31:160:5 | { ... } | main.rs:175:14:175:34 | my_number.to_number() | | main.rs:180:15:180:24 | &my_number [&ref, MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:180:14:180:31 | ... .get() | | main.rs:186:14:186:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:186:14:186:28 | my_number.get() | | main.rs:192:14:192:22 | my_number [&ref, MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | main.rs:156:31:160:5 | { ... } | main.rs:192:14:192:34 | my_number.to_number() | @@ -285,6 +295,7 @@ testFailures | main.rs:53:14:53:15 | * ... | main.rs:51:17:51:26 | source(...) | main.rs:53:14:53:15 | * ... | $@ | main.rs:51:17:51:26 | source(...) | source(...) | | main.rs:59:33:59:34 | * ... | main.rs:57:22:57:31 | source(...) | main.rs:59:33:59:34 | * ... | $@ | main.rs:57:22:57:31 | source(...) | source(...) | | main.rs:74:14:74:15 | * ... | main.rs:73:14:73:23 | source(...) | main.rs:74:14:74:15 | * ... | $@ | main.rs:73:14:73:23 | source(...) | source(...) | +| main.rs:91:14:91:14 | a | main.rs:90:21:90:30 | source(...) | main.rs:91:14:91:14 | a | $@ | main.rs:90:21:90:30 | source(...) | source(...) | | main.rs:106:14:106:15 | * ... | main.rs:105:14:105:23 | source(...) | main.rs:106:14:106:15 | * ... | $@ | main.rs:105:14:105:23 | source(...) | source(...) | | main.rs:113:14:113:15 | * ... | main.rs:112:25:112:34 | source(...) | main.rs:113:14:113:15 | * ... | $@ | main.rs:112:25:112:34 | source(...) | source(...) | | main.rs:175:14:175:34 | my_number.to_number() | main.rs:174:44:174:53 | source(...) | main.rs:175:14:175:34 | my_number.to_number() | $@ | main.rs:174:44:174:53 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/pointers/inline-flow.ql b/rust/ql/test/library-tests/dataflow/pointers/inline-flow.ql index e399ea0e5d71..5dcb7ee70a9d 100644 --- a/rust/ql/test/library-tests/dataflow/pointers/inline-flow.ql +++ b/rust/ql/test/library-tests/dataflow/pointers/inline-flow.ql @@ -5,8 +5,8 @@ import rust import utils.test.InlineFlowTest import DefaultFlowTest -import ValueFlow::PathGraph +import TaintFlow::PathGraph -from ValueFlow::PathNode source, ValueFlow::PathNode sink -where ValueFlow::flowPath(source, sink) +from TaintFlow::PathNode source, TaintFlow::PathNode sink +where TaintFlow::flowPath(source, sink) select sink, source, sink, "$@", source, source.toString() diff --git a/rust/ql/test/library-tests/dataflow/pointers/main.rs b/rust/ql/test/library-tests/dataflow/pointers/main.rs index d7e28c9368f4..2ebd5ee28dff 100644 --- a/rust/ql/test/library-tests/dataflow/pointers/main.rs +++ b/rust/ql/test/library-tests/dataflow/pointers/main.rs @@ -88,7 +88,7 @@ mod intraprocedural_mutable_borrows { let mut a = 1; sink(a); *(&mut a) = source(87); - sink(a); // $ MISSING: hasValueFlow=87 + sink(a); // $ hasValueFlow=87 } pub fn clear_through_borrow() { diff --git a/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected index db1e69c43fb5..1314393fd0a5 100644 --- a/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected @@ -50,11 +50,14 @@ edges | test.rs:42:20:42:21 | t1 [element] | test.rs:42:13:42:15 | row | provenance | | | test.rs:48:22:48:30 | query_map | test.rs:50:14:50:24 | ...: i64 | provenance | Src:MaD:3 | | test.rs:50:14:50:24 | ...: i64 | test.rs:51:22:51:27 | values | provenance | | +| test.rs:55:22:55:30 | query_map | test.rs:57:14:57:39 | ...: ... | provenance | Src:MaD:3 | +| test.rs:57:14:57:39 | ...: ... | test.rs:58:22:58:29 | values.0 | provenance | | +| test.rs:57:14:57:39 | ...: ... | test.rs:59:22:59:29 | values.1 | provenance | | +| test.rs:57:14:57:39 | ...: ... | test.rs:60:22:60:29 | values.2 | provenance | | | test.rs:64:13:64:17 | total | test.rs:68:14:68:18 | total | provenance | | | test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | test.rs:64:21:67:11 | TryExpr | provenance | | | test.rs:64:21:67:11 | TryExpr | test.rs:64:13:64:17 | total | provenance | | | test.rs:64:26:64:35 | query_fold | test.rs:64:76:64:83 | ...: i64 | provenance | Src:MaD:2 | -| test.rs:64:76:64:83 | ...: i64 | test.rs:64:86:67:9 | { ... } | provenance | | | test.rs:64:76:64:83 | ...: i64 | test.rs:65:18:65:20 | row | provenance | | | test.rs:64:76:64:83 | ...: i64 | test.rs:66:19:66:21 | row | provenance | | | test.rs:64:86:67:9 | { ... } | test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | provenance | MaD:13 | @@ -62,6 +65,13 @@ edges | test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... | provenance | MaD:11 | | test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... | provenance | MaD:12 | | test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... | provenance | MaD:15 | +| test.rs:70:22:70:31 | query_fold | test.rs:70:83:70:105 | ...: ... | provenance | Src:MaD:2 | +| test.rs:70:83:70:105 | ...: ... | test.rs:71:17:71:18 | id | provenance | | +| test.rs:70:83:70:105 | ...: ... | test.rs:72:17:72:20 | name | provenance | | +| test.rs:70:83:70:105 | ...: ... | test.rs:73:17:73:19 | age | provenance | | +| test.rs:71:17:71:18 | id | test.rs:74:18:74:19 | id | provenance | | +| test.rs:72:17:72:20 | name | test.rs:75:18:75:21 | name | provenance | | +| test.rs:73:17:73:19 | age | test.rs:76:18:76:20 | age | provenance | | | test.rs:105:13:105:14 | v1 | test.rs:106:14:106:15 | v1 | provenance | | | test.rs:105:24:105:33 | row.get(...) [Some] | test.rs:105:24:105:42 | ... .unwrap() | provenance | MaD:16 | | test.rs:105:24:105:42 | ... .unwrap() | test.rs:105:13:105:14 | v1 | provenance | | @@ -82,12 +92,15 @@ edges | test.rs:114:28:114:35 | take_opt | test.rs:114:24:114:38 | row.take_opt(...) [Some, Ok] | provenance | Src:MaD:10 | | test.rs:135:22:135:30 | query_map | test.rs:137:14:137:24 | ...: i64 | provenance | Src:MaD:5 | | test.rs:137:14:137:24 | ...: i64 | test.rs:138:22:138:27 | values | provenance | | +| test.rs:142:22:142:30 | query_map | test.rs:144:14:144:39 | ...: ... | provenance | Src:MaD:5 | +| test.rs:144:14:144:39 | ...: ... | test.rs:145:22:145:29 | values.0 | provenance | | +| test.rs:144:14:144:39 | ...: ... | test.rs:146:22:146:29 | values.1 | provenance | | +| test.rs:144:14:144:39 | ...: ... | test.rs:147:22:147:29 | values.2 | provenance | | | test.rs:151:13:151:17 | total | test.rs:155:14:155:18 | total | provenance | | | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | test.rs:151:21:154:16 | await ... [Ok] | provenance | | | test.rs:151:21:154:16 | await ... [Ok] | test.rs:151:21:154:17 | TryExpr | provenance | | | test.rs:151:21:154:17 | TryExpr | test.rs:151:13:151:17 | total | provenance | | | test.rs:151:26:151:35 | query_fold | test.rs:151:76:151:83 | ...: i64 | provenance | Src:MaD:4 | -| test.rs:151:76:151:83 | ...: i64 | test.rs:151:86:154:9 | { ... } | provenance | | | test.rs:151:76:151:83 | ...: i64 | test.rs:152:18:152:20 | row | provenance | | | test.rs:151:76:151:83 | ...: i64 | test.rs:153:19:153:21 | row | provenance | | | test.rs:151:86:154:9 | { ... } | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | provenance | MaD:14 | @@ -95,6 +108,13 @@ edges | test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... | provenance | MaD:11 | | test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... | provenance | MaD:12 | | test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... | provenance | MaD:15 | +| test.rs:157:22:157:31 | query_fold | test.rs:157:83:157:105 | ...: ... | provenance | Src:MaD:4 | +| test.rs:157:83:157:105 | ...: ... | test.rs:158:17:158:18 | id | provenance | | +| test.rs:157:83:157:105 | ...: ... | test.rs:159:17:159:20 | name | provenance | | +| test.rs:157:83:157:105 | ...: ... | test.rs:160:17:160:19 | age | provenance | | +| test.rs:158:17:158:18 | id | test.rs:161:18:161:19 | id | provenance | | +| test.rs:159:17:159:20 | name | test.rs:162:18:162:21 | name | provenance | | +| test.rs:160:17:160:19 | age | test.rs:163:18:163:20 | age | provenance | | nodes | test.rs:18:13:18:14 | v1 | semmle.label | v1 | | test.rs:18:24:18:33 | row.get(...) [Some] | semmle.label | row.get(...) [Some] | @@ -137,6 +157,11 @@ nodes | test.rs:48:22:48:30 | query_map | semmle.label | query_map | | test.rs:50:14:50:24 | ...: i64 | semmle.label | ...: i64 | | test.rs:51:22:51:27 | values | semmle.label | values | +| test.rs:55:22:55:30 | query_map | semmle.label | query_map | +| test.rs:57:14:57:39 | ...: ... | semmle.label | ...: ... | +| test.rs:58:22:58:29 | values.0 | semmle.label | values.0 | +| test.rs:59:22:59:29 | values.1 | semmle.label | values.1 | +| test.rs:60:22:60:29 | values.2 | semmle.label | values.2 | | test.rs:64:13:64:17 | total | semmle.label | total | | test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | semmle.label | conn.query_fold(...) [Ok] | | test.rs:64:21:67:11 | TryExpr | semmle.label | TryExpr | @@ -147,6 +172,14 @@ nodes | test.rs:66:13:66:21 | ... + ... | semmle.label | ... + ... | | test.rs:66:19:66:21 | row | semmle.label | row | | test.rs:68:14:68:18 | total | semmle.label | total | +| test.rs:70:22:70:31 | query_fold | semmle.label | query_fold | +| test.rs:70:83:70:105 | ...: ... | semmle.label | ...: ... | +| test.rs:71:17:71:18 | id | semmle.label | id | +| test.rs:72:17:72:20 | name | semmle.label | name | +| test.rs:73:17:73:19 | age | semmle.label | age | +| test.rs:74:18:74:19 | id | semmle.label | id | +| test.rs:75:18:75:21 | name | semmle.label | name | +| test.rs:76:18:76:20 | age | semmle.label | age | | test.rs:105:13:105:14 | v1 | semmle.label | v1 | | test.rs:105:24:105:33 | row.get(...) [Some] | semmle.label | row.get(...) [Some] | | test.rs:105:24:105:42 | ... .unwrap() | semmle.label | ... .unwrap() | @@ -172,6 +205,11 @@ nodes | test.rs:135:22:135:30 | query_map | semmle.label | query_map | | test.rs:137:14:137:24 | ...: i64 | semmle.label | ...: i64 | | test.rs:138:22:138:27 | values | semmle.label | values | +| test.rs:142:22:142:30 | query_map | semmle.label | query_map | +| test.rs:144:14:144:39 | ...: ... | semmle.label | ...: ... | +| test.rs:145:22:145:29 | values.0 | semmle.label | values.0 | +| test.rs:146:22:146:29 | values.1 | semmle.label | values.1 | +| test.rs:147:22:147:29 | values.2 | semmle.label | values.2 | | test.rs:151:13:151:17 | total | semmle.label | total | | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | semmle.label | conn.query_fold(...) [future, Ok] | | test.rs:151:21:154:16 | await ... [Ok] | semmle.label | await ... [Ok] | @@ -183,6 +221,14 @@ nodes | test.rs:153:13:153:21 | ... + ... | semmle.label | ... + ... | | test.rs:153:19:153:21 | row | semmle.label | row | | test.rs:155:14:155:18 | total | semmle.label | total | +| test.rs:157:22:157:31 | query_fold | semmle.label | query_fold | +| test.rs:157:83:157:105 | ...: ... | semmle.label | ...: ... | +| test.rs:158:17:158:18 | id | semmle.label | id | +| test.rs:159:17:159:20 | name | semmle.label | name | +| test.rs:160:17:160:19 | age | semmle.label | age | +| test.rs:161:18:161:19 | id | semmle.label | id | +| test.rs:162:18:162:21 | name | semmle.label | name | +| test.rs:163:18:163:20 | age | semmle.label | age | subpaths testFailures #select @@ -194,12 +240,24 @@ testFailures | test.rs:41:14:41:70 | ... .unwrap() | test.rs:41:42:41:44 | get | test.rs:41:14:41:70 | ... .unwrap() | $@ | test.rs:41:42:41:44 | get | get | | test.rs:44:22:44:22 | v | test.rs:40:27:40:35 | exec_iter | test.rs:44:22:44:22 | v | $@ | test.rs:40:27:40:35 | exec_iter | exec_iter | | test.rs:51:22:51:27 | values | test.rs:48:22:48:30 | query_map | test.rs:51:22:51:27 | values | $@ | test.rs:48:22:48:30 | query_map | query_map | +| test.rs:58:22:58:29 | values.0 | test.rs:55:22:55:30 | query_map | test.rs:58:22:58:29 | values.0 | $@ | test.rs:55:22:55:30 | query_map | query_map | +| test.rs:59:22:59:29 | values.1 | test.rs:55:22:55:30 | query_map | test.rs:59:22:59:29 | values.1 | $@ | test.rs:55:22:55:30 | query_map | query_map | +| test.rs:60:22:60:29 | values.2 | test.rs:55:22:55:30 | query_map | test.rs:60:22:60:29 | values.2 | $@ | test.rs:55:22:55:30 | query_map | query_map | | test.rs:65:18:65:20 | row | test.rs:64:26:64:35 | query_fold | test.rs:65:18:65:20 | row | $@ | test.rs:64:26:64:35 | query_fold | query_fold | | test.rs:68:14:68:18 | total | test.rs:64:26:64:35 | query_fold | test.rs:68:14:68:18 | total | $@ | test.rs:64:26:64:35 | query_fold | query_fold | +| test.rs:74:18:74:19 | id | test.rs:70:22:70:31 | query_fold | test.rs:74:18:74:19 | id | $@ | test.rs:70:22:70:31 | query_fold | query_fold | +| test.rs:75:18:75:21 | name | test.rs:70:22:70:31 | query_fold | test.rs:75:18:75:21 | name | $@ | test.rs:70:22:70:31 | query_fold | query_fold | +| test.rs:76:18:76:20 | age | test.rs:70:22:70:31 | query_fold | test.rs:76:18:76:20 | age | $@ | test.rs:70:22:70:31 | query_fold | query_fold | | test.rs:106:14:106:15 | v1 | test.rs:105:28:105:30 | get | test.rs:106:14:106:15 | v1 | $@ | test.rs:105:28:105:30 | get | get | | test.rs:109:14:109:15 | v2 | test.rs:108:28:108:34 | get_opt | test.rs:109:14:109:15 | v2 | $@ | test.rs:108:28:108:34 | get_opt | get_opt | | test.rs:112:14:112:15 | v3 | test.rs:111:28:111:31 | take | test.rs:112:14:112:15 | v3 | $@ | test.rs:111:28:111:31 | take | take | | test.rs:115:14:115:15 | v4 | test.rs:114:28:114:35 | take_opt | test.rs:115:14:115:15 | v4 | $@ | test.rs:114:28:114:35 | take_opt | take_opt | | test.rs:138:22:138:27 | values | test.rs:135:22:135:30 | query_map | test.rs:138:22:138:27 | values | $@ | test.rs:135:22:135:30 | query_map | query_map | +| test.rs:145:22:145:29 | values.0 | test.rs:142:22:142:30 | query_map | test.rs:145:22:145:29 | values.0 | $@ | test.rs:142:22:142:30 | query_map | query_map | +| test.rs:146:22:146:29 | values.1 | test.rs:142:22:142:30 | query_map | test.rs:146:22:146:29 | values.1 | $@ | test.rs:142:22:142:30 | query_map | query_map | +| test.rs:147:22:147:29 | values.2 | test.rs:142:22:142:30 | query_map | test.rs:147:22:147:29 | values.2 | $@ | test.rs:142:22:142:30 | query_map | query_map | | test.rs:152:18:152:20 | row | test.rs:151:26:151:35 | query_fold | test.rs:152:18:152:20 | row | $@ | test.rs:151:26:151:35 | query_fold | query_fold | | test.rs:155:14:155:18 | total | test.rs:151:26:151:35 | query_fold | test.rs:155:14:155:18 | total | $@ | test.rs:151:26:151:35 | query_fold | query_fold | +| test.rs:161:18:161:19 | id | test.rs:157:22:157:31 | query_fold | test.rs:161:18:161:19 | id | $@ | test.rs:157:22:157:31 | query_fold | query_fold | +| test.rs:162:18:162:21 | name | test.rs:157:22:157:31 | query_fold | test.rs:162:18:162:21 | name | $@ | test.rs:157:22:157:31 | query_fold | query_fold | +| test.rs:163:18:163:20 | age | test.rs:157:22:157:31 | query_fold | test.rs:163:18:163:20 | age | $@ | test.rs:157:22:157:31 | query_fold | query_fold | diff --git a/rust/ql/test/library-tests/dataflow/sources/database/test.rs b/rust/ql/test/library-tests/dataflow/sources/database/test.rs index 5fbaef711447..618830091a6c 100644 --- a/rust/ql/test/library-tests/dataflow/sources/database/test.rs +++ b/rust/ql/test/library-tests/dataflow/sources/database/test.rs @@ -55,9 +55,9 @@ mod test_mysql { let _ = conn.query_map( // $ Alert[rust/summary/taint-sources] "SELECT id, name, age FROM person", |values: (i64, String, i32)| -> () { - sink(values.0); // $ MISSING: hasTaintFlow - sink(values.1); // $ MISSING: hasTaintFlow - sink(values.2); // $ MISSING: hasTaintFlow + sink(values.0); // $ hasTaintFlow + sink(values.1); // $ hasTaintFlow + sink(values.2); // $ hasTaintFlow } )?; @@ -71,9 +71,9 @@ mod test_mysql { let id: i64 = row.0; let name: String = row.1; let age: i32 = row.2; - sink(id); // $ MISSING: hasTaintFlow - sink(name); // $ MISSING: hasTaintFlow - sink(age); // $ MISSING: hasTaintFlow + sink(id); // $ hasTaintFlow + sink(name); // $ hasTaintFlow + sink(age); // $ hasTaintFlow acc + 1 })?; @@ -142,9 +142,9 @@ mod test_mysql_async { let _ = conn.query_map( // $ Alert[rust/summary/taint-sources] "SELECT id, name, age FROM person", |values: (i64, String, i32)| -> () { - sink(values.0); // $ MISSING: hasTaintFlow - sink(values.1); // $ MISSING: hasTaintFlow - sink(values.2); // $ MISSING: hasTaintFlow + sink(values.0); // $ hasTaintFlow + sink(values.1); // $ hasTaintFlow + sink(values.2); // $ hasTaintFlow } ).await?; @@ -158,9 +158,9 @@ mod test_mysql_async { let id: i64 = row.0; let name: String = row.1; let age: i32 = row.2; - sink(id); // $ MISSING: hasTaintFlow - sink(name); // $ MISSING: hasTaintFlow - sink(age); // $ MISSING: hasTaintFlow + sink(id); // $ hasTaintFlow + sink(name); // $ hasTaintFlow + sink(age); // $ hasTaintFlow acc + 1 }).await?; diff --git a/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.expected index 00821decfdfb..ac8b8c8c3342 100644 --- a/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.expected @@ -6,53 +6,64 @@ models | 5 | Source: std::env::home_dir; ReturnValue.Field[core::option::Option::Some(0)]; commandargs | | 6 | Source: std::env::var; ReturnValue.Field[core::result::Result::Ok(0)]; environment | | 7 | Source: std::env::var_os; ReturnValue.Field[core::option::Option::Some(0)]; environment | -| 8 | Summary: <_ as core::iter::traits::iterator::Iterator>::collect; Argument[self].Element; ReturnValue.Element; value | -| 9 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 10 | Summary: ::expect; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 11 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 12 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 13 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 14 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 8 | Source: std::env::vars; ReturnValue.Element; environment | +| 9 | Source: std::env::vars_os; ReturnValue.Element; environment | +| 10 | Summary: <_ as core::iter::traits::iterator::Iterator>::collect; Argument[self].Element; ReturnValue.Element; value | +| 11 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 12 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 13 | Summary: ::expect; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 14 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 15 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 16 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 17 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | edges | test.rs:6:10:6:22 | ...::var | test.rs:6:10:6:30 | ...::var(...) | provenance | Src:MaD:6 | | test.rs:7:10:7:25 | ...::var_os | test.rs:7:10:7:33 | ...::var_os(...) | provenance | Src:MaD:7 | | test.rs:9:9:9:12 | var1 | test.rs:12:10:12:13 | var1 | provenance | | | test.rs:9:16:9:28 | ...::var | test.rs:9:16:9:36 | ...::var(...) [Ok] | provenance | Src:MaD:6 | -| test.rs:9:16:9:36 | ...::var(...) [Ok] | test.rs:9:16:9:59 | ... .expect(...) | provenance | MaD:12 | +| test.rs:9:16:9:36 | ...::var(...) [Ok] | test.rs:9:16:9:59 | ... .expect(...) | provenance | MaD:15 | | test.rs:9:16:9:59 | ... .expect(...) | test.rs:9:9:9:12 | var1 | provenance | | | test.rs:10:9:10:12 | var2 | test.rs:13:10:13:13 | var2 | provenance | | | test.rs:10:16:10:31 | ...::var_os | test.rs:10:16:10:39 | ...::var_os(...) [Some] | provenance | Src:MaD:7 | -| test.rs:10:16:10:39 | ...::var_os(...) [Some] | test.rs:10:16:10:48 | ... .unwrap() | provenance | MaD:11 | +| test.rs:10:16:10:39 | ...::var_os(...) [Some] | test.rs:10:16:10:48 | ... .unwrap() | provenance | MaD:14 | | test.rs:10:16:10:48 | ... .unwrap() | test.rs:10:9:10:12 | var2 | provenance | | +| test.rs:15:9:15:20 | TuplePat | test.rs:16:14:16:16 | key | provenance | | +| test.rs:15:9:15:20 | TuplePat | test.rs:17:14:17:18 | value | provenance | | +| test.rs:15:25:15:38 | ...::vars | test.rs:15:25:15:40 | ...::vars(...) [element] | provenance | Src:MaD:8 | +| test.rs:15:25:15:40 | ...::vars(...) [element] | test.rs:15:9:15:20 | TuplePat | provenance | | +| test.rs:20:9:20:20 | TuplePat | test.rs:21:14:21:16 | key | provenance | | +| test.rs:20:9:20:20 | TuplePat | test.rs:22:14:22:18 | value | provenance | | +| test.rs:20:25:20:41 | ...::vars_os | test.rs:20:25:20:43 | ...::vars_os(...) [element] | provenance | Src:MaD:9 | +| test.rs:20:25:20:43 | ...::vars_os(...) [element] | test.rs:20:9:20:20 | TuplePat | provenance | | | test.rs:27:9:27:12 | args [element] | test.rs:28:20:28:23 | args [element] | provenance | | | test.rs:27:9:27:12 | args [element] | test.rs:29:17:29:20 | args [element] | provenance | | | test.rs:27:29:27:42 | ...::args | test.rs:27:29:27:44 | ...::args(...) [element] | provenance | Src:MaD:1 | -| test.rs:27:29:27:44 | ...::args(...) [element] | test.rs:27:29:27:54 | ... .collect() [element] | provenance | MaD:8 | +| test.rs:27:29:27:44 | ...::args(...) [element] | test.rs:27:29:27:54 | ... .collect() [element] | provenance | MaD:10 | | test.rs:27:29:27:54 | ... .collect() [element] | test.rs:27:9:27:12 | args [element] | provenance | | | test.rs:28:9:28:15 | my_path [&ref] | test.rs:34:10:34:16 | my_path | provenance | | | test.rs:28:19:28:26 | &... [&ref] | test.rs:28:9:28:15 | my_path [&ref] | provenance | | -| test.rs:28:20:28:23 | args [element] | test.rs:28:20:28:26 | args[0] | provenance | | +| test.rs:28:20:28:23 | args [element] | test.rs:28:20:28:26 | args[0] | provenance | MaD:12 | | test.rs:28:20:28:26 | args[0] | test.rs:28:19:28:26 | &... [&ref] | provenance | | | test.rs:29:9:29:12 | arg1 [&ref] | test.rs:35:10:35:13 | arg1 | provenance | | | test.rs:29:16:29:23 | &... [&ref] | test.rs:29:9:29:12 | arg1 [&ref] | provenance | | -| test.rs:29:17:29:20 | args [element] | test.rs:29:17:29:23 | args[1] | provenance | | +| test.rs:29:17:29:20 | args [element] | test.rs:29:17:29:23 | args[1] | provenance | MaD:12 | | test.rs:29:17:29:23 | args[1] | test.rs:29:16:29:23 | &... [&ref] | provenance | | | test.rs:30:9:30:12 | arg2 | test.rs:36:10:36:13 | arg2 | provenance | | | test.rs:30:16:30:29 | ...::args | test.rs:30:16:30:31 | ...::args(...) [element] | provenance | Src:MaD:1 | -| test.rs:30:16:30:31 | ...::args(...) [element] | test.rs:30:16:30:38 | ... .nth(...) [Some] | provenance | MaD:9 | -| test.rs:30:16:30:38 | ... .nth(...) [Some] | test.rs:30:16:30:47 | ... .unwrap() | provenance | MaD:11 | +| test.rs:30:16:30:31 | ...::args(...) [element] | test.rs:30:16:30:38 | ... .nth(...) [Some] | provenance | MaD:11 | +| test.rs:30:16:30:38 | ... .nth(...) [Some] | test.rs:30:16:30:47 | ... .unwrap() | provenance | MaD:14 | | test.rs:30:16:30:47 | ... .unwrap() | test.rs:30:9:30:12 | arg2 | provenance | | | test.rs:31:9:31:12 | arg3 | test.rs:37:10:37:13 | arg3 | provenance | | | test.rs:31:16:31:32 | ...::args_os | test.rs:31:16:31:34 | ...::args_os(...) [element] | provenance | Src:MaD:2 | -| test.rs:31:16:31:34 | ...::args_os(...) [element] | test.rs:31:16:31:41 | ... .nth(...) [Some] | provenance | MaD:9 | -| test.rs:31:16:31:41 | ... .nth(...) [Some] | test.rs:31:16:31:50 | ... .unwrap() | provenance | MaD:11 | +| test.rs:31:16:31:34 | ...::args_os(...) [element] | test.rs:31:16:31:41 | ... .nth(...) [Some] | provenance | MaD:11 | +| test.rs:31:16:31:41 | ... .nth(...) [Some] | test.rs:31:16:31:50 | ... .unwrap() | provenance | MaD:14 | | test.rs:31:16:31:50 | ... .unwrap() | test.rs:31:9:31:12 | arg3 | provenance | | | test.rs:32:9:32:12 | arg4 | test.rs:38:10:38:13 | arg4 | provenance | | | test.rs:32:16:32:29 | ...::args | test.rs:32:16:32:31 | ...::args(...) [element] | provenance | Src:MaD:1 | -| test.rs:32:16:32:31 | ...::args(...) [element] | test.rs:32:16:32:38 | ... .nth(...) [Some] | provenance | MaD:9 | -| test.rs:32:16:32:38 | ... .nth(...) [Some] | test.rs:32:16:32:47 | ... .unwrap() | provenance | MaD:11 | -| test.rs:32:16:32:47 | ... .unwrap() | test.rs:32:16:32:64 | ... .parse() [Ok] | provenance | MaD:14 | -| test.rs:32:16:32:64 | ... .parse() [Ok] | test.rs:32:16:32:73 | ... .unwrap() | provenance | MaD:13 | +| test.rs:32:16:32:31 | ...::args(...) [element] | test.rs:32:16:32:38 | ... .nth(...) [Some] | provenance | MaD:11 | +| test.rs:32:16:32:38 | ... .nth(...) [Some] | test.rs:32:16:32:47 | ... .unwrap() | provenance | MaD:14 | +| test.rs:32:16:32:47 | ... .unwrap() | test.rs:32:16:32:64 | ... .parse() [Ok] | provenance | MaD:17 | +| test.rs:32:16:32:64 | ... .parse() [Ok] | test.rs:32:16:32:73 | ... .unwrap() | provenance | MaD:16 | | test.rs:32:16:32:73 | ... .unwrap() | test.rs:32:9:32:12 | arg4 | provenance | | | test.rs:40:9:40:11 | arg | test.rs:41:14:41:16 | arg | provenance | | | test.rs:40:16:40:29 | ...::args | test.rs:40:16:40:31 | ...::args(...) [element] | provenance | Src:MaD:1 | @@ -62,15 +73,15 @@ edges | test.rs:44:16:44:34 | ...::args_os(...) [element] | test.rs:44:9:44:11 | arg | provenance | | | test.rs:50:9:50:11 | dir | test.rs:54:10:54:12 | dir | provenance | | | test.rs:50:15:50:35 | ...::current_dir | test.rs:50:15:50:37 | ...::current_dir(...) [Ok] | provenance | Src:MaD:3 | -| test.rs:50:15:50:37 | ...::current_dir(...) [Ok] | test.rs:50:15:50:54 | ... .expect(...) | provenance | MaD:12 | +| test.rs:50:15:50:37 | ...::current_dir(...) [Ok] | test.rs:50:15:50:54 | ... .expect(...) | provenance | MaD:15 | | test.rs:50:15:50:54 | ... .expect(...) | test.rs:50:9:50:11 | dir | provenance | | | test.rs:51:9:51:11 | exe | test.rs:55:10:55:12 | exe | provenance | | | test.rs:51:15:51:35 | ...::current_exe | test.rs:51:15:51:37 | ...::current_exe(...) [Ok] | provenance | Src:MaD:4 | -| test.rs:51:15:51:37 | ...::current_exe(...) [Ok] | test.rs:51:15:51:54 | ... .expect(...) | provenance | MaD:12 | +| test.rs:51:15:51:37 | ...::current_exe(...) [Ok] | test.rs:51:15:51:54 | ... .expect(...) | provenance | MaD:15 | | test.rs:51:15:51:54 | ... .expect(...) | test.rs:51:9:51:11 | exe | provenance | | | test.rs:52:9:52:12 | home | test.rs:56:10:56:13 | home | provenance | | | test.rs:52:16:52:33 | ...::home_dir | test.rs:52:16:52:35 | ...::home_dir(...) [Some] | provenance | Src:MaD:5 | -| test.rs:52:16:52:35 | ...::home_dir(...) [Some] | test.rs:52:16:52:52 | ... .expect(...) | provenance | MaD:10 | +| test.rs:52:16:52:35 | ...::home_dir(...) [Some] | test.rs:52:16:52:52 | ... .expect(...) | provenance | MaD:13 | | test.rs:52:16:52:52 | ... .expect(...) | test.rs:52:9:52:12 | home | provenance | | nodes | test.rs:6:10:6:22 | ...::var | semmle.label | ...::var | @@ -87,6 +98,16 @@ nodes | test.rs:10:16:10:48 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:12:10:12:13 | var1 | semmle.label | var1 | | test.rs:13:10:13:13 | var2 | semmle.label | var2 | +| test.rs:15:9:15:20 | TuplePat | semmle.label | TuplePat | +| test.rs:15:25:15:38 | ...::vars | semmle.label | ...::vars | +| test.rs:15:25:15:40 | ...::vars(...) [element] | semmle.label | ...::vars(...) [element] | +| test.rs:16:14:16:16 | key | semmle.label | key | +| test.rs:17:14:17:18 | value | semmle.label | value | +| test.rs:20:9:20:20 | TuplePat | semmle.label | TuplePat | +| test.rs:20:25:20:41 | ...::vars_os | semmle.label | ...::vars_os | +| test.rs:20:25:20:43 | ...::vars_os(...) [element] | semmle.label | ...::vars_os(...) [element] | +| test.rs:21:14:21:16 | key | semmle.label | key | +| test.rs:22:14:22:18 | value | semmle.label | value | | test.rs:27:9:27:12 | args [element] | semmle.label | args [element] | | test.rs:27:29:27:42 | ...::args | semmle.label | ...::args | | test.rs:27:29:27:44 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | @@ -151,6 +172,10 @@ testFailures | test.rs:7:10:7:33 | ...::var_os(...) | test.rs:7:10:7:25 | ...::var_os | test.rs:7:10:7:33 | ...::var_os(...) | $@ | test.rs:7:10:7:25 | ...::var_os | ...::var_os | | test.rs:12:10:12:13 | var1 | test.rs:9:16:9:28 | ...::var | test.rs:12:10:12:13 | var1 | $@ | test.rs:9:16:9:28 | ...::var | ...::var | | test.rs:13:10:13:13 | var2 | test.rs:10:16:10:31 | ...::var_os | test.rs:13:10:13:13 | var2 | $@ | test.rs:10:16:10:31 | ...::var_os | ...::var_os | +| test.rs:16:14:16:16 | key | test.rs:15:25:15:38 | ...::vars | test.rs:16:14:16:16 | key | $@ | test.rs:15:25:15:38 | ...::vars | ...::vars | +| test.rs:17:14:17:18 | value | test.rs:15:25:15:38 | ...::vars | test.rs:17:14:17:18 | value | $@ | test.rs:15:25:15:38 | ...::vars | ...::vars | +| test.rs:21:14:21:16 | key | test.rs:20:25:20:41 | ...::vars_os | test.rs:21:14:21:16 | key | $@ | test.rs:20:25:20:41 | ...::vars_os | ...::vars_os | +| test.rs:22:14:22:18 | value | test.rs:20:25:20:41 | ...::vars_os | test.rs:22:14:22:18 | value | $@ | test.rs:20:25:20:41 | ...::vars_os | ...::vars_os | | test.rs:34:10:34:16 | my_path | test.rs:27:29:27:42 | ...::args | test.rs:34:10:34:16 | my_path | $@ | test.rs:27:29:27:42 | ...::args | ...::args | | test.rs:35:10:35:13 | arg1 | test.rs:27:29:27:42 | ...::args | test.rs:35:10:35:13 | arg1 | $@ | test.rs:27:29:27:42 | ...::args | ...::args | | test.rs:36:10:36:13 | arg2 | test.rs:30:16:30:29 | ...::args | test.rs:36:10:36:13 | arg2 | $@ | test.rs:30:16:30:29 | ...::args | ...::args | diff --git a/rust/ql/test/library-tests/dataflow/sources/env/test.rs b/rust/ql/test/library-tests/dataflow/sources/env/test.rs index e02aa7c8f1b2..b5af0b412d3c 100644 --- a/rust/ql/test/library-tests/dataflow/sources/env/test.rs +++ b/rust/ql/test/library-tests/dataflow/sources/env/test.rs @@ -13,13 +13,13 @@ fn test_env_vars() { sink(var2); // $ hasTaintFlow="PATH" for (key, value) in std::env::vars() { // $ Alert[rust/summary/taint-sources] - sink(key); // $ MISSING: hasTaintFlow - sink(value); // $ MISSING: hasTaintFlow + sink(key); // $ hasTaintFlow + sink(value); // $ hasTaintFlow } for (key, value) in std::env::vars_os() { // $ Alert[rust/summary/taint-sources] - sink(key); // $ MISSING: hasTaintFlow - sink(value); // $ MISSING: hasTaintFlow + sink(key); // $ hasTaintFlow + sink(value); // $ hasTaintFlow } } diff --git a/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.expected index 90d01d250d0b..6f012e837a99 100644 --- a/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.expected @@ -10,160 +10,139 @@ models | 9 | Source: ::file_name; ReturnValue; file | | 10 | Source: ::path; ReturnValue; file | | 11 | Source: std::fs::read; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 12 | Source: std::fs::read; ReturnValue; file | -| 13 | Source: std::fs::read_link; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 14 | Source: std::fs::read_to_string; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 15 | Source: std::fs::read_to_string; ReturnValue; file | -| 16 | Source: tokio::fs::read::read; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 17 | Source: tokio::fs::read_link::read_link; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 18 | Source: tokio::fs::read_to_string::read_to_string; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 19 | Summary: <_ as async_std::io::read::ReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | -| 20 | Summary: <_ as async_std::io::read::ReadExt>::read; Argument[self]; Argument[0].Reference; taint | -| 21 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | -| 22 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint | -| 23 | Summary: <_ as std::io::Read>::chain; Argument[0]; ReturnValue; taint | -| 24 | Summary: <_ as std::io::Read>::chain; Argument[self]; ReturnValue; taint | -| 25 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint | -| 26 | Summary: <_ as std::io::Read>::read_exact; Argument[self]; Argument[0].Reference; taint | -| 27 | Summary: <_ as std::io::Read>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 28 | Summary: <_ as std::io::Read>::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 29 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | -| 30 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | -| 31 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self]; Argument[0].Reference; taint | -| 32 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self]; Argument[0].Reference; taint | -| 33 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 34 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 35 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 36 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 37 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 38 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 39 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 40 | Summary: ::read; Argument[self]; Argument[0]; taint | -| 41 | Summary: ::read_to_end; Argument[self]; Argument[0]; taint | -| 42 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | -| 43 | Summary: ::as_path; Argument[self]; ReturnValue; value | +| 12 | Source: std::fs::read_link; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 13 | Source: std::fs::read_to_string; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 14 | Source: tokio::fs::read::read; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 15 | Source: tokio::fs::read_link::read_link; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 16 | Source: tokio::fs::read_to_string::read_to_string; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 17 | Summary: <_ as async_std::io::read::ReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 18 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | +| 19 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint | +| 20 | Summary: <_ as std::io::Read>::chain; Argument[0]; ReturnValue; taint | +| 21 | Summary: <_ as std::io::Read>::chain; Argument[self]; ReturnValue; taint | +| 22 | Summary: <_ as std::io::Read>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 23 | Summary: <_ as std::io::Read>::read_exact; Argument[self].Reference; Argument[0].Reference; taint | +| 24 | Summary: <_ as std::io::Read>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | +| 25 | Summary: <_ as std::io::Read>::read_to_string; Argument[self].Reference; Argument[0].Reference; taint | +| 26 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | +| 27 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 28 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self].Reference; Argument[0].Reference; taint | +| 29 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self].Reference; Argument[0].Reference; taint | +| 30 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 31 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 32 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 33 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | +| 34 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self].Reference; Argument[0].Reference; taint | +| 35 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 36 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 37 | Summary: ::as_path; Argument[self].Reference; ReturnValue.Reference; value | edges | test.rs:12:13:12:18 | buffer | test.rs:13:14:13:19 | buffer | provenance | | -| test.rs:12:31:12:43 | ...::read | test.rs:12:31:12:43 | ...::read [Ok] | provenance | Src:MaD:11 | | test.rs:12:31:12:43 | ...::read | test.rs:12:31:12:55 | ...::read(...) [Ok] | provenance | Src:MaD:11 | -| test.rs:12:31:12:43 | ...::read [Ok] | test.rs:12:31:12:55 | ...::read(...) [Ok] | provenance | MaD:12 | | test.rs:12:31:12:55 | ...::read(...) [Ok] | test.rs:12:31:12:56 | TryExpr | provenance | | | test.rs:12:31:12:56 | TryExpr | test.rs:12:13:12:18 | buffer | provenance | | | test.rs:17:13:17:18 | buffer | test.rs:18:14:18:19 | buffer | provenance | | -| test.rs:17:31:17:38 | ...::read | test.rs:17:31:17:38 | ...::read [Ok] | provenance | Src:MaD:11 | | test.rs:17:31:17:38 | ...::read | test.rs:17:31:17:50 | ...::read(...) [Ok] | provenance | Src:MaD:11 | -| test.rs:17:31:17:38 | ...::read [Ok] | test.rs:17:31:17:50 | ...::read(...) [Ok] | provenance | MaD:12 | | test.rs:17:31:17:50 | ...::read(...) [Ok] | test.rs:17:31:17:51 | TryExpr | provenance | | | test.rs:17:31:17:51 | TryExpr | test.rs:17:13:17:18 | buffer | provenance | | | test.rs:22:13:22:18 | buffer | test.rs:23:14:23:19 | buffer | provenance | | -| test.rs:22:22:22:39 | ...::read_to_string | test.rs:22:22:22:39 | ...::read_to_string [Ok] | provenance | Src:MaD:14 | -| test.rs:22:22:22:39 | ...::read_to_string | test.rs:22:22:22:51 | ...::read_to_string(...) [Ok] | provenance | Src:MaD:14 | -| test.rs:22:22:22:39 | ...::read_to_string [Ok] | test.rs:22:22:22:51 | ...::read_to_string(...) [Ok] | provenance | MaD:15 | +| test.rs:22:22:22:39 | ...::read_to_string | test.rs:22:22:22:51 | ...::read_to_string(...) [Ok] | provenance | Src:MaD:13 | | test.rs:22:22:22:51 | ...::read_to_string(...) [Ok] | test.rs:22:22:22:52 | TryExpr | provenance | | | test.rs:22:22:22:52 | TryExpr | test.rs:22:13:22:18 | buffer | provenance | | | test.rs:29:13:29:16 | path | test.rs:30:14:30:17 | path | provenance | | -| test.rs:29:13:29:16 | path | test.rs:30:14:30:25 | path.clone() | provenance | MaD:21 | | test.rs:29:13:29:16 | path | test.rs:31:14:31:17 | path | provenance | | -| test.rs:29:13:29:16 | path | test.rs:31:14:31:25 | path.clone() | provenance | MaD:21 | | test.rs:29:13:29:16 | path | test.rs:41:14:41:17 | path | provenance | | | test.rs:29:20:29:27 | e.path() | test.rs:29:13:29:16 | path | provenance | | | test.rs:29:22:29:25 | path | test.rs:29:20:29:27 | e.path() | provenance | Src:MaD:4 MaD:4 | -| test.rs:30:14:30:17 | path | test.rs:30:14:30:25 | path.clone() | provenance | MaD:21 | -| test.rs:31:14:31:17 | path | test.rs:31:14:31:25 | path.clone() | provenance | MaD:21 | -| test.rs:31:14:31:25 | path.clone() | test.rs:31:14:31:35 | ... .as_path() | provenance | MaD:43 | +| test.rs:30:14:30:17 | path | test.rs:30:14:30:25 | path.clone() | provenance | MaD:18 | +| test.rs:31:14:31:17 | path | test.rs:31:14:31:25 | path.clone() | provenance | MaD:18 | +| test.rs:31:14:31:25 | path.clone() | test.rs:31:14:31:35 | ... .as_path() | provenance | MaD:37 | | test.rs:43:13:43:21 | file_name | test.rs:44:14:44:22 | file_name | provenance | | -| test.rs:43:13:43:21 | file_name | test.rs:44:14:44:30 | file_name.clone() | provenance | MaD:21 | | test.rs:43:13:43:21 | file_name | test.rs:49:14:49:22 | file_name | provenance | | | test.rs:43:25:43:37 | e.file_name() | test.rs:43:13:43:21 | file_name | provenance | | | test.rs:43:27:43:35 | file_name | test.rs:43:25:43:37 | e.file_name() | provenance | Src:MaD:3 MaD:3 | -| test.rs:44:14:44:22 | file_name | test.rs:44:14:44:30 | file_name.clone() | provenance | MaD:21 | +| test.rs:44:14:44:22 | file_name | test.rs:44:14:44:30 | file_name.clone() | provenance | MaD:18 | | test.rs:65:13:65:18 | target | test.rs:66:14:66:19 | target | provenance | | -| test.rs:65:22:65:34 | ...::read_link | test.rs:65:22:65:49 | ...::read_link(...) [Ok] | provenance | Src:MaD:13 | +| test.rs:65:22:65:34 | ...::read_link | test.rs:65:22:65:49 | ...::read_link(...) [Ok] | provenance | Src:MaD:12 | | test.rs:65:22:65:49 | ...::read_link(...) [Ok] | test.rs:65:22:65:50 | TryExpr | provenance | | | test.rs:65:22:65:50 | TryExpr | test.rs:65:13:65:18 | target | provenance | | | test.rs:74:13:74:18 | buffer | test.rs:75:14:75:19 | buffer | provenance | | -| test.rs:74:31:74:45 | ...::read | test.rs:74:31:74:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:16 | +| test.rs:74:31:74:45 | ...::read | test.rs:74:31:74:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:14 | | test.rs:74:31:74:57 | ...::read(...) [future, Ok] | test.rs:74:31:74:63 | await ... [Ok] | provenance | | | test.rs:74:31:74:63 | await ... [Ok] | test.rs:74:31:74:64 | TryExpr | provenance | | | test.rs:74:31:74:64 | TryExpr | test.rs:74:13:74:18 | buffer | provenance | | | test.rs:79:13:79:18 | buffer | test.rs:80:14:80:19 | buffer | provenance | | -| test.rs:79:31:79:45 | ...::read | test.rs:79:31:79:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:16 | +| test.rs:79:31:79:45 | ...::read | test.rs:79:31:79:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:14 | | test.rs:79:31:79:57 | ...::read(...) [future, Ok] | test.rs:79:31:79:63 | await ... [Ok] | provenance | | | test.rs:79:31:79:63 | await ... [Ok] | test.rs:79:31:79:64 | TryExpr | provenance | | | test.rs:79:31:79:64 | TryExpr | test.rs:79:13:79:18 | buffer | provenance | | | test.rs:84:13:84:18 | buffer | test.rs:85:14:85:19 | buffer | provenance | | -| test.rs:84:22:84:46 | ...::read_to_string | test.rs:84:22:84:58 | ...::read_to_string(...) [future, Ok] | provenance | Src:MaD:18 | +| test.rs:84:22:84:46 | ...::read_to_string | test.rs:84:22:84:58 | ...::read_to_string(...) [future, Ok] | provenance | Src:MaD:16 | | test.rs:84:22:84:58 | ...::read_to_string(...) [future, Ok] | test.rs:84:22:84:64 | await ... [Ok] | provenance | | | test.rs:84:22:84:64 | await ... [Ok] | test.rs:84:22:84:65 | TryExpr | provenance | | | test.rs:84:22:84:65 | TryExpr | test.rs:84:13:84:18 | buffer | provenance | | | test.rs:90:13:90:16 | path | test.rs:92:14:92:17 | path | provenance | | | test.rs:90:20:90:31 | entry.path() | test.rs:90:13:90:16 | path | provenance | | | test.rs:90:26:90:29 | path | test.rs:90:20:90:31 | entry.path() | provenance | Src:MaD:10 MaD:10 | -| test.rs:90:26:90:29 | path | test.rs:90:20:90:31 | entry.path() | provenance | Src:MaD:10 MaD:10 | | test.rs:91:13:91:21 | file_name | test.rs:93:14:93:22 | file_name | provenance | | | test.rs:91:25:91:41 | entry.file_name() | test.rs:91:13:91:21 | file_name | provenance | | | test.rs:91:31:91:39 | file_name | test.rs:91:25:91:41 | entry.file_name() | provenance | Src:MaD:9 MaD:9 | -| test.rs:91:31:91:39 | file_name | test.rs:91:25:91:41 | entry.file_name() | provenance | Src:MaD:9 MaD:9 | | test.rs:97:13:97:18 | target | test.rs:98:14:98:19 | target | provenance | | -| test.rs:97:22:97:41 | ...::read_link | test.rs:97:22:97:56 | ...::read_link(...) [future, Ok] | provenance | Src:MaD:17 | +| test.rs:97:22:97:41 | ...::read_link | test.rs:97:22:97:56 | ...::read_link(...) [future, Ok] | provenance | Src:MaD:15 | | test.rs:97:22:97:56 | ...::read_link(...) [future, Ok] | test.rs:97:22:97:62 | await ... [Ok] | provenance | | | test.rs:97:22:97:62 | await ... [Ok] | test.rs:97:22:97:63 | TryExpr | provenance | | | test.rs:97:22:97:63 | TryExpr | test.rs:97:13:97:18 | target | provenance | | -| test.rs:107:9:107:16 | mut file | test.rs:111:32:111:42 | [post] &mut buffer | provenance | MaD:40 | -| test.rs:107:9:107:16 | mut file | test.rs:111:32:111:42 | [post] &mut buffer [&ref] | provenance | MaD:25 | -| test.rs:107:9:107:16 | mut file | test.rs:117:39:117:49 | [post] &mut buffer | provenance | MaD:41 | -| test.rs:107:9:107:16 | mut file | test.rs:117:39:117:49 | [post] &mut buffer [&ref] | provenance | MaD:27 | -| test.rs:107:9:107:16 | mut file | test.rs:123:42:123:52 | [post] &mut buffer | provenance | MaD:42 | -| test.rs:107:9:107:16 | mut file | test.rs:123:42:123:52 | [post] &mut buffer [&ref] | provenance | MaD:28 | -| test.rs:107:9:107:16 | mut file | test.rs:129:25:129:35 | [post] &mut buffer [&ref] | provenance | MaD:26 | -| test.rs:107:9:107:16 | mut file | test.rs:133:17:133:28 | file.bytes() | provenance | MaD:22 | +| test.rs:107:9:107:16 | mut file | test.rs:111:22:111:25 | file | provenance | | +| test.rs:107:9:107:16 | mut file | test.rs:117:22:117:25 | file | provenance | | +| test.rs:107:9:107:16 | mut file | test.rs:123:22:123:25 | file | provenance | | +| test.rs:107:9:107:16 | mut file | test.rs:129:9:129:12 | file | provenance | | +| test.rs:107:9:107:16 | mut file | test.rs:133:17:133:20 | file | provenance | | | test.rs:107:20:107:38 | ...::open | test.rs:107:20:107:50 | ...::open(...) [Ok] | provenance | Src:MaD:5 | | test.rs:107:20:107:50 | ...::open(...) [Ok] | test.rs:107:20:107:51 | TryExpr | provenance | | | test.rs:107:20:107:51 | TryExpr | test.rs:107:9:107:16 | mut file | provenance | | -| test.rs:111:32:111:42 | [post] &mut buffer | test.rs:112:15:112:20 | buffer | provenance | | +| test.rs:111:22:111:25 | file | test.rs:111:32:111:42 | [post] &mut buffer [&ref] | provenance | MaD:22 | | test.rs:111:32:111:42 | [post] &mut buffer [&ref] | test.rs:111:37:111:42 | [post] buffer | provenance | | | test.rs:111:37:111:42 | [post] buffer | test.rs:112:15:112:20 | buffer | provenance | | | test.rs:112:15:112:20 | buffer | test.rs:112:14:112:20 | &buffer | provenance | | -| test.rs:117:39:117:49 | [post] &mut buffer | test.rs:118:15:118:20 | buffer | provenance | | +| test.rs:117:22:117:25 | file | test.rs:117:39:117:49 | [post] &mut buffer [&ref] | provenance | MaD:24 | | test.rs:117:39:117:49 | [post] &mut buffer [&ref] | test.rs:117:44:117:49 | [post] buffer | provenance | | | test.rs:117:44:117:49 | [post] buffer | test.rs:118:15:118:20 | buffer | provenance | | | test.rs:118:15:118:20 | buffer | test.rs:118:14:118:20 | &buffer | provenance | | -| test.rs:123:42:123:52 | [post] &mut buffer | test.rs:124:15:124:20 | buffer | provenance | | +| test.rs:123:22:123:25 | file | test.rs:123:42:123:52 | [post] &mut buffer [&ref] | provenance | MaD:25 | | test.rs:123:42:123:52 | [post] &mut buffer [&ref] | test.rs:123:47:123:52 | [post] buffer | provenance | | | test.rs:123:47:123:52 | [post] buffer | test.rs:124:15:124:20 | buffer | provenance | | | test.rs:124:15:124:20 | buffer | test.rs:124:14:124:20 | &buffer | provenance | | +| test.rs:129:9:129:12 | file | test.rs:129:25:129:35 | [post] &mut buffer [&ref] | provenance | MaD:23 | | test.rs:129:25:129:35 | [post] &mut buffer [&ref] | test.rs:129:30:129:35 | [post] buffer | provenance | | | test.rs:129:30:129:35 | [post] buffer | test.rs:130:15:130:20 | buffer | provenance | | | test.rs:130:15:130:20 | buffer | test.rs:130:14:130:20 | &buffer | provenance | | +| test.rs:133:17:133:20 | file | test.rs:133:17:133:28 | file.bytes() | provenance | MaD:19 | | test.rs:133:17:133:28 | file.bytes() | test.rs:134:14:134:17 | byte | provenance | | -| test.rs:140:13:140:18 | mut f1 | test.rs:142:30:142:40 | [post] &mut buffer | provenance | MaD:40 | -| test.rs:140:13:140:18 | mut f1 | test.rs:142:30:142:40 | [post] &mut buffer [&ref] | provenance | MaD:25 | -| test.rs:140:22:140:63 | ... .open(...) [Ok] | test.rs:140:22:140:72 | ... .unwrap() | provenance | MaD:39 | +| test.rs:140:13:140:18 | mut f1 | test.rs:142:22:142:23 | f1 | provenance | | +| test.rs:140:22:140:63 | ... .open(...) [Ok] | test.rs:140:22:140:72 | ... .unwrap() | provenance | MaD:36 | | test.rs:140:22:140:72 | ... .unwrap() | test.rs:140:13:140:18 | mut f1 | provenance | | | test.rs:140:50:140:53 | open | test.rs:140:22:140:63 | ... .open(...) [Ok] | provenance | Src:MaD:6 | -| test.rs:142:30:142:40 | [post] &mut buffer | test.rs:143:15:143:20 | buffer | provenance | | +| test.rs:142:22:142:23 | f1 | test.rs:142:30:142:40 | [post] &mut buffer [&ref] | provenance | MaD:22 | | test.rs:142:30:142:40 | [post] &mut buffer [&ref] | test.rs:142:35:142:40 | [post] buffer | provenance | | | test.rs:142:35:142:40 | [post] buffer | test.rs:143:15:143:20 | buffer | provenance | | | test.rs:143:15:143:20 | buffer | test.rs:143:14:143:20 | &buffer | provenance | | -| test.rs:147:13:147:18 | mut f2 | test.rs:149:30:149:40 | [post] &mut buffer | provenance | MaD:40 | -| test.rs:147:13:147:18 | mut f2 | test.rs:149:30:149:40 | [post] &mut buffer [&ref] | provenance | MaD:25 | -| test.rs:147:22:147:80 | ... .open(...) [Ok] | test.rs:147:22:147:89 | ... .unwrap() | provenance | MaD:39 | +| test.rs:147:13:147:18 | mut f2 | test.rs:149:22:149:23 | f2 | provenance | | +| test.rs:147:22:147:80 | ... .open(...) [Ok] | test.rs:147:22:147:89 | ... .unwrap() | provenance | MaD:36 | | test.rs:147:22:147:89 | ... .unwrap() | test.rs:147:13:147:18 | mut f2 | provenance | | | test.rs:147:67:147:70 | open | test.rs:147:22:147:80 | ... .open(...) [Ok] | provenance | Src:MaD:6 | -| test.rs:149:30:149:40 | [post] &mut buffer | test.rs:150:15:150:20 | buffer | provenance | | +| test.rs:149:22:149:23 | f2 | test.rs:149:30:149:40 | [post] &mut buffer [&ref] | provenance | MaD:22 | | test.rs:149:30:149:40 | [post] &mut buffer [&ref] | test.rs:149:35:149:40 | [post] buffer | provenance | | | test.rs:149:35:149:40 | [post] buffer | test.rs:150:15:150:20 | buffer | provenance | | | test.rs:150:15:150:20 | buffer | test.rs:150:14:150:20 | &buffer | provenance | | -| test.rs:154:13:154:18 | mut f3 | test.rs:156:30:156:40 | [post] &mut buffer | provenance | MaD:40 | -| test.rs:154:13:154:18 | mut f3 | test.rs:156:30:156:40 | [post] &mut buffer [&ref] | provenance | MaD:25 | -| test.rs:154:22:154:114 | ... .open(...) [Ok] | test.rs:154:22:154:123 | ... .unwrap() | provenance | MaD:39 | +| test.rs:154:13:154:18 | mut f3 | test.rs:156:22:156:23 | f3 | provenance | | +| test.rs:154:22:154:114 | ... .open(...) [Ok] | test.rs:154:22:154:123 | ... .unwrap() | provenance | MaD:36 | | test.rs:154:22:154:123 | ... .unwrap() | test.rs:154:13:154:18 | mut f3 | provenance | | | test.rs:154:101:154:104 | open | test.rs:154:22:154:114 | ... .open(...) [Ok] | provenance | Src:MaD:6 | -| test.rs:156:30:156:40 | [post] &mut buffer | test.rs:157:15:157:20 | buffer | provenance | | +| test.rs:156:22:156:23 | f3 | test.rs:156:30:156:40 | [post] &mut buffer [&ref] | provenance | MaD:22 | | test.rs:156:30:156:40 | [post] &mut buffer [&ref] | test.rs:156:35:156:40 | [post] buffer | provenance | | | test.rs:156:35:156:40 | [post] buffer | test.rs:157:15:157:20 | buffer | provenance | | | test.rs:157:15:157:20 | buffer | test.rs:157:14:157:20 | &buffer | provenance | | -| test.rs:164:13:164:17 | file1 | test.rs:166:26:166:43 | file1.chain(...) | provenance | MaD:24 | +| test.rs:164:13:164:17 | file1 | test.rs:166:26:166:30 | file1 | provenance | | | test.rs:164:21:164:39 | ...::open | test.rs:164:21:164:51 | ...::open(...) [Ok] | provenance | Src:MaD:5 | | test.rs:164:21:164:51 | ...::open(...) [Ok] | test.rs:164:21:164:52 | TryExpr | provenance | | | test.rs:164:21:164:52 | TryExpr | test.rs:164:13:164:17 | file1 | provenance | | @@ -171,111 +150,118 @@ edges | test.rs:165:21:165:39 | ...::open | test.rs:165:21:165:59 | ...::open(...) [Ok] | provenance | Src:MaD:5 | | test.rs:165:21:165:59 | ...::open(...) [Ok] | test.rs:165:21:165:60 | TryExpr | provenance | | | test.rs:165:21:165:60 | TryExpr | test.rs:165:13:165:17 | file2 | provenance | | -| test.rs:166:13:166:22 | mut reader | test.rs:167:31:167:41 | [post] &mut buffer [&ref] | provenance | MaD:28 | +| test.rs:166:13:166:22 | mut reader | test.rs:167:9:167:14 | reader | provenance | | +| test.rs:166:26:166:30 | file1 | test.rs:166:26:166:43 | file1.chain(...) | provenance | MaD:21 | | test.rs:166:26:166:43 | file1.chain(...) | test.rs:166:13:166:22 | mut reader | provenance | | -| test.rs:166:38:166:42 | file2 | test.rs:166:26:166:43 | file1.chain(...) | provenance | MaD:23 | +| test.rs:166:38:166:42 | file2 | test.rs:166:26:166:43 | file1.chain(...) | provenance | MaD:20 | +| test.rs:167:9:167:14 | reader | test.rs:167:31:167:41 | [post] &mut buffer [&ref] | provenance | MaD:25 | | test.rs:167:31:167:41 | [post] &mut buffer [&ref] | test.rs:167:36:167:41 | [post] buffer | provenance | | | test.rs:167:36:167:41 | [post] buffer | test.rs:168:15:168:20 | buffer | provenance | | | test.rs:168:15:168:20 | buffer | test.rs:168:14:168:20 | &buffer | provenance | | -| test.rs:173:13:173:17 | file1 | test.rs:174:26:174:40 | file1.take(...) | provenance | MaD:29 | +| test.rs:173:13:173:17 | file1 | test.rs:174:26:174:30 | file1 | provenance | | | test.rs:173:21:173:39 | ...::open | test.rs:173:21:173:51 | ...::open(...) [Ok] | provenance | Src:MaD:5 | | test.rs:173:21:173:51 | ...::open(...) [Ok] | test.rs:173:21:173:52 | TryExpr | provenance | | | test.rs:173:21:173:52 | TryExpr | test.rs:173:13:173:17 | file1 | provenance | | -| test.rs:174:13:174:22 | mut reader | test.rs:175:31:175:41 | [post] &mut buffer [&ref] | provenance | MaD:28 | +| test.rs:174:13:174:22 | mut reader | test.rs:175:9:175:14 | reader | provenance | | +| test.rs:174:26:174:30 | file1 | test.rs:174:26:174:40 | file1.take(...) | provenance | MaD:26 | | test.rs:174:26:174:40 | file1.take(...) | test.rs:174:13:174:22 | mut reader | provenance | | +| test.rs:175:9:175:14 | reader | test.rs:175:31:175:41 | [post] &mut buffer [&ref] | provenance | MaD:25 | | test.rs:175:31:175:41 | [post] &mut buffer [&ref] | test.rs:175:36:175:41 | [post] buffer | provenance | | | test.rs:175:36:175:41 | [post] buffer | test.rs:176:15:176:20 | buffer | provenance | | | test.rs:176:15:176:20 | buffer | test.rs:176:14:176:20 | &buffer | provenance | | -| test.rs:185:9:185:16 | mut file | test.rs:189:32:189:42 | [post] &mut buffer [&ref] | provenance | MaD:30 | -| test.rs:185:9:185:16 | mut file | test.rs:195:39:195:49 | [post] &mut buffer [&ref] | provenance | MaD:36 | -| test.rs:185:9:185:16 | mut file | test.rs:201:42:201:52 | [post] &mut buffer [&ref] | provenance | MaD:37 | -| test.rs:185:9:185:16 | mut file | test.rs:207:25:207:35 | [post] &mut buffer [&ref] | provenance | MaD:32 | -| test.rs:185:9:185:16 | mut file | test.rs:212:18:212:31 | file.read_u8() [future, Ok] | provenance | MaD:38 | -| test.rs:185:9:185:16 | mut file | test.rs:213:18:213:32 | file.read_i16() [future, Ok] | provenance | MaD:34 | -| test.rs:185:9:185:16 | mut file | test.rs:214:18:214:32 | file.read_f32() [future, Ok] | provenance | MaD:33 | -| test.rs:185:9:185:16 | mut file | test.rs:215:18:215:35 | file.read_i64_le() [future, Ok] | provenance | MaD:35 | -| test.rs:185:9:185:16 | mut file | test.rs:224:23:224:33 | [post] &mut buffer [&ref] | provenance | MaD:31 | +| test.rs:185:9:185:16 | mut file | test.rs:189:22:189:25 | file | provenance | | +| test.rs:185:9:185:16 | mut file | test.rs:195:22:195:25 | file | provenance | | +| test.rs:185:9:185:16 | mut file | test.rs:201:22:201:25 | file | provenance | | +| test.rs:185:9:185:16 | mut file | test.rs:207:9:207:12 | file | provenance | | +| test.rs:185:9:185:16 | mut file | test.rs:212:18:212:21 | file | provenance | | +| test.rs:185:9:185:16 | mut file | test.rs:213:18:213:21 | file | provenance | | +| test.rs:185:9:185:16 | mut file | test.rs:214:18:214:21 | file | provenance | | +| test.rs:185:9:185:16 | mut file | test.rs:215:18:215:21 | file | provenance | | +| test.rs:185:9:185:16 | mut file | test.rs:224:9:224:12 | file | provenance | | | test.rs:185:20:185:40 | ...::open | test.rs:185:20:185:52 | ...::open(...) [future, Ok] | provenance | Src:MaD:7 | | test.rs:185:20:185:52 | ...::open(...) [future, Ok] | test.rs:185:20:185:58 | await ... [Ok] | provenance | | | test.rs:185:20:185:58 | await ... [Ok] | test.rs:185:20:185:59 | TryExpr | provenance | | | test.rs:185:20:185:59 | TryExpr | test.rs:185:9:185:16 | mut file | provenance | | +| test.rs:189:22:189:25 | file | test.rs:189:32:189:42 | [post] &mut buffer [&ref] | provenance | MaD:27 | | test.rs:189:32:189:42 | [post] &mut buffer [&ref] | test.rs:189:37:189:42 | [post] buffer | provenance | | | test.rs:189:37:189:42 | [post] buffer | test.rs:190:15:190:20 | buffer | provenance | | | test.rs:190:15:190:20 | buffer | test.rs:190:14:190:20 | &buffer | provenance | | +| test.rs:195:22:195:25 | file | test.rs:195:39:195:49 | [post] &mut buffer [&ref] | provenance | MaD:33 | | test.rs:195:39:195:49 | [post] &mut buffer [&ref] | test.rs:195:44:195:49 | [post] buffer | provenance | | | test.rs:195:44:195:49 | [post] buffer | test.rs:196:15:196:20 | buffer | provenance | | | test.rs:196:15:196:20 | buffer | test.rs:196:14:196:20 | &buffer | provenance | | +| test.rs:201:22:201:25 | file | test.rs:201:42:201:52 | [post] &mut buffer [&ref] | provenance | MaD:34 | | test.rs:201:42:201:52 | [post] &mut buffer [&ref] | test.rs:201:47:201:52 | [post] buffer | provenance | | | test.rs:201:47:201:52 | [post] buffer | test.rs:202:15:202:20 | buffer | provenance | | | test.rs:202:15:202:20 | buffer | test.rs:202:14:202:20 | &buffer | provenance | | +| test.rs:207:9:207:12 | file | test.rs:207:25:207:35 | [post] &mut buffer [&ref] | provenance | MaD:29 | | test.rs:207:25:207:35 | [post] &mut buffer [&ref] | test.rs:207:30:207:35 | [post] buffer | provenance | | | test.rs:207:30:207:35 | [post] buffer | test.rs:208:15:208:20 | buffer | provenance | | | test.rs:208:15:208:20 | buffer | test.rs:208:14:208:20 | &buffer | provenance | | | test.rs:212:13:212:14 | v1 | test.rs:216:14:216:15 | v1 | provenance | | +| test.rs:212:18:212:21 | file | test.rs:212:18:212:31 | file.read_u8() [future, Ok] | provenance | MaD:35 | | test.rs:212:18:212:31 | file.read_u8() [future, Ok] | test.rs:212:18:212:37 | await ... [Ok] | provenance | | | test.rs:212:18:212:37 | await ... [Ok] | test.rs:212:18:212:38 | TryExpr | provenance | | | test.rs:212:18:212:38 | TryExpr | test.rs:212:13:212:14 | v1 | provenance | | | test.rs:213:13:213:14 | v2 | test.rs:217:14:217:15 | v2 | provenance | | +| test.rs:213:18:213:21 | file | test.rs:213:18:213:32 | file.read_i16() [future, Ok] | provenance | MaD:31 | | test.rs:213:18:213:32 | file.read_i16() [future, Ok] | test.rs:213:18:213:38 | await ... [Ok] | provenance | | | test.rs:213:18:213:38 | await ... [Ok] | test.rs:213:18:213:39 | TryExpr | provenance | | | test.rs:213:18:213:39 | TryExpr | test.rs:213:13:213:14 | v2 | provenance | | | test.rs:214:13:214:14 | v3 | test.rs:218:14:218:15 | v3 | provenance | | +| test.rs:214:18:214:21 | file | test.rs:214:18:214:32 | file.read_f32() [future, Ok] | provenance | MaD:30 | | test.rs:214:18:214:32 | file.read_f32() [future, Ok] | test.rs:214:18:214:38 | await ... [Ok] | provenance | | | test.rs:214:18:214:38 | await ... [Ok] | test.rs:214:18:214:39 | TryExpr | provenance | | | test.rs:214:18:214:39 | TryExpr | test.rs:214:13:214:14 | v3 | provenance | | | test.rs:215:13:215:14 | v4 | test.rs:219:14:219:15 | v4 | provenance | | +| test.rs:215:18:215:21 | file | test.rs:215:18:215:35 | file.read_i64_le() [future, Ok] | provenance | MaD:32 | | test.rs:215:18:215:35 | file.read_i64_le() [future, Ok] | test.rs:215:18:215:41 | await ... [Ok] | provenance | | | test.rs:215:18:215:41 | await ... [Ok] | test.rs:215:18:215:42 | TryExpr | provenance | | | test.rs:215:18:215:42 | TryExpr | test.rs:215:13:215:14 | v4 | provenance | | +| test.rs:224:9:224:12 | file | test.rs:224:23:224:33 | [post] &mut buffer [&ref] | provenance | MaD:28 | | test.rs:224:23:224:33 | [post] &mut buffer [&ref] | test.rs:224:28:224:33 | [post] buffer | provenance | | | test.rs:224:28:224:33 | [post] buffer | test.rs:225:15:225:20 | buffer | provenance | | | test.rs:225:15:225:20 | buffer | test.rs:225:14:225:20 | &buffer | provenance | | -| test.rs:231:13:231:18 | mut f1 | test.rs:233:30:233:40 | [post] &mut buffer [&ref] | provenance | MaD:30 | +| test.rs:231:13:231:18 | mut f1 | test.rs:233:22:233:23 | f1 | provenance | | | test.rs:231:22:231:65 | ... .open(...) [future, Ok] | test.rs:231:22:231:71 | await ... [Ok] | provenance | | | test.rs:231:22:231:71 | await ... [Ok] | test.rs:231:22:231:72 | TryExpr | provenance | | | test.rs:231:22:231:72 | TryExpr | test.rs:231:13:231:18 | mut f1 | provenance | | | test.rs:231:52:231:55 | open | test.rs:231:22:231:65 | ... .open(...) [future, Ok] | provenance | Src:MaD:8 | +| test.rs:233:22:233:23 | f1 | test.rs:233:30:233:40 | [post] &mut buffer [&ref] | provenance | MaD:27 | | test.rs:233:30:233:40 | [post] &mut buffer [&ref] | test.rs:233:35:233:40 | [post] buffer | provenance | | | test.rs:233:35:233:40 | [post] buffer | test.rs:234:15:234:20 | buffer | provenance | | | test.rs:234:15:234:20 | buffer | test.rs:234:14:234:20 | &buffer | provenance | | | test.rs:262:9:262:16 | mut file | test.rs:266:22:266:25 | file | provenance | | -| test.rs:262:9:262:16 | mut file | test.rs:266:32:266:42 | [post] &mut buffer [&ref] | provenance | MaD:19 | -| test.rs:262:9:262:16 | mut file | test.rs:266:32:266:42 | [post] &mut buffer [&ref] | provenance | MaD:20 | | test.rs:262:20:262:44 | ...::open | test.rs:262:20:262:56 | ...::open(...) [future, Ok] | provenance | Src:MaD:1 | | test.rs:262:20:262:56 | ...::open(...) [future, Ok] | test.rs:262:20:262:62 | await ... [Ok] | provenance | | | test.rs:262:20:262:62 | await ... [Ok] | test.rs:262:20:262:63 | TryExpr | provenance | | | test.rs:262:20:262:63 | TryExpr | test.rs:262:9:262:16 | mut file | provenance | | -| test.rs:266:22:266:25 | file | test.rs:266:32:266:42 | [post] &mut buffer [&ref] | provenance | MaD:19 | +| test.rs:266:22:266:25 | file | test.rs:266:32:266:42 | [post] &mut buffer [&ref] | provenance | MaD:17 | | test.rs:266:32:266:42 | [post] &mut buffer [&ref] | test.rs:266:37:266:42 | [post] buffer | provenance | | | test.rs:266:37:266:42 | [post] buffer | test.rs:267:15:267:20 | buffer | provenance | | | test.rs:267:15:267:20 | buffer | test.rs:267:14:267:20 | &buffer | provenance | | | test.rs:273:13:273:18 | mut f1 | test.rs:275:22:275:23 | f1 | provenance | | -| test.rs:273:13:273:18 | mut f1 | test.rs:275:30:275:40 | [post] &mut buffer [&ref] | provenance | MaD:19 | -| test.rs:273:13:273:18 | mut f1 | test.rs:275:30:275:40 | [post] &mut buffer [&ref] | provenance | MaD:20 | | test.rs:273:22:273:69 | ... .open(...) [future, Ok] | test.rs:273:22:273:75 | await ... [Ok] | provenance | | | test.rs:273:22:273:75 | await ... [Ok] | test.rs:273:22:273:76 | TryExpr | provenance | | | test.rs:273:22:273:76 | TryExpr | test.rs:273:13:273:18 | mut f1 | provenance | | | test.rs:273:56:273:59 | open | test.rs:273:22:273:69 | ... .open(...) [future, Ok] | provenance | Src:MaD:2 | -| test.rs:275:22:275:23 | f1 | test.rs:275:30:275:40 | [post] &mut buffer [&ref] | provenance | MaD:19 | +| test.rs:275:22:275:23 | f1 | test.rs:275:30:275:40 | [post] &mut buffer [&ref] | provenance | MaD:17 | | test.rs:275:30:275:40 | [post] &mut buffer [&ref] | test.rs:275:35:275:40 | [post] buffer | provenance | | | test.rs:275:35:275:40 | [post] buffer | test.rs:276:15:276:20 | buffer | provenance | | | test.rs:276:15:276:20 | buffer | test.rs:276:14:276:20 | &buffer | provenance | | nodes | test.rs:12:13:12:18 | buffer | semmle.label | buffer | | test.rs:12:31:12:43 | ...::read | semmle.label | ...::read | -| test.rs:12:31:12:43 | ...::read [Ok] | semmle.label | ...::read [Ok] | | test.rs:12:31:12:55 | ...::read(...) [Ok] | semmle.label | ...::read(...) [Ok] | | test.rs:12:31:12:56 | TryExpr | semmle.label | TryExpr | | test.rs:13:14:13:19 | buffer | semmle.label | buffer | | test.rs:17:13:17:18 | buffer | semmle.label | buffer | | test.rs:17:31:17:38 | ...::read | semmle.label | ...::read | -| test.rs:17:31:17:38 | ...::read [Ok] | semmle.label | ...::read [Ok] | | test.rs:17:31:17:50 | ...::read(...) [Ok] | semmle.label | ...::read(...) [Ok] | | test.rs:17:31:17:51 | TryExpr | semmle.label | TryExpr | | test.rs:18:14:18:19 | buffer | semmle.label | buffer | | test.rs:22:13:22:18 | buffer | semmle.label | buffer | | test.rs:22:22:22:39 | ...::read_to_string | semmle.label | ...::read_to_string | -| test.rs:22:22:22:39 | ...::read_to_string [Ok] | semmle.label | ...::read_to_string [Ok] | | test.rs:22:22:22:51 | ...::read_to_string(...) [Ok] | semmle.label | ...::read_to_string(...) [Ok] | | test.rs:22:22:22:52 | TryExpr | semmle.label | TryExpr | | test.rs:23:14:23:19 | buffer | semmle.label | buffer | @@ -320,11 +306,9 @@ nodes | test.rs:90:13:90:16 | path | semmle.label | path | | test.rs:90:20:90:31 | entry.path() | semmle.label | entry.path() | | test.rs:90:26:90:29 | path | semmle.label | path | -| test.rs:90:26:90:29 | path | semmle.label | path | | test.rs:91:13:91:21 | file_name | semmle.label | file_name | | test.rs:91:25:91:41 | entry.file_name() | semmle.label | entry.file_name() | | test.rs:91:31:91:39 | file_name | semmle.label | file_name | -| test.rs:91:31:91:39 | file_name | semmle.label | file_name | | test.rs:92:14:92:17 | path | semmle.label | path | | test.rs:93:14:93:22 | file_name | semmle.label | file_name | | test.rs:97:13:97:18 | target | semmle.label | target | @@ -337,32 +321,34 @@ nodes | test.rs:107:20:107:38 | ...::open | semmle.label | ...::open | | test.rs:107:20:107:50 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | | test.rs:107:20:107:51 | TryExpr | semmle.label | TryExpr | -| test.rs:111:32:111:42 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:111:22:111:25 | file | semmle.label | file | | test.rs:111:32:111:42 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:111:37:111:42 | [post] buffer | semmle.label | [post] buffer | | test.rs:112:14:112:20 | &buffer | semmle.label | &buffer | | test.rs:112:15:112:20 | buffer | semmle.label | buffer | -| test.rs:117:39:117:49 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:117:22:117:25 | file | semmle.label | file | | test.rs:117:39:117:49 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:117:44:117:49 | [post] buffer | semmle.label | [post] buffer | | test.rs:118:14:118:20 | &buffer | semmle.label | &buffer | | test.rs:118:15:118:20 | buffer | semmle.label | buffer | -| test.rs:123:42:123:52 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:123:22:123:25 | file | semmle.label | file | | test.rs:123:42:123:52 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:123:47:123:52 | [post] buffer | semmle.label | [post] buffer | | test.rs:124:14:124:20 | &buffer | semmle.label | &buffer | | test.rs:124:15:124:20 | buffer | semmle.label | buffer | +| test.rs:129:9:129:12 | file | semmle.label | file | | test.rs:129:25:129:35 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:129:30:129:35 | [post] buffer | semmle.label | [post] buffer | | test.rs:130:14:130:20 | &buffer | semmle.label | &buffer | | test.rs:130:15:130:20 | buffer | semmle.label | buffer | +| test.rs:133:17:133:20 | file | semmle.label | file | | test.rs:133:17:133:28 | file.bytes() | semmle.label | file.bytes() | | test.rs:134:14:134:17 | byte | semmle.label | byte | | test.rs:140:13:140:18 | mut f1 | semmle.label | mut f1 | | test.rs:140:22:140:63 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] | | test.rs:140:22:140:72 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:140:50:140:53 | open | semmle.label | open | -| test.rs:142:30:142:40 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:142:22:142:23 | f1 | semmle.label | f1 | | test.rs:142:30:142:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:142:35:142:40 | [post] buffer | semmle.label | [post] buffer | | test.rs:143:14:143:20 | &buffer | semmle.label | &buffer | @@ -371,7 +357,7 @@ nodes | test.rs:147:22:147:80 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] | | test.rs:147:22:147:89 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:147:67:147:70 | open | semmle.label | open | -| test.rs:149:30:149:40 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:149:22:149:23 | f2 | semmle.label | f2 | | test.rs:149:30:149:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:149:35:149:40 | [post] buffer | semmle.label | [post] buffer | | test.rs:150:14:150:20 | &buffer | semmle.label | &buffer | @@ -380,7 +366,7 @@ nodes | test.rs:154:22:154:114 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] | | test.rs:154:22:154:123 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:154:101:154:104 | open | semmle.label | open | -| test.rs:156:30:156:40 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:156:22:156:23 | f3 | semmle.label | f3 | | test.rs:156:30:156:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:156:35:156:40 | [post] buffer | semmle.label | [post] buffer | | test.rs:157:14:157:20 | &buffer | semmle.label | &buffer | @@ -394,8 +380,10 @@ nodes | test.rs:165:21:165:59 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | | test.rs:165:21:165:60 | TryExpr | semmle.label | TryExpr | | test.rs:166:13:166:22 | mut reader | semmle.label | mut reader | +| test.rs:166:26:166:30 | file1 | semmle.label | file1 | | test.rs:166:26:166:43 | file1.chain(...) | semmle.label | file1.chain(...) | | test.rs:166:38:166:42 | file2 | semmle.label | file2 | +| test.rs:167:9:167:14 | reader | semmle.label | reader | | test.rs:167:31:167:41 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:167:36:167:41 | [post] buffer | semmle.label | [post] buffer | | test.rs:168:14:168:20 | &buffer | semmle.label | &buffer | @@ -405,7 +393,9 @@ nodes | test.rs:173:21:173:51 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | | test.rs:173:21:173:52 | TryExpr | semmle.label | TryExpr | | test.rs:174:13:174:22 | mut reader | semmle.label | mut reader | +| test.rs:174:26:174:30 | file1 | semmle.label | file1 | | test.rs:174:26:174:40 | file1.take(...) | semmle.label | file1.take(...) | +| test.rs:175:9:175:14 | reader | semmle.label | reader | | test.rs:175:31:175:41 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:175:36:175:41 | [post] buffer | semmle.label | [post] buffer | | test.rs:176:14:176:20 | &buffer | semmle.label | &buffer | @@ -415,35 +405,43 @@ nodes | test.rs:185:20:185:52 | ...::open(...) [future, Ok] | semmle.label | ...::open(...) [future, Ok] | | test.rs:185:20:185:58 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:185:20:185:59 | TryExpr | semmle.label | TryExpr | +| test.rs:189:22:189:25 | file | semmle.label | file | | test.rs:189:32:189:42 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:189:37:189:42 | [post] buffer | semmle.label | [post] buffer | | test.rs:190:14:190:20 | &buffer | semmle.label | &buffer | | test.rs:190:15:190:20 | buffer | semmle.label | buffer | +| test.rs:195:22:195:25 | file | semmle.label | file | | test.rs:195:39:195:49 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:195:44:195:49 | [post] buffer | semmle.label | [post] buffer | | test.rs:196:14:196:20 | &buffer | semmle.label | &buffer | | test.rs:196:15:196:20 | buffer | semmle.label | buffer | +| test.rs:201:22:201:25 | file | semmle.label | file | | test.rs:201:42:201:52 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:201:47:201:52 | [post] buffer | semmle.label | [post] buffer | | test.rs:202:14:202:20 | &buffer | semmle.label | &buffer | | test.rs:202:15:202:20 | buffer | semmle.label | buffer | +| test.rs:207:9:207:12 | file | semmle.label | file | | test.rs:207:25:207:35 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:207:30:207:35 | [post] buffer | semmle.label | [post] buffer | | test.rs:208:14:208:20 | &buffer | semmle.label | &buffer | | test.rs:208:15:208:20 | buffer | semmle.label | buffer | | test.rs:212:13:212:14 | v1 | semmle.label | v1 | +| test.rs:212:18:212:21 | file | semmle.label | file | | test.rs:212:18:212:31 | file.read_u8() [future, Ok] | semmle.label | file.read_u8() [future, Ok] | | test.rs:212:18:212:37 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:212:18:212:38 | TryExpr | semmle.label | TryExpr | | test.rs:213:13:213:14 | v2 | semmle.label | v2 | +| test.rs:213:18:213:21 | file | semmle.label | file | | test.rs:213:18:213:32 | file.read_i16() [future, Ok] | semmle.label | file.read_i16() [future, Ok] | | test.rs:213:18:213:38 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:213:18:213:39 | TryExpr | semmle.label | TryExpr | | test.rs:214:13:214:14 | v3 | semmle.label | v3 | +| test.rs:214:18:214:21 | file | semmle.label | file | | test.rs:214:18:214:32 | file.read_f32() [future, Ok] | semmle.label | file.read_f32() [future, Ok] | | test.rs:214:18:214:38 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:214:18:214:39 | TryExpr | semmle.label | TryExpr | | test.rs:215:13:215:14 | v4 | semmle.label | v4 | +| test.rs:215:18:215:21 | file | semmle.label | file | | test.rs:215:18:215:35 | file.read_i64_le() [future, Ok] | semmle.label | file.read_i64_le() [future, Ok] | | test.rs:215:18:215:41 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:215:18:215:42 | TryExpr | semmle.label | TryExpr | @@ -451,6 +449,7 @@ nodes | test.rs:217:14:217:15 | v2 | semmle.label | v2 | | test.rs:218:14:218:15 | v3 | semmle.label | v3 | | test.rs:219:14:219:15 | v4 | semmle.label | v4 | +| test.rs:224:9:224:12 | file | semmle.label | file | | test.rs:224:23:224:33 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:224:28:224:33 | [post] buffer | semmle.label | [post] buffer | | test.rs:225:14:225:20 | &buffer | semmle.label | &buffer | @@ -460,6 +459,7 @@ nodes | test.rs:231:22:231:71 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:231:22:231:72 | TryExpr | semmle.label | TryExpr | | test.rs:231:52:231:55 | open | semmle.label | open | +| test.rs:233:22:233:23 | f1 | semmle.label | f1 | | test.rs:233:30:233:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:233:35:233:40 | [post] buffer | semmle.label | [post] buffer | | test.rs:234:14:234:20 | &buffer | semmle.label | &buffer | @@ -500,8 +500,6 @@ testFailures | test.rs:80:14:80:19 | buffer | test.rs:79:31:79:45 | ...::read | test.rs:80:14:80:19 | buffer | $@ | test.rs:79:31:79:45 | ...::read | ...::read | | test.rs:85:14:85:19 | buffer | test.rs:84:22:84:46 | ...::read_to_string | test.rs:85:14:85:19 | buffer | $@ | test.rs:84:22:84:46 | ...::read_to_string | ...::read_to_string | | test.rs:92:14:92:17 | path | test.rs:90:26:90:29 | path | test.rs:92:14:92:17 | path | $@ | test.rs:90:26:90:29 | path | path | -| test.rs:92:14:92:17 | path | test.rs:90:26:90:29 | path | test.rs:92:14:92:17 | path | $@ | test.rs:90:26:90:29 | path | path | -| test.rs:93:14:93:22 | file_name | test.rs:91:31:91:39 | file_name | test.rs:93:14:93:22 | file_name | $@ | test.rs:91:31:91:39 | file_name | file_name | | test.rs:93:14:93:22 | file_name | test.rs:91:31:91:39 | file_name | test.rs:93:14:93:22 | file_name | $@ | test.rs:91:31:91:39 | file_name | file_name | | test.rs:98:14:98:19 | target | test.rs:97:22:97:41 | ...::read_link | test.rs:98:14:98:19 | target | $@ | test.rs:97:22:97:41 | ...::read_link | ...::read_link | | test.rs:112:14:112:20 | &buffer | test.rs:107:20:107:38 | ...::open | test.rs:112:14:112:20 | &buffer | $@ | test.rs:107:20:107:38 | ...::open | ...::open | diff --git a/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.expected index f7687e025d78..0fb17232a399 100644 --- a/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.expected @@ -1,9 +1,6 @@ | test.rs:12:31:12:43 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:12:31:12:43 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:17:31:17:38 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:17:31:17:38 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:22:22:22:39 | ...::read_to_string | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:22:22:22:39 | ...::read_to_string | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:26:18:26:29 | ...::read_dir | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:29:22:29:25 | path | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:43:27:43:35 | file_name | Flow source 'FileSource' of type file (DEFAULT). | @@ -15,8 +12,6 @@ | test.rs:79:31:79:45 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:84:22:84:46 | ...::read_to_string | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:90:26:90:29 | path | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:90:26:90:29 | path | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:91:31:91:39 | file_name | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:91:31:91:39 | file_name | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:97:22:97:41 | ...::read_link | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:107:20:107:38 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/net/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/net/CONSISTENCY/PathResolutionConsistency.expected index ca5c386b720c..5dfb62baf4b3 100644 --- a/rust/ql/test/library-tests/dataflow/sources/net/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/dataflow/sources/net/CONSISTENCY/PathResolutionConsistency.expected @@ -1,4 +1,4 @@ -multipleCallTargets +multipleResolvedTargets | test.rs:59:62:59:77 | ...::from(...) | | test.rs:66:58:66:73 | ...::from(...) | | test.rs:389:30:389:67 | pinned.poll_read(...) | diff --git a/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected index d29b19fe58a4..2b39cf16c428 100644 --- a/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected @@ -6,67 +6,64 @@ models | 5 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | | 6 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | | 7 | Source: reqwest::get; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 8 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint | -| 9 | Summary: <_ as futures_io::if_std::AsyncRead>::poll_read; Argument[self].Reference; Argument[1].Reference; taint | -| 10 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 11 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | -| 12 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | +| 8 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 9 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint | +| 10 | Summary: <_ as futures_io::if_std::AsyncRead>::poll_read; Argument[self].Reference; Argument[1].Reference; taint | +| 11 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 12 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | | 13 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | -| 14 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | -| 15 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | -| 16 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | -| 17 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | -| 18 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 19 | Summary: <_ as std::io::BufRead>::read_line; Argument[self]; Argument[0].Reference; taint | -| 20 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint | -| 21 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | -| 22 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | -| 23 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 24 | Summary: ::new; Argument[0].Reference; ReturnValue; value | -| 25 | Summary: ::new; Argument[0]; ReturnValue; value | -| 26 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 27 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 28 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 29 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 30 | Summary: ::chunk; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 31 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 32 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 33 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 34 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 35 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 36 | Summary: ::peek; Argument[self]; Argument[0].Reference; taint | -| 37 | Summary: ::try_read; Argument[self]; Argument[0].Reference; taint | -| 38 | Summary: ::try_read_buf; Argument[self]; Argument[0].Reference; taint | +| 14 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 15 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | +| 16 | Summary: <_ as std::io::BufRead>::read_line; Argument[self].Reference; Argument[0].Reference; taint | +| 17 | Summary: <_ as std::io::Read>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 18 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | +| 19 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 20 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 21 | Summary: ::new; Argument[0].Reference; ReturnValue; value | +| 22 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | +| 23 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 24 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 25 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 26 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 27 | Summary: ::chunk; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 28 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 29 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 30 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 31 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 32 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 33 | Summary: ::peek; Argument[self].Reference; Argument[0].Reference; taint | +| 34 | Summary: ::try_read; Argument[self].Reference; Argument[0].Reference; taint | +| 35 | Summary: ::try_read_buf; Argument[self].Reference; Argument[0].Reference; taint | edges | test.rs:11:9:11:22 | remote_string1 | test.rs:12:10:12:23 | remote_string1 | provenance | | | test.rs:11:26:11:47 | ...::get | test.rs:11:26:11:62 | ...::get(...) [Ok] | provenance | Src:MaD:6 | | test.rs:11:26:11:62 | ...::get(...) [Ok] | test.rs:11:26:11:63 | TryExpr | provenance | | -| test.rs:11:26:11:63 | TryExpr | test.rs:11:26:11:70 | ... .text() [Ok] | provenance | MaD:33 | +| test.rs:11:26:11:63 | TryExpr | test.rs:11:26:11:70 | ... .text() [Ok] | provenance | MaD:30 | | test.rs:11:26:11:70 | ... .text() [Ok] | test.rs:11:26:11:71 | TryExpr | provenance | | | test.rs:11:26:11:71 | TryExpr | test.rs:11:9:11:22 | remote_string1 | provenance | | | test.rs:14:9:14:22 | remote_string2 | test.rs:15:10:15:23 | remote_string2 | provenance | | | test.rs:14:26:14:47 | ...::get | test.rs:14:26:14:62 | ...::get(...) [Ok] | provenance | Src:MaD:6 | -| test.rs:14:26:14:62 | ...::get(...) [Ok] | test.rs:14:26:14:71 | ... .unwrap() | provenance | MaD:26 | -| test.rs:14:26:14:71 | ... .unwrap() | test.rs:14:26:14:78 | ... .text() [Ok] | provenance | MaD:33 | -| test.rs:14:26:14:78 | ... .text() [Ok] | test.rs:14:26:14:87 | ... .unwrap() | provenance | MaD:26 | +| test.rs:14:26:14:62 | ...::get(...) [Ok] | test.rs:14:26:14:71 | ... .unwrap() | provenance | MaD:23 | +| test.rs:14:26:14:71 | ... .unwrap() | test.rs:14:26:14:78 | ... .text() [Ok] | provenance | MaD:30 | +| test.rs:14:26:14:78 | ... .text() [Ok] | test.rs:14:26:14:87 | ... .unwrap() | provenance | MaD:23 | | test.rs:14:26:14:87 | ... .unwrap() | test.rs:14:9:14:22 | remote_string2 | provenance | | | test.rs:17:9:17:22 | remote_string3 | test.rs:18:10:18:23 | remote_string3 | provenance | | | test.rs:17:26:17:47 | ...::get | test.rs:17:26:17:62 | ...::get(...) [Ok] | provenance | Src:MaD:6 | -| test.rs:17:26:17:62 | ...::get(...) [Ok] | test.rs:17:26:17:71 | ... .unwrap() | provenance | MaD:26 | -| test.rs:17:26:17:71 | ... .unwrap() | test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:34 | -| test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | test.rs:17:26:17:107 | ... .unwrap() | provenance | MaD:26 | +| test.rs:17:26:17:62 | ...::get(...) [Ok] | test.rs:17:26:17:71 | ... .unwrap() | provenance | MaD:23 | +| test.rs:17:26:17:71 | ... .unwrap() | test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:31 | +| test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | test.rs:17:26:17:107 | ... .unwrap() | provenance | MaD:23 | | test.rs:17:26:17:107 | ... .unwrap() | test.rs:17:9:17:22 | remote_string3 | provenance | | | test.rs:20:9:20:22 | remote_string4 | test.rs:21:10:21:23 | remote_string4 | provenance | | | test.rs:20:26:20:47 | ...::get | test.rs:20:26:20:62 | ...::get(...) [Ok] | provenance | Src:MaD:6 | -| test.rs:20:26:20:62 | ...::get(...) [Ok] | test.rs:20:26:20:71 | ... .unwrap() | provenance | MaD:26 | -| test.rs:20:26:20:71 | ... .unwrap() | test.rs:20:26:20:79 | ... .bytes() [Ok] | provenance | MaD:32 | -| test.rs:20:26:20:79 | ... .bytes() [Ok] | test.rs:20:26:20:88 | ... .unwrap() | provenance | MaD:26 | +| test.rs:20:26:20:62 | ...::get(...) [Ok] | test.rs:20:26:20:71 | ... .unwrap() | provenance | MaD:23 | +| test.rs:20:26:20:71 | ... .unwrap() | test.rs:20:26:20:79 | ... .bytes() [Ok] | provenance | MaD:29 | +| test.rs:20:26:20:79 | ... .bytes() [Ok] | test.rs:20:26:20:88 | ... .unwrap() | provenance | MaD:23 | | test.rs:20:26:20:88 | ... .unwrap() | test.rs:20:9:20:22 | remote_string4 | provenance | | | test.rs:23:9:23:22 | remote_string5 | test.rs:24:10:24:23 | remote_string5 | provenance | | | test.rs:23:26:23:37 | ...::get | test.rs:23:26:23:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:7 | | test.rs:23:26:23:52 | ...::get(...) [future, Ok] | test.rs:23:26:23:58 | await ... [Ok] | provenance | | | test.rs:23:26:23:58 | await ... [Ok] | test.rs:23:26:23:59 | TryExpr | provenance | | -| test.rs:23:26:23:59 | TryExpr | test.rs:23:26:23:66 | ... .text() [future, Ok] | provenance | MaD:31 | +| test.rs:23:26:23:59 | TryExpr | test.rs:23:26:23:66 | ... .text() [future, Ok] | provenance | MaD:28 | | test.rs:23:26:23:66 | ... .text() [future, Ok] | test.rs:23:26:23:72 | await ... [Ok] | provenance | | | test.rs:23:26:23:72 | await ... [Ok] | test.rs:23:26:23:73 | TryExpr | provenance | | | test.rs:23:26:23:73 | TryExpr | test.rs:23:9:23:22 | remote_string5 | provenance | | @@ -74,21 +71,23 @@ edges | test.rs:26:26:26:37 | ...::get | test.rs:26:26:26:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:7 | | test.rs:26:26:26:52 | ...::get(...) [future, Ok] | test.rs:26:26:26:58 | await ... [Ok] | provenance | | | test.rs:26:26:26:58 | await ... [Ok] | test.rs:26:26:26:59 | TryExpr | provenance | | -| test.rs:26:26:26:59 | TryExpr | test.rs:26:26:26:67 | ... .bytes() [future, Ok] | provenance | MaD:29 | +| test.rs:26:26:26:59 | TryExpr | test.rs:26:26:26:67 | ... .bytes() [future, Ok] | provenance | MaD:26 | | test.rs:26:26:26:67 | ... .bytes() [future, Ok] | test.rs:26:26:26:73 | await ... [Ok] | provenance | | | test.rs:26:26:26:73 | await ... [Ok] | test.rs:26:26:26:74 | TryExpr | provenance | | | test.rs:26:26:26:74 | TryExpr | test.rs:26:9:26:22 | remote_string6 | provenance | | -| test.rs:29:9:29:20 | mut request1 | test.rs:30:10:30:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:30 | -| test.rs:29:9:29:20 | mut request1 | test.rs:31:29:31:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:30 | +| test.rs:29:9:29:20 | mut request1 | test.rs:30:10:30:17 | request1 | provenance | | +| test.rs:29:9:29:20 | mut request1 | test.rs:31:29:31:36 | request1 | provenance | | | test.rs:29:24:29:35 | ...::get | test.rs:29:24:29:50 | ...::get(...) [future, Ok] | provenance | Src:MaD:7 | | test.rs:29:24:29:50 | ...::get(...) [future, Ok] | test.rs:29:24:29:56 | await ... [Ok] | provenance | | | test.rs:29:24:29:56 | await ... [Ok] | test.rs:29:24:29:57 | TryExpr | provenance | | | test.rs:29:24:29:57 | TryExpr | test.rs:29:9:29:20 | mut request1 | provenance | | +| test.rs:30:10:30:17 | request1 | test.rs:30:10:30:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:27 | | test.rs:30:10:30:25 | request1.chunk() [future, Ok, Some] | test.rs:30:10:30:31 | await ... [Ok, Some] | provenance | | | test.rs:30:10:30:31 | await ... [Ok, Some] | test.rs:30:10:30:32 | TryExpr [Some] | provenance | | -| test.rs:30:10:30:32 | TryExpr [Some] | test.rs:30:10:30:41 | ... .unwrap() | provenance | MaD:23 | +| test.rs:30:10:30:32 | TryExpr [Some] | test.rs:30:10:30:41 | ... .unwrap() | provenance | MaD:20 | | test.rs:31:15:31:25 | Some(...) [Some] | test.rs:31:20:31:24 | chunk | provenance | | | test.rs:31:20:31:24 | chunk | test.rs:32:14:32:18 | chunk | provenance | | +| test.rs:31:29:31:36 | request1 | test.rs:31:29:31:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:27 | | test.rs:31:29:31:44 | request1.chunk() [future, Ok, Some] | test.rs:31:29:31:50 | await ... [Ok, Some] | provenance | | | test.rs:31:29:31:50 | await ... [Ok, Some] | test.rs:31:29:31:51 | TryExpr [Some] | provenance | | | test.rs:31:29:31:51 | TryExpr [Some] | test.rs:31:15:31:25 | Some(...) [Some] | provenance | | @@ -105,44 +104,53 @@ edges | test.rs:67:24:67:58 | TryExpr | test.rs:67:9:67:20 | mut response | provenance | | | test.rs:67:31:67:42 | send_request | test.rs:67:24:67:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:2 | | test.rs:68:11:68:18 | response | test.rs:68:10:68:18 | &response | provenance | | -| test.rs:155:13:155:22 | mut stream | test.rs:162:29:162:39 | [post] &mut buffer [&ref] | provenance | MaD:20 | +| test.rs:155:13:155:22 | mut stream | test.rs:162:17:162:22 | stream | provenance | | | test.rs:155:26:155:53 | ...::connect | test.rs:155:26:155:62 | ...::connect(...) [Ok] | provenance | Src:MaD:3 | | test.rs:155:26:155:62 | ...::connect(...) [Ok] | test.rs:155:26:155:63 | TryExpr | provenance | | | test.rs:155:26:155:63 | TryExpr | test.rs:155:13:155:22 | mut stream | provenance | | +| test.rs:162:17:162:22 | stream | test.rs:162:29:162:39 | [post] &mut buffer [&ref] | provenance | MaD:17 | | test.rs:162:29:162:39 | [post] &mut buffer [&ref] | test.rs:162:34:162:39 | [post] buffer | provenance | | | test.rs:162:34:162:39 | [post] buffer | test.rs:165:15:165:20 | buffer | provenance | | -| test.rs:162:34:162:39 | [post] buffer | test.rs:166:14:166:22 | buffer[0] | provenance | | +| test.rs:162:34:162:39 | [post] buffer | test.rs:166:14:166:19 | buffer | provenance | | | test.rs:165:15:165:20 | buffer | test.rs:165:14:165:20 | &buffer | provenance | | +| test.rs:166:14:166:19 | buffer | test.rs:166:14:166:22 | buffer[0] | provenance | MaD:8 | | test.rs:174:13:174:22 | mut stream | test.rs:182:58:182:63 | stream | provenance | | | test.rs:174:26:174:61 | ...::connect_timeout | test.rs:174:26:174:105 | ...::connect_timeout(...) [Ok] | provenance | Src:MaD:4 | | test.rs:174:26:174:105 | ...::connect_timeout(...) [Ok] | test.rs:174:26:174:106 | TryExpr | provenance | | | test.rs:174:26:174:106 | TryExpr | test.rs:174:13:174:22 | mut stream | provenance | | -| test.rs:182:21:182:30 | mut reader | test.rs:185:44:185:52 | [post] &mut line [&ref] | provenance | MaD:19 | -| test.rs:182:34:182:64 | ...::new(...) | test.rs:182:34:182:74 | ... .take(...) | provenance | MaD:21 | +| test.rs:182:21:182:30 | mut reader | test.rs:185:27:185:32 | reader | provenance | | +| test.rs:182:34:182:64 | ...::new(...) | test.rs:182:34:182:74 | ... .take(...) | provenance | MaD:18 | | test.rs:182:34:182:74 | ... .take(...) | test.rs:182:21:182:30 | mut reader | provenance | | -| test.rs:182:58:182:63 | stream | test.rs:182:34:182:64 | ...::new(...) | provenance | MaD:35 | +| test.rs:182:58:182:63 | stream | test.rs:182:34:182:64 | ...::new(...) | provenance | MaD:32 | +| test.rs:185:27:185:32 | reader | test.rs:185:44:185:52 | [post] &mut line [&ref] | provenance | MaD:16 | | test.rs:185:44:185:52 | [post] &mut line [&ref] | test.rs:185:49:185:52 | [post] line | provenance | | | test.rs:185:49:185:52 | [post] line | test.rs:192:35:192:38 | line | provenance | | | test.rs:192:35:192:38 | line | test.rs:192:34:192:38 | &line | provenance | | -| test.rs:224:9:224:24 | mut tokio_stream | test.rs:232:35:232:46 | [post] &mut buffer1 [&ref] | provenance | MaD:36 | -| test.rs:224:9:224:24 | mut tokio_stream | test.rs:236:36:236:47 | [post] &mut buffer2 [&ref] | provenance | MaD:22 | -| test.rs:224:9:224:24 | mut tokio_stream | test.rs:252:41:252:51 | [post] &mut buffer [&ref] | provenance | MaD:37 | -| test.rs:224:9:224:24 | mut tokio_stream | test.rs:275:45:275:55 | [post] &mut buffer [&ref] | provenance | MaD:38 | +| test.rs:224:9:224:24 | mut tokio_stream | test.rs:232:17:232:28 | tokio_stream | provenance | | +| test.rs:224:9:224:24 | mut tokio_stream | test.rs:236:18:236:29 | tokio_stream | provenance | | +| test.rs:224:9:224:24 | mut tokio_stream | test.rs:252:19:252:30 | tokio_stream | provenance | | +| test.rs:224:9:224:24 | mut tokio_stream | test.rs:275:19:275:30 | tokio_stream | provenance | | | test.rs:224:28:224:57 | ...::connect | test.rs:224:28:224:66 | ...::connect(...) [future, Ok] | provenance | Src:MaD:5 | | test.rs:224:28:224:66 | ...::connect(...) [future, Ok] | test.rs:224:28:224:72 | await ... [Ok] | provenance | | | test.rs:224:28:224:72 | await ... [Ok] | test.rs:224:28:224:73 | TryExpr | provenance | | | test.rs:224:28:224:73 | TryExpr | test.rs:224:9:224:24 | mut tokio_stream | provenance | | +| test.rs:232:17:232:28 | tokio_stream | test.rs:232:35:232:46 | [post] &mut buffer1 [&ref] | provenance | MaD:33 | | test.rs:232:35:232:46 | [post] &mut buffer1 [&ref] | test.rs:232:40:232:46 | [post] buffer1 | provenance | | | test.rs:232:40:232:46 | [post] buffer1 | test.rs:239:15:239:21 | buffer1 | provenance | | -| test.rs:232:40:232:46 | [post] buffer1 | test.rs:240:14:240:23 | buffer1[0] | provenance | | +| test.rs:232:40:232:46 | [post] buffer1 | test.rs:240:14:240:20 | buffer1 | provenance | | +| test.rs:236:18:236:29 | tokio_stream | test.rs:236:36:236:47 | [post] &mut buffer2 [&ref] | provenance | MaD:19 | | test.rs:236:36:236:47 | [post] &mut buffer2 [&ref] | test.rs:236:41:236:47 | [post] buffer2 | provenance | | | test.rs:236:41:236:47 | [post] buffer2 | test.rs:243:15:243:21 | buffer2 | provenance | | -| test.rs:236:41:236:47 | [post] buffer2 | test.rs:244:14:244:23 | buffer2[0] | provenance | | +| test.rs:236:41:236:47 | [post] buffer2 | test.rs:244:14:244:20 | buffer2 | provenance | | | test.rs:239:15:239:21 | buffer1 | test.rs:239:14:239:21 | &buffer1 | provenance | | +| test.rs:240:14:240:20 | buffer1 | test.rs:240:14:240:23 | buffer1[0] | provenance | MaD:8 | | test.rs:243:15:243:21 | buffer2 | test.rs:243:14:243:21 | &buffer2 | provenance | | +| test.rs:244:14:244:20 | buffer2 | test.rs:244:14:244:23 | buffer2[0] | provenance | MaD:8 | +| test.rs:252:19:252:30 | tokio_stream | test.rs:252:41:252:51 | [post] &mut buffer [&ref] | provenance | MaD:34 | | test.rs:252:41:252:51 | [post] &mut buffer [&ref] | test.rs:252:46:252:51 | [post] buffer | provenance | | | test.rs:252:46:252:51 | [post] buffer | test.rs:259:27:259:32 | buffer | provenance | | | test.rs:259:27:259:32 | buffer | test.rs:259:26:259:32 | &buffer | provenance | | +| test.rs:275:19:275:30 | tokio_stream | test.rs:275:45:275:55 | [post] &mut buffer [&ref] | provenance | MaD:35 | | test.rs:275:45:275:55 | [post] &mut buffer [&ref] | test.rs:275:50:275:55 | [post] buffer | provenance | | | test.rs:275:50:275:55 | [post] buffer | test.rs:282:27:282:32 | buffer | provenance | | | test.rs:282:27:282:32 | buffer | test.rs:282:26:282:32 | &buffer | provenance | | @@ -157,86 +165,80 @@ edges | test.rs:380:13:380:22 | mut reader | test.rs:386:44:386:49 | reader | provenance | | | test.rs:380:13:380:22 | mut reader | test.rs:399:68:399:73 | reader | provenance | | | test.rs:380:13:380:22 | mut reader | test.rs:403:31:403:36 | reader | provenance | | -| test.rs:380:13:380:22 | mut reader | test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | provenance | MaD:15 | -| test.rs:380:13:380:22 | mut reader | test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | provenance | MaD:16 | | test.rs:380:13:380:22 | mut reader | test.rs:408:55:408:60 | reader | provenance | | | test.rs:380:26:380:60 | connector.connect(...) [future, Ok] | test.rs:380:26:380:66 | await ... [Ok] | provenance | | | test.rs:380:26:380:66 | await ... [Ok] | test.rs:380:26:380:67 | TryExpr | provenance | | | test.rs:380:26:380:67 | TryExpr | test.rs:380:13:380:22 | mut reader | provenance | | -| test.rs:380:57:380:59 | tcp | test.rs:380:26:380:60 | connector.connect(...) [future, Ok] | provenance | MaD:27 | +| test.rs:380:57:380:59 | tcp | test.rs:380:26:380:60 | connector.connect(...) [future, Ok] | provenance | MaD:24 | | test.rs:381:15:381:20 | reader | test.rs:381:14:381:20 | &reader | provenance | | | test.rs:386:17:386:26 | mut pinned | test.rs:387:19:387:24 | pinned | provenance | | -| test.rs:386:17:386:26 | mut pinned | test.rs:389:56:389:66 | [post] &mut buffer [&ref] | provenance | MaD:9 | -| test.rs:386:17:386:26 | mut pinned [&ref] | test.rs:387:19:387:24 | pinned [&ref] | provenance | | -| test.rs:386:17:386:26 | mut pinned [&ref] | test.rs:389:56:389:66 | [post] &mut buffer [&ref] | provenance | MaD:9 | +| test.rs:386:17:386:26 | mut pinned | test.rs:389:30:389:35 | pinned | provenance | | +| test.rs:386:17:386:26 | mut pinned [Pin, &ref] | test.rs:387:19:387:24 | pinned [Pin, &ref] | provenance | | | test.rs:386:30:386:50 | ...::new(...) | test.rs:386:17:386:26 | mut pinned | provenance | | -| test.rs:386:30:386:50 | ...::new(...) [&ref] | test.rs:386:17:386:26 | mut pinned [&ref] | provenance | | -| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) | provenance | MaD:24 | -| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) [&ref] | provenance | MaD:25 | +| test.rs:386:30:386:50 | ...::new(...) [Pin, &ref] | test.rs:386:17:386:26 | mut pinned [Pin, &ref] | provenance | | +| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) | provenance | MaD:21 | +| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) [Pin, &ref] | provenance | MaD:22 | | test.rs:386:44:386:49 | reader | test.rs:386:39:386:49 | &mut reader [&ref] | provenance | | | test.rs:387:19:387:24 | pinned | test.rs:387:18:387:24 | &pinned | provenance | | -| test.rs:387:19:387:24 | pinned [&ref] | test.rs:387:18:387:24 | &pinned | provenance | | +| test.rs:387:19:387:24 | pinned [Pin, &ref] | test.rs:387:18:387:24 | &pinned | provenance | | +| test.rs:389:30:389:35 | pinned | test.rs:389:56:389:66 | [post] &mut buffer [&ref] | provenance | MaD:10 | | test.rs:389:56:389:66 | [post] &mut buffer [&ref] | test.rs:389:61:389:66 | [post] buffer | provenance | | | test.rs:389:61:389:66 | [post] buffer | test.rs:391:23:391:28 | buffer | provenance | | +| test.rs:389:61:389:66 | [post] buffer | test.rs:392:23:392:28 | buffer | provenance | | | test.rs:389:61:389:66 | [post] buffer | test.rs:392:23:392:33 | buffer[...] | provenance | | | test.rs:391:23:391:28 | buffer | test.rs:391:22:391:28 | &buffer | provenance | | +| test.rs:392:23:392:28 | buffer | test.rs:392:23:392:33 | buffer[...] | provenance | MaD:8 | | test.rs:392:23:392:33 | buffer[...] | test.rs:392:22:392:33 | &... | provenance | | -| test.rs:399:63:399:73 | &mut reader [&ref] | test.rs:399:76:399:87 | [post] &mut buffer1 [&ref] | provenance | MaD:15 | +| test.rs:399:63:399:73 | &mut reader [&ref] | test.rs:399:76:399:87 | [post] &mut buffer1 [&ref] | provenance | MaD:14 | | test.rs:399:68:399:73 | reader | test.rs:399:63:399:73 | &mut reader [&ref] | provenance | | | test.rs:399:76:399:87 | [post] &mut buffer1 [&ref] | test.rs:399:81:399:87 | [post] buffer1 | provenance | | +| test.rs:399:81:399:87 | [post] buffer1 | test.rs:400:19:400:25 | buffer1 | provenance | | | test.rs:399:81:399:87 | [post] buffer1 | test.rs:400:19:400:40 | buffer1[...] | provenance | | +| test.rs:400:19:400:25 | buffer1 | test.rs:400:19:400:40 | buffer1[...] | provenance | MaD:8 | | test.rs:400:19:400:40 | buffer1[...] | test.rs:400:18:400:40 | &... | provenance | | -| test.rs:403:31:403:36 | reader | test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | provenance | MaD:15 | +| test.rs:403:31:403:36 | reader | test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | provenance | MaD:14 | | test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | test.rs:403:48:403:54 | [post] buffer2 | provenance | | +| test.rs:403:48:403:54 | [post] buffer2 | test.rs:405:19:405:25 | buffer2 | provenance | | | test.rs:403:48:403:54 | [post] buffer2 | test.rs:405:19:405:40 | buffer2[...] | provenance | | +| test.rs:405:19:405:25 | buffer2 | test.rs:405:19:405:40 | buffer2[...] | provenance | MaD:8 | | test.rs:405:19:405:40 | buffer2[...] | test.rs:405:18:405:40 | &... | provenance | | | test.rs:408:13:408:23 | mut reader2 | test.rs:409:15:409:21 | reader2 | provenance | | | test.rs:408:13:408:23 | mut reader2 | test.rs:413:44:413:50 | reader2 | provenance | | | test.rs:408:13:408:23 | mut reader2 | test.rs:423:41:423:47 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:437:26:437:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:10 | +| test.rs:408:13:408:23 | mut reader2 | test.rs:437:26:437:32 | reader2 | provenance | | | test.rs:408:13:408:23 | mut reader2 | test.rs:444:44:444:50 | reader2 | provenance | | | test.rs:408:13:408:23 | mut reader2 | test.rs:457:68:457:74 | reader2 | provenance | | | test.rs:408:13:408:23 | mut reader2 | test.rs:461:31:461:37 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | provenance | MaD:15 | -| test.rs:408:13:408:23 | mut reader2 | test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | provenance | MaD:16 | | test.rs:408:13:408:23 | mut reader2 | test.rs:467:44:467:50 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:479:26:479:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:10 | +| test.rs:408:13:408:23 | mut reader2 | test.rs:479:26:479:32 | reader2 | provenance | | | test.rs:408:13:408:23 | mut reader2 | test.rs:486:31:486:37 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:486:57:486:65 | [post] &mut line [&ref] | provenance | MaD:13 | -| test.rs:408:13:408:23 | mut reader2 | test.rs:486:57:486:65 | [post] &mut line [&ref] | provenance | MaD:14 | | test.rs:408:13:408:23 | mut reader2 | test.rs:493:31:493:37 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:493:49:493:57 | [post] &mut line [&ref] | provenance | MaD:11 | -| test.rs:408:13:408:23 | mut reader2 | test.rs:493:49:493:57 | [post] &mut line [&ref] | provenance | MaD:12 | | test.rs:408:13:408:23 | mut reader2 | test.rs:500:31:500:37 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:500:51:500:61 | [post] &mut buffer [&ref] | provenance | MaD:17 | -| test.rs:408:13:408:23 | mut reader2 | test.rs:500:51:500:61 | [post] &mut buffer [&ref] | provenance | MaD:18 | | test.rs:408:27:408:61 | ...::new(...) | test.rs:408:13:408:23 | mut reader2 | provenance | | -| test.rs:408:55:408:60 | reader | test.rs:408:27:408:61 | ...::new(...) | provenance | MaD:28 | +| test.rs:408:55:408:60 | reader | test.rs:408:27:408:61 | ...::new(...) | provenance | MaD:25 | | test.rs:409:15:409:21 | reader2 | test.rs:409:14:409:21 | &reader2 | provenance | | | test.rs:413:17:413:26 | mut pinned | test.rs:414:19:414:24 | pinned | provenance | | -| test.rs:413:17:413:26 | mut pinned | test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 | -| test.rs:413:17:413:26 | mut pinned [&ref] | test.rs:414:19:414:24 | pinned [&ref] | provenance | | -| test.rs:413:17:413:26 | mut pinned [&ref] | test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 | +| test.rs:413:17:413:26 | mut pinned | test.rs:416:26:416:31 | pinned | provenance | | +| test.rs:413:17:413:26 | mut pinned [Pin, &ref] | test.rs:414:19:414:24 | pinned [Pin, &ref] | provenance | | | test.rs:413:30:413:51 | ...::new(...) | test.rs:413:17:413:26 | mut pinned | provenance | | -| test.rs:413:30:413:51 | ...::new(...) [&ref] | test.rs:413:17:413:26 | mut pinned [&ref] | provenance | | -| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) | provenance | MaD:24 | -| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) [&ref] | provenance | MaD:25 | +| test.rs:413:30:413:51 | ...::new(...) [Pin, &ref] | test.rs:413:17:413:26 | mut pinned [Pin, &ref] | provenance | | +| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) | provenance | MaD:21 | +| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) [Pin, &ref] | provenance | MaD:22 | | test.rs:413:44:413:50 | reader2 | test.rs:413:39:413:50 | &mut reader2 [&ref] | provenance | | | test.rs:414:19:414:24 | pinned | test.rs:414:18:414:24 | &pinned | provenance | | -| test.rs:414:19:414:24 | pinned [&ref] | test.rs:414:18:414:24 | &pinned | provenance | | +| test.rs:414:19:414:24 | pinned [Pin, &ref] | test.rs:414:18:414:24 | &pinned | provenance | | | test.rs:416:17:416:22 | buffer [Ready, Ok] | test.rs:417:20:417:39 | ...::Ready(...) [Ready, Ok] | provenance | | | test.rs:416:17:416:22 | buffer [Ready, Ok] | test.rs:418:23:418:28 | buffer [Ready, Ok] | provenance | | +| test.rs:416:26:416:31 | pinned | test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:9 | | test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | test.rs:416:17:416:22 | buffer [Ready, Ok] | provenance | | | test.rs:417:20:417:39 | ...::Ready(...) [Ready, Ok] | test.rs:417:32:417:38 | Ok(...) [Ok] | provenance | | | test.rs:417:32:417:38 | Ok(...) [Ok] | test.rs:417:35:417:37 | buf | provenance | | | test.rs:417:35:417:37 | buf | test.rs:419:22:419:24 | buf | provenance | | | test.rs:418:23:418:28 | buffer [Ready, Ok] | test.rs:418:22:418:28 | &buffer | provenance | | | test.rs:423:17:423:23 | buffer2 [Ready, Ok] | test.rs:424:20:424:26 | buffer2 [Ready, Ok] | provenance | | -| test.rs:423:27:423:48 | ...::new(...) | test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 | -| test.rs:423:27:423:48 | ...::new(...) [&ref] | test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 | +| test.rs:423:27:423:48 | ...::new(...) | test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:9 | | test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | test.rs:423:17:423:23 | buffer2 [Ready, Ok] | provenance | | -| test.rs:423:36:423:47 | &mut reader2 [&ref] | test.rs:423:27:423:48 | ...::new(...) | provenance | MaD:24 | -| test.rs:423:36:423:47 | &mut reader2 [&ref] | test.rs:423:27:423:48 | ...::new(...) [&ref] | provenance | MaD:25 | +| test.rs:423:36:423:47 | &mut reader2 [&ref] | test.rs:423:27:423:48 | ...::new(...) | provenance | MaD:21 | | test.rs:423:41:423:47 | reader2 | test.rs:423:36:423:47 | &mut reader2 [&ref] | provenance | | | test.rs:424:20:424:26 | buffer2 [Ready, Ok] | test.rs:425:17:425:36 | ...::Ready(...) [Ready, Ok] | provenance | | | test.rs:424:20:424:26 | buffer2 [Ready, Ok] | test.rs:426:27:426:33 | buffer2 [Ready, Ok] | provenance | | @@ -245,53 +247,61 @@ edges | test.rs:425:32:425:34 | buf | test.rs:427:26:427:28 | buf | provenance | | | test.rs:426:27:426:33 | buffer2 [Ready, Ok] | test.rs:426:26:426:33 | &buffer2 | provenance | | | test.rs:437:17:437:22 | buffer | test.rs:438:18:438:23 | buffer | provenance | | +| test.rs:437:26:437:32 | reader2 | test.rs:437:26:437:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:11 | | test.rs:437:26:437:43 | reader2.fill_buf() [future, Ok] | test.rs:437:26:437:49 | await ... [Ok] | provenance | | | test.rs:437:26:437:49 | await ... [Ok] | test.rs:437:26:437:50 | TryExpr | provenance | | | test.rs:437:26:437:50 | TryExpr | test.rs:437:17:437:22 | buffer | provenance | | | test.rs:444:17:444:26 | mut pinned | test.rs:445:19:445:24 | pinned | provenance | | -| test.rs:444:17:444:26 | mut pinned | test.rs:447:56:447:66 | [post] &mut buffer [&ref] | provenance | MaD:9 | -| test.rs:444:17:444:26 | mut pinned [&ref] | test.rs:445:19:445:24 | pinned [&ref] | provenance | | -| test.rs:444:17:444:26 | mut pinned [&ref] | test.rs:447:56:447:66 | [post] &mut buffer [&ref] | provenance | MaD:9 | +| test.rs:444:17:444:26 | mut pinned | test.rs:447:30:447:35 | pinned | provenance | | +| test.rs:444:17:444:26 | mut pinned [Pin, &ref] | test.rs:445:19:445:24 | pinned [Pin, &ref] | provenance | | | test.rs:444:30:444:51 | ...::new(...) | test.rs:444:17:444:26 | mut pinned | provenance | | -| test.rs:444:30:444:51 | ...::new(...) [&ref] | test.rs:444:17:444:26 | mut pinned [&ref] | provenance | | -| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) | provenance | MaD:24 | -| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) [&ref] | provenance | MaD:25 | +| test.rs:444:30:444:51 | ...::new(...) [Pin, &ref] | test.rs:444:17:444:26 | mut pinned [Pin, &ref] | provenance | | +| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) | provenance | MaD:21 | +| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) [Pin, &ref] | provenance | MaD:22 | | test.rs:444:44:444:50 | reader2 | test.rs:444:39:444:50 | &mut reader2 [&ref] | provenance | | | test.rs:445:19:445:24 | pinned | test.rs:445:18:445:24 | &pinned | provenance | | -| test.rs:445:19:445:24 | pinned [&ref] | test.rs:445:18:445:24 | &pinned | provenance | | +| test.rs:445:19:445:24 | pinned [Pin, &ref] | test.rs:445:18:445:24 | &pinned | provenance | | +| test.rs:447:30:447:35 | pinned | test.rs:447:56:447:66 | [post] &mut buffer [&ref] | provenance | MaD:10 | | test.rs:447:56:447:66 | [post] &mut buffer [&ref] | test.rs:447:61:447:66 | [post] buffer | provenance | | | test.rs:447:61:447:66 | [post] buffer | test.rs:448:19:448:24 | buffer | provenance | | +| test.rs:447:61:447:66 | [post] buffer | test.rs:450:23:450:28 | buffer | provenance | | | test.rs:447:61:447:66 | [post] buffer | test.rs:450:23:450:33 | buffer[...] | provenance | | | test.rs:448:19:448:24 | buffer | test.rs:448:18:448:24 | &buffer | provenance | | +| test.rs:450:23:450:28 | buffer | test.rs:450:23:450:33 | buffer[...] | provenance | MaD:8 | | test.rs:450:23:450:33 | buffer[...] | test.rs:450:22:450:33 | &... | provenance | | -| test.rs:457:63:457:74 | &mut reader2 [&ref] | test.rs:457:77:457:88 | [post] &mut buffer1 [&ref] | provenance | MaD:15 | +| test.rs:457:63:457:74 | &mut reader2 [&ref] | test.rs:457:77:457:88 | [post] &mut buffer1 [&ref] | provenance | MaD:14 | | test.rs:457:68:457:74 | reader2 | test.rs:457:63:457:74 | &mut reader2 [&ref] | provenance | | | test.rs:457:77:457:88 | [post] &mut buffer1 [&ref] | test.rs:457:82:457:88 | [post] buffer1 | provenance | | +| test.rs:457:82:457:88 | [post] buffer1 | test.rs:458:19:458:25 | buffer1 | provenance | | | test.rs:457:82:457:88 | [post] buffer1 | test.rs:458:19:458:40 | buffer1[...] | provenance | | +| test.rs:458:19:458:25 | buffer1 | test.rs:458:19:458:40 | buffer1[...] | provenance | MaD:8 | | test.rs:458:19:458:40 | buffer1[...] | test.rs:458:18:458:40 | &... | provenance | | -| test.rs:461:31:461:37 | reader2 | test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | provenance | MaD:15 | +| test.rs:461:31:461:37 | reader2 | test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | provenance | MaD:14 | | test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | test.rs:461:49:461:55 | [post] buffer2 | provenance | | +| test.rs:461:49:461:55 | [post] buffer2 | test.rs:462:19:462:25 | buffer2 | provenance | | | test.rs:461:49:461:55 | [post] buffer2 | test.rs:462:19:462:40 | buffer2[...] | provenance | | +| test.rs:462:19:462:25 | buffer2 | test.rs:462:19:462:40 | buffer2[...] | provenance | MaD:8 | | test.rs:462:19:462:40 | buffer2[...] | test.rs:462:18:462:40 | &... | provenance | | | test.rs:467:17:467:26 | mut pinned | test.rs:468:19:468:24 | pinned | provenance | | -| test.rs:467:17:467:26 | mut pinned | test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 | -| test.rs:467:17:467:26 | mut pinned [&ref] | test.rs:468:19:468:24 | pinned [&ref] | provenance | | -| test.rs:467:17:467:26 | mut pinned [&ref] | test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 | +| test.rs:467:17:467:26 | mut pinned | test.rs:470:26:470:31 | pinned | provenance | | +| test.rs:467:17:467:26 | mut pinned [Pin, &ref] | test.rs:468:19:468:24 | pinned [Pin, &ref] | provenance | | | test.rs:467:30:467:51 | ...::new(...) | test.rs:467:17:467:26 | mut pinned | provenance | | -| test.rs:467:30:467:51 | ...::new(...) [&ref] | test.rs:467:17:467:26 | mut pinned [&ref] | provenance | | -| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) | provenance | MaD:24 | -| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) [&ref] | provenance | MaD:25 | +| test.rs:467:30:467:51 | ...::new(...) [Pin, &ref] | test.rs:467:17:467:26 | mut pinned [Pin, &ref] | provenance | | +| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) | provenance | MaD:21 | +| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) [Pin, &ref] | provenance | MaD:22 | | test.rs:467:44:467:50 | reader2 | test.rs:467:39:467:50 | &mut reader2 [&ref] | provenance | | | test.rs:468:19:468:24 | pinned | test.rs:468:18:468:24 | &pinned | provenance | | -| test.rs:468:19:468:24 | pinned [&ref] | test.rs:468:18:468:24 | &pinned | provenance | | +| test.rs:468:19:468:24 | pinned [Pin, &ref] | test.rs:468:18:468:24 | &pinned | provenance | | | test.rs:470:17:470:22 | buffer [Ready, Ok] | test.rs:471:19:471:24 | buffer [Ready, Ok] | provenance | | | test.rs:470:17:470:22 | buffer [Ready, Ok] | test.rs:472:20:472:39 | ...::Ready(...) [Ready, Ok] | provenance | | +| test.rs:470:26:470:31 | pinned | test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:9 | | test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | test.rs:470:17:470:22 | buffer [Ready, Ok] | provenance | | | test.rs:471:19:471:24 | buffer [Ready, Ok] | test.rs:471:18:471:24 | &buffer | provenance | | | test.rs:472:20:472:39 | ...::Ready(...) [Ready, Ok] | test.rs:472:32:472:38 | Ok(...) [Ok] | provenance | | | test.rs:472:32:472:38 | Ok(...) [Ok] | test.rs:472:35:472:37 | buf | provenance | | | test.rs:472:35:472:37 | buf | test.rs:473:22:473:24 | buf | provenance | | | test.rs:479:17:479:22 | buffer | test.rs:480:18:480:23 | buffer | provenance | | +| test.rs:479:26:479:32 | reader2 | test.rs:479:26:479:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:11 | | test.rs:479:26:479:43 | reader2.fill_buf() [future, Ok] | test.rs:479:26:479:49 | await ... [Ok] | provenance | | | test.rs:479:26:479:49 | await ... [Ok] | test.rs:479:26:479:50 | TryExpr | provenance | | | test.rs:479:26:479:50 | TryExpr | test.rs:479:17:479:22 | buffer | provenance | | @@ -299,11 +309,11 @@ edges | test.rs:486:57:486:65 | [post] &mut line [&ref] | test.rs:486:62:486:65 | [post] line | provenance | | | test.rs:486:62:486:65 | [post] line | test.rs:487:19:487:22 | line | provenance | | | test.rs:487:19:487:22 | line | test.rs:487:18:487:22 | &line | provenance | | -| test.rs:493:31:493:37 | reader2 | test.rs:493:49:493:57 | [post] &mut line [&ref] | provenance | MaD:11 | +| test.rs:493:31:493:37 | reader2 | test.rs:493:49:493:57 | [post] &mut line [&ref] | provenance | MaD:12 | | test.rs:493:49:493:57 | [post] &mut line [&ref] | test.rs:493:54:493:57 | [post] line | provenance | | | test.rs:493:54:493:57 | [post] line | test.rs:494:19:494:22 | line | provenance | | | test.rs:494:19:494:22 | line | test.rs:494:18:494:22 | &line | provenance | | -| test.rs:500:31:500:37 | reader2 | test.rs:500:51:500:61 | [post] &mut buffer [&ref] | provenance | MaD:17 | +| test.rs:500:31:500:37 | reader2 | test.rs:500:51:500:61 | [post] &mut buffer [&ref] | provenance | MaD:15 | | test.rs:500:51:500:61 | [post] &mut buffer [&ref] | test.rs:500:56:500:61 | [post] buffer | provenance | | | test.rs:500:56:500:61 | [post] buffer | test.rs:501:19:501:24 | buffer | provenance | | | test.rs:501:19:501:24 | buffer | test.rs:501:18:501:24 | &buffer | provenance | | @@ -359,12 +369,14 @@ nodes | test.rs:29:24:29:50 | ...::get(...) [future, Ok] | semmle.label | ...::get(...) [future, Ok] | | test.rs:29:24:29:56 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:29:24:29:57 | TryExpr | semmle.label | TryExpr | +| test.rs:30:10:30:17 | request1 | semmle.label | request1 | | test.rs:30:10:30:25 | request1.chunk() [future, Ok, Some] | semmle.label | request1.chunk() [future, Ok, Some] | | test.rs:30:10:30:31 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | | test.rs:30:10:30:32 | TryExpr [Some] | semmle.label | TryExpr [Some] | | test.rs:30:10:30:41 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:31:15:31:25 | Some(...) [Some] | semmle.label | Some(...) [Some] | | test.rs:31:20:31:24 | chunk | semmle.label | chunk | +| test.rs:31:29:31:36 | request1 | semmle.label | request1 | | test.rs:31:29:31:44 | request1.chunk() [future, Ok, Some] | semmle.label | request1.chunk() [future, Ok, Some] | | test.rs:31:29:31:50 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | | test.rs:31:29:31:51 | TryExpr [Some] | semmle.label | TryExpr [Some] | @@ -388,10 +400,12 @@ nodes | test.rs:155:26:155:53 | ...::connect | semmle.label | ...::connect | | test.rs:155:26:155:62 | ...::connect(...) [Ok] | semmle.label | ...::connect(...) [Ok] | | test.rs:155:26:155:63 | TryExpr | semmle.label | TryExpr | +| test.rs:162:17:162:22 | stream | semmle.label | stream | | test.rs:162:29:162:39 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:162:34:162:39 | [post] buffer | semmle.label | [post] buffer | | test.rs:165:14:165:20 | &buffer | semmle.label | &buffer | | test.rs:165:15:165:20 | buffer | semmle.label | buffer | +| test.rs:166:14:166:19 | buffer | semmle.label | buffer | | test.rs:166:14:166:22 | buffer[0] | semmle.label | buffer[0] | | test.rs:174:13:174:22 | mut stream | semmle.label | mut stream | | test.rs:174:26:174:61 | ...::connect_timeout | semmle.label | ...::connect_timeout | @@ -401,6 +415,7 @@ nodes | test.rs:182:34:182:64 | ...::new(...) | semmle.label | ...::new(...) | | test.rs:182:34:182:74 | ... .take(...) | semmle.label | ... .take(...) | | test.rs:182:58:182:63 | stream | semmle.label | stream | +| test.rs:185:27:185:32 | reader | semmle.label | reader | | test.rs:185:44:185:52 | [post] &mut line [&ref] | semmle.label | [post] &mut line [&ref] | | test.rs:185:49:185:52 | [post] line | semmle.label | [post] line | | test.rs:192:34:192:38 | &line | semmle.label | &line | @@ -410,20 +425,26 @@ nodes | test.rs:224:28:224:66 | ...::connect(...) [future, Ok] | semmle.label | ...::connect(...) [future, Ok] | | test.rs:224:28:224:72 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:224:28:224:73 | TryExpr | semmle.label | TryExpr | +| test.rs:232:17:232:28 | tokio_stream | semmle.label | tokio_stream | | test.rs:232:35:232:46 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | | test.rs:232:40:232:46 | [post] buffer1 | semmle.label | [post] buffer1 | +| test.rs:236:18:236:29 | tokio_stream | semmle.label | tokio_stream | | test.rs:236:36:236:47 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] | | test.rs:236:41:236:47 | [post] buffer2 | semmle.label | [post] buffer2 | | test.rs:239:14:239:21 | &buffer1 | semmle.label | &buffer1 | | test.rs:239:15:239:21 | buffer1 | semmle.label | buffer1 | +| test.rs:240:14:240:20 | buffer1 | semmle.label | buffer1 | | test.rs:240:14:240:23 | buffer1[0] | semmle.label | buffer1[0] | | test.rs:243:14:243:21 | &buffer2 | semmle.label | &buffer2 | | test.rs:243:15:243:21 | buffer2 | semmle.label | buffer2 | +| test.rs:244:14:244:20 | buffer2 | semmle.label | buffer2 | | test.rs:244:14:244:23 | buffer2[0] | semmle.label | buffer2[0] | +| test.rs:252:19:252:30 | tokio_stream | semmle.label | tokio_stream | | test.rs:252:41:252:51 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:252:46:252:51 | [post] buffer | semmle.label | [post] buffer | | test.rs:259:26:259:32 | &buffer | semmle.label | &buffer | | test.rs:259:27:259:32 | buffer | semmle.label | buffer | +| test.rs:275:19:275:30 | tokio_stream | semmle.label | tokio_stream | | test.rs:275:45:275:55 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:275:50:275:55 | [post] buffer | semmle.label | [post] buffer | | test.rs:282:26:282:32 | &buffer | semmle.label | &buffer | @@ -443,30 +464,34 @@ nodes | test.rs:381:14:381:20 | &reader | semmle.label | &reader | | test.rs:381:15:381:20 | reader | semmle.label | reader | | test.rs:386:17:386:26 | mut pinned | semmle.label | mut pinned | -| test.rs:386:17:386:26 | mut pinned [&ref] | semmle.label | mut pinned [&ref] | +| test.rs:386:17:386:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | | test.rs:386:30:386:50 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:386:30:386:50 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| test.rs:386:30:386:50 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | | test.rs:386:39:386:49 | &mut reader [&ref] | semmle.label | &mut reader [&ref] | | test.rs:386:44:386:49 | reader | semmle.label | reader | | test.rs:387:18:387:24 | &pinned | semmle.label | &pinned | | test.rs:387:19:387:24 | pinned | semmle.label | pinned | -| test.rs:387:19:387:24 | pinned [&ref] | semmle.label | pinned [&ref] | +| test.rs:387:19:387:24 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] | +| test.rs:389:30:389:35 | pinned | semmle.label | pinned | | test.rs:389:56:389:66 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:389:61:389:66 | [post] buffer | semmle.label | [post] buffer | | test.rs:391:22:391:28 | &buffer | semmle.label | &buffer | | test.rs:391:23:391:28 | buffer | semmle.label | buffer | | test.rs:392:22:392:33 | &... | semmle.label | &... | +| test.rs:392:23:392:28 | buffer | semmle.label | buffer | | test.rs:392:23:392:33 | buffer[...] | semmle.label | buffer[...] | | test.rs:399:63:399:73 | &mut reader [&ref] | semmle.label | &mut reader [&ref] | | test.rs:399:68:399:73 | reader | semmle.label | reader | | test.rs:399:76:399:87 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | | test.rs:399:81:399:87 | [post] buffer1 | semmle.label | [post] buffer1 | | test.rs:400:18:400:40 | &... | semmle.label | &... | +| test.rs:400:19:400:25 | buffer1 | semmle.label | buffer1 | | test.rs:400:19:400:40 | buffer1[...] | semmle.label | buffer1[...] | | test.rs:403:31:403:36 | reader | semmle.label | reader | | test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] | | test.rs:403:48:403:54 | [post] buffer2 | semmle.label | [post] buffer2 | | test.rs:405:18:405:40 | &... | semmle.label | &... | +| test.rs:405:19:405:25 | buffer2 | semmle.label | buffer2 | | test.rs:405:19:405:40 | buffer2[...] | semmle.label | buffer2[...] | | test.rs:408:13:408:23 | mut reader2 | semmle.label | mut reader2 | | test.rs:408:27:408:61 | ...::new(...) | semmle.label | ...::new(...) | @@ -474,15 +499,16 @@ nodes | test.rs:409:14:409:21 | &reader2 | semmle.label | &reader2 | | test.rs:409:15:409:21 | reader2 | semmle.label | reader2 | | test.rs:413:17:413:26 | mut pinned | semmle.label | mut pinned | -| test.rs:413:17:413:26 | mut pinned [&ref] | semmle.label | mut pinned [&ref] | +| test.rs:413:17:413:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | | test.rs:413:30:413:51 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:413:30:413:51 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| test.rs:413:30:413:51 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | | test.rs:413:39:413:50 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | | test.rs:413:44:413:50 | reader2 | semmle.label | reader2 | | test.rs:414:18:414:24 | &pinned | semmle.label | &pinned | | test.rs:414:19:414:24 | pinned | semmle.label | pinned | -| test.rs:414:19:414:24 | pinned [&ref] | semmle.label | pinned [&ref] | +| test.rs:414:19:414:24 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] | | test.rs:416:17:416:22 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | +| test.rs:416:26:416:31 | pinned | semmle.label | pinned | | test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | semmle.label | pinned.poll_fill_buf(...) [Ready, Ok] | | test.rs:417:20:417:39 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] | | test.rs:417:32:417:38 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | @@ -492,7 +518,6 @@ nodes | test.rs:419:22:419:24 | buf | semmle.label | buf | | test.rs:423:17:423:23 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] | | test.rs:423:27:423:48 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:423:27:423:48 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | | test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | semmle.label | ... .poll_fill_buf(...) [Ready, Ok] | | test.rs:423:36:423:47 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | | test.rs:423:41:423:47 | reader2 | semmle.label | reader2 | @@ -504,46 +529,52 @@ nodes | test.rs:426:27:426:33 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] | | test.rs:427:26:427:28 | buf | semmle.label | buf | | test.rs:437:17:437:22 | buffer | semmle.label | buffer | +| test.rs:437:26:437:32 | reader2 | semmle.label | reader2 | | test.rs:437:26:437:43 | reader2.fill_buf() [future, Ok] | semmle.label | reader2.fill_buf() [future, Ok] | | test.rs:437:26:437:49 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:437:26:437:50 | TryExpr | semmle.label | TryExpr | | test.rs:438:18:438:23 | buffer | semmle.label | buffer | | test.rs:444:17:444:26 | mut pinned | semmle.label | mut pinned | -| test.rs:444:17:444:26 | mut pinned [&ref] | semmle.label | mut pinned [&ref] | +| test.rs:444:17:444:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | | test.rs:444:30:444:51 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:444:30:444:51 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| test.rs:444:30:444:51 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | | test.rs:444:39:444:50 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | | test.rs:444:44:444:50 | reader2 | semmle.label | reader2 | | test.rs:445:18:445:24 | &pinned | semmle.label | &pinned | | test.rs:445:19:445:24 | pinned | semmle.label | pinned | -| test.rs:445:19:445:24 | pinned [&ref] | semmle.label | pinned [&ref] | +| test.rs:445:19:445:24 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] | +| test.rs:447:30:447:35 | pinned | semmle.label | pinned | | test.rs:447:56:447:66 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:447:61:447:66 | [post] buffer | semmle.label | [post] buffer | | test.rs:448:18:448:24 | &buffer | semmle.label | &buffer | | test.rs:448:19:448:24 | buffer | semmle.label | buffer | | test.rs:450:22:450:33 | &... | semmle.label | &... | +| test.rs:450:23:450:28 | buffer | semmle.label | buffer | | test.rs:450:23:450:33 | buffer[...] | semmle.label | buffer[...] | | test.rs:457:63:457:74 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | | test.rs:457:68:457:74 | reader2 | semmle.label | reader2 | | test.rs:457:77:457:88 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | | test.rs:457:82:457:88 | [post] buffer1 | semmle.label | [post] buffer1 | | test.rs:458:18:458:40 | &... | semmle.label | &... | +| test.rs:458:19:458:25 | buffer1 | semmle.label | buffer1 | | test.rs:458:19:458:40 | buffer1[...] | semmle.label | buffer1[...] | | test.rs:461:31:461:37 | reader2 | semmle.label | reader2 | | test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] | | test.rs:461:49:461:55 | [post] buffer2 | semmle.label | [post] buffer2 | | test.rs:462:18:462:40 | &... | semmle.label | &... | +| test.rs:462:19:462:25 | buffer2 | semmle.label | buffer2 | | test.rs:462:19:462:40 | buffer2[...] | semmle.label | buffer2[...] | | test.rs:467:17:467:26 | mut pinned | semmle.label | mut pinned | -| test.rs:467:17:467:26 | mut pinned [&ref] | semmle.label | mut pinned [&ref] | +| test.rs:467:17:467:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | | test.rs:467:30:467:51 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:467:30:467:51 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| test.rs:467:30:467:51 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | | test.rs:467:39:467:50 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | | test.rs:467:44:467:50 | reader2 | semmle.label | reader2 | | test.rs:468:18:468:24 | &pinned | semmle.label | &pinned | | test.rs:468:19:468:24 | pinned | semmle.label | pinned | -| test.rs:468:19:468:24 | pinned [&ref] | semmle.label | pinned [&ref] | +| test.rs:468:19:468:24 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] | | test.rs:470:17:470:22 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | +| test.rs:470:26:470:31 | pinned | semmle.label | pinned | | test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | semmle.label | pinned.poll_fill_buf(...) [Ready, Ok] | | test.rs:471:18:471:24 | &buffer | semmle.label | &buffer | | test.rs:471:19:471:24 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | @@ -552,6 +583,7 @@ nodes | test.rs:472:35:472:37 | buf | semmle.label | buf | | test.rs:473:22:473:24 | buf | semmle.label | buf | | test.rs:479:17:479:22 | buffer | semmle.label | buffer | +| test.rs:479:26:479:32 | reader2 | semmle.label | reader2 | | test.rs:479:26:479:43 | reader2.fill_buf() [future, Ok] | semmle.label | reader2.fill_buf() [future, Ok] | | test.rs:479:26:479:49 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:479:26:479:50 | TryExpr | semmle.label | TryExpr | diff --git a/rust/ql/test/library-tests/dataflow/sources/net/test.rs b/rust/ql/test/library-tests/dataflow/sources/net/test.rs index 254a27349d92..178f539dc6e8 100644 --- a/rust/ql/test/library-tests/dataflow/sources/net/test.rs +++ b/rust/ql/test/library-tests/dataflow/sources/net/test.rs @@ -204,7 +204,7 @@ async fn test_std_tcpstream(case: i64) -> std::io::Result<()> { for line in reader.lines() { // $ MISSING: Alert[rust/summary/taint-sources] if let Ok(string) = line { println!("line = {}", string); - sink(string); // $ MISSING: hasTaintFlow + sink(string); // $ MISSING: hasTaintFlow=&sock_addr } } } diff --git a/rust/ql/test/library-tests/dataflow/sources/stdin/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/stdin/InlineFlow.expected index 5e0e79e5e5d3..01693b0041f6 100644 --- a/rust/ql/test/library-tests/dataflow/sources/stdin/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/stdin/InlineFlow.expected @@ -1,48 +1,44 @@ models | 1 | Source: std::io::stdio::stdin; ReturnValue; stdin | | 2 | Source: tokio::io::stdin::stdin; ReturnValue; stdin | -| 3 | Summary: <_ as core::iter::traits::iterator::Iterator>::next; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; value | -| 4 | Summary: <_ as std::io::BufRead>::fill_buf; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 3 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 4 | Summary: <_ as std::io::BufRead>::fill_buf; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | | 5 | Summary: <_ as std::io::BufRead>::lines; Argument[self]; ReturnValue; taint | -| 6 | Summary: <_ as std::io::BufRead>::read_line; Argument[self]; Argument[0].Reference; taint | -| 7 | Summary: <_ as std::io::BufRead>::read_until; Argument[self]; Argument[1].Reference; taint | +| 6 | Summary: <_ as std::io::BufRead>::read_line; Argument[self].Reference; Argument[0].Reference; taint | +| 7 | Summary: <_ as std::io::BufRead>::read_until; Argument[self].Reference; Argument[1].Reference; taint | | 8 | Summary: <_ as std::io::BufRead>::split; Argument[self]; ReturnValue; taint | | 9 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint | -| 10 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint | -| 11 | Summary: <_ as std::io::Read>::read_exact; Argument[self]; Argument[0].Reference; taint | -| 12 | Summary: <_ as std::io::Read>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 13 | Summary: <_ as std::io::Read>::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 14 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 10 | Summary: <_ as std::io::Read>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 11 | Summary: <_ as std::io::Read>::read_exact; Argument[self].Reference; Argument[0].Reference; taint | +| 12 | Summary: <_ as std::io::Read>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | +| 13 | Summary: <_ as std::io::Read>::read_to_string; Argument[self].Reference; Argument[0].Reference; taint | +| 14 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | | 15 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::lines; Argument[self]; ReturnValue; taint | -| 16 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | -| 17 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | +| 16 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | +| 17 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | | 18 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::split; Argument[self]; ReturnValue; taint | -| 19 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | -| 20 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self]; Argument[0].Reference; taint | -| 21 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self]; Argument[0].Reference; taint | -| 22 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 23 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 24 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 25 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 26 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 27 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 19 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 20 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self].Reference; Argument[0].Reference; taint | +| 21 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self].Reference; Argument[0].Reference; taint | +| 22 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 23 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 24 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 25 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | +| 26 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self].Reference; Argument[0].Reference; taint | +| 27 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | | 28 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | | 29 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 30 | Summary: ::buffer; Argument[self]; ReturnValue; taint | -| 31 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 32 | Summary: ::read; Argument[self]; Argument[0]; taint | -| 33 | Summary: ::read_exact; Argument[self]; Argument[0]; taint | -| 34 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | -| 35 | Summary: ::lock; Argument[self]; ReturnValue; taint | -| 36 | Summary: ::buffer; Argument[self]; ReturnValue; taint | -| 37 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 38 | Summary: ::next_line; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 39 | Summary: ::next_segment; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 30 | Summary: ::next; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; value | +| 31 | Summary: ::buffer; Argument[self].Reference; ReturnValue.Reference; taint | +| 32 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 33 | Summary: ::lock; Argument[self].Reference; ReturnValue; taint | +| 34 | Summary: ::buffer; Argument[self].Reference; ReturnValue.Reference; taint | +| 35 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 36 | Summary: ::next_line; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 37 | Summary: ::next_segment; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | edges | test.rs:13:22:13:35 | ...::stdin | test.rs:13:22:13:37 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:13:22:13:37 | ...::stdin(...) | test.rs:13:44:13:54 | [post] &mut buffer | provenance | MaD:32 | | test.rs:13:22:13:37 | ...::stdin(...) | test.rs:13:44:13:54 | [post] &mut buffer [&ref] | provenance | MaD:10 | -| test.rs:13:44:13:54 | [post] &mut buffer | test.rs:14:15:14:20 | buffer | provenance | | | test.rs:13:44:13:54 | [post] &mut buffer [&ref] | test.rs:13:49:13:54 | [post] buffer | provenance | | | test.rs:13:49:13:54 | [post] buffer | test.rs:14:15:14:20 | buffer | provenance | | | test.rs:14:15:14:20 | buffer | test.rs:14:14:14:20 | &buffer | provenance | | @@ -52,190 +48,213 @@ edges | test.rs:19:56:19:61 | [post] buffer | test.rs:20:15:20:20 | buffer | provenance | | | test.rs:20:15:20:20 | buffer | test.rs:20:14:20:20 | &buffer | provenance | | | test.rs:25:22:25:35 | ...::stdin | test.rs:25:22:25:37 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:25:22:25:37 | ...::stdin(...) | test.rs:25:54:25:64 | [post] &mut buffer | provenance | MaD:34 | | test.rs:25:22:25:37 | ...::stdin(...) | test.rs:25:54:25:64 | [post] &mut buffer [&ref] | provenance | MaD:13 | -| test.rs:25:54:25:64 | [post] &mut buffer | test.rs:26:15:26:20 | buffer | provenance | | | test.rs:25:54:25:64 | [post] &mut buffer [&ref] | test.rs:25:59:25:64 | [post] buffer | provenance | | | test.rs:25:59:25:64 | [post] buffer | test.rs:26:15:26:20 | buffer | provenance | | | test.rs:26:15:26:20 | buffer | test.rs:26:14:26:20 | &buffer | provenance | | | test.rs:31:22:31:35 | ...::stdin | test.rs:31:22:31:37 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:31:22:31:37 | ...::stdin(...) | test.rs:31:22:31:44 | ... .lock() | provenance | MaD:35 | +| test.rs:31:22:31:37 | ...::stdin(...) | test.rs:31:22:31:44 | ... .lock() | provenance | MaD:33 | | test.rs:31:22:31:44 | ... .lock() | test.rs:31:61:31:71 | [post] &mut buffer [&ref] | provenance | MaD:13 | | test.rs:31:61:31:71 | [post] &mut buffer [&ref] | test.rs:31:66:31:71 | [post] buffer | provenance | | | test.rs:31:66:31:71 | [post] buffer | test.rs:32:15:32:20 | buffer | provenance | | | test.rs:32:15:32:20 | buffer | test.rs:32:14:32:20 | &buffer | provenance | | | test.rs:37:9:37:22 | ...::stdin | test.rs:37:9:37:24 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:37:9:37:24 | ...::stdin(...) | test.rs:37:37:37:47 | [post] &mut buffer | provenance | MaD:33 | | test.rs:37:9:37:24 | ...::stdin(...) | test.rs:37:37:37:47 | [post] &mut buffer [&ref] | provenance | MaD:11 | -| test.rs:37:37:37:47 | [post] &mut buffer | test.rs:38:15:38:20 | buffer | provenance | | | test.rs:37:37:37:47 | [post] &mut buffer [&ref] | test.rs:37:42:37:47 | [post] buffer | provenance | | | test.rs:37:42:37:47 | [post] buffer | test.rs:38:15:38:20 | buffer | provenance | | | test.rs:38:15:38:20 | buffer | test.rs:38:14:38:20 | &buffer | provenance | | | test.rs:41:17:41:30 | ...::stdin | test.rs:41:17:41:32 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | | test.rs:41:17:41:32 | ...::stdin(...) | test.rs:41:17:41:40 | ... .bytes() | provenance | MaD:9 | | test.rs:41:17:41:40 | ... .bytes() | test.rs:42:14:42:17 | byte | provenance | | -| test.rs:48:13:48:22 | mut reader | test.rs:49:20:49:36 | reader.fill_buf() [Ok] | provenance | MaD:4 | +| test.rs:48:13:48:22 | mut reader | test.rs:49:20:49:25 | reader | provenance | | | test.rs:48:26:48:66 | ...::new(...) | test.rs:48:13:48:22 | mut reader | provenance | | | test.rs:48:50:48:63 | ...::stdin | test.rs:48:50:48:65 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:48:50:48:65 | ...::stdin(...) | test.rs:48:26:48:66 | ...::new(...) | provenance | MaD:31 | +| test.rs:48:50:48:65 | ...::stdin(...) | test.rs:48:26:48:66 | ...::new(...) | provenance | MaD:32 | | test.rs:49:13:49:16 | data | test.rs:50:15:50:18 | data | provenance | | +| test.rs:49:20:49:25 | reader | test.rs:49:20:49:36 | reader.fill_buf() [Ok] | provenance | MaD:4 | | test.rs:49:20:49:36 | reader.fill_buf() [Ok] | test.rs:49:20:49:37 | TryExpr | provenance | | | test.rs:49:20:49:37 | TryExpr | test.rs:49:13:49:16 | data | provenance | | | test.rs:50:15:50:18 | data | test.rs:50:14:50:18 | &data | provenance | | -| test.rs:54:13:54:18 | reader | test.rs:55:20:55:34 | reader.buffer() | provenance | MaD:30 | +| test.rs:54:13:54:18 | reader | test.rs:55:20:55:25 | reader | provenance | | | test.rs:54:22:54:62 | ...::new(...) | test.rs:54:13:54:18 | reader | provenance | | | test.rs:54:46:54:59 | ...::stdin | test.rs:54:46:54:61 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:54:46:54:61 | ...::stdin(...) | test.rs:54:22:54:62 | ...::new(...) | provenance | MaD:31 | -| test.rs:55:13:55:16 | data | test.rs:56:15:56:18 | data | provenance | | -| test.rs:55:20:55:34 | reader.buffer() | test.rs:55:13:55:16 | data | provenance | | -| test.rs:56:15:56:18 | data | test.rs:56:14:56:18 | &data | provenance | | -| test.rs:61:13:61:22 | mut reader | test.rs:62:26:62:36 | [post] &mut buffer [&ref] | provenance | MaD:6 | +| test.rs:54:46:54:61 | ...::stdin(...) | test.rs:54:22:54:62 | ...::new(...) | provenance | MaD:32 | +| test.rs:55:13:55:16 | data [&ref] | test.rs:56:15:56:18 | data [&ref] | provenance | | +| test.rs:55:20:55:25 | reader | test.rs:55:20:55:34 | reader.buffer() [&ref] | provenance | MaD:31 | +| test.rs:55:20:55:34 | reader.buffer() [&ref] | test.rs:55:13:55:16 | data [&ref] | provenance | | +| test.rs:56:15:56:18 | data [&ref] | test.rs:56:14:56:18 | &data | provenance | | +| test.rs:61:13:61:22 | mut reader | test.rs:62:9:62:14 | reader | provenance | | | test.rs:61:26:61:66 | ...::new(...) | test.rs:61:13:61:22 | mut reader | provenance | | | test.rs:61:50:61:63 | ...::stdin | test.rs:61:50:61:65 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:61:50:61:65 | ...::stdin(...) | test.rs:61:26:61:66 | ...::new(...) | provenance | MaD:31 | +| test.rs:61:50:61:65 | ...::stdin(...) | test.rs:61:26:61:66 | ...::new(...) | provenance | MaD:32 | +| test.rs:62:9:62:14 | reader | test.rs:62:26:62:36 | [post] &mut buffer [&ref] | provenance | MaD:6 | | test.rs:62:26:62:36 | [post] &mut buffer [&ref] | test.rs:62:31:62:36 | [post] buffer | provenance | | | test.rs:62:31:62:36 | [post] buffer | test.rs:63:15:63:20 | buffer | provenance | | | test.rs:63:15:63:20 | buffer | test.rs:63:14:63:20 | &buffer | provenance | | -| test.rs:68:13:68:22 | mut reader | test.rs:69:33:69:43 | [post] &mut buffer [&ref] | provenance | MaD:7 | +| test.rs:68:13:68:22 | mut reader | test.rs:69:9:69:14 | reader | provenance | | | test.rs:68:26:68:66 | ...::new(...) | test.rs:68:13:68:22 | mut reader | provenance | | | test.rs:68:50:68:63 | ...::stdin | test.rs:68:50:68:65 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:68:50:68:65 | ...::stdin(...) | test.rs:68:26:68:66 | ...::new(...) | provenance | MaD:31 | +| test.rs:68:50:68:65 | ...::stdin(...) | test.rs:68:26:68:66 | ...::new(...) | provenance | MaD:32 | +| test.rs:69:9:69:14 | reader | test.rs:69:33:69:43 | [post] &mut buffer [&ref] | provenance | MaD:7 | | test.rs:69:33:69:43 | [post] &mut buffer [&ref] | test.rs:69:38:69:43 | [post] buffer | provenance | | | test.rs:69:38:69:43 | [post] buffer | test.rs:70:15:70:20 | buffer | provenance | | -| test.rs:69:38:69:43 | [post] buffer | test.rs:71:14:71:22 | buffer[0] | provenance | | +| test.rs:69:38:69:43 | [post] buffer | test.rs:71:14:71:19 | buffer | provenance | | | test.rs:70:15:70:20 | buffer | test.rs:70:14:70:20 | &buffer | provenance | | -| test.rs:75:13:75:28 | mut reader_split | test.rs:76:14:76:32 | reader_split.next() [Some, Ok] | provenance | MaD:3 | -| test.rs:75:13:75:28 | mut reader_split | test.rs:77:33:77:51 | reader_split.next() [Some, Ok] | provenance | MaD:3 | +| test.rs:71:14:71:19 | buffer | test.rs:71:14:71:22 | buffer[0] | provenance | MaD:3 | +| test.rs:75:13:75:28 | mut reader_split | test.rs:76:14:76:25 | reader_split | provenance | | +| test.rs:75:13:75:28 | mut reader_split | test.rs:77:33:77:44 | reader_split | provenance | | | test.rs:75:32:75:72 | ...::new(...) | test.rs:75:32:75:84 | ... .split(...) | provenance | MaD:8 | | test.rs:75:32:75:84 | ... .split(...) | test.rs:75:13:75:28 | mut reader_split | provenance | | | test.rs:75:56:75:69 | ...::stdin | test.rs:75:56:75:71 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:75:56:75:71 | ...::stdin(...) | test.rs:75:32:75:72 | ...::new(...) | provenance | MaD:31 | +| test.rs:75:56:75:71 | ...::stdin(...) | test.rs:75:32:75:72 | ...::new(...) | provenance | MaD:32 | +| test.rs:76:14:76:25 | reader_split | test.rs:76:14:76:32 | reader_split.next() [Some, Ok] | provenance | MaD:30 | | test.rs:76:14:76:32 | reader_split.next() [Some, Ok] | test.rs:76:14:76:41 | ... .unwrap() [Ok] | provenance | MaD:28 | | test.rs:76:14:76:41 | ... .unwrap() [Ok] | test.rs:76:14:76:50 | ... .unwrap() | provenance | MaD:29 | | test.rs:77:19:77:29 | Some(...) [Some, Ok] | test.rs:77:24:77:28 | chunk [Ok] | provenance | | -| test.rs:77:24:77:28 | chunk [Ok] | test.rs:78:18:78:31 | chunk.unwrap() | provenance | MaD:29 | +| test.rs:77:24:77:28 | chunk [Ok] | test.rs:78:18:78:22 | chunk [Ok] | provenance | | +| test.rs:77:33:77:44 | reader_split | test.rs:77:33:77:51 | reader_split.next() [Some, Ok] | provenance | MaD:30 | | test.rs:77:33:77:51 | reader_split.next() [Some, Ok] | test.rs:77:19:77:29 | Some(...) [Some, Ok] | provenance | | -| test.rs:83:13:83:18 | reader | test.rs:84:21:84:34 | reader.lines() | provenance | MaD:5 | +| test.rs:78:18:78:22 | chunk [Ok] | test.rs:78:18:78:31 | chunk.unwrap() | provenance | MaD:29 | +| test.rs:83:13:83:18 | reader | test.rs:84:21:84:26 | reader | provenance | | | test.rs:83:22:83:62 | ...::new(...) | test.rs:83:13:83:18 | reader | provenance | | | test.rs:83:46:83:59 | ...::stdin | test.rs:83:46:83:61 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:83:46:83:61 | ...::stdin(...) | test.rs:83:22:83:62 | ...::new(...) | provenance | MaD:31 | +| test.rs:83:46:83:61 | ...::stdin(...) | test.rs:83:22:83:62 | ...::new(...) | provenance | MaD:32 | +| test.rs:84:21:84:26 | reader | test.rs:84:21:84:34 | reader.lines() | provenance | MaD:5 | | test.rs:84:21:84:34 | reader.lines() | test.rs:85:18:85:21 | line | provenance | | -| test.rs:109:13:109:21 | mut stdin | test.rs:111:33:111:43 | [post] &mut buffer [&ref] | provenance | MaD:19 | +| test.rs:109:13:109:21 | mut stdin | test.rs:111:22:111:26 | stdin | provenance | | | test.rs:109:25:109:40 | ...::stdin | test.rs:109:25:109:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | test.rs:109:25:109:42 | ...::stdin(...) | test.rs:109:13:109:21 | mut stdin | provenance | | +| test.rs:111:22:111:26 | stdin | test.rs:111:33:111:43 | [post] &mut buffer [&ref] | provenance | MaD:19 | | test.rs:111:33:111:43 | [post] &mut buffer [&ref] | test.rs:111:38:111:43 | [post] buffer | provenance | | | test.rs:111:38:111:43 | [post] buffer | test.rs:112:15:112:20 | buffer | provenance | | | test.rs:112:15:112:20 | buffer | test.rs:112:14:112:20 | &buffer | provenance | | -| test.rs:116:13:116:21 | mut stdin | test.rs:118:40:118:50 | [post] &mut buffer [&ref] | provenance | MaD:25 | +| test.rs:116:13:116:21 | mut stdin | test.rs:118:22:118:26 | stdin | provenance | | | test.rs:116:25:116:40 | ...::stdin | test.rs:116:25:116:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | test.rs:116:25:116:42 | ...::stdin(...) | test.rs:116:13:116:21 | mut stdin | provenance | | +| test.rs:118:22:118:26 | stdin | test.rs:118:40:118:50 | [post] &mut buffer [&ref] | provenance | MaD:25 | | test.rs:118:40:118:50 | [post] &mut buffer [&ref] | test.rs:118:45:118:50 | [post] buffer | provenance | | | test.rs:118:45:118:50 | [post] buffer | test.rs:119:15:119:20 | buffer | provenance | | | test.rs:119:15:119:20 | buffer | test.rs:119:14:119:20 | &buffer | provenance | | -| test.rs:123:13:123:21 | mut stdin | test.rs:125:43:125:53 | [post] &mut buffer [&ref] | provenance | MaD:26 | +| test.rs:123:13:123:21 | mut stdin | test.rs:125:22:125:26 | stdin | provenance | | | test.rs:123:25:123:40 | ...::stdin | test.rs:123:25:123:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | test.rs:123:25:123:42 | ...::stdin(...) | test.rs:123:13:123:21 | mut stdin | provenance | | +| test.rs:125:22:125:26 | stdin | test.rs:125:43:125:53 | [post] &mut buffer [&ref] | provenance | MaD:26 | | test.rs:125:43:125:53 | [post] &mut buffer [&ref] | test.rs:125:48:125:53 | [post] buffer | provenance | | | test.rs:125:48:125:53 | [post] buffer | test.rs:126:15:126:20 | buffer | provenance | | | test.rs:126:15:126:20 | buffer | test.rs:126:14:126:20 | &buffer | provenance | | -| test.rs:130:13:130:21 | mut stdin | test.rs:132:26:132:36 | [post] &mut buffer [&ref] | provenance | MaD:21 | +| test.rs:130:13:130:21 | mut stdin | test.rs:132:9:132:13 | stdin | provenance | | | test.rs:130:25:130:40 | ...::stdin | test.rs:130:25:130:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | test.rs:130:25:130:42 | ...::stdin(...) | test.rs:130:13:130:21 | mut stdin | provenance | | +| test.rs:132:9:132:13 | stdin | test.rs:132:26:132:36 | [post] &mut buffer [&ref] | provenance | MaD:21 | | test.rs:132:26:132:36 | [post] &mut buffer [&ref] | test.rs:132:31:132:36 | [post] buffer | provenance | | | test.rs:132:31:132:36 | [post] buffer | test.rs:133:15:133:20 | buffer | provenance | | | test.rs:133:15:133:20 | buffer | test.rs:133:14:133:20 | &buffer | provenance | | -| test.rs:137:13:137:21 | mut stdin | test.rs:138:18:138:32 | stdin.read_u8() [future, Ok] | provenance | MaD:27 | -| test.rs:137:13:137:21 | mut stdin | test.rs:139:18:139:33 | stdin.read_i16() [future, Ok] | provenance | MaD:23 | -| test.rs:137:13:137:21 | mut stdin | test.rs:140:18:140:33 | stdin.read_f32() [future, Ok] | provenance | MaD:22 | -| test.rs:137:13:137:21 | mut stdin | test.rs:141:18:141:36 | stdin.read_i64_le() [future, Ok] | provenance | MaD:24 | +| test.rs:137:13:137:21 | mut stdin | test.rs:138:18:138:22 | stdin | provenance | | +| test.rs:137:13:137:21 | mut stdin | test.rs:139:18:139:22 | stdin | provenance | | +| test.rs:137:13:137:21 | mut stdin | test.rs:140:18:140:22 | stdin | provenance | | +| test.rs:137:13:137:21 | mut stdin | test.rs:141:18:141:22 | stdin | provenance | | | test.rs:137:25:137:40 | ...::stdin | test.rs:137:25:137:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | test.rs:137:25:137:42 | ...::stdin(...) | test.rs:137:13:137:21 | mut stdin | provenance | | | test.rs:138:13:138:14 | v1 | test.rs:142:14:142:15 | v1 | provenance | | +| test.rs:138:18:138:22 | stdin | test.rs:138:18:138:32 | stdin.read_u8() [future, Ok] | provenance | MaD:27 | | test.rs:138:18:138:32 | stdin.read_u8() [future, Ok] | test.rs:138:18:138:38 | await ... [Ok] | provenance | | | test.rs:138:18:138:38 | await ... [Ok] | test.rs:138:18:138:39 | TryExpr | provenance | | | test.rs:138:18:138:39 | TryExpr | test.rs:138:13:138:14 | v1 | provenance | | | test.rs:139:13:139:14 | v2 | test.rs:143:14:143:15 | v2 | provenance | | +| test.rs:139:18:139:22 | stdin | test.rs:139:18:139:33 | stdin.read_i16() [future, Ok] | provenance | MaD:23 | | test.rs:139:18:139:33 | stdin.read_i16() [future, Ok] | test.rs:139:18:139:39 | await ... [Ok] | provenance | | | test.rs:139:18:139:39 | await ... [Ok] | test.rs:139:18:139:40 | TryExpr | provenance | | | test.rs:139:18:139:40 | TryExpr | test.rs:139:13:139:14 | v2 | provenance | | | test.rs:140:13:140:14 | v3 | test.rs:144:14:144:15 | v3 | provenance | | +| test.rs:140:18:140:22 | stdin | test.rs:140:18:140:33 | stdin.read_f32() [future, Ok] | provenance | MaD:22 | | test.rs:140:18:140:33 | stdin.read_f32() [future, Ok] | test.rs:140:18:140:39 | await ... [Ok] | provenance | | | test.rs:140:18:140:39 | await ... [Ok] | test.rs:140:18:140:40 | TryExpr | provenance | | | test.rs:140:18:140:40 | TryExpr | test.rs:140:13:140:14 | v3 | provenance | | | test.rs:141:13:141:14 | v4 | test.rs:145:14:145:15 | v4 | provenance | | +| test.rs:141:18:141:22 | stdin | test.rs:141:18:141:36 | stdin.read_i64_le() [future, Ok] | provenance | MaD:24 | | test.rs:141:18:141:36 | stdin.read_i64_le() [future, Ok] | test.rs:141:18:141:42 | await ... [Ok] | provenance | | | test.rs:141:18:141:42 | await ... [Ok] | test.rs:141:18:141:43 | TryExpr | provenance | | | test.rs:141:18:141:43 | TryExpr | test.rs:141:13:141:14 | v4 | provenance | | -| test.rs:149:13:149:21 | mut stdin | test.rs:151:24:151:34 | [post] &mut buffer [&ref] | provenance | MaD:20 | +| test.rs:149:13:149:21 | mut stdin | test.rs:151:9:151:13 | stdin | provenance | | | test.rs:149:25:149:40 | ...::stdin | test.rs:149:25:149:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | test.rs:149:25:149:42 | ...::stdin(...) | test.rs:149:13:149:21 | mut stdin | provenance | | +| test.rs:151:9:151:13 | stdin | test.rs:151:24:151:34 | [post] &mut buffer [&ref] | provenance | MaD:20 | | test.rs:151:24:151:34 | [post] &mut buffer [&ref] | test.rs:151:29:151:34 | [post] buffer | provenance | | | test.rs:151:29:151:34 | [post] buffer | test.rs:152:15:152:20 | buffer | provenance | | | test.rs:152:15:152:20 | buffer | test.rs:152:14:152:20 | &buffer | provenance | | -| test.rs:158:13:158:22 | mut reader | test.rs:159:20:159:36 | reader.fill_buf() [future, Ok] | provenance | MaD:14 | +| test.rs:158:13:158:22 | mut reader | test.rs:159:20:159:25 | reader | provenance | | | test.rs:158:26:158:70 | ...::new(...) | test.rs:158:13:158:22 | mut reader | provenance | | | test.rs:158:52:158:67 | ...::stdin | test.rs:158:52:158:69 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | -| test.rs:158:52:158:69 | ...::stdin(...) | test.rs:158:26:158:70 | ...::new(...) | provenance | MaD:37 | +| test.rs:158:52:158:69 | ...::stdin(...) | test.rs:158:26:158:70 | ...::new(...) | provenance | MaD:35 | | test.rs:159:13:159:16 | data | test.rs:160:15:160:18 | data | provenance | | +| test.rs:159:20:159:25 | reader | test.rs:159:20:159:36 | reader.fill_buf() [future, Ok] | provenance | MaD:14 | | test.rs:159:20:159:36 | reader.fill_buf() [future, Ok] | test.rs:159:20:159:42 | await ... [Ok] | provenance | | | test.rs:159:20:159:42 | await ... [Ok] | test.rs:159:20:159:43 | TryExpr | provenance | | | test.rs:159:20:159:43 | TryExpr | test.rs:159:13:159:16 | data | provenance | | | test.rs:160:15:160:18 | data | test.rs:160:14:160:18 | &data | provenance | | -| test.rs:164:13:164:18 | reader | test.rs:165:20:165:34 | reader.buffer() | provenance | MaD:36 | +| test.rs:164:13:164:18 | reader | test.rs:165:20:165:25 | reader | provenance | | | test.rs:164:22:164:66 | ...::new(...) | test.rs:164:13:164:18 | reader | provenance | | | test.rs:164:48:164:63 | ...::stdin | test.rs:164:48:164:65 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | -| test.rs:164:48:164:65 | ...::stdin(...) | test.rs:164:22:164:66 | ...::new(...) | provenance | MaD:37 | -| test.rs:165:13:165:16 | data | test.rs:166:15:166:18 | data | provenance | | -| test.rs:165:20:165:34 | reader.buffer() | test.rs:165:13:165:16 | data | provenance | | -| test.rs:166:15:166:18 | data | test.rs:166:14:166:18 | &data | provenance | | -| test.rs:171:13:171:22 | mut reader | test.rs:172:26:172:36 | [post] &mut buffer [&ref] | provenance | MaD:16 | +| test.rs:164:48:164:65 | ...::stdin(...) | test.rs:164:22:164:66 | ...::new(...) | provenance | MaD:35 | +| test.rs:165:13:165:16 | data [&ref] | test.rs:166:15:166:18 | data [&ref] | provenance | | +| test.rs:165:20:165:25 | reader | test.rs:165:20:165:34 | reader.buffer() [&ref] | provenance | MaD:34 | +| test.rs:165:20:165:34 | reader.buffer() [&ref] | test.rs:165:13:165:16 | data [&ref] | provenance | | +| test.rs:166:15:166:18 | data [&ref] | test.rs:166:14:166:18 | &data | provenance | | +| test.rs:171:13:171:22 | mut reader | test.rs:172:9:172:14 | reader | provenance | | | test.rs:171:26:171:70 | ...::new(...) | test.rs:171:13:171:22 | mut reader | provenance | | | test.rs:171:52:171:67 | ...::stdin | test.rs:171:52:171:69 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | -| test.rs:171:52:171:69 | ...::stdin(...) | test.rs:171:26:171:70 | ...::new(...) | provenance | MaD:37 | +| test.rs:171:52:171:69 | ...::stdin(...) | test.rs:171:26:171:70 | ...::new(...) | provenance | MaD:35 | +| test.rs:172:9:172:14 | reader | test.rs:172:26:172:36 | [post] &mut buffer [&ref] | provenance | MaD:16 | | test.rs:172:26:172:36 | [post] &mut buffer [&ref] | test.rs:172:31:172:36 | [post] buffer | provenance | | | test.rs:172:31:172:36 | [post] buffer | test.rs:173:15:173:20 | buffer | provenance | | | test.rs:173:15:173:20 | buffer | test.rs:173:14:173:20 | &buffer | provenance | | -| test.rs:178:13:178:22 | mut reader | test.rs:179:33:179:43 | [post] &mut buffer [&ref] | provenance | MaD:17 | +| test.rs:178:13:178:22 | mut reader | test.rs:179:9:179:14 | reader | provenance | | | test.rs:178:26:178:70 | ...::new(...) | test.rs:178:13:178:22 | mut reader | provenance | | | test.rs:178:52:178:67 | ...::stdin | test.rs:178:52:178:69 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | -| test.rs:178:52:178:69 | ...::stdin(...) | test.rs:178:26:178:70 | ...::new(...) | provenance | MaD:37 | +| test.rs:178:52:178:69 | ...::stdin(...) | test.rs:178:26:178:70 | ...::new(...) | provenance | MaD:35 | +| test.rs:179:9:179:14 | reader | test.rs:179:33:179:43 | [post] &mut buffer [&ref] | provenance | MaD:17 | | test.rs:179:33:179:43 | [post] &mut buffer [&ref] | test.rs:179:38:179:43 | [post] buffer | provenance | | | test.rs:179:38:179:43 | [post] buffer | test.rs:180:15:180:20 | buffer | provenance | | -| test.rs:179:38:179:43 | [post] buffer | test.rs:181:14:181:22 | buffer[0] | provenance | | +| test.rs:179:38:179:43 | [post] buffer | test.rs:181:14:181:19 | buffer | provenance | | | test.rs:180:15:180:20 | buffer | test.rs:180:14:180:20 | &buffer | provenance | | -| test.rs:185:13:185:28 | mut reader_split | test.rs:186:14:186:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:39 | -| test.rs:185:13:185:28 | mut reader_split | test.rs:187:33:187:59 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:39 | +| test.rs:181:14:181:19 | buffer | test.rs:181:14:181:22 | buffer[0] | provenance | MaD:3 | +| test.rs:185:13:185:28 | mut reader_split | test.rs:186:14:186:25 | reader_split | provenance | | +| test.rs:185:13:185:28 | mut reader_split | test.rs:187:33:187:44 | reader_split | provenance | | | test.rs:185:32:185:76 | ...::new(...) | test.rs:185:32:185:88 | ... .split(...) | provenance | MaD:18 | | test.rs:185:32:185:88 | ... .split(...) | test.rs:185:13:185:28 | mut reader_split | provenance | | | test.rs:185:58:185:73 | ...::stdin | test.rs:185:58:185:75 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | -| test.rs:185:58:185:75 | ...::stdin(...) | test.rs:185:32:185:76 | ...::new(...) | provenance | MaD:37 | +| test.rs:185:58:185:75 | ...::stdin(...) | test.rs:185:32:185:76 | ...::new(...) | provenance | MaD:35 | +| test.rs:186:14:186:25 | reader_split | test.rs:186:14:186:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:37 | | test.rs:186:14:186:40 | reader_split.next_segment() [future, Ok, Some] | test.rs:186:14:186:46 | await ... [Ok, Some] | provenance | | | test.rs:186:14:186:46 | await ... [Ok, Some] | test.rs:186:14:186:47 | TryExpr [Some] | provenance | | | test.rs:186:14:186:47 | TryExpr [Some] | test.rs:186:14:186:56 | ... .unwrap() | provenance | MaD:28 | | test.rs:187:19:187:29 | Some(...) [Some] | test.rs:187:24:187:28 | chunk | provenance | | | test.rs:187:24:187:28 | chunk | test.rs:188:18:188:22 | chunk | provenance | | +| test.rs:187:33:187:44 | reader_split | test.rs:187:33:187:59 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:37 | | test.rs:187:33:187:59 | reader_split.next_segment() [future, Ok, Some] | test.rs:187:33:187:65 | await ... [Ok, Some] | provenance | | | test.rs:187:33:187:65 | await ... [Ok, Some] | test.rs:187:33:187:66 | TryExpr [Some] | provenance | | | test.rs:187:33:187:66 | TryExpr [Some] | test.rs:187:19:187:29 | Some(...) [Some] | provenance | | -| test.rs:193:13:193:18 | reader | test.rs:194:25:194:38 | reader.lines() | provenance | MaD:15 | +| test.rs:193:13:193:18 | reader | test.rs:194:25:194:30 | reader | provenance | | | test.rs:193:22:193:66 | ...::new(...) | test.rs:193:13:193:18 | reader | provenance | | | test.rs:193:48:193:63 | ...::stdin | test.rs:193:48:193:65 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | -| test.rs:193:48:193:65 | ...::stdin(...) | test.rs:193:22:193:66 | ...::new(...) | provenance | MaD:37 | -| test.rs:194:13:194:21 | mut lines | test.rs:195:14:195:30 | lines.next_line() [future, Ok, Some] | provenance | MaD:38 | -| test.rs:194:13:194:21 | mut lines | test.rs:196:32:196:48 | lines.next_line() [future, Ok, Some] | provenance | MaD:38 | +| test.rs:193:48:193:65 | ...::stdin(...) | test.rs:193:22:193:66 | ...::new(...) | provenance | MaD:35 | +| test.rs:194:13:194:21 | mut lines | test.rs:195:14:195:18 | lines | provenance | | +| test.rs:194:13:194:21 | mut lines | test.rs:196:32:196:36 | lines | provenance | | +| test.rs:194:25:194:30 | reader | test.rs:194:25:194:38 | reader.lines() | provenance | MaD:15 | | test.rs:194:25:194:38 | reader.lines() | test.rs:194:13:194:21 | mut lines | provenance | | +| test.rs:195:14:195:18 | lines | test.rs:195:14:195:30 | lines.next_line() [future, Ok, Some] | provenance | MaD:36 | | test.rs:195:14:195:30 | lines.next_line() [future, Ok, Some] | test.rs:195:14:195:36 | await ... [Ok, Some] | provenance | | | test.rs:195:14:195:36 | await ... [Ok, Some] | test.rs:195:14:195:37 | TryExpr [Some] | provenance | | | test.rs:195:14:195:37 | TryExpr [Some] | test.rs:195:14:195:46 | ... .unwrap() | provenance | MaD:28 | | test.rs:196:19:196:28 | Some(...) [Some] | test.rs:196:24:196:27 | line | provenance | | | test.rs:196:24:196:27 | line | test.rs:197:18:197:21 | line | provenance | | +| test.rs:196:32:196:36 | lines | test.rs:196:32:196:48 | lines.next_line() [future, Ok, Some] | provenance | MaD:36 | | test.rs:196:32:196:48 | lines.next_line() [future, Ok, Some] | test.rs:196:32:196:54 | await ... [Ok, Some] | provenance | | | test.rs:196:32:196:54 | await ... [Ok, Some] | test.rs:196:32:196:55 | TryExpr [Some] | provenance | | | test.rs:196:32:196:55 | TryExpr [Some] | test.rs:196:19:196:28 | Some(...) [Some] | provenance | | nodes | test.rs:13:22:13:35 | ...::stdin | semmle.label | ...::stdin | | test.rs:13:22:13:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:13:44:13:54 | [post] &mut buffer | semmle.label | [post] &mut buffer | | test.rs:13:44:13:54 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:13:49:13:54 | [post] buffer | semmle.label | [post] buffer | | test.rs:14:14:14:20 | &buffer | semmle.label | &buffer | @@ -248,7 +267,6 @@ nodes | test.rs:20:15:20:20 | buffer | semmle.label | buffer | | test.rs:25:22:25:35 | ...::stdin | semmle.label | ...::stdin | | test.rs:25:22:25:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:25:54:25:64 | [post] &mut buffer | semmle.label | [post] &mut buffer | | test.rs:25:54:25:64 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:25:59:25:64 | [post] buffer | semmle.label | [post] buffer | | test.rs:26:14:26:20 | &buffer | semmle.label | &buffer | @@ -262,7 +280,6 @@ nodes | test.rs:32:15:32:20 | buffer | semmle.label | buffer | | test.rs:37:9:37:22 | ...::stdin | semmle.label | ...::stdin | | test.rs:37:9:37:24 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:37:37:37:47 | [post] &mut buffer | semmle.label | [post] &mut buffer | | test.rs:37:37:37:47 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:37:42:37:47 | [post] buffer | semmle.label | [post] buffer | | test.rs:38:14:38:20 | &buffer | semmle.label | &buffer | @@ -276,6 +293,7 @@ nodes | test.rs:48:50:48:63 | ...::stdin | semmle.label | ...::stdin | | test.rs:48:50:48:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:49:13:49:16 | data | semmle.label | data | +| test.rs:49:20:49:25 | reader | semmle.label | reader | | test.rs:49:20:49:36 | reader.fill_buf() [Ok] | semmle.label | reader.fill_buf() [Ok] | | test.rs:49:20:49:37 | TryExpr | semmle.label | TryExpr | | test.rs:50:14:50:18 | &data | semmle.label | &data | @@ -284,14 +302,16 @@ nodes | test.rs:54:22:54:62 | ...::new(...) | semmle.label | ...::new(...) | | test.rs:54:46:54:59 | ...::stdin | semmle.label | ...::stdin | | test.rs:54:46:54:61 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:55:13:55:16 | data | semmle.label | data | -| test.rs:55:20:55:34 | reader.buffer() | semmle.label | reader.buffer() | +| test.rs:55:13:55:16 | data [&ref] | semmle.label | data [&ref] | +| test.rs:55:20:55:25 | reader | semmle.label | reader | +| test.rs:55:20:55:34 | reader.buffer() [&ref] | semmle.label | reader.buffer() [&ref] | | test.rs:56:14:56:18 | &data | semmle.label | &data | -| test.rs:56:15:56:18 | data | semmle.label | data | +| test.rs:56:15:56:18 | data [&ref] | semmle.label | data [&ref] | | test.rs:61:13:61:22 | mut reader | semmle.label | mut reader | | test.rs:61:26:61:66 | ...::new(...) | semmle.label | ...::new(...) | | test.rs:61:50:61:63 | ...::stdin | semmle.label | ...::stdin | | test.rs:61:50:61:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:62:9:62:14 | reader | semmle.label | reader | | test.rs:62:26:62:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:62:31:62:36 | [post] buffer | semmle.label | [post] buffer | | test.rs:63:14:63:20 | &buffer | semmle.label | &buffer | @@ -300,32 +320,39 @@ nodes | test.rs:68:26:68:66 | ...::new(...) | semmle.label | ...::new(...) | | test.rs:68:50:68:63 | ...::stdin | semmle.label | ...::stdin | | test.rs:68:50:68:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:69:9:69:14 | reader | semmle.label | reader | | test.rs:69:33:69:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:69:38:69:43 | [post] buffer | semmle.label | [post] buffer | | test.rs:70:14:70:20 | &buffer | semmle.label | &buffer | | test.rs:70:15:70:20 | buffer | semmle.label | buffer | +| test.rs:71:14:71:19 | buffer | semmle.label | buffer | | test.rs:71:14:71:22 | buffer[0] | semmle.label | buffer[0] | | test.rs:75:13:75:28 | mut reader_split | semmle.label | mut reader_split | | test.rs:75:32:75:72 | ...::new(...) | semmle.label | ...::new(...) | | test.rs:75:32:75:84 | ... .split(...) | semmle.label | ... .split(...) | | test.rs:75:56:75:69 | ...::stdin | semmle.label | ...::stdin | | test.rs:75:56:75:71 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:76:14:76:25 | reader_split | semmle.label | reader_split | | test.rs:76:14:76:32 | reader_split.next() [Some, Ok] | semmle.label | reader_split.next() [Some, Ok] | | test.rs:76:14:76:41 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] | | test.rs:76:14:76:50 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:77:19:77:29 | Some(...) [Some, Ok] | semmle.label | Some(...) [Some, Ok] | | test.rs:77:24:77:28 | chunk [Ok] | semmle.label | chunk [Ok] | +| test.rs:77:33:77:44 | reader_split | semmle.label | reader_split | | test.rs:77:33:77:51 | reader_split.next() [Some, Ok] | semmle.label | reader_split.next() [Some, Ok] | +| test.rs:78:18:78:22 | chunk [Ok] | semmle.label | chunk [Ok] | | test.rs:78:18:78:31 | chunk.unwrap() | semmle.label | chunk.unwrap() | | test.rs:83:13:83:18 | reader | semmle.label | reader | | test.rs:83:22:83:62 | ...::new(...) | semmle.label | ...::new(...) | | test.rs:83:46:83:59 | ...::stdin | semmle.label | ...::stdin | | test.rs:83:46:83:61 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:84:21:84:26 | reader | semmle.label | reader | | test.rs:84:21:84:34 | reader.lines() | semmle.label | reader.lines() | | test.rs:85:18:85:21 | line | semmle.label | line | | test.rs:109:13:109:21 | mut stdin | semmle.label | mut stdin | | test.rs:109:25:109:40 | ...::stdin | semmle.label | ...::stdin | | test.rs:109:25:109:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:111:22:111:26 | stdin | semmle.label | stdin | | test.rs:111:33:111:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:111:38:111:43 | [post] buffer | semmle.label | [post] buffer | | test.rs:112:14:112:20 | &buffer | semmle.label | &buffer | @@ -333,6 +360,7 @@ nodes | test.rs:116:13:116:21 | mut stdin | semmle.label | mut stdin | | test.rs:116:25:116:40 | ...::stdin | semmle.label | ...::stdin | | test.rs:116:25:116:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:118:22:118:26 | stdin | semmle.label | stdin | | test.rs:118:40:118:50 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:118:45:118:50 | [post] buffer | semmle.label | [post] buffer | | test.rs:119:14:119:20 | &buffer | semmle.label | &buffer | @@ -340,6 +368,7 @@ nodes | test.rs:123:13:123:21 | mut stdin | semmle.label | mut stdin | | test.rs:123:25:123:40 | ...::stdin | semmle.label | ...::stdin | | test.rs:123:25:123:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:125:22:125:26 | stdin | semmle.label | stdin | | test.rs:125:43:125:53 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:125:48:125:53 | [post] buffer | semmle.label | [post] buffer | | test.rs:126:14:126:20 | &buffer | semmle.label | &buffer | @@ -347,6 +376,7 @@ nodes | test.rs:130:13:130:21 | mut stdin | semmle.label | mut stdin | | test.rs:130:25:130:40 | ...::stdin | semmle.label | ...::stdin | | test.rs:130:25:130:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:132:9:132:13 | stdin | semmle.label | stdin | | test.rs:132:26:132:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:132:31:132:36 | [post] buffer | semmle.label | [post] buffer | | test.rs:133:14:133:20 | &buffer | semmle.label | &buffer | @@ -355,18 +385,22 @@ nodes | test.rs:137:25:137:40 | ...::stdin | semmle.label | ...::stdin | | test.rs:137:25:137:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:138:13:138:14 | v1 | semmle.label | v1 | +| test.rs:138:18:138:22 | stdin | semmle.label | stdin | | test.rs:138:18:138:32 | stdin.read_u8() [future, Ok] | semmle.label | stdin.read_u8() [future, Ok] | | test.rs:138:18:138:38 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:138:18:138:39 | TryExpr | semmle.label | TryExpr | | test.rs:139:13:139:14 | v2 | semmle.label | v2 | +| test.rs:139:18:139:22 | stdin | semmle.label | stdin | | test.rs:139:18:139:33 | stdin.read_i16() [future, Ok] | semmle.label | stdin.read_i16() [future, Ok] | | test.rs:139:18:139:39 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:139:18:139:40 | TryExpr | semmle.label | TryExpr | | test.rs:140:13:140:14 | v3 | semmle.label | v3 | +| test.rs:140:18:140:22 | stdin | semmle.label | stdin | | test.rs:140:18:140:33 | stdin.read_f32() [future, Ok] | semmle.label | stdin.read_f32() [future, Ok] | | test.rs:140:18:140:39 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:140:18:140:40 | TryExpr | semmle.label | TryExpr | | test.rs:141:13:141:14 | v4 | semmle.label | v4 | +| test.rs:141:18:141:22 | stdin | semmle.label | stdin | | test.rs:141:18:141:36 | stdin.read_i64_le() [future, Ok] | semmle.label | stdin.read_i64_le() [future, Ok] | | test.rs:141:18:141:42 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:141:18:141:43 | TryExpr | semmle.label | TryExpr | @@ -377,6 +411,7 @@ nodes | test.rs:149:13:149:21 | mut stdin | semmle.label | mut stdin | | test.rs:149:25:149:40 | ...::stdin | semmle.label | ...::stdin | | test.rs:149:25:149:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:151:9:151:13 | stdin | semmle.label | stdin | | test.rs:151:24:151:34 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:151:29:151:34 | [post] buffer | semmle.label | [post] buffer | | test.rs:152:14:152:20 | &buffer | semmle.label | &buffer | @@ -386,6 +421,7 @@ nodes | test.rs:158:52:158:67 | ...::stdin | semmle.label | ...::stdin | | test.rs:158:52:158:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:159:13:159:16 | data | semmle.label | data | +| test.rs:159:20:159:25 | reader | semmle.label | reader | | test.rs:159:20:159:36 | reader.fill_buf() [future, Ok] | semmle.label | reader.fill_buf() [future, Ok] | | test.rs:159:20:159:42 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:159:20:159:43 | TryExpr | semmle.label | TryExpr | @@ -395,14 +431,16 @@ nodes | test.rs:164:22:164:66 | ...::new(...) | semmle.label | ...::new(...) | | test.rs:164:48:164:63 | ...::stdin | semmle.label | ...::stdin | | test.rs:164:48:164:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:165:13:165:16 | data | semmle.label | data | -| test.rs:165:20:165:34 | reader.buffer() | semmle.label | reader.buffer() | +| test.rs:165:13:165:16 | data [&ref] | semmle.label | data [&ref] | +| test.rs:165:20:165:25 | reader | semmle.label | reader | +| test.rs:165:20:165:34 | reader.buffer() [&ref] | semmle.label | reader.buffer() [&ref] | | test.rs:166:14:166:18 | &data | semmle.label | &data | -| test.rs:166:15:166:18 | data | semmle.label | data | +| test.rs:166:15:166:18 | data [&ref] | semmle.label | data [&ref] | | test.rs:171:13:171:22 | mut reader | semmle.label | mut reader | | test.rs:171:26:171:70 | ...::new(...) | semmle.label | ...::new(...) | | test.rs:171:52:171:67 | ...::stdin | semmle.label | ...::stdin | | test.rs:171:52:171:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:172:9:172:14 | reader | semmle.label | reader | | test.rs:172:26:172:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:172:31:172:36 | [post] buffer | semmle.label | [post] buffer | | test.rs:173:14:173:20 | &buffer | semmle.label | &buffer | @@ -411,22 +449,26 @@ nodes | test.rs:178:26:178:70 | ...::new(...) | semmle.label | ...::new(...) | | test.rs:178:52:178:67 | ...::stdin | semmle.label | ...::stdin | | test.rs:178:52:178:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:179:9:179:14 | reader | semmle.label | reader | | test.rs:179:33:179:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:179:38:179:43 | [post] buffer | semmle.label | [post] buffer | | test.rs:180:14:180:20 | &buffer | semmle.label | &buffer | | test.rs:180:15:180:20 | buffer | semmle.label | buffer | +| test.rs:181:14:181:19 | buffer | semmle.label | buffer | | test.rs:181:14:181:22 | buffer[0] | semmle.label | buffer[0] | | test.rs:185:13:185:28 | mut reader_split | semmle.label | mut reader_split | | test.rs:185:32:185:76 | ...::new(...) | semmle.label | ...::new(...) | | test.rs:185:32:185:88 | ... .split(...) | semmle.label | ... .split(...) | | test.rs:185:58:185:73 | ...::stdin | semmle.label | ...::stdin | | test.rs:185:58:185:75 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:186:14:186:25 | reader_split | semmle.label | reader_split | | test.rs:186:14:186:40 | reader_split.next_segment() [future, Ok, Some] | semmle.label | reader_split.next_segment() [future, Ok, Some] | | test.rs:186:14:186:46 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | | test.rs:186:14:186:47 | TryExpr [Some] | semmle.label | TryExpr [Some] | | test.rs:186:14:186:56 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:187:19:187:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | | test.rs:187:24:187:28 | chunk | semmle.label | chunk | +| test.rs:187:33:187:44 | reader_split | semmle.label | reader_split | | test.rs:187:33:187:59 | reader_split.next_segment() [future, Ok, Some] | semmle.label | reader_split.next_segment() [future, Ok, Some] | | test.rs:187:33:187:65 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | | test.rs:187:33:187:66 | TryExpr [Some] | semmle.label | TryExpr [Some] | @@ -436,13 +478,16 @@ nodes | test.rs:193:48:193:63 | ...::stdin | semmle.label | ...::stdin | | test.rs:193:48:193:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:194:13:194:21 | mut lines | semmle.label | mut lines | +| test.rs:194:25:194:30 | reader | semmle.label | reader | | test.rs:194:25:194:38 | reader.lines() | semmle.label | reader.lines() | +| test.rs:195:14:195:18 | lines | semmle.label | lines | | test.rs:195:14:195:30 | lines.next_line() [future, Ok, Some] | semmle.label | lines.next_line() [future, Ok, Some] | | test.rs:195:14:195:36 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | | test.rs:195:14:195:37 | TryExpr [Some] | semmle.label | TryExpr [Some] | | test.rs:195:14:195:46 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:196:19:196:28 | Some(...) [Some] | semmle.label | Some(...) [Some] | | test.rs:196:24:196:27 | line | semmle.label | line | +| test.rs:196:32:196:36 | lines | semmle.label | lines | | test.rs:196:32:196:48 | lines.next_line() [future, Ok, Some] | semmle.label | lines.next_line() [future, Ok, Some] | | test.rs:196:32:196:54 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | | test.rs:196:32:196:55 | TryExpr [Some] | semmle.label | TryExpr [Some] | diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/InlineFlow.expected index 24a0cf78aec0..8777ff626eb3 100644 --- a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/InlineFlow.expected @@ -4,80 +4,44 @@ models | 3 | Source: <_ as warp::filter::Filter>::then; Argument[0].Parameter[0..7]; remote | | 4 | Source: ::to; Argument[0].Parameter[0..7]; remote | | 5 | Source: ::to; Argument[0].Parameter[0..7]; remote | -| 6 | Summary: ::into_inner; Argument[self]; ReturnValue.Field[0]; taint | -| 7 | Summary: ::into_inner; Argument[self]; ReturnValue.Field[1]; taint | -| 8 | Summary: ::into_inner; Argument[self]; ReturnValue.Field[2]; taint | -| 9 | Summary: ::into_inner; Argument[self]; ReturnValue; taint | -| 10 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | -| 11 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 6 | Summary: ::into_inner; Argument[self]; ReturnValue; taint | +| 7 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | +| 8 | Summary: ::as_str; Argument[self]; ReturnValue; value | edges | test.rs:11:31:11:31 | a | test.rs:13:14:13:14 | a | provenance | | -| test.rs:11:31:11:31 | a | test.rs:13:14:13:23 | a.as_str() | provenance | MaD:11 | | test.rs:11:31:11:31 | a | test.rs:14:14:14:14 | a | provenance | | -| test.rs:11:31:11:31 | a | test.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:10 | | test.rs:11:31:11:31 | a | test.rs:15:14:15:14 | a | provenance | | -| test.rs:13:14:13:14 | a | test.rs:13:14:13:23 | a.as_str() | provenance | MaD:11 | -| test.rs:14:14:14:14 | a | test.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:10 | +| test.rs:13:14:13:14 | a | test.rs:13:14:13:23 | a.as_str() | provenance | MaD:8 | +| test.rs:14:14:14:14 | a | test.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:7 | +| test.rs:22:14:22:19 | TuplePat | test.rs:24:14:24:14 | a | provenance | | +| test.rs:22:14:22:19 | TuplePat | test.rs:25:14:25:14 | b | provenance | | +| test.rs:48:14:48:30 | MyStruct {...} | test.rs:50:14:50:14 | a | provenance | | +| test.rs:48:14:48:30 | MyStruct {...} | test.rs:51:14:51:14 | b | provenance | | +| test.rs:58:14:58:15 | ms | test.rs:60:14:60:17 | ms.a | provenance | | +| test.rs:58:14:58:15 | ms | test.rs:61:14:61:17 | ms.b | provenance | | | test.rs:68:15:68:15 | a | test.rs:70:14:70:14 | a | provenance | | -| test.rs:98:9:98:31 | ...: ...::Path::<...> | test.rs:100:17:100:33 | path.into_inner() | provenance | MaD:9 | -| test.rs:98:9:98:31 | ...: ...::Path::<...> | test.rs:100:17:100:33 | path.into_inner() [tuple.0] | provenance | MaD:6 | -| test.rs:98:9:98:31 | ...: ...::Path::<...> | test.rs:100:17:100:33 | path.into_inner() [tuple.1] | provenance | MaD:7 | -| test.rs:98:9:98:31 | ...: ...::Path::<...> | test.rs:100:17:100:33 | path.into_inner() [tuple.2] | provenance | MaD:8 | +| test.rs:98:9:98:31 | ...: ...::Path::<...> | test.rs:100:17:100:20 | path | provenance | | | test.rs:100:13:100:13 | a | test.rs:101:14:101:14 | a | provenance | | -| test.rs:100:13:100:13 | a | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:11 | | test.rs:100:13:100:13 | a | test.rs:102:14:102:14 | a | provenance | | -| test.rs:100:13:100:13 | a | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:10 | | test.rs:100:13:100:13 | a | test.rs:103:14:103:14 | a | provenance | | -| test.rs:100:13:100:13 | a [tuple.0] | test.rs:101:14:101:14 | a [tuple.0] | provenance | | -| test.rs:100:13:100:13 | a [tuple.0] | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:11 | -| test.rs:100:13:100:13 | a [tuple.0] | test.rs:102:14:102:14 | a [tuple.0] | provenance | | -| test.rs:100:13:100:13 | a [tuple.0] | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:10 | -| test.rs:100:13:100:13 | a [tuple.0] | test.rs:103:14:103:14 | a | provenance | | -| test.rs:100:13:100:13 | a [tuple.1] | test.rs:101:14:101:14 | a [tuple.1] | provenance | | -| test.rs:100:13:100:13 | a [tuple.1] | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:11 | -| test.rs:100:13:100:13 | a [tuple.1] | test.rs:102:14:102:14 | a [tuple.1] | provenance | | -| test.rs:100:13:100:13 | a [tuple.1] | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:10 | -| test.rs:100:13:100:13 | a [tuple.1] | test.rs:103:14:103:14 | a | provenance | | -| test.rs:100:13:100:13 | a [tuple.2] | test.rs:101:14:101:14 | a [tuple.2] | provenance | | -| test.rs:100:13:100:13 | a [tuple.2] | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:11 | -| test.rs:100:13:100:13 | a [tuple.2] | test.rs:102:14:102:14 | a [tuple.2] | provenance | | -| test.rs:100:13:100:13 | a [tuple.2] | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:10 | -| test.rs:100:13:100:13 | a [tuple.2] | test.rs:103:14:103:14 | a | provenance | | +| test.rs:100:17:100:20 | path | test.rs:100:17:100:33 | path.into_inner() | provenance | MaD:6 | | test.rs:100:17:100:33 | path.into_inner() | test.rs:100:13:100:13 | a | provenance | | -| test.rs:100:17:100:33 | path.into_inner() [tuple.0] | test.rs:100:13:100:13 | a [tuple.0] | provenance | | -| test.rs:100:17:100:33 | path.into_inner() [tuple.1] | test.rs:100:13:100:13 | a [tuple.1] | provenance | | -| test.rs:100:17:100:33 | path.into_inner() [tuple.2] | test.rs:100:13:100:13 | a [tuple.2] | provenance | | -| test.rs:101:14:101:14 | a | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:11 | -| test.rs:101:14:101:14 | a [tuple.0] | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:11 | -| test.rs:101:14:101:14 | a [tuple.1] | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:11 | -| test.rs:101:14:101:14 | a [tuple.2] | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:11 | -| test.rs:102:14:102:14 | a | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:10 | -| test.rs:102:14:102:14 | a [tuple.0] | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:10 | -| test.rs:102:14:102:14 | a [tuple.1] | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:10 | -| test.rs:102:14:102:14 | a [tuple.2] | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:10 | -| test.rs:109:9:109:41 | ...: ...::Path::<...> | test.rs:111:22:111:38 | path.into_inner() [tuple.0] | provenance | MaD:6 | -| test.rs:109:9:109:41 | ...: ...::Path::<...> | test.rs:111:22:111:38 | path.into_inner() [tuple.1] | provenance | MaD:7 | -| test.rs:111:13:111:18 | TuplePat [tuple.0] | test.rs:111:14:111:14 | a | provenance | | -| test.rs:111:13:111:18 | TuplePat [tuple.1] | test.rs:111:17:111:17 | b | provenance | | -| test.rs:111:14:111:14 | a | test.rs:113:14:113:14 | a | provenance | | -| test.rs:111:17:111:17 | b | test.rs:114:14:114:14 | b | provenance | | -| test.rs:111:22:111:38 | path.into_inner() [tuple.0] | test.rs:111:13:111:18 | TuplePat [tuple.0] | provenance | | -| test.rs:111:22:111:38 | path.into_inner() [tuple.1] | test.rs:111:13:111:18 | TuplePat [tuple.1] | provenance | | +| test.rs:101:14:101:14 | a | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:8 | +| test.rs:102:14:102:14 | a | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:7 | +| test.rs:109:9:109:41 | ...: ...::Path::<...> | test.rs:111:22:111:25 | path | provenance | | +| test.rs:111:13:111:18 | TuplePat | test.rs:113:14:113:14 | a | provenance | | +| test.rs:111:13:111:18 | TuplePat | test.rs:114:14:114:14 | b | provenance | | +| test.rs:111:22:111:25 | path | test.rs:111:22:111:38 | path.into_inner() | provenance | MaD:6 | +| test.rs:111:22:111:38 | path.into_inner() | test.rs:111:13:111:18 | TuplePat | provenance | | +| test.rs:120:9:120:41 | ...: ...::Query::<...> | test.rs:122:14:122:14 | a | provenance | | | test.rs:127:5:127:20 | to | test.rs:129:9:129:31 | ...: ...::Path::<...> | provenance | Src:MaD:4 | -| test.rs:129:9:129:31 | ...: ...::Path::<...> | test.rs:131:17:131:33 | path.into_inner() | provenance | MaD:9 | -| test.rs:129:9:129:31 | ...: ...::Path::<...> | test.rs:131:17:131:33 | path.into_inner() [tuple.0] | provenance | MaD:6 | -| test.rs:129:9:129:31 | ...: ...::Path::<...> | test.rs:131:17:131:33 | path.into_inner() [tuple.1] | provenance | MaD:7 | -| test.rs:129:9:129:31 | ...: ...::Path::<...> | test.rs:131:17:131:33 | path.into_inner() [tuple.2] | provenance | MaD:8 | +| test.rs:129:9:129:31 | ...: ...::Path::<...> | test.rs:131:17:131:20 | path | provenance | | | test.rs:131:13:131:13 | a | test.rs:132:14:132:14 | a | provenance | | -| test.rs:131:13:131:13 | a [tuple.0] | test.rs:132:14:132:14 | a | provenance | | -| test.rs:131:13:131:13 | a [tuple.1] | test.rs:132:14:132:14 | a | provenance | | -| test.rs:131:13:131:13 | a [tuple.2] | test.rs:132:14:132:14 | a | provenance | | +| test.rs:131:17:131:20 | path | test.rs:131:17:131:33 | path.into_inner() | provenance | MaD:6 | | test.rs:131:17:131:33 | path.into_inner() | test.rs:131:13:131:13 | a | provenance | | -| test.rs:131:17:131:33 | path.into_inner() [tuple.0] | test.rs:131:13:131:13 | a [tuple.0] | provenance | | -| test.rs:131:17:131:33 | path.into_inner() [tuple.1] | test.rs:131:13:131:13 | a [tuple.1] | provenance | | -| test.rs:131:17:131:33 | path.into_inner() [tuple.2] | test.rs:131:13:131:13 | a [tuple.2] | provenance | | | test.rs:139:41:139:42 | to | test.rs:98:9:98:31 | ...: ...::Path::<...> | provenance | Src:MaD:5 | | test.rs:140:45:140:46 | to | test.rs:109:9:109:41 | ...: ...::Path::<...> | provenance | Src:MaD:5 | +| test.rs:141:41:141:42 | to | test.rs:120:9:120:41 | ...: ...::Query::<...> | provenance | Src:MaD:5 | | test.rs:242:33:242:35 | map | test.rs:242:38:242:46 | ...: String | provenance | Src:MaD:2 | | test.rs:242:38:242:46 | ...: String | test.rs:244:18:244:18 | a | provenance | | | test.rs:250:46:250:49 | then | test.rs:251:25:251:33 | ...: String | provenance | Src:MaD:3 | @@ -93,50 +57,43 @@ nodes | test.rs:14:14:14:14 | a | semmle.label | a | | test.rs:14:14:14:25 | a.as_bytes() | semmle.label | a.as_bytes() | | test.rs:15:14:15:14 | a | semmle.label | a | +| test.rs:22:14:22:19 | TuplePat | semmle.label | TuplePat | +| test.rs:24:14:24:14 | a | semmle.label | a | +| test.rs:25:14:25:14 | b | semmle.label | b | +| test.rs:48:14:48:30 | MyStruct {...} | semmle.label | MyStruct {...} | +| test.rs:50:14:50:14 | a | semmle.label | a | +| test.rs:51:14:51:14 | b | semmle.label | b | +| test.rs:58:14:58:15 | ms | semmle.label | ms | +| test.rs:60:14:60:17 | ms.a | semmle.label | ms.a | +| test.rs:61:14:61:17 | ms.b | semmle.label | ms.b | | test.rs:68:15:68:15 | a | semmle.label | a | | test.rs:70:14:70:14 | a | semmle.label | a | | test.rs:98:9:98:31 | ...: ...::Path::<...> | semmle.label | ...: ...::Path::<...> | | test.rs:100:13:100:13 | a | semmle.label | a | -| test.rs:100:13:100:13 | a [tuple.0] | semmle.label | a [tuple.0] | -| test.rs:100:13:100:13 | a [tuple.1] | semmle.label | a [tuple.1] | -| test.rs:100:13:100:13 | a [tuple.2] | semmle.label | a [tuple.2] | +| test.rs:100:17:100:20 | path | semmle.label | path | | test.rs:100:17:100:33 | path.into_inner() | semmle.label | path.into_inner() | -| test.rs:100:17:100:33 | path.into_inner() [tuple.0] | semmle.label | path.into_inner() [tuple.0] | -| test.rs:100:17:100:33 | path.into_inner() [tuple.1] | semmle.label | path.into_inner() [tuple.1] | -| test.rs:100:17:100:33 | path.into_inner() [tuple.2] | semmle.label | path.into_inner() [tuple.2] | | test.rs:101:14:101:14 | a | semmle.label | a | -| test.rs:101:14:101:14 | a [tuple.0] | semmle.label | a [tuple.0] | -| test.rs:101:14:101:14 | a [tuple.1] | semmle.label | a [tuple.1] | -| test.rs:101:14:101:14 | a [tuple.2] | semmle.label | a [tuple.2] | | test.rs:101:14:101:23 | a.as_str() | semmle.label | a.as_str() | | test.rs:102:14:102:14 | a | semmle.label | a | -| test.rs:102:14:102:14 | a [tuple.0] | semmle.label | a [tuple.0] | -| test.rs:102:14:102:14 | a [tuple.1] | semmle.label | a [tuple.1] | -| test.rs:102:14:102:14 | a [tuple.2] | semmle.label | a [tuple.2] | | test.rs:102:14:102:25 | a.as_bytes() | semmle.label | a.as_bytes() | | test.rs:103:14:103:14 | a | semmle.label | a | | test.rs:109:9:109:41 | ...: ...::Path::<...> | semmle.label | ...: ...::Path::<...> | -| test.rs:111:13:111:18 | TuplePat [tuple.0] | semmle.label | TuplePat [tuple.0] | -| test.rs:111:13:111:18 | TuplePat [tuple.1] | semmle.label | TuplePat [tuple.1] | -| test.rs:111:14:111:14 | a | semmle.label | a | -| test.rs:111:17:111:17 | b | semmle.label | b | -| test.rs:111:22:111:38 | path.into_inner() [tuple.0] | semmle.label | path.into_inner() [tuple.0] | -| test.rs:111:22:111:38 | path.into_inner() [tuple.1] | semmle.label | path.into_inner() [tuple.1] | +| test.rs:111:13:111:18 | TuplePat | semmle.label | TuplePat | +| test.rs:111:22:111:25 | path | semmle.label | path | +| test.rs:111:22:111:38 | path.into_inner() | semmle.label | path.into_inner() | | test.rs:113:14:113:14 | a | semmle.label | a | | test.rs:114:14:114:14 | b | semmle.label | b | +| test.rs:120:9:120:41 | ...: ...::Query::<...> | semmle.label | ...: ...::Query::<...> | +| test.rs:122:14:122:14 | a | semmle.label | a | | test.rs:127:5:127:20 | to | semmle.label | to | | test.rs:129:9:129:31 | ...: ...::Path::<...> | semmle.label | ...: ...::Path::<...> | | test.rs:131:13:131:13 | a | semmle.label | a | -| test.rs:131:13:131:13 | a [tuple.0] | semmle.label | a [tuple.0] | -| test.rs:131:13:131:13 | a [tuple.1] | semmle.label | a [tuple.1] | -| test.rs:131:13:131:13 | a [tuple.2] | semmle.label | a [tuple.2] | +| test.rs:131:17:131:20 | path | semmle.label | path | | test.rs:131:17:131:33 | path.into_inner() | semmle.label | path.into_inner() | -| test.rs:131:17:131:33 | path.into_inner() [tuple.0] | semmle.label | path.into_inner() [tuple.0] | -| test.rs:131:17:131:33 | path.into_inner() [tuple.1] | semmle.label | path.into_inner() [tuple.1] | -| test.rs:131:17:131:33 | path.into_inner() [tuple.2] | semmle.label | path.into_inner() [tuple.2] | | test.rs:132:14:132:14 | a | semmle.label | a | | test.rs:139:41:139:42 | to | semmle.label | to | | test.rs:140:45:140:46 | to | semmle.label | to | +| test.rs:141:41:141:42 | to | semmle.label | to | | test.rs:242:33:242:35 | map | semmle.label | map | | test.rs:242:38:242:46 | ...: String | semmle.label | ...: String | | test.rs:244:18:244:18 | a | semmle.label | a | @@ -155,12 +112,19 @@ testFailures | test.rs:13:14:13:23 | a.as_str() | test.rs:11:31:11:31 | a | test.rs:13:14:13:23 | a.as_str() | $@ | test.rs:11:31:11:31 | a | a | | test.rs:14:14:14:25 | a.as_bytes() | test.rs:11:31:11:31 | a | test.rs:14:14:14:25 | a.as_bytes() | $@ | test.rs:11:31:11:31 | a | a | | test.rs:15:14:15:14 | a | test.rs:11:31:11:31 | a | test.rs:15:14:15:14 | a | $@ | test.rs:11:31:11:31 | a | a | +| test.rs:24:14:24:14 | a | test.rs:22:14:22:19 | TuplePat | test.rs:24:14:24:14 | a | $@ | test.rs:22:14:22:19 | TuplePat | TuplePat | +| test.rs:25:14:25:14 | b | test.rs:22:14:22:19 | TuplePat | test.rs:25:14:25:14 | b | $@ | test.rs:22:14:22:19 | TuplePat | TuplePat | +| test.rs:50:14:50:14 | a | test.rs:48:14:48:30 | MyStruct {...} | test.rs:50:14:50:14 | a | $@ | test.rs:48:14:48:30 | MyStruct {...} | MyStruct {...} | +| test.rs:51:14:51:14 | b | test.rs:48:14:48:30 | MyStruct {...} | test.rs:51:14:51:14 | b | $@ | test.rs:48:14:48:30 | MyStruct {...} | MyStruct {...} | +| test.rs:60:14:60:17 | ms.a | test.rs:58:14:58:15 | ms | test.rs:60:14:60:17 | ms.a | $@ | test.rs:58:14:58:15 | ms | ms | +| test.rs:61:14:61:17 | ms.b | test.rs:58:14:58:15 | ms | test.rs:61:14:61:17 | ms.b | $@ | test.rs:58:14:58:15 | ms | ms | | test.rs:70:14:70:14 | a | test.rs:68:15:68:15 | a | test.rs:70:14:70:14 | a | $@ | test.rs:68:15:68:15 | a | a | | test.rs:101:14:101:23 | a.as_str() | test.rs:139:41:139:42 | to | test.rs:101:14:101:23 | a.as_str() | $@ | test.rs:139:41:139:42 | to | to | | test.rs:102:14:102:25 | a.as_bytes() | test.rs:139:41:139:42 | to | test.rs:102:14:102:25 | a.as_bytes() | $@ | test.rs:139:41:139:42 | to | to | | test.rs:103:14:103:14 | a | test.rs:139:41:139:42 | to | test.rs:103:14:103:14 | a | $@ | test.rs:139:41:139:42 | to | to | | test.rs:113:14:113:14 | a | test.rs:140:45:140:46 | to | test.rs:113:14:113:14 | a | $@ | test.rs:140:45:140:46 | to | to | | test.rs:114:14:114:14 | b | test.rs:140:45:140:46 | to | test.rs:114:14:114:14 | b | $@ | test.rs:140:45:140:46 | to | to | +| test.rs:122:14:122:14 | a | test.rs:141:41:141:42 | to | test.rs:122:14:122:14 | a | $@ | test.rs:141:41:141:42 | to | to | | test.rs:132:14:132:14 | a | test.rs:127:5:127:20 | to | test.rs:132:14:132:14 | a | $@ | test.rs:127:5:127:20 | to | to | | test.rs:244:18:244:18 | a | test.rs:242:33:242:35 | map | test.rs:244:18:244:18 | a | $@ | test.rs:242:33:242:35 | map | map | | test.rs:252:22:252:22 | a | test.rs:250:46:250:49 | then | test.rs:252:22:252:22 | a | $@ | test.rs:250:46:250:49 | then | then | diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/test.rs b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/test.rs index 3bcea0dee4e3..124f7615ef1d 100644 --- a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/test.rs +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/test.rs @@ -21,8 +21,8 @@ mod poem_test { fn my_poem_handler_2( Path((a, b)): Path<(String, String)>, // $ Alert[rust/summary/taint-sources] ) -> String { - sink(a); // $ MISSING: hasTaintFlow - sink(b); // $ MISSING: hasTaintFlow + sink(a); // $ hasTaintFlow + sink(b); // $ hasTaintFlow "".to_string() } @@ -47,8 +47,8 @@ mod poem_test { fn my_poem_handler_4( Path(MyStruct { a, b }): Path, // $ Alert[rust/summary/taint-sources] ) -> String { - sink(a); // $ MISSING: hasTaintFlow - sink(b); // $ MISSING: hasTaintFlow + sink(a); // $ hasTaintFlow + sink(b); // $ hasTaintFlow "".to_string() } @@ -57,8 +57,8 @@ mod poem_test { fn my_poem_handler_5( Path(ms): Path, // $ Alert[rust/summary/taint-sources] ) -> String { - sink(ms.a); // $ MISSING: hasTaintFlow - sink(ms.b); // $ MISSING: hasTaintFlow + sink(ms.a); // $ hasTaintFlow + sink(ms.b); // $ hasTaintFlow "".to_string() } @@ -119,7 +119,7 @@ mod actix_test { async fn my_actix_handler_3( web::Query(a): web::Query, ) -> String { - sink(a); // $ MISSING: hasTaintFlow + sink(a); // $ hasTaintFlow=my_actix_handler_3 "".to_string() } diff --git a/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected index ccda75006f94..a8f80f6f39cf 100644 --- a/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected @@ -1,2 +1,2 @@ -multipleCallTargets +multipleResolvedTargets | main.rs:52:14:52:29 | ...::from(...) | diff --git a/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected index 6cb680fa6ca9..ddc016e3d376 100644 --- a/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected @@ -1,25 +1,27 @@ models -| 1 | Summary: <_ as alloc::string::ToString>::to_string; Argument[self]; ReturnValue; taint | +| 1 | Summary: <_ as alloc::string::ToString>::to_string; Argument[self].Reference; ReturnValue; taint | | 2 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint | | 3 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | | 4 | Summary: <_ as core::ops::arith::Add>::add; Argument[self]; ReturnValue; taint | -| 5 | Summary: ::from; Argument[0].Reference; ReturnValue; value | -| 6 | Summary: ::add; Argument[self]; ReturnValue; value | -| 7 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 8 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | -| 9 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | +| 5 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 6 | Summary: ::from; Argument[0].Reference; ReturnValue; value | +| 7 | Summary: ::add; Argument[self]; ReturnValue; value | +| 8 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 9 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | +| 10 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | edges +| main.rs:26:9:26:9 | s | main.rs:27:19:27:19 | s | provenance | | | main.rs:26:9:26:9 | s | main.rs:27:19:27:25 | s[...] | provenance | | | main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | s | provenance | | | main.rs:27:9:27:14 | sliced [&ref] | main.rs:28:16:28:21 | sliced | provenance | | | main.rs:27:18:27:25 | &... [&ref] | main.rs:27:9:27:14 | sliced [&ref] | provenance | | +| main.rs:27:19:27:19 | s | main.rs:27:19:27:25 | s[...] | provenance | MaD:5 | | main.rs:27:19:27:25 | s[...] | main.rs:27:18:27:25 | &... [&ref] | provenance | | -| main.rs:32:9:32:10 | s1 | main.rs:35:9:35:10 | s4 | provenance | | | main.rs:32:9:32:10 | s1 | main.rs:35:14:35:15 | s1 | provenance | | | main.rs:32:14:32:23 | source(...) | main.rs:32:9:32:10 | s1 | provenance | | | main.rs:35:9:35:10 | s4 | main.rs:38:10:38:11 | s4 | provenance | | | main.rs:35:14:35:15 | s1 | main.rs:35:14:35:20 | ... + ... | provenance | MaD:4 | -| main.rs:35:14:35:15 | s1 | main.rs:35:14:35:20 | ... + ... | provenance | MaD:6 | +| main.rs:35:14:35:15 | s1 | main.rs:35:14:35:20 | ... + ... | provenance | MaD:7 | | main.rs:35:14:35:20 | ... + ... | main.rs:35:9:35:10 | s4 | provenance | | | main.rs:43:9:43:10 | s1 | main.rs:46:34:46:35 | s1 | provenance | | | main.rs:43:14:43:23 | source(...) | main.rs:43:9:43:10 | s1 | provenance | | @@ -30,45 +32,46 @@ edges | main.rs:52:9:52:10 | s2 | main.rs:53:10:53:11 | s2 | provenance | | | main.rs:52:14:52:29 | ...::from(...) | main.rs:52:9:52:10 | s2 | provenance | | | main.rs:52:27:52:28 | s1 | main.rs:52:14:52:29 | ...::from(...) | provenance | MaD:2 | -| main.rs:52:27:52:28 | s1 | main.rs:52:14:52:29 | ...::from(...) | provenance | MaD:5 | -| main.rs:57:9:57:10 | s1 | main.rs:58:14:58:27 | s1.to_string() | provenance | MaD:1 | +| main.rs:52:27:52:28 | s1 | main.rs:52:14:52:29 | ...::from(...) | provenance | MaD:6 | +| main.rs:57:9:57:10 | s1 | main.rs:58:14:58:15 | s1 | provenance | | | main.rs:57:14:57:29 | source_slice(...) | main.rs:57:9:57:10 | s1 | provenance | | | main.rs:58:9:58:10 | s2 | main.rs:59:10:59:11 | s2 | provenance | | +| main.rs:58:14:58:15 | s1 | main.rs:58:14:58:27 | s1.to_string() | provenance | MaD:1 | | main.rs:58:14:58:27 | s1.to_string() | main.rs:58:9:58:10 | s2 | provenance | | | main.rs:63:9:63:9 | s | main.rs:64:16:64:16 | s | provenance | | -| main.rs:63:9:63:9 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:7 | | main.rs:63:13:63:22 | source(...) | main.rs:63:9:63:9 | s | provenance | | -| main.rs:64:16:64:16 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:7 | +| main.rs:64:16:64:16 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:8 | | main.rs:68:9:68:9 | s | main.rs:70:34:70:61 | MacroExpr | provenance | | | main.rs:68:9:68:9 | s | main.rs:73:34:73:59 | MacroExpr | provenance | | | main.rs:68:13:68:22 | source(...) | main.rs:68:9:68:9 | s | provenance | | | main.rs:70:9:70:18 | formatted1 | main.rs:71:10:71:19 | formatted1 | provenance | | | main.rs:70:22:70:62 | ...::format(...) | main.rs:70:9:70:18 | formatted1 | provenance | | -| main.rs:70:34:70:61 | MacroExpr | main.rs:70:22:70:62 | ...::format(...) | provenance | MaD:8 | +| main.rs:70:34:70:61 | MacroExpr | main.rs:70:22:70:62 | ...::format(...) | provenance | MaD:9 | | main.rs:73:9:73:18 | formatted2 | main.rs:74:10:74:19 | formatted2 | provenance | | | main.rs:73:22:73:60 | ...::format(...) | main.rs:73:9:73:18 | formatted2 | provenance | | -| main.rs:73:34:73:59 | MacroExpr | main.rs:73:22:73:60 | ...::format(...) | provenance | MaD:8 | +| main.rs:73:34:73:59 | MacroExpr | main.rs:73:22:73:60 | ...::format(...) | provenance | MaD:9 | | main.rs:76:9:76:13 | width | main.rs:77:34:77:74 | MacroExpr | provenance | | | main.rs:76:17:76:32 | source_usize(...) | main.rs:76:9:76:13 | width | provenance | | | main.rs:77:9:77:18 | formatted3 | main.rs:78:10:78:19 | formatted3 | provenance | | | main.rs:77:22:77:75 | ...::format(...) | main.rs:77:9:77:18 | formatted3 | provenance | | -| main.rs:77:34:77:74 | MacroExpr | main.rs:77:22:77:75 | ...::format(...) | provenance | MaD:8 | +| main.rs:77:34:77:74 | MacroExpr | main.rs:77:22:77:75 | ...::format(...) | provenance | MaD:9 | | main.rs:82:9:82:10 | s1 | main.rs:86:18:86:25 | MacroExpr | provenance | | | main.rs:82:9:82:10 | s1 | main.rs:87:18:87:32 | MacroExpr | provenance | | | main.rs:82:14:82:23 | source(...) | main.rs:82:9:82:10 | s1 | provenance | | | main.rs:86:18:86:25 | ...::format(...) | main.rs:86:18:86:25 | { ... } | provenance | | | main.rs:86:18:86:25 | ...::must_use(...) | main.rs:86:10:86:26 | MacroExpr | provenance | | -| main.rs:86:18:86:25 | MacroExpr | main.rs:86:18:86:25 | ...::format(...) | provenance | MaD:8 | -| main.rs:86:18:86:25 | { ... } | main.rs:86:18:86:25 | ...::must_use(...) | provenance | MaD:9 | +| main.rs:86:18:86:25 | MacroExpr | main.rs:86:18:86:25 | ...::format(...) | provenance | MaD:9 | +| main.rs:86:18:86:25 | { ... } | main.rs:86:18:86:25 | ...::must_use(...) | provenance | MaD:10 | | main.rs:87:18:87:32 | ...::format(...) | main.rs:87:18:87:32 | { ... } | provenance | | | main.rs:87:18:87:32 | ...::must_use(...) | main.rs:87:10:87:33 | MacroExpr | provenance | | -| main.rs:87:18:87:32 | MacroExpr | main.rs:87:18:87:32 | ...::format(...) | provenance | MaD:8 | -| main.rs:87:18:87:32 | { ... } | main.rs:87:18:87:32 | ...::must_use(...) | provenance | MaD:9 | +| main.rs:87:18:87:32 | MacroExpr | main.rs:87:18:87:32 | ...::format(...) | provenance | MaD:9 | +| main.rs:87:18:87:32 | { ... } | main.rs:87:18:87:32 | ...::must_use(...) | provenance | MaD:10 | nodes | main.rs:26:9:26:9 | s | semmle.label | s | | main.rs:26:13:26:22 | source(...) | semmle.label | source(...) | | main.rs:27:9:27:14 | sliced [&ref] | semmle.label | sliced [&ref] | | main.rs:27:18:27:25 | &... [&ref] | semmle.label | &... [&ref] | +| main.rs:27:19:27:19 | s | semmle.label | s | | main.rs:27:19:27:25 | s[...] | semmle.label | s[...] | | main.rs:28:16:28:21 | sliced | semmle.label | sliced | | main.rs:32:9:32:10 | s1 | semmle.label | s1 | @@ -91,6 +94,7 @@ nodes | main.rs:57:9:57:10 | s1 | semmle.label | s1 | | main.rs:57:14:57:29 | source_slice(...) | semmle.label | source_slice(...) | | main.rs:58:9:58:10 | s2 | semmle.label | s2 | +| main.rs:58:14:58:15 | s1 | semmle.label | s1 | | main.rs:58:14:58:27 | s1.to_string() | semmle.label | s1.to_string() | | main.rs:59:10:59:11 | s2 | semmle.label | s2 | | main.rs:63:9:63:9 | s | semmle.label | s | diff --git a/rust/ql/test/library-tests/dataflow/strings/main.rs b/rust/ql/test/library-tests/dataflow/strings/main.rs index 633d9f42f463..93054834a2ac 100644 --- a/rust/ql/test/library-tests/dataflow/strings/main.rs +++ b/rust/ql/test/library-tests/dataflow/strings/main.rs @@ -61,7 +61,7 @@ fn string_to_string() { fn as_str() { let s = source(67); - sink_slice(s.as_str()); // $ hasValueFlow=67 + sink_slice(s.as_str()); // $ hasTaintFlow=67 -- `s.as_str()` has type `&str`, so an implicit deref is needed at the sink } fn format_args_built_in() { diff --git a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected index fa32f2201b24..9799d66b124a 100644 --- a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected @@ -1,17 +1,19 @@ -| 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 | -| main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | -| main.rs:13:14:13:14 | 1 | main.rs:13:10:13:14 | ... + ... | -| main.rs:18:11:18:11 | a | main.rs:18:10:18:11 | - ... | -| main.rs:23:13:23:13 | a | main.rs:23:13:23:19 | a as u8 | -| main.rs:24:10:24:10 | b | main.rs:24:10:24:17 | b as i64 | -| main.rs:24:10:24:17 | [post] b as i64 | main.rs:24:10:24:10 | [post] b | -| main.rs:29:23:29:23 | i | main.rs:29:17:29:23 | FormatArgsExpr | -| main.rs:33:24:33:24 | s | main.rs:33:18:33:24 | FormatArgsExpr | -| main.rs:38:23:38:23 | s | main.rs:38:23:38:29 | s[...] | -| main.rs:49:24:49:24 | i | main.rs:49:18:49:24 | FormatArgsExpr | -| main.rs:54:14:54:16 | arr | main.rs:54:14:54:19 | arr[1] | -| 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] | +| main.rs:16:5:16:5 | [post] b [borrowed] | main.rs:16:5:16:5 | [SSA] b | +| main.rs:20:5:20:5 | [post] c [borrowed] | main.rs:20:5:20:5 | [SSA] c | +| main.rs:31:13:31:13 | a | main.rs:31:13:31:19 | a as u8 | +| main.rs:32:10:32:10 | b | main.rs:32:10:32:17 | b as i64 | +| main.rs:32:10:32:17 | [post] b as i64 | main.rs:32:10:32:10 | [post] b | +| main.rs:37:23:37:23 | i | main.rs:37:17:37:23 | FormatArgsExpr | +| main.rs:41:24:41:24 | s | main.rs:41:18:41:24 | FormatArgsExpr | +| main.rs:46:23:46:23 | [post] s [borrowed] | main.rs:46:23:46:23 | [post] s | +| main.rs:46:23:46:23 | s | main.rs:46:23:46:29 | s[...] | +| main.rs:46:23:46:29 | s[...] [pre-dereferenced] | main.rs:46:23:46:29 | s[...] | +| main.rs:57:24:57:24 | i | main.rs:57:18:57:24 | FormatArgsExpr | +| main.rs:62:14:62:16 | [post] arr [borrowed] | main.rs:62:14:62:16 | [post] arr | +| main.rs:62:14:62:19 | arr[1] [pre-dereferenced] | main.rs:62:14:62:19 | arr[1] | +| main.rs:72:24:72:24 | [post] s [borrowed] | main.rs:72:24:72:24 | [post] s | +| main.rs:72:24:72:27 | s[1] | main.rs:72:18:72:27 | FormatArgsExpr | +| main.rs:72:24:72:27 | s[1] [pre-dereferenced] | main.rs:72:24:72:27 | s[1] | +| main.rs:77:9:77:12 | [post] arr2 [borrowed] | main.rs:77:9:77:12 | [post] arr2 | +| main.rs:77:9:77:15 | arr2[1] [pre-dereferenced] | main.rs:77:9:77:15 | arr2[1] | diff --git a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected index a8f0b6321f5d..c43938341123 100644 --- a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected @@ -1,54 +1,80 @@ models -| 1 | Summary: ::neg; Argument[self]; ReturnValue; taint | +| 1 | Summary: <_ as core::ops::arith::Add>::add; Argument[self]; ReturnValue; taint | +| 2 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 3 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint | +| 4 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 5 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self]; ReturnValue; taint | +| 6 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 7 | Summary: ::neg; Argument[self]; ReturnValue; taint | edges -| main.rs:12:9:12:9 | a | main.rs:13:10:13:14 | ... + ... | provenance | | +| main.rs:12:9:12:9 | a | main.rs:13:10:13:10 | a | provenance | | | main.rs:12:13:12:22 | source(...) | main.rs:12:9:12:9 | a | provenance | | -| main.rs:17:9:17:9 | a | main.rs:18:10:18:11 | - ... | provenance | | -| main.rs:17:9:17:9 | a | main.rs:18:11:18:11 | a | provenance | | -| main.rs:17:13:17:22 | source(...) | main.rs:17:9:17:9 | a | provenance | | -| main.rs:18:11:18:11 | a | main.rs:18:10:18:11 | - ... | provenance | MaD:1 | -| main.rs:22:9:22:9 | a | main.rs:23:9:23:9 | b | provenance | | -| main.rs:22:13:22:22 | source(...) | main.rs:22:9:22:9 | a | provenance | | -| main.rs:23:9:23:9 | b | main.rs:24:10:24:17 | b as i64 | provenance | | -| main.rs:37:13:37:13 | s | main.rs:38:23:38:29 | s[...] | provenance | | -| main.rs:37:17:37:26 | source(...) | main.rs:37:13:37:13 | s | provenance | | -| main.rs:38:13:38:18 | sliced [&ref] | main.rs:39:14:39:19 | sliced | provenance | | -| main.rs:38:22:38:29 | &... [&ref] | main.rs:38:13:38:18 | sliced [&ref] | provenance | | -| main.rs:38:23:38:29 | s[...] | main.rs:38:22:38:29 | &... [&ref] | provenance | | -| main.rs:53:13:53:15 | arr | main.rs:54:14:54:19 | arr[1] | provenance | | -| main.rs:53:19:53:28 | source(...) | main.rs:53:13:53:15 | arr | provenance | | -| main.rs:69:9:69:12 | [post] arr2 [element] | main.rs:70:14:70:17 | arr2 | provenance | | -| main.rs:69:19:69:28 | source(...) | main.rs:69:9:69:12 | [post] arr2 [element] | provenance | | +| main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | provenance | MaD:1 | +| main.rs:15:9:15:13 | mut b | main.rs:16:5:16:5 | b | provenance | | +| main.rs:15:17:15:26 | source(...) | main.rs:15:9:15:13 | mut b | provenance | | +| main.rs:16:5:16:5 | b | main.rs:17:10:17:10 | b | provenance | MaD:4 | +| main.rs:20:10:20:19 | source(...) | main.rs:21:10:21:10 | c | provenance | MaD:2 | +| main.rs:20:10:20:19 | source(...) | main.rs:21:10:21:10 | c | provenance | MaD:3 | +| main.rs:25:9:25:9 | a | main.rs:26:11:26:11 | a | provenance | | +| main.rs:25:13:25:22 | source(...) | main.rs:25:9:25:9 | a | provenance | | +| main.rs:26:11:26:11 | a | main.rs:26:10:26:11 | - ... | provenance | MaD:5 | +| main.rs:26:11:26:11 | a | main.rs:26:10:26:11 | - ... | provenance | MaD:7 | +| main.rs:30:9:30:9 | a | main.rs:31:9:31:9 | b | provenance | | +| main.rs:30:13:30:22 | source(...) | main.rs:30:9:30:9 | a | provenance | | +| main.rs:31:9:31:9 | b | main.rs:32:10:32:17 | b as i64 | provenance | | +| main.rs:45:13:45:13 | s | main.rs:46:23:46:23 | s | provenance | | +| main.rs:45:13:45:13 | s | main.rs:46:23:46:29 | s[...] | provenance | | +| main.rs:45:17:45:26 | source(...) | main.rs:45:13:45:13 | s | provenance | | +| main.rs:46:13:46:18 | sliced [&ref] | main.rs:47:14:47:19 | sliced | provenance | | +| main.rs:46:22:46:29 | &... [&ref] | main.rs:46:13:46:18 | sliced [&ref] | provenance | | +| main.rs:46:23:46:23 | s | main.rs:46:23:46:29 | s[...] | provenance | MaD:6 | +| main.rs:46:23:46:29 | s[...] | main.rs:46:22:46:29 | &... [&ref] | provenance | | +| main.rs:61:13:61:15 | arr | main.rs:62:14:62:16 | arr | provenance | | +| main.rs:61:19:61:28 | source(...) | main.rs:61:13:61:15 | arr | provenance | | +| main.rs:62:14:62:16 | arr | main.rs:62:14:62:19 | arr[1] | provenance | MaD:6 | +| main.rs:77:9:77:12 | [post] arr2 [element] | main.rs:78:14:78:17 | arr2 | provenance | | +| main.rs:77:19:77:28 | source(...) | main.rs:77:9:77:12 | [post] arr2 [element] | provenance | | nodes | main.rs:12:9:12:9 | a | semmle.label | a | | main.rs:12:13:12:22 | source(...) | semmle.label | source(...) | +| main.rs:13:10:13:10 | a | semmle.label | a | | main.rs:13:10:13:14 | ... + ... | semmle.label | ... + ... | -| main.rs:17:9:17:9 | a | semmle.label | a | -| main.rs:17:13:17:22 | source(...) | semmle.label | source(...) | -| main.rs:18:10:18:11 | - ... | semmle.label | - ... | -| main.rs:18:11:18:11 | a | semmle.label | a | -| main.rs:22:9:22:9 | a | semmle.label | a | -| main.rs:22:13:22:22 | source(...) | semmle.label | source(...) | -| main.rs:23:9:23:9 | b | semmle.label | b | -| main.rs:24:10:24:17 | b as i64 | semmle.label | b as i64 | -| main.rs:37:13:37:13 | s | semmle.label | s | -| main.rs:37:17:37:26 | source(...) | semmle.label | source(...) | -| main.rs:38:13:38:18 | sliced [&ref] | semmle.label | sliced [&ref] | -| main.rs:38:22:38:29 | &... [&ref] | semmle.label | &... [&ref] | -| main.rs:38:23:38:29 | s[...] | semmle.label | s[...] | -| main.rs:39:14:39:19 | sliced | semmle.label | sliced | -| main.rs:53:13:53:15 | arr | semmle.label | arr | -| main.rs:53:19:53:28 | source(...) | semmle.label | source(...) | -| main.rs:54:14:54:19 | arr[1] | semmle.label | arr[1] | -| main.rs:69:9:69:12 | [post] arr2 [element] | semmle.label | [post] arr2 [element] | -| main.rs:69:19:69:28 | source(...) | semmle.label | source(...) | -| main.rs:70:14:70:17 | arr2 | semmle.label | arr2 | +| main.rs:15:9:15:13 | mut b | semmle.label | mut b | +| main.rs:15:17:15:26 | source(...) | semmle.label | source(...) | +| main.rs:16:5:16:5 | b | semmle.label | b | +| main.rs:17:10:17:10 | b | semmle.label | b | +| main.rs:20:10:20:19 | source(...) | semmle.label | source(...) | +| main.rs:21:10:21:10 | c | semmle.label | c | +| main.rs:25:9:25:9 | a | semmle.label | a | +| main.rs:25:13:25:22 | source(...) | semmle.label | source(...) | +| main.rs:26:10:26:11 | - ... | semmle.label | - ... | +| main.rs:26:11:26:11 | a | semmle.label | a | +| main.rs:30:9:30:9 | a | semmle.label | a | +| main.rs:30:13:30:22 | source(...) | semmle.label | source(...) | +| main.rs:31:9:31:9 | b | semmle.label | b | +| main.rs:32:10:32:17 | b as i64 | semmle.label | b as i64 | +| main.rs:45:13:45:13 | s | semmle.label | s | +| main.rs:45:17:45:26 | source(...) | semmle.label | source(...) | +| main.rs:46:13:46:18 | sliced [&ref] | semmle.label | sliced [&ref] | +| main.rs:46:22:46:29 | &... [&ref] | semmle.label | &... [&ref] | +| main.rs:46:23:46:23 | s | semmle.label | s | +| main.rs:46:23:46:29 | s[...] | semmle.label | s[...] | +| main.rs:47:14:47:19 | sliced | semmle.label | sliced | +| main.rs:61:13:61:15 | arr | semmle.label | arr | +| main.rs:61:19:61:28 | source(...) | semmle.label | source(...) | +| main.rs:62:14:62:16 | arr | semmle.label | arr | +| main.rs:62:14:62:19 | arr[1] | semmle.label | arr[1] | +| main.rs:77:9:77:12 | [post] arr2 [element] | semmle.label | [post] arr2 [element] | +| main.rs:77:19:77:28 | source(...) | semmle.label | source(...) | +| main.rs:78:14:78:17 | arr2 | semmle.label | arr2 | subpaths testFailures #select | main.rs:13:10:13:14 | ... + ... | main.rs:12:13:12:22 | source(...) | main.rs:13:10:13:14 | ... + ... | $@ | main.rs:12:13:12:22 | source(...) | source(...) | -| main.rs:18:10:18:11 | - ... | main.rs:17:13:17:22 | source(...) | main.rs:18:10:18:11 | - ... | $@ | main.rs:17:13:17:22 | source(...) | source(...) | -| main.rs:24:10:24:17 | b as i64 | main.rs:22:13:22:22 | source(...) | main.rs:24:10:24:17 | b as i64 | $@ | main.rs:22:13:22:22 | source(...) | source(...) | -| main.rs:39:14:39:19 | sliced | main.rs:37:17:37:26 | source(...) | main.rs:39:14:39:19 | sliced | $@ | main.rs:37:17:37:26 | source(...) | source(...) | -| main.rs:54:14:54:19 | arr[1] | main.rs:53:19:53:28 | source(...) | main.rs:54:14:54:19 | arr[1] | $@ | main.rs:53:19:53:28 | source(...) | source(...) | -| main.rs:70:14:70:17 | arr2 | main.rs:69:19:69:28 | source(...) | main.rs:70:14:70:17 | arr2 | $@ | main.rs:69:19:69:28 | source(...) | source(...) | +| main.rs:17:10:17:10 | b | main.rs:15:17:15:26 | source(...) | main.rs:17:10:17:10 | b | $@ | main.rs:15:17:15:26 | source(...) | source(...) | +| main.rs:21:10:21:10 | c | main.rs:20:10:20:19 | source(...) | main.rs:21:10:21:10 | c | $@ | main.rs:20:10:20:19 | source(...) | source(...) | +| main.rs:26:10:26:11 | - ... | main.rs:25:13:25:22 | source(...) | main.rs:26:10:26:11 | - ... | $@ | main.rs:25:13:25:22 | source(...) | source(...) | +| main.rs:32:10:32:17 | b as i64 | main.rs:30:13:30:22 | source(...) | main.rs:32:10:32:17 | b as i64 | $@ | main.rs:30:13:30:22 | source(...) | source(...) | +| main.rs:47:14:47:19 | sliced | main.rs:45:17:45:26 | source(...) | main.rs:47:14:47:19 | sliced | $@ | main.rs:45:17:45:26 | source(...) | source(...) | +| main.rs:62:14:62:19 | arr[1] | main.rs:61:19:61:28 | source(...) | main.rs:62:14:62:19 | arr[1] | $@ | main.rs:61:19:61:28 | source(...) | source(...) | +| main.rs:78:14:78:17 | arr2 | main.rs:77:19:77:28 | source(...) | main.rs:78:14:78:17 | arr2 | $@ | main.rs:77:19:77:28 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/taint/main.rs b/rust/ql/test/library-tests/dataflow/taint/main.rs index 90af2ec8a060..5e4f8c435011 100644 --- a/rust/ql/test/library-tests/dataflow/taint/main.rs +++ b/rust/ql/test/library-tests/dataflow/taint/main.rs @@ -11,6 +11,14 @@ fn sink(s: i64) { fn addition() { let a = source(42); sink(a + 1); // $ hasTaintFlow=42 + + let mut b = source(58); + b += 2; + sink(b); // $ hasTaintFlow=58 + + let mut c = 0; + c += source(99); + sink(c); // $ hasTaintFlow=99 } fn negation() { diff --git a/rust/ql/test/library-tests/definitions/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/definitions/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..8ebb39522b36 --- /dev/null +++ b/rust/ql/test/library-tests/definitions/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,5 @@ +multipleResolvedTargets +| main.rs:35:5:35:14 | * ... | +| main.rs:35:5:35:14 | * ... | +| main.rs:35:5:35:14 | * ... | +| main.rs:35:5:35:14 | * ... | diff --git a/rust/ql/test/library-tests/elements/builtintypes/BuiltinTypes.expected b/rust/ql/test/library-tests/elements/builtintypes/BuiltinTypes.expected index e08eb561b58b..4a67027027bf 100644 --- a/rust/ql/test/library-tests/elements/builtintypes/BuiltinTypes.expected +++ b/rust/ql/test/library-tests/elements/builtintypes/BuiltinTypes.expected @@ -1,5 +1,5 @@ | struct Array | | -| struct Ptr | | +| struct PtrConst | | | struct PtrMut | | | struct Ref | | | struct RefMut | | diff --git a/rust/ql/test/library-tests/elements/operations/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/elements/operations/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..cb94b0abf165 --- /dev/null +++ b/rust/ql/test/library-tests/elements/operations/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,2 @@ +multipleResolvedTargets +| test.rs:52:2:52:5 | * ... | diff --git a/rust/ql/test/library-tests/formatstrings/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/formatstrings/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..93e644c9abbc --- /dev/null +++ b/rust/ql/test/library-tests/formatstrings/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,45 @@ +multipleResolvedTargets +| main.rs:28:5:28:14 | * ... | +| main.rs:28:5:28:14 | * ... | +| main.rs:28:5:28:14 | * ... | +| main.rs:28:5:28:14 | * ... | +| main.rs:29:5:29:14 | * ... | +| main.rs:29:5:29:14 | * ... | +| main.rs:29:5:29:14 | * ... | +| main.rs:29:5:29:14 | * ... | +| main.rs:30:5:30:14 | * ... | +| main.rs:30:5:30:14 | * ... | +| main.rs:30:5:30:14 | * ... | +| main.rs:30:5:30:14 | * ... | +| main.rs:31:5:31:14 | * ... | +| main.rs:31:5:31:14 | * ... | +| main.rs:31:5:31:14 | * ... | +| main.rs:31:5:31:14 | * ... | +| main.rs:33:5:33:14 | * ... | +| main.rs:33:5:33:14 | * ... | +| main.rs:33:5:33:14 | * ... | +| main.rs:33:5:33:14 | * ... | +| main.rs:34:5:34:14 | * ... | +| main.rs:34:5:34:14 | * ... | +| main.rs:34:5:34:14 | * ... | +| main.rs:34:5:34:14 | * ... | +| main.rs:35:5:35:14 | * ... | +| main.rs:35:5:35:14 | * ... | +| main.rs:35:5:35:14 | * ... | +| main.rs:35:5:35:14 | * ... | +| main.rs:36:5:36:14 | * ... | +| main.rs:36:5:36:14 | * ... | +| main.rs:36:5:36:14 | * ... | +| main.rs:36:5:36:14 | * ... | +| main.rs:37:5:37:14 | * ... | +| main.rs:37:5:37:14 | * ... | +| main.rs:37:5:37:14 | * ... | +| main.rs:37:5:37:14 | * ... | +| main.rs:75:5:75:14 | * ... | +| main.rs:75:5:75:14 | * ... | +| main.rs:75:5:75:14 | * ... | +| main.rs:75:5:75:14 | * ... | +| main.rs:76:5:76:14 | * ... | +| main.rs:76:5:76:14 | * ... | +| main.rs:76:5:76:14 | * ... | +| main.rs:76:5:76:14 | * ... | diff --git a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected index 6b5461f37194..23ac5e722d5c 100644 --- a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected @@ -1,6 +1,9 @@ -multipleCallTargets +multipleResolvedTargets | main.rs:126:9:126:11 | f(...) | | main.rs:366:9:368:16 | ...::f(...) | | main.rs:369:9:371:16 | ...::f(...) | -| main.rs:448:9:452:16 | ...::f(...) | -| main.rs:453:9:457:16 | ...::f(...) | +| main.rs:450:9:454:16 | ...::f(...) | +| main.rs:455:9:459:16 | ...::f(...) | +| main.rs:565:9:566:15 | ...::Assoc(...) | +| main.rs:568:9:569:12 | ...::f1(...) | +| main.rs:571:9:572:12 | ...::f1(...) | diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index c0f37bcd18eb..761e97fced1e 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -381,8 +381,9 @@ mod m16 { > { fn f(&self) -> T; // $ item=I84 - fn g(&self) -> T // $ item=I84 - ; // I85 + fn g(&self) -> T {// $ item=I84 + self.f() // $ item=f + } // I85 fn h(&self) -> T { // $ item=I84 Self::g(&self); // $ item=I85 @@ -436,8 +437,9 @@ mod m16 { > // $ item=I89 for S { // $ item=I90 fn f(&self) -> S { // $ item=I90 + Self::g(&self); // $ item=I92 println!("m16::>::f"); // $ item=println - Self::c // $ MISSING: item=I95 + Self::c // $ item=I95 } // I93 } @@ -466,6 +468,109 @@ mod m16 { > // $ item=I86 >::c; // $ MISSING: item=I95 } // I83 + + trait Trait3 { + type AssocType; + + fn f(&self); + } + + trait Trait4 { + type AssocType; + + fn g(&self); + } + + struct S2; + + #[rustfmt::skip] + impl Trait3 for S2 { // $ item=Trait3 item=S2 + type AssocType = i32 // $ item=i32 + ; // S2Trait3AssocType + + fn f(&self) { + let x: Self::AssocType = 42; // $ item=S2Trait3AssocType + } // S2asTrait3::f + } + + #[rustfmt::skip] + impl Trait4 for S2 { // $ item=Trait4 item=S2 + type AssocType = bool // $ item=bool + ; // S2Trait4AssocType + + fn g(&self) { + Self::f(&self); // $ item=S2asTrait3::f + S2::f(&self); // $ item=S2asTrait3::f + let x: Self::AssocType = true; // $ item=S2Trait4AssocType + } + } + + trait Trait5 { + type Assoc; // Trait5Assoc + + fn Assoc() -> Self::Assoc; // $ item=Trait5Assoc + } + + #[rustfmt::skip] + impl Trait5 for S { // $ item=Trait5 item=I90 + type Assoc = i32 // $ item=i32 + ; // AssocType + + fn Assoc() + -> Self::Assoc { // $ item=AssocType + Self::Assoc() + 1 // $ item=AssocFunc + } // AssocFunc + } + + struct S3(T3); // $ item=T3 + + #[rustfmt::skip] + impl Trait5 for S3 { // $ item=Trait5 item=S3 item=i32 + type Assoc = i32 // $ item=i32 + ; // S3i32AssocType + + fn Assoc() + -> Self::Assoc { // $ item=S3i32AssocType + Self::Assoc() + 1 // $ item=S3i32AssocFunc + } // S3i32AssocFunc + } + + #[rustfmt::skip] + impl Trait5 for S3 { // $ item=Trait5 item=S3 item=bool + type Assoc = bool // $ item=bool + ; // S3boolAssocType + + fn Assoc() + -> Self::Assoc { // $ item=S3boolAssocType + !Self::Assoc() // $ item=S3boolAssocFunc + } // S3boolAssocFunc + } + + #[rustfmt::skip] + impl S3 { // $ item=S3 item=i32 + fn f1() -> i32 { // $ item=i32 + 0 + } // S3i32f1 + } + + #[rustfmt::skip] + impl S3 { // $ item=S3 item=bool + fn f1() -> bool { // $ item=bool + true + } // S3boolf1 + } + + #[rustfmt::skip] + fn foo() { + S3:::: // $ item=i32 + Assoc(); // $ item=S3i32AssocFunc $ SPURIOUS: item=S3boolAssocFunc + + S3:::: // $ item=bool + f1(); // $ item=S3boolf1 $ SPURIOUS: item=S3i32f1 + + S3:::: // $ item=i32 + f1(); // $ item=S3i32f1 $ SPURIOUS: item=S3boolf1 + } } mod trait_visibility { @@ -805,7 +910,7 @@ mod patterns { N0ne => // local variable N0ne } - } // patterns::test + } // patterns::test #[rustfmt::skip] fn test2() -> Option { // $ item=Option $ item=i32 diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 20c7e7799be7..c6bac60b4123 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -18,21 +18,21 @@ mod | main.rs:291:1:304:1 | mod m13 | | main.rs:295:5:303:5 | mod m14 | | main.rs:306:1:375:1 | mod m15 | -| main.rs:377:1:469:1 | mod m16 | -| main.rs:471:1:521:1 | mod trait_visibility | -| main.rs:472:5:494:5 | mod m | -| main.rs:523:1:553:1 | mod m17 | -| main.rs:555:1:573:1 | mod m18 | -| main.rs:560:5:572:5 | mod m19 | -| main.rs:565:9:571:9 | mod m20 | -| main.rs:575:1:600:1 | mod m21 | -| main.rs:576:5:582:5 | mod m22 | -| main.rs:584:5:599:5 | mod m33 | -| main.rs:602:1:627:1 | mod m23 | -| main.rs:629:1:697:1 | mod m24 | -| main.rs:714:1:766:1 | mod associated_types | -| main.rs:772:1:791:1 | mod impl_with_attribute_macro | -| main.rs:793:1:834:1 | mod patterns | +| main.rs:377:1:574:1 | mod m16 | +| main.rs:576:1:626:1 | mod trait_visibility | +| main.rs:577:5:599:5 | mod m | +| main.rs:628:1:658:1 | mod m17 | +| main.rs:660:1:678:1 | mod m18 | +| main.rs:665:5:677:5 | mod m19 | +| main.rs:670:9:676:9 | mod m20 | +| main.rs:680:1:705:1 | mod m21 | +| main.rs:681:5:687:5 | mod m22 | +| main.rs:689:5:704:5 | mod m33 | +| main.rs:707:1:732:1 | mod m23 | +| main.rs:734:1:802:1 | mod m24 | +| main.rs:819:1:871:1 | mod associated_types | +| main.rs:877:1:896:1 | mod impl_with_attribute_macro | +| main.rs:898:1:939:1 | mod patterns | | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:20:1:20:12 | mod my3 | | my2/mod.rs:22:1:23:10 | mod mymod | @@ -73,7 +73,7 @@ resolvePath | main.rs:37:17:37:24 | ...::f | main.rs:26:9:28:9 | fn f | | main.rs:39:17:39:23 | println | {EXTERNAL LOCATION} | MacroRules | | main.rs:40:17:40:17 | f | main.rs:26:9:28:9 | fn f | -| main.rs:47:9:47:13 | super | main.rs:1:1:873:2 | SourceFile | +| main.rs:47:9:47:13 | super | main.rs:1:1:978:2 | SourceFile | | main.rs:47:9:47:17 | ...::m1 | main.rs:20:1:44:1 | mod m1 | | main.rs:47:9:47:21 | ...::m2 | main.rs:25:5:43:5 | mod m2 | | main.rs:47:9:47:24 | ...::g | main.rs:30:9:34:9 | fn g | @@ -88,7 +88,7 @@ resolvePath | main.rs:68:17:68:19 | Foo | main.rs:66:9:66:21 | struct Foo | | main.rs:71:13:71:15 | Foo | main.rs:60:5:60:17 | struct Foo | | main.rs:73:5:73:5 | f | main.rs:62:5:69:5 | fn f | -| main.rs:75:5:75:8 | self | main.rs:1:1:873:2 | SourceFile | +| main.rs:75:5:75:8 | self | main.rs:1:1:978:2 | SourceFile | | main.rs:75:5:75:11 | ...::i | main.rs:78:1:90:1 | fn i | | main.rs:79:5:79:11 | println | {EXTERNAL LOCATION} | MacroRules | | main.rs:81:13:81:15 | Foo | main.rs:55:1:55:13 | struct Foo | @@ -110,7 +110,7 @@ resolvePath | main.rs:112:9:112:15 | println | {EXTERNAL LOCATION} | MacroRules | | main.rs:118:9:118:15 | println | {EXTERNAL LOCATION} | MacroRules | | main.rs:122:9:122:15 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:125:13:125:17 | super | main.rs:1:1:873:2 | SourceFile | +| main.rs:125:13:125:17 | super | main.rs:1:1:978:2 | SourceFile | | main.rs:125:13:125:21 | ...::m5 | main.rs:110:1:114:1 | mod m5 | | main.rs:126:9:126:9 | f | main.rs:111:5:113:5 | fn f | | main.rs:126:9:126:9 | f | main.rs:117:5:119:5 | fn f | @@ -133,7 +133,7 @@ resolvePath | main.rs:169:22:169:29 | MyStruct | main.rs:162:5:162:22 | struct MyStruct | | main.rs:171:13:171:19 | println | {EXTERNAL LOCATION} | MacroRules | | main.rs:172:13:172:13 | f | main.rs:164:5:166:5 | fn f | -| main.rs:173:13:173:16 | Self | main.rs:168:5:179:5 | impl MyTrait for MyStruct { ... } | +| main.rs:173:13:173:16 | Self | main.rs:162:5:162:22 | struct MyStruct | | main.rs:173:13:173:19 | ...::g | main.rs:176:9:178:9 | fn g | | main.rs:177:13:177:19 | println | {EXTERNAL LOCATION} | MacroRules | | main.rs:182:10:182:17 | MyStruct | main.rs:162:5:162:22 | struct MyStruct | @@ -197,7 +197,7 @@ resolvePath | main.rs:341:10:341:15 | Trait1 | main.rs:307:5:311:5 | trait Trait1 | | main.rs:342:11:342:11 | S | main.rs:338:5:338:13 | struct S | | main.rs:344:13:344:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:345:13:345:16 | Self | main.rs:340:5:352:5 | impl Trait1 for S { ... } | +| main.rs:345:13:345:16 | Self | main.rs:338:5:338:13 | struct S | | main.rs:345:13:345:19 | ...::g | main.rs:349:9:351:9 | fn g | | main.rs:350:13:350:19 | println | {EXTERNAL LOCATION} | MacroRules | | main.rs:355:10:355:15 | Trait2 | main.rs:313:5:321:5 | trait Trait2 | @@ -213,282 +213,343 @@ resolvePath | main.rs:372:9:372:12 | ...::g | main.rs:349:9:351:9 | fn g | | main.rs:382:24:382:24 | T | main.rs:380:7:380:7 | T | | main.rs:384:24:384:24 | T | main.rs:380:7:380:7 | T | -| main.rs:387:24:387:24 | T | main.rs:380:7:380:7 | T | -| main.rs:388:13:388:16 | Self | main.rs:378:5:394:5 | trait Trait1 | -| main.rs:388:13:388:19 | ...::g | main.rs:384:9:385:9 | fn g | -| main.rs:392:18:392:18 | T | main.rs:380:7:380:7 | T | -| main.rs:400:9:402:9 | Trait1::<...> | main.rs:378:5:394:5 | trait Trait1 | -| main.rs:401:11:401:11 | T | main.rs:398:7:398:7 | T | -| main.rs:403:24:403:24 | T | main.rs:398:7:398:7 | T | -| main.rs:404:13:404:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:405:13:405:16 | Self | main.rs:396:5:409:5 | trait Trait2 | -| main.rs:405:13:405:19 | ...::g | main.rs:384:9:385:9 | fn g | -| main.rs:407:13:407:16 | Self | main.rs:396:5:409:5 | trait Trait2 | -| main.rs:407:13:407:19 | ...::c | main.rs:392:9:393:9 | Const | -| main.rs:414:10:416:5 | Trait1::<...> | main.rs:378:5:394:5 | trait Trait1 | -| main.rs:415:7:415:7 | S | main.rs:411:5:411:13 | struct S | -| main.rs:417:11:417:11 | S | main.rs:411:5:411:13 | struct S | -| main.rs:418:24:418:24 | S | main.rs:411:5:411:13 | struct S | -| main.rs:419:13:419:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:420:13:420:16 | Self | main.rs:413:5:431:5 | impl Trait1::<...> for S { ... } | -| main.rs:420:13:420:19 | ...::g | main.rs:424:9:427:9 | fn g | -| main.rs:424:24:424:24 | S | main.rs:411:5:411:13 | struct S | -| main.rs:425:13:425:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:426:13:426:16 | Self | main.rs:413:5:431:5 | impl Trait1::<...> for S { ... } | -| main.rs:426:13:426:19 | ...::c | main.rs:429:9:430:9 | Const | -| main.rs:429:18:429:18 | S | main.rs:411:5:411:13 | struct S | -| main.rs:429:22:429:22 | S | main.rs:411:5:411:13 | struct S | -| main.rs:434:10:436:5 | Trait2::<...> | main.rs:396:5:409:5 | trait Trait2 | -| main.rs:435:7:435:7 | S | main.rs:411:5:411:13 | struct S | -| main.rs:437:11:437:11 | S | main.rs:411:5:411:13 | struct S | -| main.rs:438:24:438:24 | S | main.rs:411:5:411:13 | struct S | -| main.rs:439:13:439:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:440:13:440:16 | Self | main.rs:433:5:442:5 | impl Trait2::<...> for S { ... } | -| main.rs:446:9:446:15 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:447:17:447:17 | S | main.rs:411:5:411:13 | struct S | -| main.rs:448:10:448:10 | S | main.rs:411:5:411:13 | struct S | -| main.rs:449:14:451:11 | Trait1::<...> | main.rs:378:5:394:5 | trait Trait1 | -| main.rs:450:13:450:13 | S | main.rs:411:5:411:13 | struct S | -| main.rs:453:10:453:10 | S | main.rs:411:5:411:13 | struct S | -| main.rs:454:14:456:11 | Trait2::<...> | main.rs:396:5:409:5 | trait Trait2 | -| main.rs:455:13:455:13 | S | main.rs:411:5:411:13 | struct S | -| main.rs:458:9:458:9 | S | main.rs:411:5:411:13 | struct S | -| main.rs:458:9:458:12 | ...::g | main.rs:424:9:427:9 | fn g | -| main.rs:460:9:460:9 | S | main.rs:411:5:411:13 | struct S | -| main.rs:460:9:460:12 | ...::h | main.rs:387:9:390:9 | fn h | -| main.rs:462:9:462:9 | S | main.rs:411:5:411:13 | struct S | -| main.rs:462:9:462:12 | ...::c | main.rs:429:9:430:9 | Const | -| main.rs:463:10:463:10 | S | main.rs:411:5:411:13 | struct S | -| main.rs:464:14:466:11 | Trait1::<...> | main.rs:378:5:394:5 | trait Trait1 | -| main.rs:465:13:465:13 | S | main.rs:411:5:411:13 | struct S | -| main.rs:483:14:483:16 | Foo | main.rs:473:9:475:9 | trait Foo | -| main.rs:483:22:483:22 | X | main.rs:481:9:481:21 | struct X | -| main.rs:485:17:485:23 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:489:14:489:16 | Bar | main.rs:477:9:479:9 | trait Bar | -| main.rs:489:22:489:22 | X | main.rs:481:9:481:21 | struct X | -| main.rs:491:17:491:23 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:496:9:496:9 | m | main.rs:472:5:494:5 | mod m | -| main.rs:496:9:496:12 | ...::X | main.rs:481:9:481:21 | struct X | -| main.rs:499:17:499:17 | X | main.rs:481:9:481:21 | struct X | -| main.rs:502:17:502:17 | m | main.rs:472:5:494:5 | mod m | -| main.rs:502:17:502:22 | ...::Foo | main.rs:473:9:475:9 | trait Foo | -| main.rs:503:13:503:13 | X | main.rs:481:9:481:21 | struct X | -| main.rs:503:13:503:23 | ...::a_method | main.rs:483:26:486:13 | fn a_method | -| main.rs:507:17:507:17 | m | main.rs:472:5:494:5 | mod m | -| main.rs:507:17:507:22 | ...::Bar | main.rs:477:9:479:9 | trait Bar | -| main.rs:508:13:508:13 | X | main.rs:481:9:481:21 | struct X | -| main.rs:508:13:508:23 | ...::a_method | main.rs:489:26:492:13 | fn a_method | -| main.rs:512:17:512:17 | m | main.rs:472:5:494:5 | mod m | -| main.rs:512:17:512:22 | ...::Bar | main.rs:477:9:479:9 | trait Bar | -| main.rs:513:13:513:13 | X | main.rs:481:9:481:21 | struct X | -| main.rs:513:13:513:23 | ...::a_method | main.rs:489:26:492:13 | fn a_method | -| main.rs:518:13:518:13 | m | main.rs:472:5:494:5 | mod m | -| main.rs:518:13:518:18 | ...::Bar | main.rs:477:9:479:9 | trait Bar | -| main.rs:518:13:518:28 | ...::a_method | main.rs:478:13:478:31 | fn a_method | -| main.rs:531:10:531:16 | MyTrait | main.rs:524:5:526:5 | trait MyTrait | -| main.rs:532:9:532:9 | S | main.rs:528:5:528:13 | struct S | -| main.rs:534:13:534:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:540:7:540:13 | MyTrait | main.rs:524:5:526:5 | trait MyTrait | -| main.rs:541:10:541:10 | T | main.rs:539:10:539:10 | T | -| main.rs:543:9:543:9 | T | main.rs:539:10:539:10 | T | -| main.rs:543:9:543:12 | ...::f | main.rs:525:9:525:20 | fn f | -| main.rs:544:9:544:15 | MyTrait | main.rs:524:5:526:5 | trait MyTrait | -| main.rs:544:9:544:18 | ...::f | main.rs:525:9:525:20 | fn f | -| main.rs:549:9:549:9 | g | main.rs:538:5:545:5 | fn g | -| main.rs:550:11:550:11 | S | main.rs:528:5:528:13 | struct S | -| main.rs:557:9:557:15 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:562:13:562:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:567:17:567:23 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:568:17:568:21 | super | main.rs:560:5:572:5 | mod m19 | -| main.rs:568:17:568:24 | ...::f | main.rs:561:9:563:9 | fn f | -| main.rs:569:17:569:21 | super | main.rs:560:5:572:5 | mod m19 | -| main.rs:569:17:569:28 | ...::super | main.rs:555:1:573:1 | mod m18 | -| main.rs:569:17:569:31 | ...::f | main.rs:556:5:558:5 | fn f | -| main.rs:586:13:586:17 | super | main.rs:575:1:600:1 | mod m21 | -| main.rs:586:13:586:22 | ...::m22 | main.rs:576:5:582:5 | mod m22 | -| main.rs:586:13:586:30 | ...::MyEnum | main.rs:577:9:579:9 | enum MyEnum | -| main.rs:587:13:587:16 | self | main.rs:577:9:579:9 | enum MyEnum | -| main.rs:591:13:591:17 | super | main.rs:575:1:600:1 | mod m21 | -| main.rs:591:13:591:22 | ...::m22 | main.rs:576:5:582:5 | mod m22 | -| main.rs:591:13:591:32 | ...::MyStruct | main.rs:581:9:581:28 | struct MyStruct | -| main.rs:592:13:592:16 | self | main.rs:581:9:581:28 | struct MyStruct | -| main.rs:596:21:596:26 | MyEnum | main.rs:577:9:579:9 | enum MyEnum | -| main.rs:596:21:596:29 | ...::A | main.rs:578:13:578:13 | A | -| main.rs:597:21:597:28 | MyStruct | main.rs:581:9:581:28 | struct MyStruct | -| main.rs:613:10:615:5 | Trait1::<...> | main.rs:603:5:608:5 | trait Trait1 | -| main.rs:614:7:614:10 | Self | main.rs:610:5:610:13 | struct S | -| main.rs:616:11:616:11 | S | main.rs:610:5:610:13 | struct S | -| main.rs:618:13:618:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:624:17:624:17 | S | main.rs:610:5:610:13 | struct S | -| main.rs:640:15:640:15 | T | main.rs:639:26:639:26 | T | -| main.rs:645:9:645:24 | GenericStruct::<...> | main.rs:638:5:641:5 | struct GenericStruct | -| main.rs:645:23:645:23 | T | main.rs:644:10:644:10 | T | -| main.rs:647:9:647:9 | T | main.rs:644:10:644:10 | T | -| main.rs:647:12:647:17 | TraitA | main.rs:630:5:632:5 | trait TraitA | -| main.rs:656:9:656:24 | GenericStruct::<...> | main.rs:638:5:641:5 | struct GenericStruct | -| main.rs:656:23:656:23 | T | main.rs:655:10:655:10 | T | -| main.rs:658:9:658:9 | T | main.rs:655:10:655:10 | T | -| main.rs:658:12:658:17 | TraitB | main.rs:634:5:636:5 | trait TraitB | -| main.rs:659:9:659:9 | T | main.rs:655:10:655:10 | T | -| main.rs:659:12:659:17 | TraitA | main.rs:630:5:632:5 | trait TraitA | -| main.rs:670:10:670:15 | TraitA | main.rs:630:5:632:5 | trait TraitA | -| main.rs:670:21:670:31 | Implementor | main.rs:667:5:667:23 | struct Implementor | -| main.rs:672:13:672:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:677:10:677:15 | TraitB | main.rs:634:5:636:5 | trait TraitB | -| main.rs:677:21:677:31 | Implementor | main.rs:667:5:667:23 | struct Implementor | -| main.rs:679:13:679:19 | println | {EXTERNAL LOCATION} | MacroRules | -| main.rs:685:24:685:34 | Implementor | main.rs:667:5:667:23 | struct Implementor | -| main.rs:686:23:686:35 | GenericStruct | main.rs:638:5:641:5 | struct GenericStruct | -| main.rs:692:9:692:36 | GenericStruct::<...> | main.rs:638:5:641:5 | struct GenericStruct | -| main.rs:692:9:692:50 | ...::call_trait_a | main.rs:649:9:651:9 | fn call_trait_a | -| main.rs:692:25:692:35 | Implementor | main.rs:667:5:667:23 | struct Implementor | -| main.rs:695:9:695:36 | GenericStruct::<...> | main.rs:638:5:641:5 | struct GenericStruct | -| main.rs:695:9:695:47 | ...::call_both | main.rs:661:9:664:9 | fn call_both | -| main.rs:695:25:695:35 | Implementor | main.rs:667:5:667:23 | struct Implementor | -| main.rs:701:3:701:12 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:701:3:701:24 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix | -| main.rs:705:6:705:12 | AStruct | main.rs:704:1:704:17 | struct AStruct | -| main.rs:707:7:707:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:707:7:707:28 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix | -| main.rs:710:7:710:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:710:7:710:28 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix | -| main.rs:715:9:715:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:715:9:715:19 | ...::marker | {EXTERNAL LOCATION} | mod marker | -| main.rs:715:9:715:32 | ...::PhantomData | {EXTERNAL LOCATION} | struct PhantomData | -| main.rs:716:9:716:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:716:9:716:19 | ...::result | {EXTERNAL LOCATION} | mod result | -| main.rs:716:9:716:27 | ...::Result | {EXTERNAL LOCATION} | enum Result | -| main.rs:724:19:724:22 | Self | main.rs:718:5:726:5 | trait Reduce | -| main.rs:724:19:724:29 | ...::Input | main.rs:719:9:719:19 | type Input | -| main.rs:725:14:725:46 | Result::<...> | {EXTERNAL LOCATION} | enum Result | -| main.rs:725:21:725:24 | Self | main.rs:718:5:726:5 | trait Reduce | -| main.rs:725:21:725:32 | ...::Output | main.rs:720:21:721:20 | type Output | -| main.rs:725:35:725:38 | Self | main.rs:718:5:726:5 | trait Reduce | -| main.rs:725:35:725:45 | ...::Error | main.rs:719:21:720:19 | type Error | -| main.rs:729:17:729:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | -| main.rs:729:29:729:33 | Input | main.rs:728:19:728:23 | Input | -| main.rs:730:17:730:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | -| main.rs:730:29:730:33 | Error | main.rs:728:26:728:30 | Error | -| main.rs:737:11:737:16 | Reduce | main.rs:718:5:726:5 | trait Reduce | -| main.rs:738:13:741:9 | MyImpl::<...> | main.rs:728:5:731:5 | struct MyImpl | -| main.rs:739:13:739:17 | Input | main.rs:735:13:735:17 | Input | -| main.rs:740:13:740:17 | Error | main.rs:736:13:736:17 | Error | -| main.rs:743:22:746:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | -| main.rs:744:13:744:17 | Input | main.rs:735:13:735:17 | Input | -| main.rs:745:13:745:16 | Self | main.rs:733:5:765:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:745:13:745:23 | ...::Error | main.rs:747:11:751:9 | type Error | -| main.rs:748:22:750:9 | Option::<...> | {EXTERNAL LOCATION} | enum Option | -| main.rs:749:11:749:15 | Error | main.rs:736:13:736:17 | Error | -| main.rs:753:13:753:17 | Input | main.rs:735:13:735:17 | Input | -| main.rs:758:19:758:22 | Self | main.rs:733:5:765:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:758:19:758:29 | ...::Input | main.rs:743:9:747:9 | type Input | -| main.rs:759:14:762:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | -| main.rs:760:13:760:16 | Self | main.rs:733:5:765:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:760:13:760:24 | ...::Output | main.rs:751:11:754:9 | type Output | -| main.rs:761:13:761:16 | Self | main.rs:733:5:765:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:761:13:761:23 | ...::Error | main.rs:747:11:751:9 | type Error | -| main.rs:768:5:768:7 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:768:11:768:14 | self | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:770:15:770:17 | ztd | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:770:15:770:25 | ...::string | {EXTERNAL LOCATION} | mod string | -| main.rs:770:15:770:33 | ...::String | {EXTERNAL LOCATION} | struct String | -| main.rs:780:7:780:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:780:7:780:26 | ...::identity | proc_macro.rs:15:1:18:1 | fn identity | -| main.rs:781:10:781:15 | ATrait | main.rs:776:5:778:5 | trait ATrait | -| main.rs:781:21:781:23 | i64 | {EXTERNAL LOCATION} | struct i64 | -| main.rs:783:11:783:13 | i64 | {EXTERNAL LOCATION} | struct i64 | -| main.rs:789:17:789:19 | Foo | main.rs:774:5:774:15 | struct Foo | -| main.rs:795:22:795:32 | Option::<...> | {EXTERNAL LOCATION} | enum Option | -| main.rs:795:29:795:31 | i32 | {EXTERNAL LOCATION} | struct i32 | -| main.rs:796:17:796:20 | Some | {EXTERNAL LOCATION} | Some | -| main.rs:797:17:797:27 | Option::<...> | {EXTERNAL LOCATION} | enum Option | -| main.rs:797:24:797:26 | i32 | {EXTERNAL LOCATION} | struct i32 | -| main.rs:798:13:798:16 | Some | {EXTERNAL LOCATION} | Some | -| main.rs:799:17:799:20 | None | {EXTERNAL LOCATION} | None | -| main.rs:801:13:801:16 | None | {EXTERNAL LOCATION} | None | -| main.rs:802:17:802:20 | None | {EXTERNAL LOCATION} | None | -| main.rs:811:19:811:29 | Option::<...> | {EXTERNAL LOCATION} | enum Option | -| main.rs:811:26:811:28 | i32 | {EXTERNAL LOCATION} | struct i32 | -| main.rs:812:26:812:29 | test | main.rs:794:5:808:5 | fn test | -| main.rs:818:14:818:16 | i32 | {EXTERNAL LOCATION} | struct i32 | -| main.rs:823:17:823:20 | Some | {EXTERNAL LOCATION} | Some | -| main.rs:825:13:825:16 | Some | {EXTERNAL LOCATION} | Some | -| main.rs:830:13:830:16 | Some | {EXTERNAL LOCATION} | Some | -| main.rs:830:18:830:18 | z | main.rs:817:5:819:12 | Const | -| main.rs:830:24:830:24 | z | main.rs:817:5:819:12 | Const | -| main.rs:837:5:837:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:837:5:837:14 | ...::nested | my.rs:1:1:1:15 | mod nested | -| main.rs:837:5:837:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | -| main.rs:837:5:837:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | -| main.rs:837:5:837:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | -| main.rs:838:5:838:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:838:5:838:9 | ...::f | my.rs:5:1:7:1 | fn f | -| main.rs:839:5:839:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | -| main.rs:839:5:839:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | -| main.rs:839:5:839:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | -| main.rs:839:5:839:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:840:5:840:5 | f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:841:5:841:5 | g | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:842:5:842:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:842:5:842:12 | ...::h | main.rs:57:1:76:1 | fn h | -| main.rs:843:5:843:6 | m1 | main.rs:20:1:44:1 | mod m1 | -| main.rs:843:5:843:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 | -| main.rs:843:5:843:13 | ...::g | main.rs:30:9:34:9 | fn g | -| main.rs:844:5:844:6 | m1 | main.rs:20:1:44:1 | mod m1 | -| main.rs:844:5:844:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 | -| main.rs:844:5:844:14 | ...::m3 | main.rs:36:9:42:9 | mod m3 | -| main.rs:844:5:844:17 | ...::h | main.rs:37:27:41:13 | fn h | -| main.rs:845:5:845:6 | m4 | main.rs:46:1:53:1 | mod m4 | -| main.rs:845:5:845:9 | ...::i | main.rs:49:5:52:5 | fn i | -| main.rs:846:5:846:5 | h | main.rs:57:1:76:1 | fn h | -| main.rs:847:5:847:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:848:5:848:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:849:5:849:5 | j | main.rs:104:1:108:1 | fn j | -| main.rs:850:5:850:6 | m6 | main.rs:116:1:128:1 | mod m6 | -| main.rs:850:5:850:9 | ...::g | main.rs:121:5:127:5 | fn g | -| main.rs:851:5:851:6 | m7 | main.rs:130:1:149:1 | mod m7 | -| main.rs:851:5:851:9 | ...::f | main.rs:141:5:148:5 | fn f | -| main.rs:852:5:852:6 | m8 | main.rs:151:1:205:1 | mod m8 | -| main.rs:852:5:852:9 | ...::g | main.rs:189:5:204:5 | fn g | -| main.rs:853:5:853:6 | m9 | main.rs:207:1:215:1 | mod m9 | -| main.rs:853:5:853:9 | ...::f | main.rs:210:5:214:5 | fn f | -| main.rs:854:5:854:7 | m11 | main.rs:238:1:275:1 | mod m11 | -| main.rs:854:5:854:10 | ...::f | main.rs:243:5:246:5 | fn f | -| main.rs:855:5:855:7 | m15 | main.rs:306:1:375:1 | mod m15 | -| main.rs:855:5:855:10 | ...::f | main.rs:362:5:374:5 | fn f | -| main.rs:856:5:856:7 | m16 | main.rs:377:1:469:1 | mod m16 | -| main.rs:856:5:856:10 | ...::f | main.rs:444:5:468:5 | fn f | -| main.rs:857:5:857:20 | trait_visibility | main.rs:471:1:521:1 | mod trait_visibility | -| main.rs:857:5:857:23 | ...::f | main.rs:498:5:520:5 | fn f | -| main.rs:858:5:858:7 | m17 | main.rs:523:1:553:1 | mod m17 | -| main.rs:858:5:858:10 | ...::f | main.rs:547:5:552:5 | fn f | -| main.rs:859:5:859:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | -| main.rs:859:5:859:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | -| main.rs:860:5:860:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | -| main.rs:860:5:860:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | -| main.rs:861:5:861:7 | my3 | my2/mod.rs:20:1:20:12 | mod my3 | -| main.rs:861:5:861:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | -| main.rs:862:5:862:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | -| main.rs:863:5:863:12 | my_alias | main.rs:1:1:1:7 | mod my | -| main.rs:863:5:863:22 | ...::nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | -| main.rs:864:5:864:7 | m18 | main.rs:555:1:573:1 | mod m18 | -| main.rs:864:5:864:12 | ...::m19 | main.rs:560:5:572:5 | mod m19 | -| main.rs:864:5:864:17 | ...::m20 | main.rs:565:9:571:9 | mod m20 | -| main.rs:864:5:864:20 | ...::g | main.rs:566:13:570:13 | fn g | -| main.rs:865:5:865:7 | m23 | main.rs:602:1:627:1 | mod m23 | -| main.rs:865:5:865:10 | ...::f | main.rs:622:5:626:5 | fn f | -| main.rs:866:5:866:7 | m24 | main.rs:629:1:697:1 | mod m24 | -| main.rs:866:5:866:10 | ...::f | main.rs:683:5:696:5 | fn f | -| main.rs:867:5:867:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:867:5:867:11 | ...::h | main.rs:57:1:76:1 | fn h | -| main.rs:868:5:868:13 | z_changed | main.rs:702:1:702:9 | fn z_changed | -| main.rs:869:5:869:11 | AStruct | main.rs:704:1:704:17 | struct AStruct | -| main.rs:869:5:869:22 | ...::z_on_type | main.rs:708:5:708:17 | fn z_on_type | -| main.rs:870:5:870:11 | AStruct | main.rs:704:1:704:17 | struct AStruct | -| main.rs:871:5:871:29 | impl_with_attribute_macro | main.rs:772:1:791:1 | mod impl_with_attribute_macro | -| main.rs:871:5:871:35 | ...::test | main.rs:787:5:790:5 | fn test | -| main.rs:872:5:872:12 | patterns | main.rs:793:1:834:1 | mod patterns | -| main.rs:872:5:872:18 | ...::test | main.rs:794:5:808:5 | fn test | +| main.rs:388:24:388:24 | T | main.rs:380:7:380:7 | T | +| main.rs:389:13:389:16 | Self | main.rs:378:5:395:5 | trait Trait1 | +| main.rs:389:13:389:19 | ...::g | main.rs:384:9:386:9 | fn g | +| main.rs:393:18:393:18 | T | main.rs:380:7:380:7 | T | +| main.rs:401:9:403:9 | Trait1::<...> | main.rs:378:5:395:5 | trait Trait1 | +| main.rs:402:11:402:11 | T | main.rs:399:7:399:7 | T | +| main.rs:404:24:404:24 | T | main.rs:399:7:399:7 | T | +| main.rs:405:13:405:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:406:13:406:16 | Self | main.rs:397:5:410:5 | trait Trait2 | +| main.rs:406:13:406:19 | ...::g | main.rs:384:9:386:9 | fn g | +| main.rs:408:13:408:16 | Self | main.rs:397:5:410:5 | trait Trait2 | +| main.rs:408:13:408:19 | ...::c | main.rs:393:9:394:9 | Const | +| main.rs:415:10:417:5 | Trait1::<...> | main.rs:378:5:395:5 | trait Trait1 | +| main.rs:416:7:416:7 | S | main.rs:412:5:412:13 | struct S | +| main.rs:418:11:418:11 | S | main.rs:412:5:412:13 | struct S | +| main.rs:419:24:419:24 | S | main.rs:412:5:412:13 | struct S | +| main.rs:420:13:420:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:421:13:421:16 | Self | main.rs:412:5:412:13 | struct S | +| main.rs:421:13:421:19 | ...::g | main.rs:425:9:428:9 | fn g | +| main.rs:425:24:425:24 | S | main.rs:412:5:412:13 | struct S | +| main.rs:426:13:426:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:427:13:427:16 | Self | main.rs:412:5:412:13 | struct S | +| main.rs:427:13:427:19 | ...::c | main.rs:430:9:431:9 | Const | +| main.rs:430:18:430:18 | S | main.rs:412:5:412:13 | struct S | +| main.rs:430:22:430:22 | S | main.rs:412:5:412:13 | struct S | +| main.rs:435:10:437:5 | Trait2::<...> | main.rs:397:5:410:5 | trait Trait2 | +| main.rs:436:7:436:7 | S | main.rs:412:5:412:13 | struct S | +| main.rs:438:11:438:11 | S | main.rs:412:5:412:13 | struct S | +| main.rs:439:24:439:24 | S | main.rs:412:5:412:13 | struct S | +| main.rs:440:13:440:16 | Self | main.rs:412:5:412:13 | struct S | +| main.rs:440:13:440:19 | ...::g | main.rs:425:9:428:9 | fn g | +| main.rs:441:13:441:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:442:13:442:16 | Self | main.rs:412:5:412:13 | struct S | +| main.rs:442:13:442:19 | ...::c | main.rs:430:9:431:9 | Const | +| main.rs:448:9:448:15 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:449:17:449:17 | S | main.rs:412:5:412:13 | struct S | +| main.rs:450:10:450:10 | S | main.rs:412:5:412:13 | struct S | +| main.rs:451:14:453:11 | Trait1::<...> | main.rs:378:5:395:5 | trait Trait1 | +| main.rs:452:13:452:13 | S | main.rs:412:5:412:13 | struct S | +| main.rs:455:10:455:10 | S | main.rs:412:5:412:13 | struct S | +| main.rs:456:14:458:11 | Trait2::<...> | main.rs:397:5:410:5 | trait Trait2 | +| main.rs:457:13:457:13 | S | main.rs:412:5:412:13 | struct S | +| main.rs:460:9:460:9 | S | main.rs:412:5:412:13 | struct S | +| main.rs:460:9:460:12 | ...::g | main.rs:425:9:428:9 | fn g | +| main.rs:462:9:462:9 | S | main.rs:412:5:412:13 | struct S | +| main.rs:462:9:462:12 | ...::h | main.rs:388:9:391:9 | fn h | +| main.rs:464:9:464:9 | S | main.rs:412:5:412:13 | struct S | +| main.rs:464:9:464:12 | ...::c | main.rs:430:9:431:9 | Const | +| main.rs:465:10:465:10 | S | main.rs:412:5:412:13 | struct S | +| main.rs:466:14:468:11 | Trait1::<...> | main.rs:378:5:395:5 | trait Trait1 | +| main.rs:467:13:467:13 | S | main.rs:412:5:412:13 | struct S | +| main.rs:487:10:487:15 | Trait3 | main.rs:472:5:476:5 | trait Trait3 | +| main.rs:487:21:487:22 | S2 | main.rs:484:5:484:14 | struct S2 | +| main.rs:488:26:488:28 | i32 | {EXTERNAL LOCATION} | struct i32 | +| main.rs:492:20:492:23 | Self | main.rs:484:5:484:14 | struct S2 | +| main.rs:492:20:492:34 | ...::AssocType | main.rs:487:26:489:9 | type AssocType | +| main.rs:497:10:497:15 | Trait4 | main.rs:478:5:482:5 | trait Trait4 | +| main.rs:497:21:497:22 | S2 | main.rs:484:5:484:14 | struct S2 | +| main.rs:498:26:498:29 | bool | {EXTERNAL LOCATION} | struct bool | +| main.rs:502:13:502:16 | Self | main.rs:484:5:484:14 | struct S2 | +| main.rs:502:13:502:19 | ...::f | main.rs:489:11:493:9 | fn f | +| main.rs:503:13:503:14 | S2 | main.rs:484:5:484:14 | struct S2 | +| main.rs:503:13:503:17 | ...::f | main.rs:489:11:493:9 | fn f | +| main.rs:504:20:504:23 | Self | main.rs:484:5:484:14 | struct S2 | +| main.rs:504:20:504:34 | ...::AssocType | main.rs:497:26:499:9 | type AssocType | +| main.rs:511:23:511:26 | Self | main.rs:508:5:512:5 | trait Trait5 | +| main.rs:511:23:511:33 | ...::Assoc | main.rs:509:9:509:19 | type Assoc | +| main.rs:515:10:515:15 | Trait5 | main.rs:508:5:512:5 | trait Trait5 | +| main.rs:515:21:515:21 | S | main.rs:412:5:412:13 | struct S | +| main.rs:516:22:516:24 | i32 | {EXTERNAL LOCATION} | struct i32 | +| main.rs:520:16:520:19 | Self | main.rs:412:5:412:13 | struct S | +| main.rs:520:16:520:26 | ...::Assoc | main.rs:515:25:517:9 | type Assoc | +| main.rs:521:13:521:16 | Self | main.rs:412:5:412:13 | struct S | +| main.rs:521:13:521:23 | ...::Assoc | main.rs:519:9:522:9 | fn Assoc | +| main.rs:525:19:525:20 | T3 | main.rs:525:15:525:16 | T3 | +| main.rs:528:10:528:15 | Trait5 | main.rs:508:5:512:5 | trait Trait5 | +| main.rs:528:21:528:27 | S3::<...> | main.rs:525:5:525:22 | struct S3 | +| main.rs:528:24:528:26 | i32 | {EXTERNAL LOCATION} | struct i32 | +| main.rs:529:22:529:24 | i32 | {EXTERNAL LOCATION} | struct i32 | +| main.rs:533:16:533:19 | Self | main.rs:525:5:525:22 | struct S3 | +| main.rs:533:16:533:26 | ...::Assoc | main.rs:528:31:530:9 | type Assoc | +| main.rs:534:13:534:16 | Self | main.rs:525:5:525:22 | struct S3 | +| main.rs:534:13:534:23 | ...::Assoc | main.rs:532:9:535:9 | fn Assoc | +| main.rs:539:10:539:15 | Trait5 | main.rs:508:5:512:5 | trait Trait5 | +| main.rs:539:21:539:28 | S3::<...> | main.rs:525:5:525:22 | struct S3 | +| main.rs:539:24:539:27 | bool | {EXTERNAL LOCATION} | struct bool | +| main.rs:540:22:540:25 | bool | {EXTERNAL LOCATION} | struct bool | +| main.rs:544:16:544:19 | Self | main.rs:525:5:525:22 | struct S3 | +| main.rs:544:16:544:26 | ...::Assoc | main.rs:539:32:541:9 | type Assoc | +| main.rs:545:14:545:17 | Self | main.rs:525:5:525:22 | struct S3 | +| main.rs:545:14:545:24 | ...::Assoc | main.rs:543:9:546:9 | fn Assoc | +| main.rs:550:10:550:16 | S3::<...> | main.rs:525:5:525:22 | struct S3 | +| main.rs:550:13:550:15 | i32 | {EXTERNAL LOCATION} | struct i32 | +| main.rs:551:20:551:22 | i32 | {EXTERNAL LOCATION} | struct i32 | +| main.rs:557:10:557:17 | S3::<...> | main.rs:525:5:525:22 | struct S3 | +| main.rs:557:13:557:16 | bool | {EXTERNAL LOCATION} | struct bool | +| main.rs:558:20:558:23 | bool | {EXTERNAL LOCATION} | struct bool | +| main.rs:565:9:565:17 | S3::<...> | main.rs:525:5:525:22 | struct S3 | +| main.rs:565:9:566:13 | ...::Assoc | main.rs:532:9:535:9 | fn Assoc | +| main.rs:565:9:566:13 | ...::Assoc | main.rs:543:9:546:9 | fn Assoc | +| main.rs:565:14:565:16 | i32 | {EXTERNAL LOCATION} | struct i32 | +| main.rs:568:9:568:18 | S3::<...> | main.rs:525:5:525:22 | struct S3 | +| main.rs:568:9:569:10 | ...::f1 | main.rs:550:20:553:9 | fn f1 | +| main.rs:568:9:569:10 | ...::f1 | main.rs:557:21:560:9 | fn f1 | +| main.rs:568:14:568:17 | bool | {EXTERNAL LOCATION} | struct bool | +| main.rs:571:9:571:17 | S3::<...> | main.rs:525:5:525:22 | struct S3 | +| main.rs:571:9:572:10 | ...::f1 | main.rs:550:20:553:9 | fn f1 | +| main.rs:571:9:572:10 | ...::f1 | main.rs:557:21:560:9 | fn f1 | +| main.rs:571:14:571:16 | i32 | {EXTERNAL LOCATION} | struct i32 | +| main.rs:588:14:588:16 | Foo | main.rs:578:9:580:9 | trait Foo | +| main.rs:588:22:588:22 | X | main.rs:586:9:586:21 | struct X | +| main.rs:590:17:590:23 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:594:14:594:16 | Bar | main.rs:582:9:584:9 | trait Bar | +| main.rs:594:22:594:22 | X | main.rs:586:9:586:21 | struct X | +| main.rs:596:17:596:23 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:601:9:601:9 | m | main.rs:577:5:599:5 | mod m | +| main.rs:601:9:601:12 | ...::X | main.rs:586:9:586:21 | struct X | +| main.rs:604:17:604:17 | X | main.rs:586:9:586:21 | struct X | +| main.rs:607:17:607:17 | m | main.rs:577:5:599:5 | mod m | +| main.rs:607:17:607:22 | ...::Foo | main.rs:578:9:580:9 | trait Foo | +| main.rs:608:13:608:13 | X | main.rs:586:9:586:21 | struct X | +| main.rs:608:13:608:23 | ...::a_method | main.rs:588:26:591:13 | fn a_method | +| main.rs:612:17:612:17 | m | main.rs:577:5:599:5 | mod m | +| main.rs:612:17:612:22 | ...::Bar | main.rs:582:9:584:9 | trait Bar | +| main.rs:613:13:613:13 | X | main.rs:586:9:586:21 | struct X | +| main.rs:613:13:613:23 | ...::a_method | main.rs:594:26:597:13 | fn a_method | +| main.rs:617:17:617:17 | m | main.rs:577:5:599:5 | mod m | +| main.rs:617:17:617:22 | ...::Bar | main.rs:582:9:584:9 | trait Bar | +| main.rs:618:13:618:13 | X | main.rs:586:9:586:21 | struct X | +| main.rs:618:13:618:23 | ...::a_method | main.rs:594:26:597:13 | fn a_method | +| main.rs:623:13:623:13 | m | main.rs:577:5:599:5 | mod m | +| main.rs:623:13:623:18 | ...::Bar | main.rs:582:9:584:9 | trait Bar | +| main.rs:623:13:623:28 | ...::a_method | main.rs:583:13:583:31 | fn a_method | +| main.rs:636:10:636:16 | MyTrait | main.rs:629:5:631:5 | trait MyTrait | +| main.rs:637:9:637:9 | S | main.rs:633:5:633:13 | struct S | +| main.rs:639:13:639:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:645:7:645:13 | MyTrait | main.rs:629:5:631:5 | trait MyTrait | +| main.rs:646:10:646:10 | T | main.rs:644:10:644:10 | T | +| main.rs:648:9:648:9 | T | main.rs:644:10:644:10 | T | +| main.rs:648:9:648:12 | ...::f | main.rs:630:9:630:20 | fn f | +| main.rs:649:9:649:15 | MyTrait | main.rs:629:5:631:5 | trait MyTrait | +| main.rs:649:9:649:18 | ...::f | main.rs:630:9:630:20 | fn f | +| main.rs:654:9:654:9 | g | main.rs:643:5:650:5 | fn g | +| main.rs:655:11:655:11 | S | main.rs:633:5:633:13 | struct S | +| main.rs:662:9:662:15 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:667:13:667:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:672:17:672:23 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:673:17:673:21 | super | main.rs:665:5:677:5 | mod m19 | +| main.rs:673:17:673:24 | ...::f | main.rs:666:9:668:9 | fn f | +| main.rs:674:17:674:21 | super | main.rs:665:5:677:5 | mod m19 | +| main.rs:674:17:674:28 | ...::super | main.rs:660:1:678:1 | mod m18 | +| main.rs:674:17:674:31 | ...::f | main.rs:661:5:663:5 | fn f | +| main.rs:691:13:691:17 | super | main.rs:680:1:705:1 | mod m21 | +| main.rs:691:13:691:22 | ...::m22 | main.rs:681:5:687:5 | mod m22 | +| main.rs:691:13:691:30 | ...::MyEnum | main.rs:682:9:684:9 | enum MyEnum | +| main.rs:692:13:692:16 | self | main.rs:682:9:684:9 | enum MyEnum | +| main.rs:696:13:696:17 | super | main.rs:680:1:705:1 | mod m21 | +| main.rs:696:13:696:22 | ...::m22 | main.rs:681:5:687:5 | mod m22 | +| main.rs:696:13:696:32 | ...::MyStruct | main.rs:686:9:686:28 | struct MyStruct | +| main.rs:697:13:697:16 | self | main.rs:686:9:686:28 | struct MyStruct | +| main.rs:701:21:701:26 | MyEnum | main.rs:682:9:684:9 | enum MyEnum | +| main.rs:701:21:701:29 | ...::A | main.rs:683:13:683:13 | A | +| main.rs:702:21:702:28 | MyStruct | main.rs:686:9:686:28 | struct MyStruct | +| main.rs:718:10:720:5 | Trait1::<...> | main.rs:708:5:713:5 | trait Trait1 | +| main.rs:719:7:719:10 | Self | main.rs:715:5:715:13 | struct S | +| main.rs:721:11:721:11 | S | main.rs:715:5:715:13 | struct S | +| main.rs:723:13:723:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:729:17:729:17 | S | main.rs:715:5:715:13 | struct S | +| main.rs:745:15:745:15 | T | main.rs:744:26:744:26 | T | +| main.rs:750:9:750:24 | GenericStruct::<...> | main.rs:743:5:746:5 | struct GenericStruct | +| main.rs:750:23:750:23 | T | main.rs:749:10:749:10 | T | +| main.rs:752:9:752:9 | T | main.rs:749:10:749:10 | T | +| main.rs:752:12:752:17 | TraitA | main.rs:735:5:737:5 | trait TraitA | +| main.rs:761:9:761:24 | GenericStruct::<...> | main.rs:743:5:746:5 | struct GenericStruct | +| main.rs:761:23:761:23 | T | main.rs:760:10:760:10 | T | +| main.rs:763:9:763:9 | T | main.rs:760:10:760:10 | T | +| main.rs:763:12:763:17 | TraitB | main.rs:739:5:741:5 | trait TraitB | +| main.rs:764:9:764:9 | T | main.rs:760:10:760:10 | T | +| main.rs:764:12:764:17 | TraitA | main.rs:735:5:737:5 | trait TraitA | +| main.rs:775:10:775:15 | TraitA | main.rs:735:5:737:5 | trait TraitA | +| main.rs:775:21:775:31 | Implementor | main.rs:772:5:772:23 | struct Implementor | +| main.rs:777:13:777:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:782:10:782:15 | TraitB | main.rs:739:5:741:5 | trait TraitB | +| main.rs:782:21:782:31 | Implementor | main.rs:772:5:772:23 | struct Implementor | +| main.rs:784:13:784:19 | println | {EXTERNAL LOCATION} | MacroRules | +| main.rs:790:24:790:34 | Implementor | main.rs:772:5:772:23 | struct Implementor | +| main.rs:791:23:791:35 | GenericStruct | main.rs:743:5:746:5 | struct GenericStruct | +| main.rs:797:9:797:36 | GenericStruct::<...> | main.rs:743:5:746:5 | struct GenericStruct | +| main.rs:797:9:797:50 | ...::call_trait_a | main.rs:754:9:756:9 | fn call_trait_a | +| main.rs:797:25:797:35 | Implementor | main.rs:772:5:772:23 | struct Implementor | +| main.rs:800:9:800:36 | GenericStruct::<...> | main.rs:743:5:746:5 | struct GenericStruct | +| main.rs:800:9:800:47 | ...::call_both | main.rs:766:9:769:9 | fn call_both | +| main.rs:800:25:800:35 | Implementor | main.rs:772:5:772:23 | struct Implementor | +| main.rs:806:3:806:12 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:806:3:806:24 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix | +| main.rs:810:6:810:12 | AStruct | main.rs:809:1:809:17 | struct AStruct | +| main.rs:812:7:812:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:812:7:812:28 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix | +| main.rs:815:7:815:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:815:7:815:28 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix | +| main.rs:820:9:820:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:820:9:820:19 | ...::marker | {EXTERNAL LOCATION} | mod marker | +| main.rs:820:9:820:32 | ...::PhantomData | {EXTERNAL LOCATION} | struct PhantomData | +| main.rs:821:9:821:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:821:9:821:19 | ...::result | {EXTERNAL LOCATION} | mod result | +| main.rs:821:9:821:27 | ...::Result | {EXTERNAL LOCATION} | enum Result | +| main.rs:829:19:829:22 | Self | main.rs:823:5:831:5 | trait Reduce | +| main.rs:829:19:829:29 | ...::Input | main.rs:824:9:824:19 | type Input | +| main.rs:830:14:830:46 | Result::<...> | {EXTERNAL LOCATION} | enum Result | +| main.rs:830:21:830:24 | Self | main.rs:823:5:831:5 | trait Reduce | +| main.rs:830:21:830:32 | ...::Output | main.rs:825:21:826:20 | type Output | +| main.rs:830:35:830:38 | Self | main.rs:823:5:831:5 | trait Reduce | +| main.rs:830:35:830:45 | ...::Error | main.rs:824:21:825:19 | type Error | +| main.rs:834:17:834:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | +| main.rs:834:29:834:33 | Input | main.rs:833:19:833:23 | Input | +| main.rs:835:17:835:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | +| main.rs:835:29:835:33 | Error | main.rs:833:26:833:30 | Error | +| main.rs:842:11:842:16 | Reduce | main.rs:823:5:831:5 | trait Reduce | +| main.rs:843:13:846:9 | MyImpl::<...> | main.rs:833:5:836:5 | struct MyImpl | +| main.rs:844:13:844:17 | Input | main.rs:840:13:840:17 | Input | +| main.rs:845:13:845:17 | Error | main.rs:841:13:841:17 | Error | +| main.rs:848:22:851:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | +| main.rs:849:13:849:17 | Input | main.rs:840:13:840:17 | Input | +| main.rs:850:13:850:16 | Self | main.rs:833:5:836:5 | struct MyImpl | +| main.rs:850:13:850:23 | ...::Error | main.rs:852:11:856:9 | type Error | +| main.rs:853:22:855:9 | Option::<...> | {EXTERNAL LOCATION} | enum Option | +| main.rs:854:11:854:15 | Error | main.rs:841:13:841:17 | Error | +| main.rs:858:13:858:17 | Input | main.rs:840:13:840:17 | Input | +| main.rs:863:19:863:22 | Self | main.rs:833:5:836:5 | struct MyImpl | +| main.rs:863:19:863:29 | ...::Input | main.rs:848:9:852:9 | type Input | +| main.rs:864:14:867:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | +| main.rs:865:13:865:16 | Self | main.rs:833:5:836:5 | struct MyImpl | +| main.rs:865:13:865:24 | ...::Output | main.rs:856:11:859:9 | type Output | +| main.rs:866:13:866:16 | Self | main.rs:833:5:836:5 | struct MyImpl | +| main.rs:866:13:866:23 | ...::Error | main.rs:852:11:856:9 | type Error | +| main.rs:873:5:873:7 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:873:11:873:14 | self | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:875:15:875:17 | ztd | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:875:15:875:25 | ...::string | {EXTERNAL LOCATION} | mod string | +| main.rs:875:15:875:33 | ...::String | {EXTERNAL LOCATION} | struct String | +| main.rs:885:7:885:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:885:7:885:26 | ...::identity | proc_macro.rs:15:1:18:1 | fn identity | +| main.rs:886:10:886:15 | ATrait | main.rs:881:5:883:5 | trait ATrait | +| main.rs:886:21:886:23 | i64 | {EXTERNAL LOCATION} | struct i64 | +| main.rs:888:11:888:13 | i64 | {EXTERNAL LOCATION} | struct i64 | +| main.rs:894:17:894:19 | Foo | main.rs:879:5:879:15 | struct Foo | +| main.rs:900:22:900:32 | Option::<...> | {EXTERNAL LOCATION} | enum Option | +| main.rs:900:29:900:31 | i32 | {EXTERNAL LOCATION} | struct i32 | +| main.rs:901:17:901:20 | Some | {EXTERNAL LOCATION} | Some | +| main.rs:902:17:902:27 | Option::<...> | {EXTERNAL LOCATION} | enum Option | +| main.rs:902:24:902:26 | i32 | {EXTERNAL LOCATION} | struct i32 | +| main.rs:903:13:903:16 | Some | {EXTERNAL LOCATION} | Some | +| main.rs:904:17:904:20 | None | {EXTERNAL LOCATION} | None | +| main.rs:906:13:906:16 | None | {EXTERNAL LOCATION} | None | +| main.rs:907:17:907:20 | None | {EXTERNAL LOCATION} | None | +| main.rs:916:19:916:29 | Option::<...> | {EXTERNAL LOCATION} | enum Option | +| main.rs:916:26:916:28 | i32 | {EXTERNAL LOCATION} | struct i32 | +| main.rs:917:26:917:29 | test | main.rs:899:5:913:5 | fn test | +| main.rs:923:14:923:16 | i32 | {EXTERNAL LOCATION} | struct i32 | +| main.rs:928:17:928:20 | Some | {EXTERNAL LOCATION} | Some | +| main.rs:930:13:930:16 | Some | {EXTERNAL LOCATION} | Some | +| main.rs:935:13:935:16 | Some | {EXTERNAL LOCATION} | Some | +| main.rs:935:18:935:18 | z | main.rs:922:5:924:12 | Const | +| main.rs:935:24:935:24 | z | main.rs:922:5:924:12 | Const | +| main.rs:942:5:942:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:942:5:942:14 | ...::nested | my.rs:1:1:1:15 | mod nested | +| main.rs:942:5:942:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | +| main.rs:942:5:942:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | +| main.rs:942:5:942:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | +| main.rs:943:5:943:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:943:5:943:9 | ...::f | my.rs:5:1:7:1 | fn f | +| main.rs:944:5:944:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | +| main.rs:944:5:944:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | +| main.rs:944:5:944:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | +| main.rs:944:5:944:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:945:5:945:5 | f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:946:5:946:5 | g | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:947:5:947:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:947:5:947:12 | ...::h | main.rs:57:1:76:1 | fn h | +| main.rs:948:5:948:6 | m1 | main.rs:20:1:44:1 | mod m1 | +| main.rs:948:5:948:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 | +| main.rs:948:5:948:13 | ...::g | main.rs:30:9:34:9 | fn g | +| main.rs:949:5:949:6 | m1 | main.rs:20:1:44:1 | mod m1 | +| main.rs:949:5:949:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 | +| main.rs:949:5:949:14 | ...::m3 | main.rs:36:9:42:9 | mod m3 | +| main.rs:949:5:949:17 | ...::h | main.rs:37:27:41:13 | fn h | +| main.rs:950:5:950:6 | m4 | main.rs:46:1:53:1 | mod m4 | +| main.rs:950:5:950:9 | ...::i | main.rs:49:5:52:5 | fn i | +| main.rs:951:5:951:5 | h | main.rs:57:1:76:1 | fn h | +| main.rs:952:5:952:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:953:5:953:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:954:5:954:5 | j | main.rs:104:1:108:1 | fn j | +| main.rs:955:5:955:6 | m6 | main.rs:116:1:128:1 | mod m6 | +| main.rs:955:5:955:9 | ...::g | main.rs:121:5:127:5 | fn g | +| main.rs:956:5:956:6 | m7 | main.rs:130:1:149:1 | mod m7 | +| main.rs:956:5:956:9 | ...::f | main.rs:141:5:148:5 | fn f | +| main.rs:957:5:957:6 | m8 | main.rs:151:1:205:1 | mod m8 | +| main.rs:957:5:957:9 | ...::g | main.rs:189:5:204:5 | fn g | +| main.rs:958:5:958:6 | m9 | main.rs:207:1:215:1 | mod m9 | +| main.rs:958:5:958:9 | ...::f | main.rs:210:5:214:5 | fn f | +| main.rs:959:5:959:7 | m11 | main.rs:238:1:275:1 | mod m11 | +| main.rs:959:5:959:10 | ...::f | main.rs:243:5:246:5 | fn f | +| main.rs:960:5:960:7 | m15 | main.rs:306:1:375:1 | mod m15 | +| main.rs:960:5:960:10 | ...::f | main.rs:362:5:374:5 | fn f | +| main.rs:961:5:961:7 | m16 | main.rs:377:1:574:1 | mod m16 | +| main.rs:961:5:961:10 | ...::f | main.rs:446:5:470:5 | fn f | +| main.rs:962:5:962:20 | trait_visibility | main.rs:576:1:626:1 | mod trait_visibility | +| main.rs:962:5:962:23 | ...::f | main.rs:603:5:625:5 | fn f | +| main.rs:963:5:963:7 | m17 | main.rs:628:1:658:1 | mod m17 | +| main.rs:963:5:963:10 | ...::f | main.rs:652:5:657:5 | fn f | +| main.rs:964:5:964:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | +| main.rs:964:5:964:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | +| main.rs:965:5:965:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | +| main.rs:965:5:965:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | +| main.rs:966:5:966:7 | my3 | my2/mod.rs:20:1:20:12 | mod my3 | +| main.rs:966:5:966:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | +| main.rs:967:5:967:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | +| main.rs:968:5:968:12 | my_alias | main.rs:1:1:1:7 | mod my | +| main.rs:968:5:968:22 | ...::nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | +| main.rs:969:5:969:7 | m18 | main.rs:660:1:678:1 | mod m18 | +| main.rs:969:5:969:12 | ...::m19 | main.rs:665:5:677:5 | mod m19 | +| main.rs:969:5:969:17 | ...::m20 | main.rs:670:9:676:9 | mod m20 | +| main.rs:969:5:969:20 | ...::g | main.rs:671:13:675:13 | fn g | +| main.rs:970:5:970:7 | m23 | main.rs:707:1:732:1 | mod m23 | +| main.rs:970:5:970:10 | ...::f | main.rs:727:5:731:5 | fn f | +| main.rs:971:5:971:7 | m24 | main.rs:734:1:802:1 | mod m24 | +| main.rs:971:5:971:10 | ...::f | main.rs:788:5:801:5 | fn f | +| main.rs:972:5:972:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:972:5:972:11 | ...::h | main.rs:57:1:76:1 | fn h | +| main.rs:973:5:973:13 | z_changed | main.rs:807:1:807:9 | fn z_changed | +| main.rs:974:5:974:11 | AStruct | main.rs:809:1:809:17 | struct AStruct | +| main.rs:974:5:974:22 | ...::z_on_type | main.rs:813:5:813:17 | fn z_on_type | +| main.rs:975:5:975:11 | AStruct | main.rs:809:1:809:17 | struct AStruct | +| main.rs:976:5:976:29 | impl_with_attribute_macro | main.rs:877:1:896:1 | mod impl_with_attribute_macro | +| main.rs:976:5:976:35 | ...::test | main.rs:892:5:895:5 | fn test | +| main.rs:977:5:977:12 | patterns | main.rs:898:1:939:1 | mod patterns | +| main.rs:977:5:977:18 | ...::test | main.rs:899:5:913:5 | fn test | | my2/mod.rs:4:5:4:11 | println | {EXTERNAL LOCATION} | MacroRules | | my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | @@ -514,7 +575,7 @@ resolvePath | my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g | | my2/my3/mod.rs:4:5:4:5 | h | main.rs:57:1:76:1 | fn h | | my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:25:34 | SourceFile | -| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:873:2 | SourceFile | +| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:978:2 | SourceFile | | my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:57:1:76:1 | fn h | | my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:25:34 | SourceFile | | my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g | diff --git a/rust/ql/test/library-tests/sensitivedata/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/sensitivedata/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index ce79c75327ab..000000000000 --- a/rust/ql/test/library-tests/sensitivedata/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -multipleCallTargets -| test.rs:288:7:288:36 | ... .as_str() | diff --git a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected index 7ee176a136f8..d2807602e2f9 100644 --- a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected @@ -1,14 +1,35 @@ -multipleCallTargets +multipleResolvedTargets +| blanket_impl.rs:33:13:33:17 | * ... | | dereference.rs:69:15:69:24 | e1.deref() | +| dereference.rs:73:15:73:17 | * ... | +| dereference.rs:77:16:77:18 | * ... | | dereference.rs:182:17:182:26 | ... .foo() | | dereference.rs:183:17:183:23 | S.foo() | | dereference.rs:184:17:184:30 | ... .foo() | | dereference.rs:186:17:186:25 | S.bar(...) | | dereference.rs:187:17:187:29 | S.bar(...) | -| main.rs:590:9:590:18 | ...::m(...) | +| dyn_type.rs:65:20:65:23 | * ... | +| dyn_type.rs:69:21:69:24 | * ... | +| dyn_type.rs:90:10:90:13 | * ... | +| invalid/main.rs:69:13:69:17 | * ... | +| invalid/main.rs:76:13:76:17 | * ... | +| main.rs:1077:14:1077:18 | * ... | +| main.rs:1159:26:1159:30 | * ... | +| main.rs:1504:14:1504:21 | * ... | +| main.rs:1504:16:1504:20 | * ... | +| main.rs:1509:14:1509:18 | * ... | +| main.rs:1540:27:1540:29 | * ... | +| main.rs:1654:17:1654:24 | * ... | +| main.rs:1654:18:1654:24 | * ... | +| main.rs:1792:17:1792:21 | * ... | +| main.rs:1807:28:1807:32 | * ... | +| main.rs:2440:13:2440:18 | * ... | | main.rs:2634:13:2634:31 | ...::from(...) | | main.rs:2635:13:2635:31 | ...::from(...) | | main.rs:2636:13:2636:31 | ...::from(...) | | main.rs:2642:13:2642:31 | ...::from(...) | | main.rs:2643:13:2643:31 | ...::from(...) | | main.rs:2644:13:2644:31 | ...::from(...) | +| main.rs:3067:13:3067:17 | x.f() | +| pattern_matching.rs:273:13:273:27 | * ... | +| pattern_matching.rs:273:14:273:27 | * ... | diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index bf53c4906e30..466733cf47c7 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -587,7 +587,7 @@ mod impl_overlap { println!("{:?}", S3::m(&w, x)); // $ target=S3::m S4.m(); // $ target=::m - S4::m(&S4); // $ target=::m $ SPURIOUS: target=MyTrait1::m + S4::m(&S4); // $ target=::m S5(0i32).m(); // $ target=_as_MyTrait1>::m S5::m(&S5(0i32)); // $ target=_as_MyTrait1>::m S5(true).m(); // $ target=MyTrait1::m @@ -3036,6 +3036,39 @@ mod context_typed { } } +mod literal_overlap { + trait MyTrait { + fn f(self) -> Self; + } + + impl MyTrait for i32 { + // i32f + fn f(self) -> Self { + self + } + } + + impl MyTrait for usize { + // usizef + fn f(self) -> Self { + self + } + } + + impl MyTrait for &T { + // Reff + fn f(self) -> Self { + self + } + } + + pub fn f() -> usize { + let mut x = 0; + x = x.f(); // $ target=usizef $ SPURIOUS: target=i32f + x + } +} + mod blanket_impl; mod closure; mod dereference; diff --git a/rust/ql/test/library-tests/type-inference/raw_pointer.rs b/rust/ql/test/library-tests/type-inference/raw_pointer.rs new file mode 100644 index 000000000000..bf4537f30ce6 --- /dev/null +++ b/rust/ql/test/library-tests/type-inference/raw_pointer.rs @@ -0,0 +1,60 @@ +use std::ptr::null_mut; + +fn raw_pointer_const_deref(x: *const i32) -> i32 { + let _y = unsafe { *x }; // $ type=_y:i32 + 0 +} + +fn raw_pointer_mut_deref(x: *mut bool) -> i32 { + let _y = unsafe { *x }; // $ type=_y:bool + 0 +} + +fn raw_const_borrow() { + let a: i64 = 10; + let x = &raw const a; // $ type=x:TPtrConst.i64 + unsafe { + let _y = *x; // $ type=_y:i64 + } +} + +fn raw_mut_borrow() { + let mut a = 10i32; + let x = &raw mut a; // $ type=x:TPtrMut.i32 + unsafe { + let _y = *x; // $ type=_y:i32 + } +} + +fn raw_mut_write(cond: bool) { + let a = 10i32; + // The type of `ptr_written` must be inferred from the write below. + let ptr_written = null_mut(); // $ target=null_mut type=ptr_written:TPtrMut.i32 + if cond { + unsafe { + // NOTE: This write is undefined behavior because `ptr_written` is a null pointer. + *ptr_written = a; + let _y = *ptr_written; // $ type=_y:i32 + } + } +} + +fn raw_type_from_deref(cond: bool) { + // The type of `ptr_read` must be inferred from the read below. + let ptr_read = null_mut(); // $ target=null_mut type=ptr_read:TPtrMut.i64 + if cond { + unsafe { + // NOTE: This read is undefined behavior because `ptr_read` is a null pointer. + let _y: i64 = *ptr_read; + } + } +} + +pub fn test() { + raw_pointer_const_deref(&10); // $ target=raw_pointer_const_deref + raw_pointer_mut_deref(&mut true); // $ target=raw_pointer_mut_deref + raw_const_borrow(); // $ target=raw_const_borrow + raw_mut_borrow(); // $ target=raw_mut_borrow + raw_mut_write(false); // $ target=raw_mut_write + raw_type_from_deref(false); // $ target=raw_type_from_deref +} diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 6e8901b73490..6afbbf6d43fd 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -1,3 +1,4494 @@ +inferCertainType +| blanket_impl.rs:15:18:15:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:15:18:15:22 | SelfParam | TRef | blanket_impl.rs:9:5:10:14 | S2 | +| blanket_impl.rs:15:42:17:9 | { ... } | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:15:42:17:9 | { ... } | TRef | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:16:13:16:15 | &S1 | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:21:19:21:23 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:21:19:21:23 | SelfParam | TRef | blanket_impl.rs:20:5:22:5 | Self [trait Clone1] | +| blanket_impl.rs:25:22:25:26 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:25:22:25:26 | SelfParam | TRef | blanket_impl.rs:24:5:28:5 | Self [trait Duplicatable] | +| blanket_impl.rs:32:19:32:23 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:32:19:32:23 | SelfParam | TRef | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:32:34:34:9 | { ... } | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:33:14:33:17 | self | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:33:14:33:17 | self | TRef | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:40:22:40:26 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:40:22:40:26 | SelfParam | TRef | blanket_impl.rs:38:10:38:18 | T | +| blanket_impl.rs:40:37:42:9 | { ... } | | blanket_impl.rs:38:10:38:18 | T | +| blanket_impl.rs:41:13:41:16 | self | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:41:13:41:16 | self | TRef | blanket_impl.rs:38:10:38:18 | T | +| blanket_impl.rs:45:33:60:5 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:47:18:47:25 | "{x1:?}\\n" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:47:18:47:25 | "{x1:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:47:18:47:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:47:18:47:25 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:48:18:48:22 | (...) | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:48:19:48:21 | &S1 | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:49:18:49:25 | "{x2:?}\\n" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:49:18:49:25 | "{x2:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:49:18:49:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:49:18:49:25 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:51:18:51:25 | "{x3:?}\\n" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:51:18:51:25 | "{x3:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:51:18:51:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:51:18:51:25 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:52:18:52:22 | (...) | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:52:19:52:21 | &S1 | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:53:18:53:25 | "{x4:?}\\n" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:53:18:53:25 | "{x4:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:53:18:53:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:53:18:53:25 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:54:32:54:34 | &S1 | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:55:18:55:25 | "{x5:?}\\n" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:55:18:55:25 | "{x5:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:55:18:55:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:55:18:55:25 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:57:18:57:25 | "{x6:?}\\n" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:57:18:57:25 | "{x6:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:57:18:57:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:57:18:57:25 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:58:18:58:22 | (...) | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:58:19:58:21 | &S2 | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:59:18:59:25 | "{x7:?}\\n" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:59:18:59:25 | "{x7:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:59:18:59:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:59:18:59:25 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:68:24:68:24 | x | | {EXTERNAL LOCATION} | i64 | +| blanket_impl.rs:68:32:68:32 | y | | blanket_impl.rs:67:5:69:5 | Self [trait Trait1] | +| blanket_impl.rs:72:24:72:24 | x | | {EXTERNAL LOCATION} | i64 | +| blanket_impl.rs:72:32:72:32 | y | | blanket_impl.rs:71:5:73:5 | Self [trait Trait2] | +| blanket_impl.rs:77:24:77:24 | x | | {EXTERNAL LOCATION} | i64 | +| blanket_impl.rs:77:32:77:32 | y | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:77:49:79:9 | { ... } | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:78:13:78:13 | y | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:84:24:84:24 | x | | {EXTERNAL LOCATION} | i64 | +| blanket_impl.rs:84:32:84:32 | y | | blanket_impl.rs:82:10:82:18 | T | +| blanket_impl.rs:84:49:86:9 | { ... } | | blanket_impl.rs:82:10:82:18 | T | +| blanket_impl.rs:85:28:85:28 | x | | {EXTERNAL LOCATION} | i64 | +| blanket_impl.rs:85:31:85:31 | y | | blanket_impl.rs:82:10:82:18 | T | +| blanket_impl.rs:89:33:98:5 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:90:13:90:14 | x1 | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:90:18:90:39 | ...::assoc_func1(...) | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:91:18:91:25 | "{x1:?}\\n" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:91:18:91:25 | "{x1:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:91:18:91:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:91:18:91:25 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:91:20:91:21 | x1 | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:93:18:93:25 | "{x2:?}\\n" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:93:18:93:25 | "{x2:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:93:18:93:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:93:18:93:25 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:95:18:95:25 | "{x3:?}\\n" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:95:18:95:25 | "{x3:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:95:18:95:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:95:18:95:25 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:97:18:97:25 | "{x4:?}\\n" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:97:18:97:25 | "{x4:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:97:18:97:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:97:18:97:25 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:108:22:108:26 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:108:22:108:26 | SelfParam | TRef | blanket_impl.rs:107:5:109:5 | Self [trait Flag] | +| blanket_impl.rs:112:26:112:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:112:26:112:30 | SelfParam | TRef | blanket_impl.rs:111:5:113:5 | Self [trait TryFlag] | +| blanket_impl.rs:119:26:119:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:119:26:119:30 | SelfParam | TRef | blanket_impl.rs:115:10:115:11 | Fl | +| blanket_impl.rs:119:49:121:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| blanket_impl.rs:119:49:121:9 | { ... } | T | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:120:18:120:21 | self | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:120:18:120:21 | self | TRef | blanket_impl.rs:115:10:115:11 | Fl | +| blanket_impl.rs:126:32:126:36 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:126:32:126:36 | SelfParam | TRef | blanket_impl.rs:124:5:129:5 | Self [trait TryFlagExt] | +| blanket_impl.rs:126:55:128:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| blanket_impl.rs:126:55:128:9 | { ... } | T | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:127:13:127:16 | self | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:127:13:127:16 | self | TRef | blanket_impl.rs:124:5:129:5 | Self [trait TryFlagExt] | +| blanket_impl.rs:135:32:135:36 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:135:32:135:36 | SelfParam | TRef | blanket_impl.rs:133:5:136:5 | Self [trait AnotherTryFlag] | +| blanket_impl.rs:144:26:144:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:144:26:144:30 | SelfParam | TRef | blanket_impl.rs:138:5:140:5 | MyTryFlag | +| blanket_impl.rs:144:49:146:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| blanket_impl.rs:144:49:146:9 | { ... } | T | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:145:18:145:21 | self | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:145:18:145:21 | self | TRef | blanket_impl.rs:138:5:140:5 | MyTryFlag | +| blanket_impl.rs:155:22:155:26 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:155:22:155:26 | SelfParam | TRef | blanket_impl.rs:149:5:151:5 | MyFlag | +| blanket_impl.rs:155:37:157:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:156:13:156:16 | self | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:156:13:156:16 | self | TRef | blanket_impl.rs:149:5:151:5 | MyFlag | +| blanket_impl.rs:166:32:166:36 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:166:32:166:36 | SelfParam | TRef | blanket_impl.rs:160:5:162:5 | MyOtherFlag | +| blanket_impl.rs:166:55:168:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| blanket_impl.rs:166:55:168:9 | { ... } | T | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:167:18:167:21 | self | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:167:18:167:21 | self | TRef | blanket_impl.rs:160:5:162:5 | MyOtherFlag | +| blanket_impl.rs:171:15:184:5 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:172:13:172:23 | my_try_flag | | blanket_impl.rs:138:5:140:5 | MyTryFlag | +| blanket_impl.rs:172:27:172:50 | MyTryFlag {...} | | blanket_impl.rs:138:5:140:5 | MyTryFlag | +| blanket_impl.rs:172:45:172:48 | true | | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:173:22:173:32 | my_try_flag | | blanket_impl.rs:138:5:140:5 | MyTryFlag | +| blanket_impl.rs:175:13:175:19 | my_flag | | blanket_impl.rs:149:5:151:5 | MyFlag | +| blanket_impl.rs:175:23:175:43 | MyFlag {...} | | blanket_impl.rs:149:5:151:5 | MyFlag | +| blanket_impl.rs:175:38:175:41 | true | | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:178:22:178:28 | my_flag | | blanket_impl.rs:149:5:151:5 | MyFlag | +| blanket_impl.rs:180:13:180:25 | my_other_flag | | blanket_impl.rs:160:5:162:5 | MyOtherFlag | +| blanket_impl.rs:180:29:180:54 | MyOtherFlag {...} | | blanket_impl.rs:160:5:162:5 | MyOtherFlag | +| blanket_impl.rs:180:49:180:52 | true | | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:183:22:183:34 | my_other_flag | | blanket_impl.rs:160:5:162:5 | MyOtherFlag | +| blanket_impl.rs:196:15:196:18 | SelfParam | | blanket_impl.rs:194:5:197:5 | Self [trait MyTrait1] | +| blanket_impl.rs:201:15:201:18 | SelfParam | | blanket_impl.rs:199:5:202:5 | Self [trait MyTrait2] | +| blanket_impl.rs:206:15:206:18 | SelfParam | | blanket_impl.rs:204:5:207:5 | Self [trait MyTrait3] | +| blanket_impl.rs:211:15:211:18 | SelfParam | | blanket_impl.rs:209:5:212:5 | Self [trait MyTrait4a] | +| blanket_impl.rs:216:15:216:18 | SelfParam | | blanket_impl.rs:214:5:217:5 | Self [trait MyTrait4b] | +| blanket_impl.rs:221:15:221:18 | SelfParam | | blanket_impl.rs:188:5:189:14 | S1 | +| blanket_impl.rs:221:21:221:22 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:226:15:226:18 | SelfParam | | blanket_impl.rs:188:5:189:14 | S1 | +| blanket_impl.rs:226:21:226:22 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:231:15:231:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:231:15:231:18 | SelfParam | TRef | blanket_impl.rs:229:10:229:27 | T | +| blanket_impl.rs:231:21:233:9 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:232:13:232:16 | self | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:232:13:232:16 | self | TRef | blanket_impl.rs:229:10:229:27 | T | +| blanket_impl.rs:238:15:238:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:238:15:238:18 | SelfParam | TRef | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:238:15:238:18 | SelfParam | TRef.TRef | blanket_impl.rs:188:5:189:14 | S1 | +| blanket_impl.rs:238:21:240:9 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:239:13:239:16 | self | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:239:13:239:16 | self | TRef | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:239:13:239:16 | self | TRef.TRef | blanket_impl.rs:188:5:189:14 | S1 | +| blanket_impl.rs:245:15:245:18 | SelfParam | | blanket_impl.rs:243:10:243:20 | T | +| blanket_impl.rs:245:21:247:9 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:246:13:246:16 | self | | blanket_impl.rs:243:10:243:20 | T | +| blanket_impl.rs:252:15:252:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:252:15:252:18 | SelfParam | TRef | blanket_impl.rs:250:10:250:10 | T | +| blanket_impl.rs:252:21:252:22 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:255:33:263:5 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:257:18:257:22 | (...) | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:257:19:257:21 | &S1 | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:258:18:258:23 | (...) | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:258:19:258:22 | &... | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:258:20:258:22 | &S1 | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:260:18:260:22 | (...) | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:260:19:260:21 | &S1 | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:262:18:262:22 | (...) | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:262:19:262:21 | &S2 | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:272:21:272:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:272:21:272:25 | SelfParam | TRef | blanket_impl.rs:271:5:274:5 | Self [trait Executor] | +| blanket_impl.rs:273:24:273:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:273:24:273:28 | SelfParam | TRef | blanket_impl.rs:271:5:274:5 | Self [trait Executor] | +| blanket_impl.rs:273:31:273:35 | query | | blanket_impl.rs:273:21:273:21 | E | +| blanket_impl.rs:277:21:277:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:277:21:277:25 | SelfParam | TRef | blanket_impl.rs:276:10:276:22 | T | +| blanket_impl.rs:277:28:279:9 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:278:22:278:41 | "Executor::execute1\\n" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:278:22:278:41 | "Executor::execute1\\n" | TRef | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:278:22:278:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:278:22:278:41 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:281:24:281:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:281:24:281:28 | SelfParam | TRef | blanket_impl.rs:276:10:276:22 | T | +| blanket_impl.rs:281:31:281:36 | _query | | blanket_impl.rs:281:21:281:21 | E | +| blanket_impl.rs:281:42:283:9 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:282:22:282:41 | "Executor::execute2\\n" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:282:22:282:41 | "Executor::execute2\\n" | TRef | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:282:22:282:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:282:22:282:41 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:290:16:300:5 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:291:13:291:13 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | +| blanket_impl.rs:291:17:291:34 | MySqlConnection {...} | | blanket_impl.rs:286:5:286:29 | MySqlConnection | +| blanket_impl.rs:293:9:293:9 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | +| blanket_impl.rs:294:35:294:36 | &c | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:294:36:294:36 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | +| blanket_impl.rs:296:9:296:9 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | +| blanket_impl.rs:296:20:296:40 | "SELECT * FROM users" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:296:20:296:40 | "SELECT * FROM users" | TRef | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:297:9:297:9 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | +| blanket_impl.rs:297:28:297:48 | "SELECT * FROM users" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:297:28:297:48 | "SELECT * FROM users" | TRef | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:298:35:298:36 | &c | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:298:36:298:36 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | +| blanket_impl.rs:298:39:298:59 | "SELECT * FROM users" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:298:39:298:59 | "SELECT * FROM users" | TRef | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:299:43:299:44 | &c | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:299:44:299:44 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | +| blanket_impl.rs:299:47:299:67 | "SELECT * FROM users" | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:299:47:299:67 | "SELECT * FROM users" | TRef | {EXTERNAL LOCATION} | str | +| closure.rs:4:19:31:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:6:27:6:27 | a | | {EXTERNAL LOCATION} | bool | +| closure.rs:6:30:6:30 | b | | {EXTERNAL LOCATION} | bool | +| closure.rs:6:33:6:33 | a | | {EXTERNAL LOCATION} | bool | +| closure.rs:6:33:6:38 | ... && ... | | {EXTERNAL LOCATION} | bool | +| closure.rs:6:38:6:38 | b | | {EXTERNAL LOCATION} | bool | +| closure.rs:8:13:8:13 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:8:22:8:25 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:9:31:9:34 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:10:26:10:26 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:14:25:14:25 | n | | {EXTERNAL LOCATION} | i64 | +| closure.rs:14:33:14:33 | n | | {EXTERNAL LOCATION} | i64 | +| closure.rs:25:21:25:24 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:30:13:30:15 | _b2 | | {EXTERNAL LOCATION} | bool | +| closure.rs:35:44:35:44 | f | | closure.rs:35:20:35:41 | F | +| closure.rs:35:50:37:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:36:23:36:23 | f | | closure.rs:35:20:35:41 | F | +| closure.rs:36:25:36:28 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:39:46:39:46 | f | | closure.rs:39:22:39:43 | F | +| closure.rs:39:52:42:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:41:9:41:9 | f | | closure.rs:39:22:39:43 | F | +| closure.rs:44:39:44:39 | f | | closure.rs:44:20:44:36 | F | +| closure.rs:44:45:44:45 | a | | closure.rs:44:14:44:14 | A | +| closure.rs:44:56:46:5 | { ... } | | closure.rs:44:17:44:17 | B | +| closure.rs:45:9:45:9 | f | | closure.rs:44:20:44:36 | F | +| closure.rs:45:11:45:11 | a | | closure.rs:44:14:44:14 | A | +| closure.rs:48:18:48:18 | f | | closure.rs:48:21:48:43 | impl ... | +| closure.rs:48:53:50:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:49:9:49:9 | f | | closure.rs:48:21:48:43 | impl ... | +| closure.rs:52:15:64:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:53:18:53:18 | x | | {EXTERNAL LOCATION} | bool | +| closure.rs:54:16:54:16 | x | | {EXTERNAL LOCATION} | bool | +| closure.rs:60:27:60:30 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:63:13:63:15 | _r2 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:63:19:63:30 | apply_two(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:68:54:68:54 | f | | {EXTERNAL LOCATION} | Box | +| closure.rs:68:54:68:54 | f | A | {EXTERNAL LOCATION} | Global | +| closure.rs:68:54:68:54 | f | T | closure.rs:68:26:68:51 | F | +| closure.rs:68:65:68:67 | arg | | closure.rs:68:20:68:20 | A | +| closure.rs:68:78:70:5 | { ... } | | closure.rs:68:23:68:23 | B | +| closure.rs:69:9:69:9 | f | | {EXTERNAL LOCATION} | Box | +| closure.rs:69:9:69:9 | f | A | {EXTERNAL LOCATION} | Global | +| closure.rs:69:9:69:9 | f | T | closure.rs:68:26:68:51 | F | +| closure.rs:69:11:69:13 | arg | | closure.rs:68:20:68:20 | A | +| closure.rs:72:30:72:30 | f | | {EXTERNAL LOCATION} | Box | +| closure.rs:72:30:72:30 | f | A | {EXTERNAL LOCATION} | Global | +| closure.rs:72:30:72:30 | f | T | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:72:30:72:30 | f | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:72:30:72:30 | f | T.dyn(Args).T0 | closure.rs:72:24:72:24 | A | +| closure.rs:72:30:72:30 | f | T.dyn(Output) | closure.rs:72:27:72:27 | B | +| closure.rs:72:58:72:60 | arg | | closure.rs:72:24:72:24 | A | +| closure.rs:72:66:75:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:73:31:73:31 | f | | {EXTERNAL LOCATION} | Box | +| closure.rs:73:31:73:31 | f | A | {EXTERNAL LOCATION} | Global | +| closure.rs:73:31:73:31 | f | T | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:73:31:73:31 | f | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:73:31:73:31 | f | T.dyn(Args).T0 | closure.rs:72:24:72:24 | A | +| closure.rs:73:31:73:31 | f | T.dyn(Output) | closure.rs:72:27:72:27 | B | +| closure.rs:73:34:73:36 | arg | | closure.rs:72:24:72:24 | A | +| closure.rs:74:31:74:53 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| closure.rs:74:31:74:53 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| closure.rs:74:41:74:41 | _ | | {EXTERNAL LOCATION} | i64 | +| closure.rs:74:49:74:52 | true | | {EXTERNAL LOCATION} | bool | +| dereference.rs:12:14:12:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:12:14:12:18 | SelfParam | TRef | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:12:29:14:5 | { ... } | | {EXTERNAL LOCATION} | & | +| dereference.rs:12:29:14:5 | { ... } | TRef | {EXTERNAL LOCATION} | i64 | +| dereference.rs:13:9:13:19 | &... | | {EXTERNAL LOCATION} | & | +| dereference.rs:13:10:13:13 | self | | {EXTERNAL LOCATION} | & | +| dereference.rs:13:10:13:13 | self | TRef | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:25:14:25:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:25:14:25:18 | SelfParam | TRef | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:25:14:25:18 | SelfParam | TRef.T | dereference.rs:21:6:21:6 | T | +| dereference.rs:25:27:27:5 | { ... } | | {EXTERNAL LOCATION} | & | +| dereference.rs:25:27:27:5 | { ... } | TRef | dereference.rs:21:6:21:6 | T | +| dereference.rs:26:9:26:19 | &... | | {EXTERNAL LOCATION} | & | +| dereference.rs:26:10:26:13 | self | | {EXTERNAL LOCATION} | & | +| dereference.rs:26:10:26:13 | self | TRef | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:26:10:26:13 | self | TRef.T | dereference.rs:21:6:21:6 | T | +| dereference.rs:33:12:33:16 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:33:12:33:16 | SelfParam | TRef | dereference.rs:30:1:30:15 | S | +| dereference.rs:33:12:33:16 | SelfParam | TRef.T | dereference.rs:32:6:32:6 | T | +| dereference.rs:33:25:35:5 | { ... } | | {EXTERNAL LOCATION} | & | +| dereference.rs:33:25:35:5 | { ... } | TRef | dereference.rs:32:6:32:6 | T | +| dereference.rs:34:9:34:15 | &... | | {EXTERNAL LOCATION} | & | +| dereference.rs:34:10:34:13 | self | | {EXTERNAL LOCATION} | & | +| dereference.rs:34:10:34:13 | self | TRef | dereference.rs:30:1:30:15 | S | +| dereference.rs:34:10:34:13 | self | TRef.T | dereference.rs:32:6:32:6 | T | +| dereference.rs:38:39:50:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:40:9:40:10 | a1 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:40:14:40:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:40:36:40:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:41:15:41:16 | a1 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:44:9:44:10 | a2 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:44:14:44:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:44:36:44:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:45:16:45:17 | a2 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:48:9:48:10 | a3 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:48:14:48:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:48:36:48:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:49:17:49:18 | a3 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:52:39:64:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:54:9:54:10 | c1 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:54:14:54:42 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:54:38:54:40 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:55:15:55:16 | c1 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:58:9:58:10 | c2 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:58:14:58:42 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:58:38:58:40 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:59:16:59:17 | c2 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:62:9:62:10 | c3 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:62:14:62:44 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:62:38:62:42 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:63:17:63:18 | c3 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:66:31:78:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:68:9:68:10 | e1 | | {EXTERNAL LOCATION} | & | +| dereference.rs:68:14:68:17 | &'a' | | {EXTERNAL LOCATION} | & | +| dereference.rs:68:15:68:17 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:69:15:69:16 | e1 | | {EXTERNAL LOCATION} | & | +| dereference.rs:72:9:72:10 | e2 | | {EXTERNAL LOCATION} | & | +| dereference.rs:72:14:72:17 | &'a' | | {EXTERNAL LOCATION} | & | +| dereference.rs:72:15:72:17 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:73:16:73:17 | e2 | | {EXTERNAL LOCATION} | & | +| dereference.rs:76:9:76:10 | e3 | | {EXTERNAL LOCATION} | & | +| dereference.rs:76:14:76:19 | &34i64 | | {EXTERNAL LOCATION} | & | +| dereference.rs:76:15:76:19 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:77:17:77:18 | e3 | | {EXTERNAL LOCATION} | & | +| dereference.rs:80:31:92:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:82:9:82:10 | g1 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:82:9:82:10 | g1 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:82:9:82:10 | g1 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:82:25:82:37 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| dereference.rs:82:25:82:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:82:34:82:36 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:83:15:83:16 | g1 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:83:15:83:16 | g1 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:83:15:83:16 | g1 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:86:9:86:10 | g2 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:86:9:86:10 | g2 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:86:9:86:10 | g2 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:86:25:86:37 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| dereference.rs:86:25:86:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:86:34:86:36 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:87:16:87:17 | g2 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:87:16:87:17 | g2 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:87:16:87:17 | g2 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:90:9:90:10 | g3 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:90:9:90:10 | g3 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:90:9:90:10 | g3 | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:90:24:90:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| dereference.rs:90:24:90:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:90:33:90:37 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:91:17:91:18 | g3 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:91:17:91:18 | g3 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:91:17:91:18 | g3 | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:94:27:105:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:96:9:96:9 | x | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:96:13:96:41 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:96:35:96:39 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:97:14:97:14 | x | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:100:9:100:9 | x | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:100:13:100:43 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:100:37:100:41 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:101:14:101:14 | x | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:103:9:103:9 | z | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:103:13:103:45 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:103:39:103:42 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:104:14:104:14 | z | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:131:19:139:5 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:132:17:132:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:132:17:132:26 | key_to_key | K | {EXTERNAL LOCATION} | & | +| dereference.rs:132:17:132:26 | key_to_key | K.TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:132:17:132:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:132:17:132:26 | key_to_key | V | {EXTERNAL LOCATION} | & | +| dereference.rs:132:17:132:26 | key_to_key | V.TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:132:30:132:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:132:30:132:57 | ...::new(...) | K | {EXTERNAL LOCATION} | & | +| dereference.rs:132:30:132:57 | ...::new(...) | K.TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:132:30:132:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:132:30:132:57 | ...::new(...) | V | {EXTERNAL LOCATION} | & | +| dereference.rs:132:30:132:57 | ...::new(...) | V.TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:133:17:133:19 | key | | {EXTERNAL LOCATION} | & | +| dereference.rs:133:23:133:29 | &... | | {EXTERNAL LOCATION} | & | +| dereference.rs:133:24:133:29 | Key {...} | | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:9:137:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| dereference.rs:134:32:134:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:134:32:134:41 | key_to_key | K | {EXTERNAL LOCATION} | & | +| dereference.rs:134:32:134:41 | key_to_key | K.TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:32:134:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:134:32:134:41 | key_to_key | V | {EXTERNAL LOCATION} | & | +| dereference.rs:134:32:134:41 | key_to_key | V.TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:47:134:49 | key | | {EXTERNAL LOCATION} | & | +| dereference.rs:134:52:137:9 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:136:13:136:15 | key | | {EXTERNAL LOCATION} | & | +| dereference.rs:138:9:138:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:138:9:138:18 | key_to_key | K | {EXTERNAL LOCATION} | & | +| dereference.rs:138:9:138:18 | key_to_key | K.TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:9:138:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:138:9:138:18 | key_to_key | V | {EXTERNAL LOCATION} | & | +| dereference.rs:138:9:138:18 | key_to_key | V.TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:27:138:29 | key | | {EXTERNAL LOCATION} | & | +| dereference.rs:138:32:138:34 | key | | {EXTERNAL LOCATION} | & | +| dereference.rs:144:16:144:19 | SelfParam | | dereference.rs:143:5:145:5 | Self [trait MyTrait1] | +| dereference.rs:151:16:151:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:151:16:151:19 | SelfParam | TRef | dereference.rs:147:5:147:13 | S | +| dereference.rs:151:27:153:9 | { ... } | | dereference.rs:147:5:147:13 | S | +| dereference.rs:158:16:158:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:158:16:158:19 | SelfParam | TRef | dereference.rs:147:5:147:13 | S | +| dereference.rs:158:29:160:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:164:16:164:19 | SelfParam | | dereference.rs:163:5:165:5 | Self [trait MyTrait2] | +| dereference.rs:164:22:164:24 | arg | | dereference.rs:163:20:163:21 | T1 | +| dereference.rs:169:16:169:19 | SelfParam | | dereference.rs:147:5:147:13 | S | +| dereference.rs:169:22:169:24 | arg | | {EXTERNAL LOCATION} | & | +| dereference.rs:169:22:169:24 | arg | TRef | dereference.rs:147:5:147:13 | S | +| dereference.rs:169:36:171:9 | { ... } | | dereference.rs:147:5:147:13 | S | +| dereference.rs:176:16:176:19 | SelfParam | | dereference.rs:147:5:147:13 | S | +| dereference.rs:176:22:176:24 | arg | | {EXTERNAL LOCATION} | & | +| dereference.rs:176:22:176:24 | arg | TRef | dereference.rs:147:5:147:13 | S | +| dereference.rs:176:42:178:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:181:19:188:5 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:182:17:182:20 | (...) | | {EXTERNAL LOCATION} | & | +| dereference.rs:182:18:182:19 | &S | | {EXTERNAL LOCATION} | & | +| dereference.rs:184:17:184:24 | (...) | | {EXTERNAL LOCATION} | & | +| dereference.rs:184:18:184:23 | &mut S | | {EXTERNAL LOCATION} | & | +| dereference.rs:186:23:186:24 | &S | | {EXTERNAL LOCATION} | & | +| dereference.rs:187:23:187:28 | &mut S | | {EXTERNAL LOCATION} | & | +| dereference.rs:196:16:196:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:196:16:196:20 | SelfParam | TRef | dereference.rs:195:5:197:5 | Self [trait Bar] | +| dereference.rs:201:16:201:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:201:16:201:24 | SelfParam | TRef | dereference.rs:193:5:193:17 | Foo | +| dereference.rs:201:27:203:9 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:202:22:202:38 | "In struct impl!\\n" | | {EXTERNAL LOCATION} | & | +| dereference.rs:202:22:202:38 | "In struct impl!\\n" | TRef | {EXTERNAL LOCATION} | str | +| dereference.rs:202:22:202:38 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:202:22:202:38 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:208:16:208:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:208:16:208:20 | SelfParam | TRef | dereference.rs:193:5:193:17 | Foo | +| dereference.rs:208:23:210:9 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:209:22:209:37 | "In trait impl!\\n" | | {EXTERNAL LOCATION} | & | +| dereference.rs:209:22:209:37 | "In trait impl!\\n" | TRef | {EXTERNAL LOCATION} | str | +| dereference.rs:209:22:209:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:209:22:209:37 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:213:19:216:5 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:214:17:214:17 | f | | dereference.rs:193:5:193:17 | Foo | +| dereference.rs:214:21:214:26 | Foo {...} | | dereference.rs:193:5:193:17 | Foo | +| dereference.rs:215:9:215:9 | f | | dereference.rs:193:5:193:17 | Foo | +| dereference.rs:219:15:228:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:220:5:220:38 | explicit_monomorphic_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:221:5:221:38 | explicit_polymorphic_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:222:5:222:30 | explicit_ref_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:223:5:223:30 | explicit_box_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:224:5:224:26 | implicit_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:225:5:225:41 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:226:5:226:26 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:227:5:227:34 | ...::main(...) | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:7:10:7:14 | SelfParam | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:7:10:7:14 | SelfParam | TRef | dyn_type.rs:5:1:8:1 | Self [trait MyTrait1] | +| dyn_type.rs:12:12:12:16 | SelfParam | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:12:12:12:16 | SelfParam | TRef | dyn_type.rs:10:1:13:1 | Self [trait GenericGet] | +| dyn_type.rs:18:12:18:16 | SelfParam | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:18:12:18:16 | SelfParam | TRef | dyn_type.rs:15:1:19:1 | Self [trait AssocTrait] | +| dyn_type.rs:28:10:28:14 | SelfParam | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:28:10:28:14 | SelfParam | TRef | dyn_type.rs:21:1:24:1 | MyStruct | +| dyn_type.rs:28:27:30:5 | { ... } | | {EXTERNAL LOCATION} | String | +| dyn_type.rs:29:17:29:30 | "MyTrait1: {}" | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:29:17:29:30 | "MyTrait1: {}" | TRef | {EXTERNAL LOCATION} | str | +| dyn_type.rs:29:17:29:42 | ...::format(...) | | {EXTERNAL LOCATION} | String | +| dyn_type.rs:29:33:29:36 | self | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:29:33:29:36 | self | TRef | dyn_type.rs:21:1:24:1 | MyStruct | +| dyn_type.rs:40:12:40:16 | SelfParam | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:40:12:40:16 | SelfParam | TRef | dyn_type.rs:33:1:36:1 | GenStruct | +| dyn_type.rs:40:12:40:16 | SelfParam | TRef.A | dyn_type.rs:38:6:38:21 | A | +| dyn_type.rs:40:24:42:5 | { ... } | | dyn_type.rs:38:6:38:21 | A | +| dyn_type.rs:41:9:41:12 | self | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:41:9:41:12 | self | TRef | dyn_type.rs:33:1:36:1 | GenStruct | +| dyn_type.rs:41:9:41:12 | self | TRef.A | dyn_type.rs:38:6:38:21 | A | +| dyn_type.rs:51:12:51:16 | SelfParam | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:51:12:51:16 | SelfParam | TRef | dyn_type.rs:33:1:36:1 | GenStruct | +| dyn_type.rs:51:12:51:16 | SelfParam | TRef.A | dyn_type.rs:45:6:45:8 | GGP | +| dyn_type.rs:51:34:53:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | +| dyn_type.rs:51:34:53:5 | { ... } | T0 | dyn_type.rs:45:6:45:8 | GGP | +| dyn_type.rs:51:34:53:5 | { ... } | T1 | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:52:9:52:34 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| dyn_type.rs:52:10:52:13 | self | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:52:10:52:13 | self | TRef | dyn_type.rs:33:1:36:1 | GenStruct | +| dyn_type.rs:52:10:52:13 | self | TRef.A | dyn_type.rs:45:6:45:8 | GGP | +| dyn_type.rs:52:30:52:33 | true | | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:56:40:56:40 | a | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:56:40:56:40 | a | TRef | dyn_type.rs:56:13:56:37 | G | +| dyn_type.rs:56:52:58:1 | { ... } | | dyn_type.rs:56:10:56:10 | A | +| dyn_type.rs:57:5:57:5 | a | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:57:5:57:5 | a | TRef | dyn_type.rs:56:13:56:37 | G | +| dyn_type.rs:60:46:60:46 | a | | dyn_type.rs:60:18:60:43 | A | +| dyn_type.rs:60:78:62:1 | { ... } | | {EXTERNAL LOCATION} | Box | +| dyn_type.rs:60:78:62:1 | { ... } | A | {EXTERNAL LOCATION} | Global | +| dyn_type.rs:60:78:62:1 | { ... } | T | dyn_type.rs:10:1:13:1 | dyn GenericGet | +| dyn_type.rs:60:78:62:1 | { ... } | T.dyn(A) | dyn_type.rs:60:18:60:43 | A | +| dyn_type.rs:61:5:61:36 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| dyn_type.rs:61:5:61:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dyn_type.rs:61:14:61:35 | GenStruct {...} | | dyn_type.rs:33:1:36:1 | GenStruct | +| dyn_type.rs:61:33:61:33 | a | | dyn_type.rs:60:18:60:43 | A | +| dyn_type.rs:64:25:64:27 | obj | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:64:25:64:27 | obj | TRef | dyn_type.rs:5:1:8:1 | dyn MyTrait1 | +| dyn_type.rs:64:45:66:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:65:21:65:23 | obj | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:65:21:65:23 | obj | TRef | dyn_type.rs:5:1:8:1 | dyn MyTrait1 | +| dyn_type.rs:68:27:68:29 | obj | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:68:27:68:29 | obj | TRef | dyn_type.rs:10:1:13:1 | dyn GenericGet | +| dyn_type.rs:68:27:68:29 | obj | TRef.dyn(A) | {EXTERNAL LOCATION} | String | +| dyn_type.rs:68:57:71:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:69:22:69:24 | obj | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:69:22:69:24 | obj | TRef | dyn_type.rs:10:1:13:1 | dyn GenericGet | +| dyn_type.rs:69:22:69:24 | obj | TRef.dyn(A) | {EXTERNAL LOCATION} | String | +| dyn_type.rs:70:26:70:28 | obj | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:70:26:70:28 | obj | TRef | dyn_type.rs:10:1:13:1 | dyn GenericGet | +| dyn_type.rs:70:26:70:28 | obj | TRef.dyn(A) | {EXTERNAL LOCATION} | String | +| dyn_type.rs:73:26:76:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:74:9:74:11 | obj | | {EXTERNAL LOCATION} | Box | +| dyn_type.rs:74:9:74:11 | obj | A | {EXTERNAL LOCATION} | Global | +| dyn_type.rs:74:9:74:11 | obj | T | dyn_type.rs:10:1:13:1 | dyn GenericGet | +| dyn_type.rs:74:15:74:33 | get_box_trait(...) | | {EXTERNAL LOCATION} | Box | +| dyn_type.rs:74:15:74:33 | get_box_trait(...) | A | {EXTERNAL LOCATION} | Global | +| dyn_type.rs:74:15:74:33 | get_box_trait(...) | T | dyn_type.rs:10:1:13:1 | dyn GenericGet | +| dyn_type.rs:74:29:74:32 | true | | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:75:21:75:23 | obj | | {EXTERNAL LOCATION} | Box | +| dyn_type.rs:75:21:75:23 | obj | A | {EXTERNAL LOCATION} | Global | +| dyn_type.rs:75:21:75:23 | obj | T | dyn_type.rs:10:1:13:1 | dyn GenericGet | +| dyn_type.rs:78:24:78:24 | a | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:78:24:78:24 | a | TRef | dyn_type.rs:15:1:19:1 | dyn AssocTrait | +| dyn_type.rs:78:24:78:24 | a | TRef.dyn(AP) | dyn_type.rs:78:21:78:21 | B | +| dyn_type.rs:78:24:78:24 | a | TRef.dyn(GP) | dyn_type.rs:78:18:78:18 | A | +| dyn_type.rs:78:65:80:1 | { ... } | | {EXTERNAL LOCATION} | (T_2) | +| dyn_type.rs:78:65:80:1 | { ... } | T0 | dyn_type.rs:78:18:78:18 | A | +| dyn_type.rs:78:65:80:1 | { ... } | T1 | dyn_type.rs:78:21:78:21 | B | +| dyn_type.rs:79:5:79:5 | a | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:79:5:79:5 | a | TRef | dyn_type.rs:15:1:19:1 | dyn AssocTrait | +| dyn_type.rs:79:5:79:5 | a | TRef.dyn(AP) | dyn_type.rs:78:21:78:21 | B | +| dyn_type.rs:79:5:79:5 | a | TRef.dyn(GP) | dyn_type.rs:78:18:78:18 | A | +| dyn_type.rs:82:55:82:55 | a | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:82:55:82:55 | a | TRef | dyn_type.rs:82:20:82:52 | T | +| dyn_type.rs:82:72:84:1 | { ... } | | {EXTERNAL LOCATION} | (T_2) | +| dyn_type.rs:82:72:84:1 | { ... } | T0 | dyn_type.rs:82:14:82:14 | A | +| dyn_type.rs:82:72:84:1 | { ... } | T1 | dyn_type.rs:82:17:82:17 | B | +| dyn_type.rs:83:5:83:5 | a | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:83:5:83:5 | a | TRef | dyn_type.rs:82:20:82:52 | T | +| dyn_type.rs:86:20:86:22 | obj | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:86:20:86:22 | obj | TRef | dyn_type.rs:15:1:19:1 | dyn AssocTrait | +| dyn_type.rs:86:20:86:22 | obj | TRef.dyn(AP) | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:86:20:86:22 | obj | TRef.dyn(GP) | {EXTERNAL LOCATION} | i64 | +| dyn_type.rs:86:58:99:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:87:9:90:5 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| dyn_type.rs:90:11:90:13 | obj | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:90:11:90:13 | obj | TRef | dyn_type.rs:15:1:19:1 | dyn AssocTrait | +| dyn_type.rs:90:11:90:13 | obj | TRef.dyn(AP) | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:90:11:90:13 | obj | TRef.dyn(GP) | {EXTERNAL LOCATION} | i64 | +| dyn_type.rs:91:9:94:5 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| dyn_type.rs:94:9:94:26 | assoc_dyn_get(...) | | {EXTERNAL LOCATION} | (T_2) | +| dyn_type.rs:94:23:94:25 | obj | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:94:23:94:25 | obj | TRef | dyn_type.rs:15:1:19:1 | dyn AssocTrait | +| dyn_type.rs:94:23:94:25 | obj | TRef.dyn(AP) | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:94:23:94:25 | obj | TRef.dyn(GP) | {EXTERNAL LOCATION} | i64 | +| dyn_type.rs:95:9:98:5 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| dyn_type.rs:98:9:98:22 | assoc_get(...) | | {EXTERNAL LOCATION} | (T_2) | +| dyn_type.rs:98:19:98:21 | obj | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:98:19:98:21 | obj | TRef | dyn_type.rs:15:1:19:1 | dyn AssocTrait | +| dyn_type.rs:98:19:98:21 | obj | TRef.dyn(AP) | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:98:19:98:21 | obj | TRef.dyn(GP) | {EXTERNAL LOCATION} | i64 | +| dyn_type.rs:101:15:108:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:102:5:102:49 | test_basic_dyn_trait(...) | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:102:26:102:48 | &... | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:102:27:102:48 | MyStruct {...} | | dyn_type.rs:21:1:24:1 | MyStruct | +| dyn_type.rs:103:5:105:6 | test_generic_dyn_trait(...) | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:103:28:105:5 | &... | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:103:29:105:5 | GenStruct {...} | | dyn_type.rs:33:1:36:1 | GenStruct | +| dyn_type.rs:104:16:104:17 | "" | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:104:16:104:17 | "" | TRef | {EXTERNAL LOCATION} | str | +| dyn_type.rs:106:5:106:25 | test_poly_dyn_trait(...) | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:107:5:107:46 | test_assoc_type(...) | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:107:21:107:45 | &... | | {EXTERNAL LOCATION} | & | +| dyn_type.rs:107:22:107:45 | GenStruct {...} | | dyn_type.rs:33:1:36:1 | GenStruct | +| invalid/main.rs:8:16:8:19 | SelfParam | | invalid/main.rs:7:5:9:5 | Self [trait T1] | +| invalid/main.rs:8:22:8:23 | { ... } | | {EXTERNAL LOCATION} | () | +| invalid/main.rs:12:16:12:19 | SelfParam | | invalid/main.rs:11:5:15:5 | Self [trait T2] | +| invalid/main.rs:12:22:14:9 | { ... } | | {EXTERNAL LOCATION} | () | +| invalid/main.rs:13:13:13:16 | self | | invalid/main.rs:11:5:15:5 | Self [trait T2] | +| invalid/main.rs:25:22:25:25 | SelfParam | | invalid/main.rs:24:5:26:5 | Self [trait AddAlias] | +| invalid/main.rs:25:28:25:32 | other | | invalid/main.rs:24:5:26:5 | Self [trait AddAlias] | +| invalid/main.rs:29:22:29:25 | SelfParam | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:29:28:29:32 | other | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:29:49:31:9 | { ... } | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:30:17:30:20 | self | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:30:26:30:30 | other | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:39:16:39:19 | SelfParam | | invalid/main.rs:35:10:35:20 | T | +| invalid/main.rs:39:22:39:26 | other | | invalid/main.rs:35:10:35:20 | T | +| invalid/main.rs:39:43:41:9 | { ... } | | invalid/main.rs:35:10:35:20 | T | +| invalid/main.rs:40:13:40:16 | self | | invalid/main.rs:35:10:35:20 | T | +| invalid/main.rs:40:28:40:32 | other | | invalid/main.rs:35:10:35:20 | T | +| invalid/main.rs:44:30:49:5 | { ... } | | {EXTERNAL LOCATION} | () | +| invalid/main.rs:57:19:57:23 | SelfParam | | {EXTERNAL LOCATION} | & | +| invalid/main.rs:57:19:57:23 | SelfParam | TRef | invalid/main.rs:56:5:58:5 | Self [trait Clone1] | +| invalid/main.rs:61:22:61:26 | SelfParam | | {EXTERNAL LOCATION} | & | +| invalid/main.rs:61:22:61:26 | SelfParam | TRef | invalid/main.rs:60:5:64:5 | Self [trait Duplicatable] | +| invalid/main.rs:68:19:68:23 | SelfParam | | {EXTERNAL LOCATION} | & | +| invalid/main.rs:68:19:68:23 | SelfParam | TRef | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:68:34:70:9 | { ... } | | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:69:14:69:17 | self | | {EXTERNAL LOCATION} | & | +| invalid/main.rs:69:14:69:17 | self | TRef | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:75:22:75:26 | SelfParam | | {EXTERNAL LOCATION} | & | +| invalid/main.rs:75:22:75:26 | SelfParam | TRef | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:75:37:77:9 | { ... } | | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:76:14:76:17 | self | | {EXTERNAL LOCATION} | & | +| invalid/main.rs:76:14:76:17 | self | TRef | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:83:22:83:26 | SelfParam | | {EXTERNAL LOCATION} | & | +| invalid/main.rs:83:22:83:26 | SelfParam | TRef | invalid/main.rs:81:10:81:18 | T | +| invalid/main.rs:83:37:85:9 | { ... } | | invalid/main.rs:81:10:81:18 | T | +| invalid/main.rs:84:13:84:16 | self | | {EXTERNAL LOCATION} | & | +| invalid/main.rs:84:13:84:16 | self | TRef | invalid/main.rs:81:10:81:18 | T | +| invalid/main.rs:88:33:92:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:25:30:28:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:26:13:26:13 | x | | main.rs:5:5:8:5 | MyThing | +| main.rs:26:17:26:32 | MyThing {...} | | main.rs:5:5:8:5 | MyThing | +| main.rs:27:18:27:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:27:18:27:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:27:18:27:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:27:18:27:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:27:26:27:26 | x | | main.rs:5:5:8:5 | MyThing | +| main.rs:30:29:30:29 | x | | main.rs:16:5:19:5 | GenericThing | +| main.rs:30:29:30:29 | x | A | {EXTERNAL LOCATION} | bool | +| main.rs:30:46:33:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:31:17:31:17 | x | | main.rs:16:5:19:5 | GenericThing | +| main.rs:31:17:31:17 | x | A | {EXTERNAL LOCATION} | bool | +| main.rs:32:18:32:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:32:18:32:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:32:18:32:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:32:18:32:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:35:31:63:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:37:13:37:13 | x | | main.rs:16:5:19:5 | GenericThing | +| main.rs:37:13:37:13 | x | A | main.rs:3:5:4:13 | S | +| main.rs:37:17:37:42 | GenericThing::<...> {...} | | main.rs:16:5:19:5 | GenericThing | +| main.rs:37:17:37:42 | GenericThing::<...> {...} | A | main.rs:3:5:4:13 | S | +| main.rs:38:18:38:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:38:18:38:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:38:18:38:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:38:18:38:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:38:26:38:26 | x | | main.rs:16:5:19:5 | GenericThing | +| main.rs:38:26:38:26 | x | A | main.rs:3:5:4:13 | S | +| main.rs:41:13:41:13 | y | | main.rs:16:5:19:5 | GenericThing | +| main.rs:41:17:41:37 | GenericThing {...} | | main.rs:16:5:19:5 | GenericThing | +| main.rs:42:18:42:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:42:18:42:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:42:18:42:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:42:18:42:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:42:26:42:26 | x | | main.rs:16:5:19:5 | GenericThing | +| main.rs:42:26:42:26 | x | A | main.rs:3:5:4:13 | S | +| main.rs:46:13:46:13 | x | | main.rs:21:5:23:5 | OptionS | +| main.rs:46:17:48:9 | OptionS {...} | | main.rs:21:5:23:5 | OptionS | +| main.rs:49:18:49:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:49:18:49:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:49:18:49:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:49:18:49:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:49:26:49:26 | x | | main.rs:21:5:23:5 | OptionS | +| main.rs:52:13:52:13 | x | | main.rs:16:5:19:5 | GenericThing | +| main.rs:52:13:52:13 | x | A | main.rs:10:5:14:5 | MyOption | +| main.rs:52:13:52:13 | x | A.T | main.rs:3:5:4:13 | S | +| main.rs:52:17:54:9 | GenericThing::<...> {...} | | main.rs:16:5:19:5 | GenericThing | +| main.rs:52:17:54:9 | GenericThing::<...> {...} | A | main.rs:10:5:14:5 | MyOption | +| main.rs:52:17:54:9 | GenericThing::<...> {...} | A.T | main.rs:3:5:4:13 | S | +| main.rs:55:18:55:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:55:18:55:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:55:18:55:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:55:18:55:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:55:26:55:26 | x | | main.rs:16:5:19:5 | GenericThing | +| main.rs:55:26:55:26 | x | A | main.rs:10:5:14:5 | MyOption | +| main.rs:55:26:55:26 | x | A.T | main.rs:3:5:4:13 | S | +| main.rs:57:17:57:17 | x | | main.rs:16:5:19:5 | GenericThing | +| main.rs:57:21:59:9 | GenericThing {...} | | main.rs:16:5:19:5 | GenericThing | +| main.rs:61:13:61:13 | a | | main.rs:10:5:14:5 | MyOption | +| main.rs:61:13:61:13 | a | T | main.rs:3:5:4:13 | S | +| main.rs:61:30:61:30 | x | | main.rs:16:5:19:5 | GenericThing | +| main.rs:62:18:62:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:62:18:62:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:62:18:62:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:62:18:62:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:62:26:62:26 | a | | main.rs:10:5:14:5 | MyOption | +| main.rs:62:26:62:26 | a | T | main.rs:3:5:4:13 | S | +| main.rs:65:16:68:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:66:9:66:29 | simple_field_access(...) | | {EXTERNAL LOCATION} | () | +| main.rs:67:9:67:30 | generic_field_access(...) | | {EXTERNAL LOCATION} | () | +| main.rs:75:19:75:22 | SelfParam | | main.rs:72:5:72:21 | Foo | +| main.rs:75:33:77:9 | { ... } | | main.rs:72:5:72:21 | Foo | +| main.rs:76:13:76:16 | self | | main.rs:72:5:72:21 | Foo | +| main.rs:79:19:79:22 | SelfParam | | main.rs:72:5:72:21 | Foo | +| main.rs:79:32:81:9 | { ... } | | main.rs:72:5:72:21 | Foo | +| main.rs:80:13:80:16 | self | | main.rs:72:5:72:21 | Foo | +| main.rs:84:23:89:5 | { ... } | | main.rs:72:5:72:21 | Foo | +| main.rs:85:18:85:33 | "main.rs::m1::f\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:85:18:85:33 | "main.rs::m1::f\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:85:18:85:33 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:85:18:85:33 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:86:13:86:13 | x | | main.rs:72:5:72:21 | Foo | +| main.rs:86:17:86:22 | Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:87:20:87:25 | Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:88:9:88:9 | x | | main.rs:72:5:72:21 | Foo | +| main.rs:91:14:91:14 | x | | main.rs:72:5:72:21 | Foo | +| main.rs:91:22:91:22 | y | | main.rs:72:5:72:21 | Foo | +| main.rs:91:37:95:5 | { ... } | | main.rs:72:5:72:21 | Foo | +| main.rs:92:18:92:33 | "main.rs::m1::g\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:92:18:92:33 | "main.rs::m1::g\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:92:18:92:33 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:92:18:92:33 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:93:9:93:9 | x | | main.rs:72:5:72:21 | Foo | +| main.rs:94:9:94:9 | y | | main.rs:72:5:72:21 | Foo | +| main.rs:105:25:105:28 | SelfParam | | main.rs:104:5:106:5 | Self [trait MyTrait] | +| main.rs:110:25:110:28 | SelfParam | | main.rs:99:5:102:5 | MyThing | +| main.rs:110:39:112:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:111:13:111:16 | self | | main.rs:99:5:102:5 | MyThing | +| main.rs:115:16:121:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:116:13:116:13 | x | | main.rs:99:5:102:5 | MyThing | +| main.rs:116:17:116:39 | MyThing {...} | | main.rs:99:5:102:5 | MyThing | +| main.rs:116:34:116:37 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:117:17:117:17 | x | | main.rs:99:5:102:5 | MyThing | +| main.rs:119:13:119:13 | y | | main.rs:99:5:102:5 | MyThing | +| main.rs:119:17:119:40 | MyThing {...} | | main.rs:99:5:102:5 | MyThing | +| main.rs:119:34:119:38 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:120:39:120:39 | y | | main.rs:99:5:102:5 | MyThing | +| main.rs:130:25:130:29 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:130:25:130:29 | SelfParam | TRef | main.rs:128:9:133:9 | Self [trait Foo] | +| main.rs:130:32:132:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:131:26:131:31 | "foo!\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:131:26:131:31 | "foo!\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:131:26:131:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:131:26:131:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:137:25:137:29 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:137:25:137:29 | SelfParam | TRef | main.rs:135:9:140:9 | Self [trait Bar] | +| main.rs:137:32:139:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:138:26:138:31 | "bar!\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:138:26:138:31 | "bar!\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:138:26:138:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:138:26:138:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:149:15:170:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:151:9:154:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:155:9:158:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:159:9:162:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:163:9:169:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:167:13:167:29 | ...::a_method(...) | | {EXTERNAL LOCATION} | () | +| main.rs:167:27:167:28 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:168:13:168:29 | ...::a_method(...) | | {EXTERNAL LOCATION} | () | +| main.rs:168:27:168:28 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:186:15:186:18 | SelfParam | | main.rs:174:5:177:5 | MyThing | +| main.rs:186:15:186:18 | SelfParam | A | main.rs:179:5:180:14 | S1 | +| main.rs:186:27:188:9 | { ... } | | main.rs:179:5:180:14 | S1 | +| main.rs:187:13:187:16 | self | | main.rs:174:5:177:5 | MyThing | +| main.rs:187:13:187:16 | self | A | main.rs:179:5:180:14 | S1 | +| main.rs:193:15:193:18 | SelfParam | | main.rs:174:5:177:5 | MyThing | +| main.rs:193:15:193:18 | SelfParam | A | main.rs:181:5:182:14 | S2 | +| main.rs:193:29:195:9 | { ... } | | main.rs:174:5:177:5 | MyThing | +| main.rs:193:29:195:9 | { ... } | A | main.rs:181:5:182:14 | S2 | +| main.rs:194:13:194:30 | Self {...} | | main.rs:174:5:177:5 | MyThing | +| main.rs:194:13:194:30 | Self {...} | A | main.rs:181:5:182:14 | S2 | +| main.rs:194:23:194:26 | self | | main.rs:174:5:177:5 | MyThing | +| main.rs:194:23:194:26 | self | A | main.rs:181:5:182:14 | S2 | +| main.rs:199:15:199:18 | SelfParam | | main.rs:174:5:177:5 | MyThing | +| main.rs:199:15:199:18 | SelfParam | A | main.rs:198:10:198:10 | T | +| main.rs:199:26:201:9 | { ... } | | main.rs:198:10:198:10 | T | +| main.rs:200:13:200:16 | self | | main.rs:174:5:177:5 | MyThing | +| main.rs:200:13:200:16 | self | A | main.rs:198:10:198:10 | T | +| main.rs:204:16:220:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:205:13:205:13 | x | | main.rs:174:5:177:5 | MyThing | +| main.rs:205:17:205:33 | MyThing {...} | | main.rs:174:5:177:5 | MyThing | +| main.rs:206:13:206:13 | y | | main.rs:174:5:177:5 | MyThing | +| main.rs:206:17:206:33 | MyThing {...} | | main.rs:174:5:177:5 | MyThing | +| main.rs:209:18:209:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:209:18:209:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:209:18:209:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:209:18:209:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:209:26:209:26 | x | | main.rs:174:5:177:5 | MyThing | +| main.rs:210:18:210:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:210:18:210:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:210:18:210:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:210:18:210:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:210:26:210:26 | y | | main.rs:174:5:177:5 | MyThing | +| main.rs:212:18:212:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:212:18:212:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:212:18:212:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:212:18:212:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:212:26:212:26 | x | | main.rs:174:5:177:5 | MyThing | +| main.rs:213:18:213:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:213:18:213:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:213:18:213:33 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:213:18:213:33 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:213:26:213:26 | y | | main.rs:174:5:177:5 | MyThing | +| main.rs:215:13:215:13 | x | | main.rs:174:5:177:5 | MyThing | +| main.rs:215:17:215:33 | MyThing {...} | | main.rs:174:5:177:5 | MyThing | +| main.rs:216:13:216:13 | y | | main.rs:174:5:177:5 | MyThing | +| main.rs:216:17:216:33 | MyThing {...} | | main.rs:174:5:177:5 | MyThing | +| main.rs:218:18:218:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:218:18:218:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:218:18:218:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:218:18:218:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:218:26:218:26 | x | | main.rs:174:5:177:5 | MyThing | +| main.rs:219:18:219:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:219:18:219:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:219:18:219:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:219:18:219:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:219:26:219:26 | y | | main.rs:174:5:177:5 | MyThing | +| main.rs:243:15:243:18 | SelfParam | | main.rs:242:5:251:5 | Self [trait MyTrait] | +| main.rs:245:15:245:18 | SelfParam | | main.rs:242:5:251:5 | Self [trait MyTrait] | +| main.rs:248:9:250:9 | { ... } | | main.rs:242:5:251:5 | Self [trait MyTrait] | +| main.rs:249:13:249:16 | self | | main.rs:242:5:251:5 | Self [trait MyTrait] | +| main.rs:255:16:255:19 | SelfParam | | main.rs:253:5:258:5 | Self [trait MyProduct] | +| main.rs:257:16:257:19 | SelfParam | | main.rs:253:5:258:5 | Self [trait MyProduct] | +| main.rs:260:43:260:43 | x | | main.rs:260:26:260:40 | T2 | +| main.rs:260:56:262:5 | { ... } | | main.rs:260:22:260:23 | T1 | +| main.rs:261:9:261:9 | x | | main.rs:260:26:260:40 | T2 | +| main.rs:266:15:266:18 | SelfParam | | main.rs:224:5:227:5 | MyThing | +| main.rs:266:15:266:18 | SelfParam | A | main.rs:235:5:236:14 | S1 | +| main.rs:266:27:268:9 | { ... } | | main.rs:235:5:236:14 | S1 | +| main.rs:267:13:267:16 | self | | main.rs:224:5:227:5 | MyThing | +| main.rs:267:13:267:16 | self | A | main.rs:235:5:236:14 | S1 | +| main.rs:273:15:273:18 | SelfParam | | main.rs:224:5:227:5 | MyThing | +| main.rs:273:15:273:18 | SelfParam | A | main.rs:237:5:238:14 | S2 | +| main.rs:273:29:275:9 | { ... } | | main.rs:224:5:227:5 | MyThing | +| main.rs:273:29:275:9 | { ... } | A | main.rs:237:5:238:14 | S2 | +| main.rs:274:13:274:30 | Self {...} | | main.rs:224:5:227:5 | MyThing | +| main.rs:274:13:274:30 | Self {...} | A | main.rs:237:5:238:14 | S2 | +| main.rs:274:23:274:26 | self | | main.rs:224:5:227:5 | MyThing | +| main.rs:274:23:274:26 | self | A | main.rs:237:5:238:14 | S2 | +| main.rs:285:15:285:18 | SelfParam | | main.rs:224:5:227:5 | MyThing | +| main.rs:285:15:285:18 | SelfParam | A | main.rs:239:5:240:14 | S3 | +| main.rs:285:27:287:9 | { ... } | | main.rs:280:10:280:11 | TD | +| main.rs:292:15:292:18 | SelfParam | | main.rs:229:5:233:5 | MyPair | +| main.rs:292:15:292:18 | SelfParam | P1 | main.rs:290:10:290:10 | I | +| main.rs:292:15:292:18 | SelfParam | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:292:26:294:9 | { ... } | | main.rs:290:10:290:10 | I | +| main.rs:293:13:293:16 | self | | main.rs:229:5:233:5 | MyPair | +| main.rs:293:13:293:16 | self | P1 | main.rs:290:10:290:10 | I | +| main.rs:293:13:293:16 | self | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:299:15:299:18 | SelfParam | | main.rs:229:5:233:5 | MyPair | +| main.rs:299:15:299:18 | SelfParam | P1 | main.rs:235:5:236:14 | S1 | +| main.rs:299:15:299:18 | SelfParam | P2 | main.rs:237:5:238:14 | S2 | +| main.rs:299:27:301:9 | { ... } | | main.rs:239:5:240:14 | S3 | +| main.rs:306:15:306:18 | SelfParam | | main.rs:229:5:233:5 | MyPair | +| main.rs:306:15:306:18 | SelfParam | P1 | main.rs:224:5:227:5 | MyThing | +| main.rs:306:15:306:18 | SelfParam | P1.A | main.rs:304:10:304:11 | TT | +| main.rs:306:15:306:18 | SelfParam | P2 | main.rs:239:5:240:14 | S3 | +| main.rs:306:27:309:9 | { ... } | | main.rs:304:10:304:11 | TT | +| main.rs:307:25:307:28 | self | | main.rs:229:5:233:5 | MyPair | +| main.rs:307:25:307:28 | self | P1 | main.rs:224:5:227:5 | MyThing | +| main.rs:307:25:307:28 | self | P1.A | main.rs:304:10:304:11 | TT | +| main.rs:307:25:307:28 | self | P2 | main.rs:239:5:240:14 | S3 | +| main.rs:315:16:315:19 | SelfParam | | main.rs:229:5:233:5 | MyPair | +| main.rs:315:16:315:19 | SelfParam | P1 | main.rs:313:10:313:10 | A | +| main.rs:315:16:315:19 | SelfParam | P2 | main.rs:313:10:313:10 | A | +| main.rs:315:27:317:9 | { ... } | | main.rs:313:10:313:10 | A | +| main.rs:316:13:316:16 | self | | main.rs:229:5:233:5 | MyPair | +| main.rs:316:13:316:16 | self | P1 | main.rs:313:10:313:10 | A | +| main.rs:316:13:316:16 | self | P2 | main.rs:313:10:313:10 | A | +| main.rs:320:16:320:19 | SelfParam | | main.rs:229:5:233:5 | MyPair | +| main.rs:320:16:320:19 | SelfParam | P1 | main.rs:313:10:313:10 | A | +| main.rs:320:16:320:19 | SelfParam | P2 | main.rs:313:10:313:10 | A | +| main.rs:320:27:322:9 | { ... } | | main.rs:313:10:313:10 | A | +| main.rs:321:13:321:16 | self | | main.rs:229:5:233:5 | MyPair | +| main.rs:321:13:321:16 | self | P1 | main.rs:313:10:313:10 | A | +| main.rs:321:13:321:16 | self | P2 | main.rs:313:10:313:10 | A | +| main.rs:328:16:328:19 | SelfParam | | main.rs:229:5:233:5 | MyPair | +| main.rs:328:16:328:19 | SelfParam | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:328:16:328:19 | SelfParam | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:328:28:330:9 | { ... } | | main.rs:235:5:236:14 | S1 | +| main.rs:329:13:329:16 | self | | main.rs:229:5:233:5 | MyPair | +| main.rs:329:13:329:16 | self | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:329:13:329:16 | self | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:333:16:333:19 | SelfParam | | main.rs:229:5:233:5 | MyPair | +| main.rs:333:16:333:19 | SelfParam | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:333:16:333:19 | SelfParam | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:333:28:335:9 | { ... } | | main.rs:237:5:238:14 | S2 | +| main.rs:334:13:334:16 | self | | main.rs:229:5:233:5 | MyPair | +| main.rs:334:13:334:16 | self | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:334:13:334:16 | self | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:338:46:338:46 | p | | main.rs:338:24:338:43 | P | +| main.rs:338:58:340:5 | { ... } | | main.rs:338:16:338:17 | V1 | +| main.rs:339:9:339:9 | p | | main.rs:338:24:338:43 | P | +| main.rs:342:46:342:46 | p | | main.rs:342:24:342:43 | P | +| main.rs:342:58:344:5 | { ... } | | main.rs:342:20:342:21 | V2 | +| main.rs:343:9:343:9 | p | | main.rs:342:24:342:43 | P | +| main.rs:346:54:346:54 | p | | main.rs:229:5:233:5 | MyPair | +| main.rs:346:54:346:54 | p | P1 | main.rs:346:20:346:21 | V0 | +| main.rs:346:54:346:54 | p | P2 | main.rs:346:32:346:51 | P | +| main.rs:346:78:348:5 | { ... } | | main.rs:346:24:346:25 | V1 | +| main.rs:347:9:347:9 | p | | main.rs:229:5:233:5 | MyPair | +| main.rs:347:9:347:9 | p | P1 | main.rs:346:20:346:21 | V0 | +| main.rs:347:9:347:9 | p | P2 | main.rs:346:32:346:51 | P | +| main.rs:352:23:352:26 | SelfParam | | main.rs:350:5:353:5 | Self [trait ConvertTo] | +| main.rs:357:23:357:26 | SelfParam | | main.rs:355:10:355:23 | T | +| main.rs:357:35:359:9 | { ... } | | main.rs:235:5:236:14 | S1 | +| main.rs:358:13:358:16 | self | | main.rs:355:10:355:23 | T | +| main.rs:362:41:362:45 | thing | | main.rs:362:23:362:38 | T | +| main.rs:362:57:364:5 | { ... } | | main.rs:362:19:362:20 | TS | +| main.rs:363:9:363:13 | thing | | main.rs:362:23:362:38 | T | +| main.rs:366:56:366:60 | thing | | main.rs:366:39:366:53 | TP | +| main.rs:366:73:369:5 | { ... } | | main.rs:235:5:236:14 | S1 | +| main.rs:368:9:368:13 | thing | | main.rs:366:39:366:53 | TP | +| main.rs:371:16:442:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:372:13:372:20 | thing_s1 | | main.rs:224:5:227:5 | MyThing | +| main.rs:372:24:372:40 | MyThing {...} | | main.rs:224:5:227:5 | MyThing | +| main.rs:373:13:373:20 | thing_s2 | | main.rs:224:5:227:5 | MyThing | +| main.rs:373:24:373:40 | MyThing {...} | | main.rs:224:5:227:5 | MyThing | +| main.rs:374:13:374:20 | thing_s3 | | main.rs:224:5:227:5 | MyThing | +| main.rs:374:24:374:40 | MyThing {...} | | main.rs:224:5:227:5 | MyThing | +| main.rs:378:18:378:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:378:18:378:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:378:18:378:38 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:378:18:378:38 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:378:26:378:33 | thing_s1 | | main.rs:224:5:227:5 | MyThing | +| main.rs:379:18:379:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:379:18:379:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:379:18:379:40 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:379:18:379:40 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:379:26:379:33 | thing_s2 | | main.rs:224:5:227:5 | MyThing | +| main.rs:380:13:380:14 | s3 | | main.rs:239:5:240:14 | S3 | +| main.rs:380:22:380:29 | thing_s3 | | main.rs:224:5:227:5 | MyThing | +| main.rs:381:18:381:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:381:18:381:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:381:18:381:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:381:18:381:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:381:26:381:27 | s3 | | main.rs:239:5:240:14 | S3 | +| main.rs:383:13:383:14 | p1 | | main.rs:229:5:233:5 | MyPair | +| main.rs:383:18:383:42 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:384:18:384:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:384:18:384:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:384:18:384:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:384:18:384:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:384:26:384:27 | p1 | | main.rs:229:5:233:5 | MyPair | +| main.rs:386:13:386:14 | p2 | | main.rs:229:5:233:5 | MyPair | +| main.rs:386:18:386:42 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:387:18:387:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:387:18:387:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:387:18:387:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:387:18:387:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:387:26:387:27 | p2 | | main.rs:229:5:233:5 | MyPair | +| main.rs:389:13:389:14 | p3 | | main.rs:229:5:233:5 | MyPair | +| main.rs:389:18:392:9 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:390:17:390:33 | MyThing {...} | | main.rs:224:5:227:5 | MyThing | +| main.rs:393:18:393:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:393:18:393:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:393:18:393:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:393:18:393:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:393:26:393:27 | p3 | | main.rs:229:5:233:5 | MyPair | +| main.rs:396:13:396:13 | a | | main.rs:229:5:233:5 | MyPair | +| main.rs:396:17:396:41 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:397:17:397:17 | a | | main.rs:229:5:233:5 | MyPair | +| main.rs:398:18:398:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:398:18:398:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:398:18:398:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:398:18:398:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:399:17:399:17 | a | | main.rs:229:5:233:5 | MyPair | +| main.rs:400:18:400:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:400:18:400:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:400:18:400:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:400:18:400:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:406:13:406:13 | b | | main.rs:229:5:233:5 | MyPair | +| main.rs:406:17:406:41 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:407:17:407:17 | b | | main.rs:229:5:233:5 | MyPair | +| main.rs:408:18:408:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:408:18:408:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:408:18:408:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:408:18:408:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:409:17:409:17 | b | | main.rs:229:5:233:5 | MyPair | +| main.rs:410:18:410:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:410:18:410:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:410:18:410:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:410:18:410:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:414:31:414:38 | thing_s1 | | main.rs:224:5:227:5 | MyThing | +| main.rs:415:18:415:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:415:18:415:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:415:18:415:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:415:18:415:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:416:31:416:38 | thing_s2 | | main.rs:224:5:227:5 | MyThing | +| main.rs:417:18:417:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:417:18:417:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:417:18:417:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:417:18:417:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:420:13:420:13 | a | | main.rs:229:5:233:5 | MyPair | +| main.rs:420:17:420:41 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:421:25:421:25 | a | | main.rs:229:5:233:5 | MyPair | +| main.rs:422:18:422:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:422:18:422:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:422:18:422:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:422:18:422:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:423:25:423:25 | a | | main.rs:229:5:233:5 | MyPair | +| main.rs:424:18:424:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:424:18:424:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:424:18:424:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:424:18:424:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:427:13:427:13 | b | | main.rs:229:5:233:5 | MyPair | +| main.rs:427:17:427:41 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:428:25:428:25 | b | | main.rs:229:5:233:5 | MyPair | +| main.rs:429:18:429:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:429:18:429:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:429:18:429:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:429:18:429:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:430:25:430:25 | b | | main.rs:229:5:233:5 | MyPair | +| main.rs:431:18:431:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:431:18:431:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:431:18:431:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:431:18:431:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:433:13:433:13 | c | | main.rs:229:5:233:5 | MyPair | +| main.rs:433:17:436:9 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:435:17:435:41 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:437:29:437:29 | c | | main.rs:229:5:233:5 | MyPair | +| main.rs:439:13:439:17 | thing | | main.rs:224:5:227:5 | MyThing | +| main.rs:439:21:439:37 | MyThing {...} | | main.rs:224:5:227:5 | MyThing | +| main.rs:440:17:440:21 | thing | | main.rs:224:5:227:5 | MyThing | +| main.rs:441:28:441:32 | thing | | main.rs:224:5:227:5 | MyThing | +| main.rs:450:26:450:29 | SelfParam | | main.rs:449:5:453:5 | Self [trait OverlappingTrait] | +| main.rs:452:28:452:31 | SelfParam | | main.rs:449:5:453:5 | Self [trait OverlappingTrait] | +| main.rs:452:34:452:35 | s1 | | main.rs:446:5:447:14 | S1 | +| main.rs:457:26:457:29 | SelfParam | | main.rs:446:5:447:14 | S1 | +| main.rs:457:38:459:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:462:28:462:31 | SelfParam | | main.rs:446:5:447:14 | S1 | +| main.rs:462:34:462:35 | s1 | | main.rs:446:5:447:14 | S1 | +| main.rs:462:48:464:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:469:26:469:29 | SelfParam | | main.rs:446:5:447:14 | S1 | +| main.rs:469:38:471:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:470:13:470:16 | self | | main.rs:446:5:447:14 | S1 | +| main.rs:474:28:474:31 | SelfParam | | main.rs:446:5:447:14 | S1 | +| main.rs:474:40:476:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:475:13:475:16 | self | | main.rs:446:5:447:14 | S1 | +| main.rs:483:26:483:29 | SelfParam | | main.rs:479:5:479:22 | S2 | +| main.rs:483:26:483:29 | SelfParam | T2 | {EXTERNAL LOCATION} | i32 | +| main.rs:483:38:485:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:488:28:488:31 | SelfParam | | main.rs:479:5:479:22 | S2 | +| main.rs:488:28:488:31 | SelfParam | T2 | {EXTERNAL LOCATION} | i32 | +| main.rs:488:40:490:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:495:26:495:29 | SelfParam | | main.rs:479:5:479:22 | S2 | +| main.rs:495:26:495:29 | SelfParam | T2 | {EXTERNAL LOCATION} | i32 | +| main.rs:495:38:497:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:500:28:500:31 | SelfParam | | main.rs:479:5:479:22 | S2 | +| main.rs:500:28:500:31 | SelfParam | T2 | {EXTERNAL LOCATION} | i32 | +| main.rs:500:34:500:35 | s1 | | main.rs:446:5:447:14 | S1 | +| main.rs:500:48:502:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:507:26:507:29 | SelfParam | | main.rs:479:5:479:22 | S2 | +| main.rs:507:26:507:29 | SelfParam | T2 | main.rs:446:5:447:14 | S1 | +| main.rs:507:38:509:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:512:28:512:31 | SelfParam | | main.rs:479:5:479:22 | S2 | +| main.rs:512:28:512:31 | SelfParam | T2 | main.rs:446:5:447:14 | S1 | +| main.rs:512:34:512:35 | s1 | | main.rs:446:5:447:14 | S1 | +| main.rs:512:48:514:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:521:14:521:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:521:14:521:18 | SelfParam | TRef | main.rs:520:5:522:5 | Self [trait OverlappingTrait2] | +| main.rs:521:21:521:21 | x | | {EXTERNAL LOCATION} | & | +| main.rs:521:21:521:21 | x | TRef | main.rs:520:29:520:29 | T | +| main.rs:526:14:526:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:526:14:526:18 | SelfParam | TRef | main.rs:517:5:518:22 | S3 | +| main.rs:526:14:526:18 | SelfParam | TRef.T3 | main.rs:524:10:524:10 | T | +| main.rs:526:21:526:21 | x | | {EXTERNAL LOCATION} | & | +| main.rs:526:21:526:21 | x | TRef | main.rs:524:10:524:10 | T | +| main.rs:526:37:528:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:526:37:528:9 | { ... } | TRef | main.rs:517:5:518:22 | S3 | +| main.rs:526:37:528:9 | { ... } | TRef.T3 | main.rs:524:10:524:10 | T | +| main.rs:527:13:527:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:527:13:527:16 | self | TRef | main.rs:517:5:518:22 | S3 | +| main.rs:527:13:527:16 | self | TRef.T3 | main.rs:524:10:524:10 | T | +| main.rs:533:14:533:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:533:14:533:18 | SelfParam | TRef | main.rs:517:5:518:22 | S3 | +| main.rs:533:14:533:18 | SelfParam | TRef.T3 | main.rs:531:10:531:10 | T | +| main.rs:533:21:533:21 | x | | main.rs:531:10:531:10 | T | +| main.rs:533:36:535:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:533:36:535:9 | { ... } | TRef | main.rs:517:5:518:22 | S3 | +| main.rs:533:36:535:9 | { ... } | TRef.T3 | main.rs:531:10:531:10 | T | +| main.rs:534:13:534:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:534:13:534:16 | self | TRef | main.rs:517:5:518:22 | S3 | +| main.rs:534:13:534:16 | self | TRef.T3 | main.rs:531:10:531:10 | T | +| main.rs:540:14:540:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:540:14:540:18 | SelfParam | TRef | main.rs:538:5:541:5 | Self [trait MyTrait1] | +| main.rs:540:21:540:22 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:550:14:550:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:550:14:550:18 | SelfParam | TRef | main.rs:545:5:546:14 | S4 | +| main.rs:550:21:550:22 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:560:14:560:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:560:14:560:18 | SelfParam | TRef | main.rs:555:5:556:22 | S5 | +| main.rs:560:14:560:18 | SelfParam | TRef.T5 | {EXTERNAL LOCATION} | i32 | +| main.rs:560:21:560:22 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:569:16:595:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:571:18:571:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:571:18:571:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:571:18:571:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:571:18:571:42 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:572:18:572:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:572:18:572:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:572:18:572:45 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:572:18:572:45 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:572:26:572:45 | ...::common_method(...) | | main.rs:446:5:447:14 | S1 | +| main.rs:573:18:573:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:573:18:573:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:573:18:573:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:573:18:573:44 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:574:18:574:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:574:18:574:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:574:18:574:47 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:574:18:574:47 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:574:26:574:47 | ...::common_method_2(...) | | main.rs:446:5:447:14 | S1 | +| main.rs:577:18:577:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:577:18:577:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:577:18:577:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:577:18:577:42 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:578:18:578:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:578:18:578:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:578:18:578:56 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:578:18:578:56 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:578:26:578:56 | ...::common_method(...) | | main.rs:446:5:447:14 | S1 | +| main.rs:581:18:581:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:581:18:581:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:581:18:581:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:581:18:581:42 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:582:18:582:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:582:18:582:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:582:18:582:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:582:18:582:49 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:582:26:582:49 | ...::common_method(...) | | main.rs:446:5:447:14 | S1 | +| main.rs:583:18:583:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:583:18:583:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:583:18:583:56 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:583:18:583:56 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:583:26:583:56 | ...::common_method(...) | | main.rs:446:5:447:14 | S1 | +| main.rs:586:18:586:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:586:18:586:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:586:18:586:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:586:18:586:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:587:18:587:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:587:18:587:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:587:18:587:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:587:18:587:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:587:26:587:37 | ...::m(...) | | {EXTERNAL LOCATION} | & | +| main.rs:587:26:587:37 | ...::m(...) | TRef | main.rs:517:5:518:22 | S3 | +| main.rs:587:32:587:33 | &w | | {EXTERNAL LOCATION} | & | +| main.rs:590:9:590:18 | ...::m(...) | | {EXTERNAL LOCATION} | () | +| main.rs:590:15:590:17 | &S4 | | {EXTERNAL LOCATION} | & | +| main.rs:591:12:591:15 | 0i32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:592:9:592:24 | ...::m(...) | | {EXTERNAL LOCATION} | () | +| main.rs:592:15:592:23 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:592:19:592:22 | 0i32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:593:12:593:15 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:594:9:594:24 | ...::m(...) | | {EXTERNAL LOCATION} | () | +| main.rs:594:15:594:23 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:594:19:594:22 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:611:19:611:22 | SelfParam | | main.rs:609:5:612:5 | Self [trait FirstTrait] | +| main.rs:616:19:616:22 | SelfParam | | main.rs:614:5:617:5 | Self [trait SecondTrait] | +| main.rs:619:64:619:64 | x | | main.rs:619:45:619:61 | T | +| main.rs:619:70:623:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:621:18:621:18 | x | | main.rs:619:45:619:61 | T | +| main.rs:622:18:622:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:622:18:622:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:622:18:622:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:622:18:622:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:625:65:625:65 | x | | main.rs:625:46:625:62 | T | +| main.rs:625:71:629:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:627:18:627:18 | x | | main.rs:625:46:625:62 | T | +| main.rs:628:18:628:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:628:18:628:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:628:18:628:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:628:18:628:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:631:49:631:49 | x | | main.rs:631:30:631:46 | T | +| main.rs:631:55:634:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:632:17:632:17 | x | | main.rs:631:30:631:46 | T | +| main.rs:633:18:633:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:633:18:633:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:633:18:633:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:633:18:633:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:636:53:636:53 | x | | main.rs:636:34:636:50 | T | +| main.rs:636:59:639:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:637:17:637:17 | x | | main.rs:636:34:636:50 | T | +| main.rs:638:18:638:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:638:18:638:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:638:18:638:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:638:18:638:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:641:43:641:43 | x | | main.rs:641:40:641:40 | T | +| main.rs:644:5:647:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:645:17:645:17 | x | | main.rs:641:40:641:40 | T | +| main.rs:646:18:646:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:646:18:646:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:646:18:646:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:646:18:646:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:650:16:650:19 | SelfParam | | main.rs:649:5:653:5 | Self [trait Pair] | +| main.rs:652:16:652:19 | SelfParam | | main.rs:649:5:653:5 | Self [trait Pair] | +| main.rs:655:53:655:53 | x | | main.rs:655:50:655:50 | T | +| main.rs:655:59:655:59 | y | | main.rs:655:50:655:50 | T | +| main.rs:659:5:662:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:660:17:660:17 | x | | main.rs:655:50:655:50 | T | +| main.rs:661:17:661:17 | y | | main.rs:655:50:655:50 | T | +| main.rs:664:58:664:58 | x | | main.rs:664:41:664:55 | T | +| main.rs:664:64:664:64 | y | | main.rs:664:41:664:55 | T | +| main.rs:664:70:669:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:666:18:666:18 | x | | main.rs:664:41:664:55 | T | +| main.rs:667:18:667:18 | y | | main.rs:664:41:664:55 | T | +| main.rs:668:18:668:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:668:18:668:29 | "{:?}, {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:668:18:668:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:668:18:668:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:671:69:671:69 | x | | main.rs:671:52:671:66 | T | +| main.rs:671:75:671:75 | y | | main.rs:671:52:671:66 | T | +| main.rs:671:81:676:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:673:18:673:18 | x | | main.rs:671:52:671:66 | T | +| main.rs:674:18:674:18 | y | | main.rs:671:52:671:66 | T | +| main.rs:675:18:675:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:675:18:675:29 | "{:?}, {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:675:18:675:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:675:18:675:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:678:50:678:50 | x | | main.rs:678:41:678:47 | T | +| main.rs:678:56:678:56 | y | | main.rs:678:41:678:47 | T | +| main.rs:678:62:683:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:680:18:680:18 | x | | main.rs:678:41:678:47 | T | +| main.rs:681:18:681:18 | y | | main.rs:678:41:678:47 | T | +| main.rs:682:18:682:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:682:18:682:29 | "{:?}, {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:682:18:682:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:682:18:682:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:685:54:685:54 | x | | main.rs:685:41:685:51 | T | +| main.rs:685:60:685:60 | y | | main.rs:685:41:685:51 | T | +| main.rs:685:66:690:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:687:18:687:18 | x | | main.rs:685:41:685:51 | T | +| main.rs:688:18:688:18 | y | | main.rs:685:41:685:51 | T | +| main.rs:689:18:689:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:689:18:689:29 | "{:?}, {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:689:18:689:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:689:18:689:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:697:18:697:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:697:18:697:22 | SelfParam | TRef | main.rs:694:5:698:5 | Self [trait TraitWithSelfTp] | +| main.rs:700:40:700:44 | thing | | {EXTERNAL LOCATION} | & | +| main.rs:700:40:700:44 | thing | TRef | main.rs:700:17:700:37 | T | +| main.rs:700:56:702:5 | { ... } | | main.rs:700:14:700:14 | A | +| main.rs:701:9:701:13 | thing | | {EXTERNAL LOCATION} | & | +| main.rs:701:9:701:13 | thing | TRef | main.rs:700:17:700:37 | T | +| main.rs:705:44:705:48 | thing | | main.rs:705:24:705:41 | S | +| main.rs:705:61:708:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:706:19:706:23 | thing | | main.rs:705:24:705:41 | S | +| main.rs:713:55:713:59 | thing | | {EXTERNAL LOCATION} | & | +| main.rs:713:55:713:59 | thing | TRef | main.rs:713:25:713:52 | S | +| main.rs:713:66:716:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:715:25:715:29 | thing | | {EXTERNAL LOCATION} | & | +| main.rs:715:25:715:29 | thing | TRef | main.rs:713:25:713:52 | S | +| main.rs:724:18:724:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:724:18:724:22 | SelfParam | TRef | main.rs:718:5:720:5 | MyStruct | +| main.rs:724:41:726:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:724:41:726:9 | { ... } | T | main.rs:718:5:720:5 | MyStruct | +| main.rs:725:18:725:47 | MyStruct {...} | | main.rs:718:5:720:5 | MyStruct | +| main.rs:725:36:725:39 | self | | {EXTERNAL LOCATION} | & | +| main.rs:725:36:725:39 | self | TRef | main.rs:718:5:720:5 | MyStruct | +| main.rs:731:19:734:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:732:13:732:13 | s | | main.rs:718:5:720:5 | MyStruct | +| main.rs:732:17:732:37 | MyStruct {...} | | main.rs:718:5:720:5 | MyStruct | +| main.rs:733:25:733:26 | &s | | {EXTERNAL LOCATION} | & | +| main.rs:733:26:733:26 | s | | main.rs:718:5:720:5 | MyStruct | +| main.rs:749:15:749:18 | SelfParam | | main.rs:748:5:759:5 | Self [trait MyTrait] | +| main.rs:751:15:751:18 | SelfParam | | main.rs:748:5:759:5 | Self [trait MyTrait] | +| main.rs:754:9:756:9 | { ... } | | main.rs:748:19:748:19 | A | +| main.rs:755:13:755:16 | self | | main.rs:748:5:759:5 | Self [trait MyTrait] | +| main.rs:758:18:758:18 | x | | main.rs:748:5:759:5 | Self [trait MyTrait] | +| main.rs:762:15:762:18 | SelfParam | | main.rs:745:5:746:14 | S2 | +| main.rs:762:26:764:9 | { ... } | | main.rs:761:10:761:19 | T | +| main.rs:766:18:766:18 | x | | main.rs:745:5:746:14 | S2 | +| main.rs:766:32:768:9 | { ... } | | main.rs:761:10:761:19 | T | +| main.rs:772:15:772:18 | SelfParam | | main.rs:743:5:744:14 | S1 | +| main.rs:772:28:774:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:776:18:776:18 | x | | main.rs:743:5:744:14 | S1 | +| main.rs:776:34:778:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:783:50:783:50 | x | | main.rs:783:26:783:47 | T2 | +| main.rs:783:63:786:5 | { ... } | | main.rs:783:22:783:23 | T1 | +| main.rs:784:9:784:9 | x | | main.rs:783:26:783:47 | T2 | +| main.rs:785:9:785:9 | x | | main.rs:783:26:783:47 | T2 | +| main.rs:787:52:787:52 | x | | main.rs:787:28:787:49 | T2 | +| main.rs:787:65:791:5 | { ... } | | main.rs:787:24:787:25 | T1 | +| main.rs:788:24:788:24 | x | | main.rs:787:28:787:49 | T2 | +| main.rs:790:16:790:16 | x | | main.rs:787:28:787:49 | T2 | +| main.rs:792:52:792:52 | x | | main.rs:792:28:792:49 | T2 | +| main.rs:792:65:796:5 | { ... } | | main.rs:792:24:792:25 | T1 | +| main.rs:793:29:793:29 | x | | main.rs:792:28:792:49 | T2 | +| main.rs:795:21:795:21 | x | | main.rs:792:28:792:49 | T2 | +| main.rs:797:55:797:55 | x | | main.rs:797:31:797:52 | T2 | +| main.rs:797:68:801:5 | { ... } | | main.rs:797:27:797:28 | T1 | +| main.rs:798:27:798:27 | x | | main.rs:797:31:797:52 | T2 | +| main.rs:800:19:800:19 | x | | main.rs:797:31:797:52 | T2 | +| main.rs:802:55:802:55 | x | | main.rs:802:31:802:52 | T2 | +| main.rs:802:68:806:5 | { ... } | | main.rs:802:27:802:28 | T1 | +| main.rs:803:32:803:32 | x | | main.rs:802:31:802:52 | T2 | +| main.rs:805:24:805:24 | x | | main.rs:802:31:802:52 | T2 | +| main.rs:810:49:810:49 | x | | main.rs:738:5:741:5 | MyThing | +| main.rs:810:49:810:49 | x | T | main.rs:810:32:810:46 | T2 | +| main.rs:810:71:812:5 | { ... } | | main.rs:810:28:810:29 | T1 | +| main.rs:811:9:811:9 | x | | main.rs:738:5:741:5 | MyThing | +| main.rs:811:9:811:9 | x | T | main.rs:810:32:810:46 | T2 | +| main.rs:813:51:813:51 | x | | main.rs:738:5:741:5 | MyThing | +| main.rs:813:51:813:51 | x | T | main.rs:813:34:813:48 | T2 | +| main.rs:813:73:815:5 | { ... } | | main.rs:813:30:813:31 | T1 | +| main.rs:814:16:814:16 | x | | main.rs:738:5:741:5 | MyThing | +| main.rs:814:16:814:16 | x | T | main.rs:813:34:813:48 | T2 | +| main.rs:816:51:816:51 | x | | main.rs:738:5:741:5 | MyThing | +| main.rs:816:51:816:51 | x | T | main.rs:816:34:816:48 | T2 | +| main.rs:816:73:818:5 | { ... } | | main.rs:816:30:816:31 | T1 | +| main.rs:817:21:817:21 | x | | main.rs:738:5:741:5 | MyThing | +| main.rs:817:21:817:21 | x | T | main.rs:816:34:816:48 | T2 | +| main.rs:821:15:821:18 | SelfParam | | main.rs:738:5:741:5 | MyThing | +| main.rs:821:15:821:18 | SelfParam | T | main.rs:820:10:820:10 | T | +| main.rs:821:26:823:9 | { ... } | | main.rs:820:10:820:10 | T | +| main.rs:822:13:822:16 | self | | main.rs:738:5:741:5 | MyThing | +| main.rs:822:13:822:16 | self | T | main.rs:820:10:820:10 | T | +| main.rs:825:18:825:18 | x | | main.rs:738:5:741:5 | MyThing | +| main.rs:825:18:825:18 | x | T | main.rs:820:10:820:10 | T | +| main.rs:825:32:827:9 | { ... } | | main.rs:820:10:820:10 | T | +| main.rs:826:13:826:13 | x | | main.rs:738:5:741:5 | MyThing | +| main.rs:826:13:826:13 | x | T | main.rs:820:10:820:10 | T | +| main.rs:830:16:888:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:831:13:831:13 | x | | main.rs:738:5:741:5 | MyThing | +| main.rs:831:17:831:33 | MyThing {...} | | main.rs:738:5:741:5 | MyThing | +| main.rs:832:13:832:13 | y | | main.rs:738:5:741:5 | MyThing | +| main.rs:832:17:832:33 | MyThing {...} | | main.rs:738:5:741:5 | MyThing | +| main.rs:834:18:834:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:834:18:834:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:834:18:834:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:834:18:834:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:834:26:834:26 | x | | main.rs:738:5:741:5 | MyThing | +| main.rs:835:18:835:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:835:18:835:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:835:18:835:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:835:18:835:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:835:26:835:26 | y | | main.rs:738:5:741:5 | MyThing | +| main.rs:837:13:837:13 | x | | main.rs:738:5:741:5 | MyThing | +| main.rs:837:17:837:33 | MyThing {...} | | main.rs:738:5:741:5 | MyThing | +| main.rs:838:13:838:13 | y | | main.rs:738:5:741:5 | MyThing | +| main.rs:838:17:838:33 | MyThing {...} | | main.rs:738:5:741:5 | MyThing | +| main.rs:840:18:840:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:840:18:840:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:840:18:840:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:840:18:840:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:840:26:840:26 | x | | main.rs:738:5:741:5 | MyThing | +| main.rs:841:18:841:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:841:18:841:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:841:18:841:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:841:18:841:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:841:26:841:26 | y | | main.rs:738:5:741:5 | MyThing | +| main.rs:843:13:843:14 | x2 | | main.rs:738:5:741:5 | MyThing | +| main.rs:843:18:843:34 | MyThing {...} | | main.rs:738:5:741:5 | MyThing | +| main.rs:844:13:844:14 | y2 | | main.rs:738:5:741:5 | MyThing | +| main.rs:844:18:844:34 | MyThing {...} | | main.rs:738:5:741:5 | MyThing | +| main.rs:846:31:846:32 | x2 | | main.rs:738:5:741:5 | MyThing | +| main.rs:847:18:847:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:847:18:847:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:847:18:847:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:847:18:847:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:848:33:848:34 | x2 | | main.rs:738:5:741:5 | MyThing | +| main.rs:849:18:849:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:849:18:849:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:849:18:849:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:849:18:849:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:850:33:850:34 | x2 | | main.rs:738:5:741:5 | MyThing | +| main.rs:851:18:851:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:851:18:851:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:851:18:851:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:851:18:851:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:852:31:852:32 | y2 | | main.rs:738:5:741:5 | MyThing | +| main.rs:853:18:853:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:853:18:853:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:853:18:853:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:853:18:853:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:854:33:854:34 | y2 | | main.rs:738:5:741:5 | MyThing | +| main.rs:855:18:855:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:855:18:855:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:855:18:855:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:855:18:855:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:856:33:856:34 | y2 | | main.rs:738:5:741:5 | MyThing | +| main.rs:857:18:857:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:857:18:857:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:857:18:857:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:857:18:857:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:858:36:858:37 | x2 | | main.rs:738:5:741:5 | MyThing | +| main.rs:859:18:859:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:859:18:859:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:859:18:859:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:859:18:859:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:860:36:860:37 | x2 | | main.rs:738:5:741:5 | MyThing | +| main.rs:861:18:861:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:861:18:861:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:861:18:861:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:861:18:861:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:862:36:862:37 | y2 | | main.rs:738:5:741:5 | MyThing | +| main.rs:863:18:863:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:863:18:863:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:863:18:863:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:863:18:863:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:864:36:864:37 | y2 | | main.rs:738:5:741:5 | MyThing | +| main.rs:865:18:865:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:865:18:865:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:865:18:865:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:865:18:865:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:867:13:867:14 | x3 | | main.rs:738:5:741:5 | MyThing | +| main.rs:867:18:869:9 | MyThing {...} | | main.rs:738:5:741:5 | MyThing | +| main.rs:868:16:868:32 | MyThing {...} | | main.rs:738:5:741:5 | MyThing | +| main.rs:870:13:870:14 | y3 | | main.rs:738:5:741:5 | MyThing | +| main.rs:870:18:872:9 | MyThing {...} | | main.rs:738:5:741:5 | MyThing | +| main.rs:871:16:871:32 | MyThing {...} | | main.rs:738:5:741:5 | MyThing | +| main.rs:874:37:874:38 | x3 | | main.rs:738:5:741:5 | MyThing | +| main.rs:875:18:875:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:875:18:875:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:875:18:875:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:875:18:875:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:876:39:876:40 | x3 | | main.rs:738:5:741:5 | MyThing | +| main.rs:877:18:877:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:877:18:877:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:877:18:877:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:877:18:877:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:878:39:878:40 | x3 | | main.rs:738:5:741:5 | MyThing | +| main.rs:879:18:879:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:879:18:879:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:879:18:879:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:879:18:879:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:880:37:880:38 | y3 | | main.rs:738:5:741:5 | MyThing | +| main.rs:881:18:881:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:881:18:881:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:881:18:881:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:881:18:881:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:882:39:882:40 | y3 | | main.rs:738:5:741:5 | MyThing | +| main.rs:883:18:883:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:883:18:883:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:883:18:883:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:883:18:883:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:884:39:884:40 | y3 | | main.rs:738:5:741:5 | MyThing | +| main.rs:885:18:885:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:885:18:885:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:885:18:885:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:885:18:885:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:887:13:887:13 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:898:19:898:22 | SelfParam | | main.rs:892:5:895:5 | Wrapper | +| main.rs:898:19:898:22 | SelfParam | A | main.rs:897:10:897:10 | A | +| main.rs:898:30:900:9 | { ... } | | main.rs:897:10:897:10 | A | +| main.rs:899:13:899:16 | self | | main.rs:892:5:895:5 | Wrapper | +| main.rs:899:13:899:16 | self | A | main.rs:897:10:897:10 | A | +| main.rs:907:15:907:18 | SelfParam | | main.rs:903:5:917:5 | Self [trait MyTrait] | +| main.rs:909:15:909:18 | SelfParam | | main.rs:903:5:917:5 | Self [trait MyTrait] | +| main.rs:913:9:916:9 | { ... } | | main.rs:904:9:904:28 | AssociatedType | +| main.rs:914:13:914:16 | self | | main.rs:903:5:917:5 | Self [trait MyTrait] | +| main.rs:923:19:923:23 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:923:19:923:23 | SelfParam | TRef | main.rs:919:5:929:5 | Self [trait MyTraitAssoc2] | +| main.rs:923:26:923:26 | a | | main.rs:923:16:923:16 | A | +| main.rs:925:22:925:26 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:925:22:925:26 | SelfParam | TRef | main.rs:919:5:929:5 | Self [trait MyTraitAssoc2] | +| main.rs:925:29:925:29 | a | | main.rs:925:19:925:19 | A | +| main.rs:925:35:925:35 | b | | main.rs:925:19:925:19 | A | +| main.rs:925:75:928:9 | { ... } | | main.rs:920:9:920:52 | GenericAssociatedType | +| main.rs:926:13:926:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:926:13:926:16 | self | TRef | main.rs:919:5:929:5 | Self [trait MyTraitAssoc2] | +| main.rs:926:22:926:22 | a | | main.rs:925:19:925:19 | A | +| main.rs:927:13:927:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:927:13:927:16 | self | TRef | main.rs:919:5:929:5 | Self [trait MyTraitAssoc2] | +| main.rs:927:22:927:22 | b | | main.rs:925:19:925:19 | A | +| main.rs:936:21:936:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:936:21:936:25 | SelfParam | TRef | main.rs:931:5:941:5 | Self [trait TraitMultipleAssoc] | +| main.rs:938:20:938:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:938:20:938:24 | SelfParam | TRef | main.rs:931:5:941:5 | Self [trait TraitMultipleAssoc] | +| main.rs:940:20:940:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:940:20:940:24 | SelfParam | TRef | main.rs:931:5:941:5 | Self [trait TraitMultipleAssoc] | +| main.rs:956:15:956:18 | SelfParam | | main.rs:943:5:944:13 | S | +| main.rs:956:45:958:9 | { ... } | | main.rs:949:5:950:14 | AT | +| main.rs:966:19:966:23 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:966:19:966:23 | SelfParam | TRef | main.rs:943:5:944:13 | S | +| main.rs:966:26:966:26 | a | | main.rs:966:16:966:16 | A | +| main.rs:966:46:968:9 | { ... } | | main.rs:892:5:895:5 | Wrapper | +| main.rs:966:46:968:9 | { ... } | A | main.rs:966:16:966:16 | A | +| main.rs:967:13:967:32 | Wrapper {...} | | main.rs:892:5:895:5 | Wrapper | +| main.rs:967:30:967:30 | a | | main.rs:966:16:966:16 | A | +| main.rs:975:15:975:18 | SelfParam | | main.rs:946:5:947:14 | S2 | +| main.rs:975:45:977:9 | { ... } | | main.rs:892:5:895:5 | Wrapper | +| main.rs:975:45:977:9 | { ... } | A | main.rs:946:5:947:14 | S2 | +| main.rs:976:13:976:35 | Wrapper {...} | | main.rs:892:5:895:5 | Wrapper | +| main.rs:976:30:976:33 | self | | main.rs:946:5:947:14 | S2 | +| main.rs:982:30:984:9 | { ... } | | main.rs:892:5:895:5 | Wrapper | +| main.rs:982:30:984:9 | { ... } | A | main.rs:946:5:947:14 | S2 | +| main.rs:983:13:983:33 | Wrapper {...} | | main.rs:892:5:895:5 | Wrapper | +| main.rs:989:22:989:26 | thing | | main.rs:989:10:989:19 | T | +| main.rs:990:9:990:13 | thing | | main.rs:989:10:989:19 | T | +| main.rs:997:21:997:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:997:21:997:25 | SelfParam | TRef | main.rs:949:5:950:14 | AT | +| main.rs:997:34:999:9 | { ... } | | main.rs:949:5:950:14 | AT | +| main.rs:1001:20:1001:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1001:20:1001:24 | SelfParam | TRef | main.rs:949:5:950:14 | AT | +| main.rs:1001:43:1003:9 | { ... } | | main.rs:943:5:944:13 | S | +| main.rs:1005:20:1005:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1005:20:1005:24 | SelfParam | TRef | main.rs:949:5:950:14 | AT | +| main.rs:1005:43:1007:9 | { ... } | | main.rs:946:5:947:14 | S2 | +| main.rs:1010:16:1038:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1013:18:1013:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1013:18:1013:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1013:18:1013:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1013:18:1013:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1018:18:1018:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1018:18:1018:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1018:18:1018:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1018:18:1018:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1022:18:1022:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1022:18:1022:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1022:18:1022:43 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1022:18:1022:43 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1025:18:1025:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1025:18:1025:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1025:18:1025:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1025:18:1025:49 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1028:18:1028:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1028:18:1028:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1028:18:1028:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1028:18:1028:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1031:18:1031:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1031:18:1031:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1031:18:1031:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1031:18:1031:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1033:18:1033:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1033:18:1033:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1033:18:1033:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1033:18:1033:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1045:19:1045:23 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1045:19:1045:23 | SelfParam | TRef | main.rs:1042:5:1046:5 | Self [trait Supertrait] | +| main.rs:1045:26:1045:32 | content | | main.rs:1043:9:1043:21 | Content | +| main.rs:1050:24:1050:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1050:24:1050:28 | SelfParam | TRef | main.rs:1048:5:1051:5 | Self [trait Subtrait] | +| main.rs:1059:23:1059:27 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1059:23:1059:27 | SelfParam | TRef | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | +| main.rs:1059:68:1062:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1060:13:1060:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1060:13:1060:16 | self | TRef | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | +| main.rs:1061:13:1061:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1061:13:1061:16 | self | TRef | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | +| main.rs:1069:19:1069:23 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1069:19:1069:23 | SelfParam | TRef | main.rs:1065:5:1065:24 | MyType | +| main.rs:1069:19:1069:23 | SelfParam | TRef.T | main.rs:1067:10:1067:10 | T | +| main.rs:1069:26:1069:33 | _content | | main.rs:1067:10:1067:10 | T | +| main.rs:1069:51:1071:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1070:22:1070:42 | "Inserting content: \\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1070:22:1070:42 | "Inserting content: \\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1070:22:1070:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1070:22:1070:42 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1076:24:1076:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1076:24:1076:28 | SelfParam | TRef | main.rs:1065:5:1065:24 | MyType | +| main.rs:1076:24:1076:28 | SelfParam | TRef.T | main.rs:1074:10:1074:17 | T | +| main.rs:1077:15:1077:18 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1077:15:1077:18 | self | TRef | main.rs:1065:5:1065:24 | MyType | +| main.rs:1077:15:1077:18 | self | TRef.T | main.rs:1074:10:1074:17 | T | +| main.rs:1081:33:1081:36 | item | | {EXTERNAL LOCATION} | & | +| main.rs:1081:33:1081:36 | item | TRef | main.rs:1081:20:1081:30 | T | +| main.rs:1082:9:1082:12 | item | | {EXTERNAL LOCATION} | & | +| main.rs:1082:9:1082:12 | item | TRef | main.rs:1081:20:1081:30 | T | +| main.rs:1085:35:1085:38 | item | | {EXTERNAL LOCATION} | & | +| main.rs:1085:35:1085:38 | item | TRef | main.rs:1085:21:1085:32 | T | +| main.rs:1085:93:1088:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1086:9:1086:12 | item | | {EXTERNAL LOCATION} | & | +| main.rs:1086:9:1086:12 | item | TRef | main.rs:1085:21:1085:32 | T | +| main.rs:1087:9:1087:12 | item | | {EXTERNAL LOCATION} | & | +| main.rs:1087:9:1087:12 | item | TRef | main.rs:1085:21:1085:32 | T | +| main.rs:1090:15:1096:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1091:28:1091:32 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1094:28:1094:31 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1095:37:1095:42 | &item2 | | {EXTERNAL LOCATION} | & | +| main.rs:1112:15:1112:18 | SelfParam | | main.rs:1100:5:1104:5 | MyEnum | +| main.rs:1112:15:1112:18 | SelfParam | A | main.rs:1111:10:1111:10 | T | +| main.rs:1112:26:1117:9 | { ... } | | main.rs:1111:10:1111:10 | T | +| main.rs:1113:19:1113:22 | self | | main.rs:1100:5:1104:5 | MyEnum | +| main.rs:1113:19:1113:22 | self | A | main.rs:1111:10:1111:10 | T | +| main.rs:1115:17:1115:32 | ...::C2 {...} | | main.rs:1100:5:1104:5 | MyEnum | +| main.rs:1120:16:1126:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1122:13:1122:13 | y | | main.rs:1100:5:1104:5 | MyEnum | +| main.rs:1122:17:1122:36 | ...::C2 {...} | | main.rs:1100:5:1104:5 | MyEnum | +| main.rs:1124:18:1124:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1124:18:1124:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1124:18:1124:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1124:18:1124:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1125:18:1125:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1125:18:1125:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1125:18:1125:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1125:18:1125:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1125:26:1125:26 | y | | main.rs:1100:5:1104:5 | MyEnum | +| main.rs:1147:15:1147:18 | SelfParam | | main.rs:1145:5:1148:5 | Self [trait MyTrait1] | +| main.rs:1152:15:1152:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1152:15:1152:19 | SelfParam | TRef | main.rs:1150:5:1162:5 | Self [trait MyTrait2] | +| main.rs:1155:9:1161:9 | { ... } | | main.rs:1150:20:1150:22 | Tr2 | +| main.rs:1157:17:1157:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1157:17:1157:20 | self | TRef | main.rs:1150:5:1162:5 | Self [trait MyTrait2] | +| main.rs:1159:27:1159:30 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1159:27:1159:30 | self | TRef | main.rs:1150:5:1162:5 | Self [trait MyTrait2] | +| main.rs:1166:15:1166:18 | SelfParam | | main.rs:1164:5:1176:5 | Self [trait MyTrait3] | +| main.rs:1169:9:1175:9 | { ... } | | main.rs:1164:20:1164:22 | Tr3 | +| main.rs:1171:17:1171:20 | self | | main.rs:1164:5:1176:5 | Self [trait MyTrait3] | +| main.rs:1173:26:1173:30 | &self | | {EXTERNAL LOCATION} | & | +| main.rs:1173:27:1173:30 | self | | main.rs:1164:5:1176:5 | Self [trait MyTrait3] | +| main.rs:1180:15:1180:18 | SelfParam | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1180:15:1180:18 | SelfParam | A | main.rs:1178:10:1178:10 | T | +| main.rs:1180:26:1182:9 | { ... } | | main.rs:1178:10:1178:10 | T | +| main.rs:1181:13:1181:16 | self | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1181:13:1181:16 | self | A | main.rs:1178:10:1178:10 | T | +| main.rs:1189:15:1189:18 | SelfParam | | main.rs:1135:5:1138:5 | MyThing2 | +| main.rs:1189:15:1189:18 | SelfParam | A | main.rs:1187:10:1187:10 | T | +| main.rs:1189:35:1191:9 | { ... } | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1189:35:1191:9 | { ... } | A | main.rs:1187:10:1187:10 | T | +| main.rs:1190:13:1190:33 | MyThing {...} | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1190:26:1190:29 | self | | main.rs:1135:5:1138:5 | MyThing2 | +| main.rs:1190:26:1190:29 | self | A | main.rs:1187:10:1187:10 | T | +| main.rs:1198:44:1198:44 | x | | main.rs:1198:26:1198:41 | T2 | +| main.rs:1198:57:1200:5 | { ... } | | main.rs:1198:22:1198:23 | T1 | +| main.rs:1199:9:1199:9 | x | | main.rs:1198:26:1198:41 | T2 | +| main.rs:1202:56:1202:56 | x | | main.rs:1202:39:1202:53 | T | +| main.rs:1202:62:1206:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1204:17:1204:17 | x | | main.rs:1202:39:1202:53 | T | +| main.rs:1205:18:1205:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1205:18:1205:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1205:18:1205:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1205:18:1205:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1208:16:1232:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1209:13:1209:13 | x | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1209:17:1209:33 | MyThing {...} | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1210:13:1210:13 | y | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1210:17:1210:33 | MyThing {...} | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1212:18:1212:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1212:18:1212:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1212:18:1212:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1212:18:1212:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1212:26:1212:26 | x | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1213:18:1213:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1213:18:1213:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1213:18:1213:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1213:18:1213:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1213:26:1213:26 | y | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1215:13:1215:13 | x | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1215:17:1215:33 | MyThing {...} | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1216:13:1216:13 | y | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1216:17:1216:33 | MyThing {...} | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1218:18:1218:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1218:18:1218:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1218:18:1218:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1218:18:1218:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1218:26:1218:26 | x | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1219:18:1219:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1219:18:1219:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1219:18:1219:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1219:18:1219:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1219:26:1219:26 | y | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1221:13:1221:13 | x | | main.rs:1135:5:1138:5 | MyThing2 | +| main.rs:1221:17:1221:34 | MyThing2 {...} | | main.rs:1135:5:1138:5 | MyThing2 | +| main.rs:1222:13:1222:13 | y | | main.rs:1135:5:1138:5 | MyThing2 | +| main.rs:1222:17:1222:34 | MyThing2 {...} | | main.rs:1135:5:1138:5 | MyThing2 | +| main.rs:1224:18:1224:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1224:18:1224:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1224:18:1224:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1224:18:1224:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1224:26:1224:26 | x | | main.rs:1135:5:1138:5 | MyThing2 | +| main.rs:1225:18:1225:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1225:18:1225:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1225:18:1225:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1225:18:1225:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1225:26:1225:26 | y | | main.rs:1135:5:1138:5 | MyThing2 | +| main.rs:1227:13:1227:13 | x | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1227:17:1227:33 | MyThing {...} | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1228:31:1228:31 | x | | main.rs:1130:5:1133:5 | MyThing | +| main.rs:1230:13:1230:13 | x | | main.rs:1135:5:1138:5 | MyThing2 | +| main.rs:1230:17:1230:34 | MyThing2 {...} | | main.rs:1135:5:1138:5 | MyThing2 | +| main.rs:1231:31:1231:31 | x | | main.rs:1135:5:1138:5 | MyThing2 | +| main.rs:1248:22:1248:22 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1248:22:1248:22 | x | TRef | main.rs:1248:11:1248:19 | T | +| main.rs:1248:35:1250:5 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1248:35:1250:5 | { ... } | TRef | main.rs:1248:11:1248:19 | T | +| main.rs:1249:9:1249:9 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1249:9:1249:9 | x | TRef | main.rs:1248:11:1248:19 | T | +| main.rs:1253:17:1253:20 | SelfParam | | main.rs:1238:5:1239:14 | S1 | +| main.rs:1253:29:1255:9 | { ... } | | main.rs:1241:5:1242:14 | S2 | +| main.rs:1258:21:1258:21 | x | | main.rs:1258:13:1258:14 | T1 | +| main.rs:1261:5:1263:5 | { ... } | | main.rs:1258:17:1258:18 | T2 | +| main.rs:1262:9:1262:9 | x | | main.rs:1258:13:1258:14 | T1 | +| main.rs:1265:16:1281:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1267:18:1267:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1267:18:1267:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1267:18:1267:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1267:18:1267:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1267:26:1267:31 | id(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1267:29:1267:30 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1270:18:1270:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1270:18:1270:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1270:18:1270:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1270:18:1270:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1270:26:1270:37 | id::<...>(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1270:26:1270:37 | id::<...>(...) | TRef | main.rs:1238:5:1239:14 | S1 | +| main.rs:1270:35:1270:36 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1274:18:1274:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1274:18:1274:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1274:18:1274:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1274:18:1274:44 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1274:26:1274:44 | id::<...>(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1274:26:1274:44 | id::<...>(...) | TRef | main.rs:1244:5:1244:25 | dyn Trait | +| main.rs:1274:42:1274:43 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1277:9:1277:25 | into::<...>(...) | | main.rs:1241:5:1242:14 | S2 | +| main.rs:1280:13:1280:13 | y | | main.rs:1241:5:1242:14 | S2 | +| main.rs:1294:22:1294:25 | SelfParam | | main.rs:1285:5:1291:5 | PairOption | +| main.rs:1294:22:1294:25 | SelfParam | Fst | main.rs:1293:10:1293:12 | Fst | +| main.rs:1294:22:1294:25 | SelfParam | Snd | main.rs:1293:15:1293:17 | Snd | +| main.rs:1294:35:1301:9 | { ... } | | main.rs:1293:15:1293:17 | Snd | +| main.rs:1295:19:1295:22 | self | | main.rs:1285:5:1291:5 | PairOption | +| main.rs:1295:19:1295:22 | self | Fst | main.rs:1293:10:1293:12 | Fst | +| main.rs:1295:19:1295:22 | self | Snd | main.rs:1293:15:1293:17 | Snd | +| main.rs:1296:43:1296:82 | MacroExpr | | file://:0:0:0:0 | ! | +| main.rs:1296:50:1296:81 | "PairNone has no second elemen... | | {EXTERNAL LOCATION} | & | +| main.rs:1296:50:1296:81 | "PairNone has no second elemen... | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1296:50:1296:81 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | +| main.rs:1296:50:1296:81 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1297:43:1297:81 | MacroExpr | | file://:0:0:0:0 | ! | +| main.rs:1297:50:1297:80 | "PairFst has no second element... | | {EXTERNAL LOCATION} | & | +| main.rs:1297:50:1297:80 | "PairFst has no second element... | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1297:50:1297:80 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | +| main.rs:1297:50:1297:80 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1325:10:1325:10 | t | | main.rs:1285:5:1291:5 | PairOption | +| main.rs:1325:10:1325:10 | t | Fst | main.rs:1307:5:1308:14 | S2 | +| main.rs:1325:10:1325:10 | t | Snd | main.rs:1285:5:1291:5 | PairOption | +| main.rs:1325:10:1325:10 | t | Snd.Fst | main.rs:1307:5:1308:14 | S2 | +| main.rs:1325:10:1325:10 | t | Snd.Snd | main.rs:1310:5:1311:14 | S3 | +| main.rs:1325:30:1328:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1326:17:1326:17 | t | | main.rs:1285:5:1291:5 | PairOption | +| main.rs:1326:17:1326:17 | t | Fst | main.rs:1307:5:1308:14 | S2 | +| main.rs:1326:17:1326:17 | t | Snd | main.rs:1285:5:1291:5 | PairOption | +| main.rs:1326:17:1326:17 | t | Snd.Fst | main.rs:1307:5:1308:14 | S2 | +| main.rs:1326:17:1326:17 | t | Snd.Snd | main.rs:1310:5:1311:14 | S3 | +| main.rs:1327:18:1327:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1327:18:1327:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1327:18:1327:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1327:18:1327:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1342:22:1342:25 | SelfParam | | main.rs:1340:5:1343:5 | Self [trait TraitWithAssocType] | +| main.rs:1350:22:1350:25 | SelfParam | | main.rs:1338:5:1338:28 | GenS | +| main.rs:1350:22:1350:25 | SelfParam | GenT | main.rs:1345:10:1345:15 | Output | +| main.rs:1350:44:1352:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1350:44:1352:9 | { ... } | E | main.rs:1345:10:1345:15 | Output | +| main.rs:1350:44:1352:9 | { ... } | T | main.rs:1345:10:1345:15 | Output | +| main.rs:1351:16:1351:19 | self | | main.rs:1338:5:1338:28 | GenS | +| main.rs:1351:16:1351:19 | self | GenT | main.rs:1345:10:1345:15 | Output | +| main.rs:1355:16:1377:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1357:13:1357:14 | p1 | | main.rs:1285:5:1291:5 | PairOption | +| main.rs:1357:13:1357:14 | p1 | Fst | main.rs:1304:5:1305:14 | S1 | +| main.rs:1357:13:1357:14 | p1 | Snd | main.rs:1307:5:1308:14 | S2 | +| main.rs:1358:18:1358:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1358:18:1358:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1358:18:1358:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1358:18:1358:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1358:26:1358:27 | p1 | | main.rs:1285:5:1291:5 | PairOption | +| main.rs:1358:26:1358:27 | p1 | Fst | main.rs:1304:5:1305:14 | S1 | +| main.rs:1358:26:1358:27 | p1 | Snd | main.rs:1307:5:1308:14 | S2 | +| main.rs:1361:13:1361:14 | p2 | | main.rs:1285:5:1291:5 | PairOption | +| main.rs:1361:13:1361:14 | p2 | Fst | main.rs:1304:5:1305:14 | S1 | +| main.rs:1361:13:1361:14 | p2 | Snd | main.rs:1307:5:1308:14 | S2 | +| main.rs:1362:18:1362:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1362:18:1362:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1362:18:1362:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1362:18:1362:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1362:26:1362:27 | p2 | | main.rs:1285:5:1291:5 | PairOption | +| main.rs:1362:26:1362:27 | p2 | Fst | main.rs:1304:5:1305:14 | S1 | +| main.rs:1362:26:1362:27 | p2 | Snd | main.rs:1307:5:1308:14 | S2 | +| main.rs:1365:13:1365:14 | p3 | | main.rs:1285:5:1291:5 | PairOption | +| main.rs:1365:13:1365:14 | p3 | Fst | main.rs:1307:5:1308:14 | S2 | +| main.rs:1366:18:1366:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1366:18:1366:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1366:18:1366:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1366:18:1366:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1366:26:1366:27 | p3 | | main.rs:1285:5:1291:5 | PairOption | +| main.rs:1366:26:1366:27 | p3 | Fst | main.rs:1307:5:1308:14 | S2 | +| main.rs:1369:13:1369:14 | p3 | | main.rs:1285:5:1291:5 | PairOption | +| main.rs:1369:13:1369:14 | p3 | Fst | main.rs:1307:5:1308:14 | S2 | +| main.rs:1369:13:1369:14 | p3 | Snd | main.rs:1310:5:1311:14 | S3 | +| main.rs:1370:18:1370:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1370:18:1370:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1370:18:1370:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1370:18:1370:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1370:26:1370:27 | p3 | | main.rs:1285:5:1291:5 | PairOption | +| main.rs:1370:26:1370:27 | p3 | Fst | main.rs:1307:5:1308:14 | S2 | +| main.rs:1370:26:1370:27 | p3 | Snd | main.rs:1310:5:1311:14 | S3 | +| main.rs:1372:9:1372:55 | g(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1374:13:1374:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1374:13:1374:13 | x | E | main.rs:1304:5:1305:14 | S1 | +| main.rs:1374:13:1374:13 | x | T | main.rs:1330:5:1330:34 | S4 | +| main.rs:1374:13:1374:13 | x | T.T41 | main.rs:1307:5:1308:14 | S2 | +| main.rs:1374:13:1374:13 | x | T.T42 | main.rs:1332:5:1332:22 | S5 | +| main.rs:1374:13:1374:13 | x | T.T42.T5 | main.rs:1307:5:1308:14 | S2 | +| main.rs:1376:22:1376:25 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1389:16:1389:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1389:16:1389:24 | SelfParam | TRef | main.rs:1387:5:1394:5 | Self [trait MyTrait] | +| main.rs:1389:27:1389:31 | value | | main.rs:1387:19:1387:19 | S | +| main.rs:1391:21:1391:29 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1391:21:1391:29 | SelfParam | TRef | main.rs:1387:5:1394:5 | Self [trait MyTrait] | +| main.rs:1391:32:1391:36 | value | | main.rs:1387:19:1387:19 | S | +| main.rs:1391:42:1393:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1392:13:1392:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1392:13:1392:16 | self | TRef | main.rs:1387:5:1394:5 | Self [trait MyTrait] | +| main.rs:1392:22:1392:26 | value | | main.rs:1387:19:1387:19 | S | +| main.rs:1398:16:1398:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1398:16:1398:24 | SelfParam | TRef | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1398:16:1398:24 | SelfParam | TRef.T | main.rs:1396:10:1396:10 | T | +| main.rs:1398:27:1398:31 | value | | main.rs:1396:10:1396:10 | T | +| main.rs:1398:37:1398:38 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1402:26:1404:9 | { ... } | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1402:26:1404:9 | { ... } | T | main.rs:1401:10:1401:10 | T | +| main.rs:1408:20:1408:23 | SelfParam | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1408:20:1408:23 | SelfParam | T | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1408:20:1408:23 | SelfParam | T.T | main.rs:1407:10:1407:10 | T | +| main.rs:1408:41:1413:9 | { ... } | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1408:41:1413:9 | { ... } | T | main.rs:1407:10:1407:10 | T | +| main.rs:1409:19:1409:22 | self | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1409:19:1409:22 | self | T | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1409:19:1409:22 | self | T.T | main.rs:1407:10:1407:10 | T | +| main.rs:1419:16:1465:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1420:13:1420:14 | x1 | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1420:13:1420:14 | x1 | T | main.rs:1416:5:1417:13 | S | +| main.rs:1420:18:1420:37 | ...::new(...) | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1420:18:1420:37 | ...::new(...) | T | main.rs:1416:5:1417:13 | S | +| main.rs:1421:18:1421:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1421:18:1421:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1421:18:1421:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1421:18:1421:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1421:26:1421:27 | x1 | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1421:26:1421:27 | x1 | T | main.rs:1416:5:1417:13 | S | +| main.rs:1423:17:1423:18 | x2 | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1423:22:1423:36 | ...::new(...) | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1424:9:1424:10 | x2 | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1425:18:1425:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1425:18:1425:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1425:18:1425:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1425:18:1425:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1425:26:1425:27 | x2 | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1428:17:1428:18 | x3 | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1428:22:1428:36 | ...::new(...) | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1429:9:1429:10 | x3 | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1430:18:1430:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1430:18:1430:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1430:18:1430:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1430:18:1430:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1430:26:1430:27 | x3 | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1432:17:1432:18 | x4 | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1432:22:1432:36 | ...::new(...) | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1433:9:1433:33 | ...::set(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1433:23:1433:29 | &mut x4 | | {EXTERNAL LOCATION} | & | +| main.rs:1433:28:1433:29 | x4 | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1434:18:1434:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1434:18:1434:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1434:18:1434:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1434:18:1434:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1434:26:1434:27 | x4 | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1437:18:1437:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1437:18:1437:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1437:18:1437:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1437:18:1437:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1440:18:1440:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1440:18:1440:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1440:18:1440:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1440:18:1440:61 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1440:26:1440:61 | ...::flatten(...) | | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1440:26:1440:61 | ...::flatten(...) | T | main.rs:1416:5:1417:13 | S | +| main.rs:1448:18:1448:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1448:18:1448:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1448:18:1448:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1448:18:1448:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1452:13:1452:16 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1453:13:1453:17 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1455:18:1455:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1455:18:1455:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1455:18:1455:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1455:18:1455:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1458:30:1463:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1459:13:1461:13 | if ... {...} | | {EXTERNAL LOCATION} | () | +| main.rs:1459:22:1461:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1464:18:1464:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1464:18:1464:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1464:18:1464:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1464:18:1464:34 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1482:15:1482:18 | SelfParam | | main.rs:1470:5:1471:19 | S | +| main.rs:1482:15:1482:18 | SelfParam | T | main.rs:1481:10:1481:10 | T | +| main.rs:1482:26:1484:9 | { ... } | | main.rs:1481:10:1481:10 | T | +| main.rs:1483:13:1483:16 | self | | main.rs:1470:5:1471:19 | S | +| main.rs:1483:13:1483:16 | self | T | main.rs:1481:10:1481:10 | T | +| main.rs:1486:15:1486:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1486:15:1486:19 | SelfParam | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1486:15:1486:19 | SelfParam | TRef.T | main.rs:1481:10:1481:10 | T | +| main.rs:1486:28:1488:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1486:28:1488:9 | { ... } | TRef | main.rs:1481:10:1481:10 | T | +| main.rs:1487:13:1487:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1487:14:1487:17 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1487:14:1487:17 | self | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1487:14:1487:17 | self | TRef.T | main.rs:1481:10:1481:10 | T | +| main.rs:1490:15:1490:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1490:15:1490:25 | SelfParam | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1490:15:1490:25 | SelfParam | TRef.T | main.rs:1481:10:1481:10 | T | +| main.rs:1490:34:1492:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1490:34:1492:9 | { ... } | TRef | main.rs:1481:10:1481:10 | T | +| main.rs:1491:13:1491:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1491:14:1491:17 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1491:14:1491:17 | self | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1491:14:1491:17 | self | TRef.T | main.rs:1481:10:1481:10 | T | +| main.rs:1496:29:1496:33 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1496:29:1496:33 | SelfParam | TRef | main.rs:1495:5:1498:5 | Self [trait ATrait] | +| main.rs:1497:33:1497:36 | SelfParam | | main.rs:1495:5:1498:5 | Self [trait ATrait] | +| main.rs:1503:29:1503:33 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1503:29:1503:33 | SelfParam | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1503:29:1503:33 | SelfParam | TRef.TRef | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1503:43:1505:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1504:17:1504:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1504:17:1504:20 | self | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1504:17:1504:20 | self | TRef.TRef | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1508:33:1508:36 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1508:33:1508:36 | SelfParam | TRef | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1508:46:1510:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1509:15:1509:18 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1509:15:1509:18 | self | TRef | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1513:16:1563:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1515:18:1515:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1515:18:1515:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1515:18:1515:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1515:18:1515:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1519:18:1519:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1519:18:1519:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1519:18:1519:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1519:18:1519:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1520:18:1520:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1520:18:1520:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1520:18:1520:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1520:18:1520:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1524:18:1524:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1524:18:1524:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1524:18:1524:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1524:18:1524:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1524:26:1524:41 | ...::m2(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1524:26:1524:41 | ...::m2(...) | TRef | main.rs:1473:5:1474:14 | S2 | +| main.rs:1524:38:1524:40 | &x3 | | {EXTERNAL LOCATION} | & | +| main.rs:1525:18:1525:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1525:18:1525:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1525:18:1525:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1525:18:1525:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1525:26:1525:41 | ...::m3(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1525:26:1525:41 | ...::m3(...) | TRef | main.rs:1473:5:1474:14 | S2 | +| main.rs:1525:38:1525:40 | &x3 | | {EXTERNAL LOCATION} | & | +| main.rs:1527:13:1527:14 | x4 | | {EXTERNAL LOCATION} | & | +| main.rs:1527:18:1527:23 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1529:18:1529:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1529:18:1529:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1529:18:1529:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1529:18:1529:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1529:26:1529:27 | x4 | | {EXTERNAL LOCATION} | & | +| main.rs:1530:18:1530:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1530:18:1530:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1530:18:1530:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1530:18:1530:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1530:26:1530:27 | x4 | | {EXTERNAL LOCATION} | & | +| main.rs:1532:13:1532:14 | x5 | | {EXTERNAL LOCATION} | & | +| main.rs:1532:18:1532:23 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1534:18:1534:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1534:18:1534:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1534:18:1534:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1534:18:1534:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1534:26:1534:27 | x5 | | {EXTERNAL LOCATION} | & | +| main.rs:1535:18:1535:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1535:18:1535:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1535:18:1535:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1535:18:1535:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1535:26:1535:27 | x5 | | {EXTERNAL LOCATION} | & | +| main.rs:1537:13:1537:14 | x6 | | {EXTERNAL LOCATION} | & | +| main.rs:1537:18:1537:23 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1540:18:1540:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1540:18:1540:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1540:18:1540:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1540:18:1540:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1540:28:1540:29 | x6 | | {EXTERNAL LOCATION} | & | +| main.rs:1542:20:1542:22 | &S2 | | {EXTERNAL LOCATION} | & | +| main.rs:1546:18:1546:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1546:18:1546:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1546:18:1546:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1546:18:1546:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1548:13:1548:14 | x9 | | {EXTERNAL LOCATION} | String | +| main.rs:1548:26:1548:32 | "Hello" | | {EXTERNAL LOCATION} | & | +| main.rs:1548:26:1548:32 | "Hello" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1552:17:1552:18 | x9 | | {EXTERNAL LOCATION} | String | +| main.rs:1554:13:1554:20 | my_thing | | {EXTERNAL LOCATION} | & | +| main.rs:1554:24:1554:39 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1554:25:1554:39 | MyInt {...} | | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1556:17:1556:24 | my_thing | | {EXTERNAL LOCATION} | & | +| main.rs:1557:18:1557:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1557:18:1557:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1557:18:1557:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1557:18:1557:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1560:13:1560:20 | my_thing | | {EXTERNAL LOCATION} | & | +| main.rs:1560:24:1560:39 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1560:25:1560:39 | MyInt {...} | | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1561:17:1561:24 | my_thing | | {EXTERNAL LOCATION} | & | +| main.rs:1562:18:1562:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1562:18:1562:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1562:18:1562:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1562:18:1562:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1569:16:1569:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1569:16:1569:20 | SelfParam | TRef | main.rs:1567:5:1575:5 | Self [trait MyTrait] | +| main.rs:1572:16:1572:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1572:16:1572:20 | SelfParam | TRef | main.rs:1567:5:1575:5 | Self [trait MyTrait] | +| main.rs:1572:32:1574:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1572:32:1574:9 | { ... } | TRef | main.rs:1567:5:1575:5 | Self [trait MyTrait] | +| main.rs:1573:13:1573:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1573:13:1573:16 | self | TRef | main.rs:1567:5:1575:5 | Self [trait MyTrait] | +| main.rs:1581:16:1581:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1581:16:1581:20 | SelfParam | TRef | main.rs:1577:5:1577:20 | MyStruct | +| main.rs:1581:36:1583:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1581:36:1583:9 | { ... } | TRef | main.rs:1577:5:1577:20 | MyStruct | +| main.rs:1582:13:1582:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1582:13:1582:16 | self | TRef | main.rs:1577:5:1577:20 | MyStruct | +| main.rs:1586:16:1589:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1598:16:1598:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1598:16:1598:20 | SelfParam | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1598:16:1598:20 | SelfParam | TRef.T | main.rs:1597:10:1597:10 | T | +| main.rs:1598:32:1600:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1598:32:1600:9 | { ... } | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1598:32:1600:9 | { ... } | TRef.T | main.rs:1597:10:1597:10 | T | +| main.rs:1599:13:1599:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1599:13:1599:16 | self | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1599:13:1599:16 | self | TRef.T | main.rs:1597:10:1597:10 | T | +| main.rs:1602:16:1602:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1602:16:1602:20 | SelfParam | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1602:16:1602:20 | SelfParam | TRef.T | main.rs:1597:10:1597:10 | T | +| main.rs:1602:23:1602:23 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1602:23:1602:23 | x | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1602:23:1602:23 | x | TRef.T | main.rs:1597:10:1597:10 | T | +| main.rs:1602:42:1604:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1602:42:1604:9 | { ... } | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1602:42:1604:9 | { ... } | TRef.T | main.rs:1597:10:1597:10 | T | +| main.rs:1603:13:1603:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1603:13:1603:16 | self | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1603:13:1603:16 | self | TRef.T | main.rs:1597:10:1597:10 | T | +| main.rs:1607:16:1613:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1612:15:1612:17 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1612:16:1612:17 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1623:17:1623:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1623:17:1623:25 | SelfParam | TRef | main.rs:1617:5:1620:5 | MyFlag | +| main.rs:1623:28:1625:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1624:13:1624:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1624:13:1624:16 | self | TRef | main.rs:1617:5:1620:5 | MyFlag | +| main.rs:1624:26:1624:29 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1624:26:1624:29 | self | TRef | main.rs:1617:5:1620:5 | MyFlag | +| main.rs:1631:15:1631:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1631:15:1631:19 | SelfParam | TRef | main.rs:1628:5:1628:13 | S | +| main.rs:1631:31:1633:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1631:31:1633:9 | { ... } | TRef | main.rs:1628:5:1628:13 | S | +| main.rs:1632:13:1632:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1632:14:1632:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1632:15:1632:19 | &self | | {EXTERNAL LOCATION} | & | +| main.rs:1632:16:1632:19 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1632:16:1632:19 | self | TRef | main.rs:1628:5:1628:13 | S | +| main.rs:1635:15:1635:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1635:15:1635:25 | SelfParam | TRef | main.rs:1628:5:1628:13 | S | +| main.rs:1635:37:1637:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1635:37:1637:9 | { ... } | TRef | main.rs:1628:5:1628:13 | S | +| main.rs:1636:13:1636:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1636:14:1636:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1636:15:1636:19 | &self | | {EXTERNAL LOCATION} | & | +| main.rs:1636:16:1636:19 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1636:16:1636:19 | self | TRef | main.rs:1628:5:1628:13 | S | +| main.rs:1639:15:1639:15 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1639:15:1639:15 | x | TRef | main.rs:1628:5:1628:13 | S | +| main.rs:1639:34:1641:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1639:34:1641:9 | { ... } | TRef | main.rs:1628:5:1628:13 | S | +| main.rs:1640:13:1640:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1640:13:1640:13 | x | TRef | main.rs:1628:5:1628:13 | S | +| main.rs:1643:15:1643:15 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1643:15:1643:15 | x | TRef | main.rs:1628:5:1628:13 | S | +| main.rs:1643:34:1645:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1643:34:1645:9 | { ... } | TRef | main.rs:1628:5:1628:13 | S | +| main.rs:1644:13:1644:16 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1644:14:1644:16 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1644:15:1644:16 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1644:16:1644:16 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1644:16:1644:16 | x | TRef | main.rs:1628:5:1628:13 | S | +| main.rs:1648:16:1661:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1649:13:1649:13 | x | | main.rs:1628:5:1628:13 | S | +| main.rs:1649:17:1649:20 | S {...} | | main.rs:1628:5:1628:13 | S | +| main.rs:1650:9:1650:9 | x | | main.rs:1628:5:1628:13 | S | +| main.rs:1651:9:1651:9 | x | | main.rs:1628:5:1628:13 | S | +| main.rs:1652:9:1652:17 | ...::f3(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1652:9:1652:17 | ...::f3(...) | TRef | main.rs:1628:5:1628:13 | S | +| main.rs:1652:15:1652:16 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1652:16:1652:16 | x | | main.rs:1628:5:1628:13 | S | +| main.rs:1654:19:1654:24 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1654:20:1654:24 | &true | | {EXTERNAL LOCATION} | & | +| main.rs:1654:21:1654:24 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1659:9:1659:31 | ...::flip(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1659:22:1659:30 | &mut flag | | {EXTERNAL LOCATION} | & | +| main.rs:1660:18:1660:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1660:18:1660:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1660:18:1660:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1660:18:1660:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1675:43:1678:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1675:43:1678:5 | { ... } | E | main.rs:1667:5:1668:14 | S1 | +| main.rs:1675:43:1678:5 | { ... } | T | main.rs:1667:5:1668:14 | S1 | +| main.rs:1682:46:1686:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1682:46:1686:5 | { ... } | E | main.rs:1670:5:1671:14 | S2 | +| main.rs:1682:46:1686:5 | { ... } | T | main.rs:1667:5:1668:14 | S1 | +| main.rs:1690:40:1695:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1690:40:1695:5 | { ... } | E | main.rs:1670:5:1671:14 | S2 | +| main.rs:1690:40:1695:5 | { ... } | T | main.rs:1667:5:1668:14 | S1 | +| main.rs:1699:30:1699:34 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1699:30:1699:34 | input | E | main.rs:1667:5:1668:14 | S1 | +| main.rs:1699:30:1699:34 | input | T | main.rs:1699:20:1699:27 | T | +| main.rs:1699:69:1706:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1699:69:1706:5 | { ... } | E | main.rs:1667:5:1668:14 | S1 | +| main.rs:1699:69:1706:5 | { ... } | T | main.rs:1699:20:1699:27 | T | +| main.rs:1700:21:1700:25 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1700:21:1700:25 | input | E | main.rs:1667:5:1668:14 | S1 | +| main.rs:1700:21:1700:25 | input | T | main.rs:1699:20:1699:27 | T | +| main.rs:1702:22:1702:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1702:22:1702:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1702:22:1702:30 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1702:22:1702:30 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1709:16:1725:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1710:9:1712:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| main.rs:1710:37:1710:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1710:37:1710:52 | try_same_error(...) | E | main.rs:1667:5:1668:14 | S1 | +| main.rs:1710:37:1710:52 | try_same_error(...) | T | main.rs:1667:5:1668:14 | S1 | +| main.rs:1710:54:1712:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1711:22:1711:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1711:22:1711:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1711:22:1711:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1711:22:1711:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1714:9:1716:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| main.rs:1714:37:1714:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1714:37:1714:55 | try_convert_error(...) | E | main.rs:1670:5:1671:14 | S2 | +| main.rs:1714:37:1714:55 | try_convert_error(...) | T | main.rs:1667:5:1668:14 | S1 | +| main.rs:1714:57:1716:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1715:22:1715:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1715:22:1715:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1715:22:1715:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1715:22:1715:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1718:9:1720:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| main.rs:1718:37:1718:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1718:37:1718:49 | try_chained(...) | E | main.rs:1670:5:1671:14 | S2 | +| main.rs:1718:37:1718:49 | try_chained(...) | T | main.rs:1667:5:1668:14 | S1 | +| main.rs:1718:51:1720:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1719:22:1719:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1719:22:1719:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1719:22:1719:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1719:22:1719:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1722:9:1724:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| main.rs:1722:37:1722:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1722:37:1722:63 | try_complex(...) | E | main.rs:1667:5:1668:14 | S1 | +| main.rs:1722:65:1724:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1723:22:1723:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1723:22:1723:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1723:22:1723:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1723:22:1723:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1729:16:1820:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1730:13:1730:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1732:17:1732:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1733:17:1733:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1734:13:1734:13 | c | | {EXTERNAL LOCATION} | char | +| main.rs:1734:17:1734:19 | 'c' | | {EXTERNAL LOCATION} | char | +| main.rs:1735:13:1735:17 | hello | | {EXTERNAL LOCATION} | & | +| main.rs:1735:13:1735:17 | hello | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1735:21:1735:27 | "Hello" | | {EXTERNAL LOCATION} | & | +| main.rs:1735:21:1735:27 | "Hello" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1736:13:1736:13 | f | | {EXTERNAL LOCATION} | f64 | +| main.rs:1736:17:1736:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | +| main.rs:1737:13:1737:13 | t | | {EXTERNAL LOCATION} | bool | +| main.rs:1737:17:1737:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1738:13:1738:13 | f | | {EXTERNAL LOCATION} | bool | +| main.rs:1738:17:1738:21 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1741:26:1741:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1741:26:1741:30 | SelfParam | TRef | main.rs:1740:9:1744:9 | Self [trait MyTrait] | +| main.rs:1747:26:1747:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1747:26:1747:30 | SelfParam | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:1747:26:1747:30 | SelfParam | TRef.TArray | main.rs:1746:14:1746:23 | T | +| main.rs:1747:39:1749:13 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1747:39:1749:13 | { ... } | TRef | main.rs:1746:14:1746:23 | T | +| main.rs:1748:17:1748:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1748:17:1748:20 | self | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:1748:17:1748:20 | self | TRef.TArray | main.rs:1746:14:1746:23 | T | +| main.rs:1751:31:1753:13 | { ... } | | main.rs:1746:14:1746:23 | T | +| main.rs:1756:17:1756:25 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:1757:13:1757:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1757:17:1757:47 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1757:37:1757:46 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1757:38:1757:46 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:1758:13:1758:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1758:17:1758:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1761:26:1761:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1761:26:1761:30 | SelfParam | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1761:26:1761:30 | SelfParam | TRef.TSlice | main.rs:1760:14:1760:23 | T | +| main.rs:1761:39:1763:13 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1761:39:1763:13 | { ... } | TRef | main.rs:1760:14:1760:23 | T | +| main.rs:1762:17:1762:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1762:17:1762:20 | self | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1762:17:1762:20 | self | TRef.TSlice | main.rs:1760:14:1760:23 | T | +| main.rs:1765:31:1767:13 | { ... } | | main.rs:1760:14:1760:23 | T | +| main.rs:1770:13:1770:13 | s | | {EXTERNAL LOCATION} | & | +| main.rs:1770:13:1770:13 | s | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1770:13:1770:13 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | +| main.rs:1770:25:1770:34 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1770:26:1770:34 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:1771:17:1771:17 | s | | {EXTERNAL LOCATION} | & | +| main.rs:1771:17:1771:17 | s | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1771:17:1771:17 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | +| main.rs:1772:13:1772:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1772:17:1772:35 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1772:34:1772:34 | s | | {EXTERNAL LOCATION} | & | +| main.rs:1772:34:1772:34 | s | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1772:34:1772:34 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | +| main.rs:1773:13:1773:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1773:17:1773:34 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1776:26:1776:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1776:26:1776:30 | SelfParam | TRef | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1776:26:1776:30 | SelfParam | TRef.T0 | main.rs:1775:14:1775:23 | T | +| main.rs:1776:26:1776:30 | SelfParam | TRef.T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:1776:39:1778:13 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1776:39:1778:13 | { ... } | TRef | main.rs:1775:14:1775:23 | T | +| main.rs:1777:17:1777:23 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1777:18:1777:21 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1777:18:1777:21 | self | TRef | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1777:18:1777:21 | self | TRef.T0 | main.rs:1775:14:1775:23 | T | +| main.rs:1777:18:1777:21 | self | TRef.T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:1780:31:1782:13 | { ... } | | main.rs:1775:14:1775:23 | T | +| main.rs:1785:13:1785:13 | p | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1785:17:1785:23 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1786:17:1786:17 | p | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1787:13:1787:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1787:17:1787:39 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1787:37:1787:38 | &p | | {EXTERNAL LOCATION} | & | +| main.rs:1787:38:1787:38 | p | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1788:13:1788:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1788:17:1788:39 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1791:26:1791:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1791:26:1791:30 | SelfParam | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1791:26:1791:30 | SelfParam | TRef.TRef | main.rs:1790:14:1790:23 | T | +| main.rs:1791:39:1793:13 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1791:39:1793:13 | { ... } | TRef | main.rs:1790:14:1790:23 | T | +| main.rs:1792:18:1792:21 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1792:18:1792:21 | self | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1792:18:1792:21 | self | TRef.TRef | main.rs:1790:14:1790:23 | T | +| main.rs:1795:31:1797:13 | { ... } | | main.rs:1790:14:1790:23 | T | +| main.rs:1800:13:1800:13 | r | | {EXTERNAL LOCATION} | & | +| main.rs:1800:17:1800:19 | &42 | | {EXTERNAL LOCATION} | & | +| main.rs:1801:17:1801:17 | r | | {EXTERNAL LOCATION} | & | +| main.rs:1802:13:1802:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1802:17:1802:35 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1802:33:1802:34 | &r | | {EXTERNAL LOCATION} | & | +| main.rs:1802:34:1802:34 | r | | {EXTERNAL LOCATION} | & | +| main.rs:1803:13:1803:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1803:17:1803:33 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1806:26:1806:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1806:26:1806:30 | SelfParam | TRef | {EXTERNAL LOCATION} | *mut | +| main.rs:1806:26:1806:30 | SelfParam | TRef.TPtrMut | main.rs:1805:14:1805:23 | T | +| main.rs:1806:39:1808:13 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1806:39:1808:13 | { ... } | TRef | main.rs:1805:14:1805:23 | T | +| main.rs:1807:26:1807:32 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1807:29:1807:32 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1807:29:1807:32 | self | TRef | {EXTERNAL LOCATION} | *mut | +| main.rs:1807:29:1807:32 | self | TRef.TPtrMut | main.rs:1805:14:1805:23 | T | +| main.rs:1810:31:1812:13 | { ... } | | main.rs:1805:14:1805:23 | T | +| main.rs:1816:13:1816:13 | p | | {EXTERNAL LOCATION} | *mut | +| main.rs:1816:13:1816:13 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | +| main.rs:1816:27:1816:32 | &mut v | | {EXTERNAL LOCATION} | & | +| main.rs:1817:26:1817:26 | p | | {EXTERNAL LOCATION} | *mut | +| main.rs:1817:26:1817:26 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | +| main.rs:1818:26:1818:48 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1818:46:1818:47 | &p | | {EXTERNAL LOCATION} | & | +| main.rs:1818:47:1818:47 | p | | {EXTERNAL LOCATION} | *mut | +| main.rs:1818:47:1818:47 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | +| main.rs:1819:13:1819:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1819:17:1819:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1825:16:1837:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1826:13:1826:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:1826:17:1826:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1826:17:1826:29 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1826:25:1826:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1827:13:1827:13 | y | | {EXTERNAL LOCATION} | bool | +| main.rs:1827:17:1827:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1827:17:1827:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1827:25:1827:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1831:17:1833:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1833:16:1835:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1850:30:1852:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1851:13:1851:31 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1858:16:1858:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1858:22:1858:24 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1858:41:1863:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1859:13:1862:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1860:20:1860:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1860:29:1860:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1861:20:1861:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1861:29:1861:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1868:23:1868:31 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1868:23:1868:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1868:34:1868:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1868:45:1871:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1869:13:1869:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1869:13:1869:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1869:23:1869:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1870:13:1870:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1870:13:1870:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1870:23:1870:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1876:16:1876:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1876:22:1876:24 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1876:41:1881:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1877:13:1880:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1878:20:1878:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1878:29:1878:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1879:20:1879:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1879:29:1879:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1886:23:1886:31 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1886:23:1886:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1886:34:1886:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1886:45:1889:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1887:13:1887:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1887:13:1887:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1887:23:1887:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1888:13:1888:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1888:13:1888:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1888:23:1888:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1894:16:1894:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1894:22:1894:24 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1894:41:1899:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1895:13:1898:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1896:20:1896:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1896:29:1896:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1897:20:1897:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1897:29:1897:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1903:23:1903:31 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1903:23:1903:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1903:34:1903:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1903:45:1906:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1904:13:1904:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1904:13:1904:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1904:23:1904:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1905:13:1905:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1905:13:1905:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1905:23:1905:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1911:16:1911:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1911:22:1911:24 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1911:41:1916:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1912:13:1915:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1913:20:1913:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1913:29:1913:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1914:20:1914:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1914:29:1914:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1920:23:1920:31 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1920:23:1920:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1920:34:1920:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1920:45:1923:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1921:13:1921:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1921:13:1921:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1921:23:1921:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1922:13:1922:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1922:13:1922:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1922:23:1922:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1928:16:1928:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1928:22:1928:24 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1928:41:1933:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1929:13:1932:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1930:20:1930:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1930:29:1930:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1931:20:1931:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1931:29:1931:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1937:23:1937:31 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1937:23:1937:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1937:34:1937:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1937:45:1940:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1938:13:1938:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1938:13:1938:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1938:23:1938:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1939:13:1939:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1939:13:1939:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1939:23:1939:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1945:19:1945:22 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1945:25:1945:27 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1945:44:1950:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1946:13:1949:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1947:20:1947:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1947:29:1947:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1948:20:1948:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1948:29:1948:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1954:26:1954:34 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1954:26:1954:34 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1954:37:1954:39 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1954:48:1957:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1955:13:1955:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1955:13:1955:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1955:23:1955:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1956:13:1956:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1956:13:1956:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1956:23:1956:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1962:18:1962:21 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1962:24:1962:26 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1962:43:1967:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1963:13:1966:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1964:20:1964:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1964:29:1964:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1965:20:1965:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1965:29:1965:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1971:25:1971:33 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1971:25:1971:33 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1971:36:1971:38 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1971:47:1974:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1972:13:1972:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1972:13:1972:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1972:23:1972:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1973:13:1973:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1973:13:1973:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1973:23:1973:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1979:19:1979:22 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1979:25:1979:27 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1979:44:1984:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1980:13:1983:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1981:20:1981:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1981:29:1981:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1982:20:1982:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1982:29:1982:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1988:26:1988:34 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1988:26:1988:34 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1988:37:1988:39 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1988:48:1991:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1989:13:1989:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1989:13:1989:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1989:23:1989:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1990:13:1990:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1990:13:1990:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1990:23:1990:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1996:16:1996:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1996:22:1996:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1996:40:2001:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1997:13:2000:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1998:20:1998:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1998:30:1998:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1999:20:1999:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1999:30:1999:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2005:23:2005:31 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2005:23:2005:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2005:34:2005:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2005:44:2008:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2006:13:2006:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2006:13:2006:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2006:24:2006:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2007:13:2007:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2007:13:2007:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2007:24:2007:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2013:16:2013:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2013:22:2013:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2013:40:2018:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2014:13:2017:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2015:20:2015:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2015:30:2015:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2016:20:2016:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2016:30:2016:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2022:23:2022:31 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2022:23:2022:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2022:34:2022:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2022:44:2025:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2023:13:2023:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2023:13:2023:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2023:24:2023:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2024:13:2024:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2024:13:2024:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2024:24:2024:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2030:16:2030:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2030:30:2035:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2031:13:2034:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2032:21:2032:24 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2033:21:2033:24 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2040:16:2040:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2040:30:2045:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2041:13:2044:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2042:21:2042:24 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2043:21:2043:24 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2049:15:2049:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2049:15:2049:19 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2049:22:2049:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2049:22:2049:26 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2049:44:2051:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2050:13:2050:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2050:13:2050:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2050:13:2050:29 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2050:13:2050:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2050:23:2050:27 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2050:23:2050:27 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2050:34:2050:37 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2050:34:2050:37 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2050:34:2050:50 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2050:44:2050:48 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2050:44:2050:48 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2053:15:2053:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2053:15:2053:19 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2053:22:2053:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2053:22:2053:26 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2053:44:2055:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2054:13:2054:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2054:13:2054:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2054:13:2054:29 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2054:13:2054:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2054:23:2054:27 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2054:23:2054:27 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2054:34:2054:37 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2054:34:2054:37 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2054:34:2054:50 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2054:44:2054:48 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2054:44:2054:48 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2059:24:2059:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2059:24:2059:28 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2059:31:2059:35 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2059:31:2059:35 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2059:75:2061:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2059:75:2061:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:2060:14:2060:17 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2060:14:2060:17 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2060:23:2060:26 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2060:23:2060:26 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2060:43:2060:62 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2060:45:2060:49 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2060:45:2060:49 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2060:55:2060:59 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2060:55:2060:59 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2063:15:2063:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2063:15:2063:19 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2063:22:2063:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2063:22:2063:26 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2063:44:2065:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2064:13:2064:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2064:13:2064:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2064:13:2064:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2064:13:2064:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2064:22:2064:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2064:22:2064:26 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2064:33:2064:36 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2064:33:2064:36 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2064:33:2064:48 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2064:42:2064:46 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2064:42:2064:46 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2067:15:2067:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2067:15:2067:19 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2067:22:2067:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2067:22:2067:26 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2067:44:2069:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2068:13:2068:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2068:13:2068:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2068:13:2068:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2068:13:2068:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2068:23:2068:27 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2068:23:2068:27 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2068:34:2068:37 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2068:34:2068:37 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2068:34:2068:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2068:44:2068:48 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2068:44:2068:48 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2071:15:2071:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2071:15:2071:19 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2071:22:2071:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2071:22:2071:26 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2071:44:2073:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2072:13:2072:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2072:13:2072:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2072:13:2072:28 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2072:13:2072:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2072:22:2072:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2072:22:2072:26 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2072:33:2072:36 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2072:33:2072:36 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2072:33:2072:48 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2072:42:2072:46 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2072:42:2072:46 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2075:15:2075:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2075:15:2075:19 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2075:22:2075:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2075:22:2075:26 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2075:44:2077:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2076:13:2076:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2076:13:2076:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2076:13:2076:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2076:13:2076:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2076:23:2076:27 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2076:23:2076:27 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2076:34:2076:37 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2076:34:2076:37 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2076:34:2076:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2076:44:2076:48 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2076:44:2076:48 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2080:26:2080:26 | a | | main.rs:2080:18:2080:23 | T | +| main.rs:2080:32:2080:32 | b | | main.rs:2080:18:2080:23 | T | +| main.rs:2081:9:2081:9 | a | | main.rs:2080:18:2080:23 | T | +| main.rs:2081:13:2081:13 | b | | main.rs:2080:18:2080:23 | T | +| main.rs:2084:16:2215:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2088:23:2088:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2088:31:2088:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2089:23:2089:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2089:31:2089:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2090:23:2090:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2090:30:2090:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2091:23:2091:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2091:31:2091:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2092:23:2092:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2092:30:2092:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2093:23:2093:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2093:32:2093:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2096:23:2096:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2096:31:2096:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2097:23:2097:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2097:31:2097:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2098:23:2098:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2098:31:2098:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2099:23:2099:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2099:31:2099:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2100:23:2100:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2100:31:2100:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2101:39:2101:42 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2101:45:2101:48 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2104:17:2104:30 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2104:34:2104:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2105:9:2105:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2105:27:2105:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2107:17:2107:30 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2107:34:2107:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2108:9:2108:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2108:27:2108:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2110:17:2110:30 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2110:34:2110:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2111:9:2111:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2111:27:2111:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2113:17:2113:30 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2113:34:2113:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2114:9:2114:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2114:27:2114:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2116:17:2116:30 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2116:34:2116:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2117:9:2117:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2117:27:2117:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2120:26:2120:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2120:34:2120:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2121:25:2121:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2121:33:2121:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2122:26:2122:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2122:34:2122:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2123:23:2123:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2123:32:2123:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2124:23:2124:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2124:32:2124:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2127:17:2127:33 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2127:37:2127:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2128:9:2128:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2128:30:2128:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2130:17:2130:32 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2130:36:2130:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2131:9:2131:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2131:29:2131:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2133:17:2133:33 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2133:37:2133:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2134:9:2134:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2134:30:2134:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2136:17:2136:30 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2136:34:2136:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2137:9:2137:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2137:28:2137:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2139:17:2139:30 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2139:34:2139:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2140:9:2140:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2140:28:2140:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2142:24:2142:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2143:24:2143:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2146:13:2146:14 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2146:18:2146:36 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2147:13:2147:14 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2147:18:2147:36 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2150:23:2150:24 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2150:29:2150:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2151:23:2151:24 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2151:29:2151:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2152:23:2152:24 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2152:28:2152:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2153:23:2153:24 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2153:29:2153:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2154:23:2154:24 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2154:28:2154:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2155:23:2155:24 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2155:29:2155:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2158:24:2158:25 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2158:29:2158:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2159:24:2159:25 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2159:29:2159:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2160:24:2160:25 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2160:29:2160:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2161:24:2161:25 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2161:29:2161:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2162:24:2162:25 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2162:29:2162:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2165:17:2165:31 | vec2_add_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2165:35:2165:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2166:9:2166:23 | vec2_add_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2166:28:2166:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2168:17:2168:31 | vec2_sub_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2168:35:2168:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2169:9:2169:23 | vec2_sub_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2169:28:2169:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2171:17:2171:31 | vec2_mul_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2171:35:2171:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2172:9:2172:23 | vec2_mul_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2172:28:2172:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2174:17:2174:31 | vec2_div_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2174:35:2174:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2175:9:2175:23 | vec2_div_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2175:28:2175:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2177:17:2177:31 | vec2_rem_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2177:35:2177:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2178:9:2178:23 | vec2_rem_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2178:28:2178:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2181:27:2181:28 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2181:32:2181:33 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2182:26:2182:27 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2182:31:2182:32 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2183:27:2183:28 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2183:32:2183:33 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2184:24:2184:25 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2184:30:2184:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2185:24:2185:25 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2185:30:2185:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2188:17:2188:34 | vec2_bitand_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2188:38:2188:39 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2189:9:2189:26 | vec2_bitand_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2189:31:2189:32 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2191:17:2191:33 | vec2_bitor_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2191:37:2191:38 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2192:9:2192:25 | vec2_bitor_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2192:30:2192:31 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2194:17:2194:34 | vec2_bitxor_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2194:38:2194:39 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2195:9:2195:26 | vec2_bitxor_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2195:31:2195:32 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2197:17:2197:31 | vec2_shl_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2197:35:2197:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2198:9:2198:23 | vec2_shl_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2198:29:2198:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2200:17:2200:31 | vec2_shr_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2200:35:2200:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2201:9:2201:23 | vec2_shr_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2201:29:2201:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2204:25:2204:26 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2205:25:2205:26 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2209:30:2209:48 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2214:30:2214:48 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2224:18:2224:21 | SelfParam | | main.rs:2221:5:2221:14 | S1 | +| main.rs:2224:24:2224:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2227:25:2229:5 | { ... } | | main.rs:2221:5:2221:14 | S1 | +| main.rs:2232:9:2232:20 | { ... } | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2236:9:2236:16 | { ... } | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2236:9:2236:16 | { ... } | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:2245:13:2245:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | +| main.rs:2245:13:2245:42 | SelfParam | Ptr | {EXTERNAL LOCATION} | & | +| main.rs:2245:13:2245:42 | SelfParam | Ptr.TRef | main.rs:2239:5:2239:14 | S2 | +| main.rs:2246:13:2246:15 | _cx | | {EXTERNAL LOCATION} | & | +| main.rs:2246:13:2246:15 | _cx | TRef | {EXTERNAL LOCATION} | Context | +| main.rs:2247:44:2249:9 | { ... } | | {EXTERNAL LOCATION} | Poll | +| main.rs:2247:44:2249:9 | { ... } | T | main.rs:2221:5:2221:14 | S1 | +| main.rs:2256:22:2264:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2257:9:2257:12 | f1(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2257:9:2257:12 | f1(...) | dyn(Output) | main.rs:2221:5:2221:14 | S1 | +| main.rs:2258:9:2258:12 | f2(...) | | main.rs:2231:16:2231:39 | impl ... | +| main.rs:2259:9:2259:12 | f3(...) | | main.rs:2235:16:2235:39 | impl ... | +| main.rs:2260:9:2260:12 | f4(...) | | main.rs:2252:16:2252:39 | impl ... | +| main.rs:2262:13:2262:13 | b | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2262:17:2262:28 | { ... } | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2263:9:2263:9 | b | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2274:15:2274:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2274:15:2274:19 | SelfParam | TRef | main.rs:2273:5:2275:5 | Self [trait Trait1] | +| main.rs:2274:22:2274:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2278:15:2278:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2278:15:2278:19 | SelfParam | TRef | main.rs:2277:5:2279:5 | Self [trait Trait2] | +| main.rs:2278:22:2278:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2282:15:2282:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2282:15:2282:19 | SelfParam | TRef | main.rs:2268:5:2269:14 | S1 | +| main.rs:2282:22:2282:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2286:15:2286:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2286:15:2286:19 | SelfParam | TRef | main.rs:2268:5:2269:14 | S1 | +| main.rs:2286:22:2286:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2294:18:2294:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2294:18:2294:22 | SelfParam | TRef | main.rs:2293:5:2295:5 | Self [trait MyTrait] | +| main.rs:2298:18:2298:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2298:18:2298:22 | SelfParam | TRef | main.rs:2268:5:2269:14 | S1 | +| main.rs:2298:31:2300:9 | { ... } | | main.rs:2270:5:2270:14 | S2 | +| main.rs:2304:18:2304:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2304:18:2304:22 | SelfParam | TRef | main.rs:2271:5:2271:22 | S3 | +| main.rs:2304:18:2304:22 | SelfParam | TRef.T3 | main.rs:2303:10:2303:17 | T | +| main.rs:2304:30:2307:9 | { ... } | | main.rs:2303:10:2303:17 | T | +| main.rs:2305:25:2305:28 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2305:25:2305:28 | self | TRef | main.rs:2271:5:2271:22 | S3 | +| main.rs:2305:25:2305:28 | self | TRef.T3 | main.rs:2303:10:2303:17 | T | +| main.rs:2314:41:2314:41 | t | | main.rs:2314:26:2314:38 | B | +| main.rs:2314:52:2316:5 | { ... } | | main.rs:2314:23:2314:23 | A | +| main.rs:2315:9:2315:9 | t | | main.rs:2314:26:2314:38 | B | +| main.rs:2318:34:2318:34 | x | | main.rs:2318:24:2318:31 | T | +| main.rs:2318:59:2320:5 | { ... } | | main.rs:2318:43:2318:57 | impl ... | +| main.rs:2318:59:2320:5 | { ... } | impl(T) | main.rs:2318:24:2318:31 | T | +| main.rs:2319:12:2319:12 | x | | main.rs:2318:24:2318:31 | T | +| main.rs:2322:34:2322:34 | x | | main.rs:2322:24:2322:31 | T | +| main.rs:2322:67:2324:5 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2322:67:2324:5 | { ... } | T | main.rs:2322:50:2322:64 | impl ... | +| main.rs:2322:67:2324:5 | { ... } | T.impl(T) | main.rs:2322:24:2322:31 | T | +| main.rs:2323:17:2323:17 | x | | main.rs:2322:24:2322:31 | T | +| main.rs:2326:34:2326:34 | x | | main.rs:2326:24:2326:31 | T | +| main.rs:2326:78:2328:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2326:78:2328:5 | { ... } | T0 | main.rs:2326:44:2326:58 | impl ... | +| main.rs:2326:78:2328:5 | { ... } | T0.impl(T) | main.rs:2326:24:2326:31 | T | +| main.rs:2326:78:2328:5 | { ... } | T1 | main.rs:2326:61:2326:75 | impl ... | +| main.rs:2326:78:2328:5 | { ... } | T1.impl(T) | main.rs:2326:24:2326:31 | T | +| main.rs:2327:9:2327:30 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2327:13:2327:13 | x | | main.rs:2326:24:2326:31 | T | +| main.rs:2327:28:2327:28 | x | | main.rs:2326:24:2326:31 | T | +| main.rs:2330:26:2330:26 | t | | main.rs:2330:29:2330:43 | impl ... | +| main.rs:2330:51:2332:5 | { ... } | | main.rs:2330:23:2330:23 | A | +| main.rs:2331:9:2331:9 | t | | main.rs:2330:29:2330:43 | impl ... | +| main.rs:2334:16:2348:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2335:13:2335:13 | x | | main.rs:2289:16:2289:35 | impl ... + ... | +| main.rs:2335:17:2335:20 | f1(...) | | main.rs:2289:16:2289:35 | impl ... + ... | +| main.rs:2336:9:2336:9 | x | | main.rs:2289:16:2289:35 | impl ... + ... | +| main.rs:2337:9:2337:9 | x | | main.rs:2289:16:2289:35 | impl ... + ... | +| main.rs:2338:13:2338:13 | a | | main.rs:2310:28:2310:43 | impl ... | +| main.rs:2338:17:2338:32 | get_a_my_trait(...) | | main.rs:2310:28:2310:43 | impl ... | +| main.rs:2339:32:2339:32 | a | | main.rs:2310:28:2310:43 | impl ... | +| main.rs:2340:13:2340:13 | a | | main.rs:2310:28:2310:43 | impl ... | +| main.rs:2340:17:2340:32 | get_a_my_trait(...) | | main.rs:2310:28:2310:43 | impl ... | +| main.rs:2341:32:2341:32 | a | | main.rs:2310:28:2310:43 | impl ... | +| main.rs:2343:17:2343:35 | get_a_my_trait2(...) | | main.rs:2318:43:2318:57 | impl ... | +| main.rs:2346:17:2346:35 | get_a_my_trait3(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2346:17:2346:35 | get_a_my_trait3(...) | T | main.rs:2322:50:2322:64 | impl ... | +| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | T0 | main.rs:2326:44:2326:58 | impl ... | +| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | T1 | main.rs:2326:61:2326:75 | impl ... | +| main.rs:2358:16:2358:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2358:16:2358:20 | SelfParam | TRef | main.rs:2354:5:2355:13 | S | +| main.rs:2358:31:2360:9 | { ... } | | main.rs:2354:5:2355:13 | S | +| main.rs:2369:26:2371:9 | { ... } | | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2369:26:2371:9 | { ... } | T | main.rs:2368:10:2368:10 | T | +| main.rs:2370:13:2370:38 | MyVec {...} | | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2370:27:2370:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2370:27:2370:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2373:17:2373:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2373:17:2373:25 | SelfParam | TRef | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2373:17:2373:25 | SelfParam | TRef.T | main.rs:2368:10:2368:10 | T | +| main.rs:2373:28:2373:32 | value | | main.rs:2368:10:2368:10 | T | +| main.rs:2373:38:2375:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2374:13:2374:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2374:13:2374:16 | self | TRef | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2374:13:2374:16 | self | TRef.T | main.rs:2368:10:2368:10 | T | +| main.rs:2374:28:2374:32 | value | | main.rs:2368:10:2368:10 | T | +| main.rs:2382:18:2382:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2382:18:2382:22 | SelfParam | TRef | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2382:18:2382:22 | SelfParam | TRef.T | main.rs:2378:10:2378:10 | T | +| main.rs:2382:25:2382:29 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:2382:56:2384:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2382:56:2384:9 | { ... } | TRef | main.rs:2378:10:2378:10 | T | +| main.rs:2383:13:2383:29 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2383:14:2383:17 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2383:14:2383:17 | self | TRef | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2383:14:2383:17 | self | TRef.T | main.rs:2378:10:2378:10 | T | +| main.rs:2383:24:2383:28 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:2387:22:2387:26 | slice | | {EXTERNAL LOCATION} | & | +| main.rs:2387:22:2387:26 | slice | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:2387:22:2387:26 | slice | TRef.TSlice | main.rs:2354:5:2355:13 | S | +| main.rs:2387:35:2389:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2388:17:2388:21 | slice | | {EXTERNAL LOCATION} | & | +| main.rs:2388:17:2388:21 | slice | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:2388:17:2388:21 | slice | TRef.TSlice | main.rs:2354:5:2355:13 | S | +| main.rs:2391:37:2391:37 | a | | main.rs:2391:20:2391:34 | T | +| main.rs:2391:43:2391:43 | b | | {EXTERNAL LOCATION} | usize | +| main.rs:2395:9:2395:9 | a | | main.rs:2391:20:2391:34 | T | +| main.rs:2395:11:2395:11 | b | | {EXTERNAL LOCATION} | usize | +| main.rs:2398:16:2409:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2399:17:2399:19 | vec | | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2399:23:2399:34 | ...::new(...) | | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2400:9:2400:11 | vec | | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2401:9:2401:11 | vec | | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2403:13:2403:14 | xs | | {EXTERNAL LOCATION} | [;] | +| main.rs:2403:13:2403:14 | xs | TArray | main.rs:2354:5:2355:13 | S | +| main.rs:2403:26:2403:28 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2404:17:2404:18 | xs | | {EXTERNAL LOCATION} | [;] | +| main.rs:2404:17:2404:18 | xs | TArray | main.rs:2354:5:2355:13 | S | +| main.rs:2406:29:2406:31 | vec | | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2408:9:2408:26 | analyze_slice(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2408:23:2408:25 | &xs | | {EXTERNAL LOCATION} | & | +| main.rs:2408:24:2408:25 | xs | | {EXTERNAL LOCATION} | [;] | +| main.rs:2408:24:2408:25 | xs | TArray | main.rs:2354:5:2355:13 | S | +| main.rs:2413:16:2415:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2414:25:2414:35 | "Hello, {}" | | {EXTERNAL LOCATION} | & | +| main.rs:2414:25:2414:35 | "Hello, {}" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2414:25:2414:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2414:38:2414:45 | "World!" | | {EXTERNAL LOCATION} | & | +| main.rs:2414:38:2414:45 | "World!" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2423:19:2423:22 | SelfParam | | main.rs:2419:5:2424:5 | Self [trait MyAdd] | +| main.rs:2423:25:2423:27 | rhs | | main.rs:2419:17:2419:26 | Rhs | +| main.rs:2430:19:2430:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2430:25:2430:29 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2430:45:2432:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2431:13:2431:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2439:19:2439:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2439:25:2439:29 | value | | {EXTERNAL LOCATION} | & | +| main.rs:2439:25:2439:29 | value | TRef | {EXTERNAL LOCATION} | i64 | +| main.rs:2439:46:2441:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2440:14:2440:18 | value | | {EXTERNAL LOCATION} | & | +| main.rs:2440:14:2440:18 | value | TRef | {EXTERNAL LOCATION} | i64 | +| main.rs:2448:19:2448:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2448:25:2448:29 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2448:46:2454:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2449:16:2449:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2463:19:2463:22 | SelfParam | | main.rs:2457:5:2457:19 | S | +| main.rs:2463:19:2463:22 | SelfParam | T | main.rs:2459:10:2459:17 | T | +| main.rs:2463:25:2463:29 | other | | main.rs:2457:5:2457:19 | S | +| main.rs:2463:25:2463:29 | other | T | main.rs:2459:10:2459:17 | T | +| main.rs:2463:54:2465:9 | { ... } | | main.rs:2457:5:2457:19 | S | +| main.rs:2464:16:2464:19 | self | | main.rs:2457:5:2457:19 | S | +| main.rs:2464:16:2464:19 | self | T | main.rs:2459:10:2459:17 | T | +| main.rs:2464:31:2464:35 | other | | main.rs:2457:5:2457:19 | S | +| main.rs:2464:31:2464:35 | other | T | main.rs:2459:10:2459:17 | T | +| main.rs:2472:19:2472:22 | SelfParam | | main.rs:2457:5:2457:19 | S | +| main.rs:2472:19:2472:22 | SelfParam | T | main.rs:2468:10:2468:17 | T | +| main.rs:2472:25:2472:29 | other | | main.rs:2468:10:2468:17 | T | +| main.rs:2472:51:2474:9 | { ... } | | main.rs:2457:5:2457:19 | S | +| main.rs:2473:16:2473:19 | self | | main.rs:2457:5:2457:19 | S | +| main.rs:2473:16:2473:19 | self | T | main.rs:2468:10:2468:17 | T | +| main.rs:2473:31:2473:35 | other | | main.rs:2468:10:2468:17 | T | +| main.rs:2484:19:2484:22 | SelfParam | | main.rs:2457:5:2457:19 | S | +| main.rs:2484:19:2484:22 | SelfParam | T | main.rs:2477:14:2477:14 | T | +| main.rs:2484:25:2484:29 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2484:25:2484:29 | other | TRef | main.rs:2477:14:2477:14 | T | +| main.rs:2484:55:2486:9 | { ... } | | main.rs:2457:5:2457:19 | S | +| main.rs:2485:16:2485:19 | self | | main.rs:2457:5:2457:19 | S | +| main.rs:2485:16:2485:19 | self | T | main.rs:2477:14:2477:14 | T | +| main.rs:2485:31:2485:35 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2485:31:2485:35 | other | TRef | main.rs:2477:14:2477:14 | T | +| main.rs:2491:20:2491:24 | value | | main.rs:2489:18:2489:18 | T | +| main.rs:2496:20:2496:24 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2496:40:2498:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2497:13:2497:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2503:20:2503:24 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2503:41:2509:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2504:16:2504:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2514:21:2514:25 | value | | main.rs:2512:19:2512:19 | T | +| main.rs:2514:31:2514:31 | x | | main.rs:2512:5:2515:5 | Self [trait MyFrom2] | +| main.rs:2519:21:2519:25 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2519:33:2519:33 | _ | | {EXTERNAL LOCATION} | i64 | +| main.rs:2519:48:2521:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2520:13:2520:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2526:21:2526:25 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2526:34:2526:34 | _ | | {EXTERNAL LOCATION} | i64 | +| main.rs:2526:49:2532:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2527:16:2527:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2537:15:2537:15 | x | | main.rs:2535:5:2541:5 | Self [trait MySelfTrait] | +| main.rs:2540:15:2540:15 | x | | main.rs:2535:5:2541:5 | Self [trait MySelfTrait] | +| main.rs:2545:15:2545:15 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2545:31:2547:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2546:13:2546:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2550:15:2550:15 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2550:32:2552:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2551:13:2551:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2557:15:2557:15 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2557:31:2559:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2562:15:2562:15 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2562:32:2564:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2563:13:2563:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2567:16:2592:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2568:13:2568:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2569:9:2569:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2569:18:2569:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2570:9:2570:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2570:18:2570:22 | &5i64 | | {EXTERNAL LOCATION} | & | +| main.rs:2570:19:2570:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2571:9:2571:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2571:18:2571:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2573:11:2573:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2573:26:2573:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2574:11:2574:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2574:24:2574:27 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2575:11:2575:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2575:24:2575:28 | &3i64 | | {EXTERNAL LOCATION} | & | +| main.rs:2575:25:2575:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2577:13:2577:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2577:17:2577:35 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2577:30:2577:34 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2578:13:2578:13 | y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2578:17:2578:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2578:30:2578:33 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2579:13:2579:13 | z | | {EXTERNAL LOCATION} | i64 | +| main.rs:2579:38:2579:42 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2580:9:2580:34 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2580:23:2580:27 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2580:30:2580:33 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2581:9:2581:33 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2581:23:2581:26 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2581:29:2581:32 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2582:9:2582:38 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2582:27:2582:31 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2582:34:2582:37 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2584:9:2584:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2584:17:2584:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2585:9:2585:22 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2585:17:2585:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2586:9:2586:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2586:18:2586:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2587:9:2587:22 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2587:18:2587:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2588:9:2588:30 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2588:25:2588:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2589:25:2589:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2590:9:2590:29 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2590:25:2590:28 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2591:25:2591:28 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2599:26:2601:9 | { ... } | | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2600:13:2600:25 | MyCallable {...} | | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2603:17:2603:21 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2603:17:2603:21 | SelfParam | TRef | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2603:31:2605:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2608:16:2715:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2611:9:2611:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2611:18:2611:26 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2611:28:2611:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2612:9:2612:44 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2612:18:2612:26 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2612:43:2612:44 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2613:9:2613:41 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2613:18:2613:26 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2613:40:2613:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2615:13:2615:17 | vals1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2615:21:2615:31 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2615:22:2615:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2616:9:2616:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2616:18:2616:22 | vals1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2616:24:2616:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2618:13:2618:17 | vals2 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2618:21:2618:29 | [1u16; 3] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2618:22:2618:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2619:9:2619:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2619:18:2619:22 | vals2 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2619:24:2619:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2621:13:2621:17 | vals3 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2621:13:2621:17 | vals3 | TArray | {EXTERNAL LOCATION} | u32 | +| main.rs:2621:31:2621:39 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2622:9:2622:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2622:18:2622:22 | vals3 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2622:18:2622:22 | vals3 | TArray | {EXTERNAL LOCATION} | u32 | +| main.rs:2622:24:2622:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2624:13:2624:17 | vals4 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2624:13:2624:17 | vals4 | TArray | {EXTERNAL LOCATION} | u64 | +| main.rs:2624:31:2624:36 | [1; 3] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2625:9:2625:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2625:18:2625:22 | vals4 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2625:18:2625:22 | vals4 | TArray | {EXTERNAL LOCATION} | u64 | +| main.rs:2625:24:2625:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2627:17:2627:24 | strings1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2627:28:2627:48 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2627:29:2627:33 | "foo" | | {EXTERNAL LOCATION} | & | +| main.rs:2627:29:2627:33 | "foo" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2627:36:2627:40 | "bar" | | {EXTERNAL LOCATION} | & | +| main.rs:2627:36:2627:40 | "bar" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2627:43:2627:47 | "baz" | | {EXTERNAL LOCATION} | & | +| main.rs:2627:43:2627:47 | "baz" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2628:9:2628:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2628:18:2628:26 | &strings1 | | {EXTERNAL LOCATION} | & | +| main.rs:2628:19:2628:26 | strings1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2628:28:2628:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2629:9:2629:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2629:18:2629:30 | &mut strings1 | | {EXTERNAL LOCATION} | & | +| main.rs:2629:23:2629:30 | strings1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2629:32:2629:33 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2630:9:2630:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2630:18:2630:25 | strings1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2630:27:2630:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2632:13:2632:20 | strings2 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2633:9:2637:9 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2634:13:2634:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2634:26:2634:30 | "foo" | | {EXTERNAL LOCATION} | & | +| main.rs:2634:26:2634:30 | "foo" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2635:13:2635:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2635:26:2635:30 | "bar" | | {EXTERNAL LOCATION} | & | +| main.rs:2635:26:2635:30 | "bar" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2636:13:2636:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2636:26:2636:30 | "baz" | | {EXTERNAL LOCATION} | & | +| main.rs:2636:26:2636:30 | "baz" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2638:9:2638:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2638:18:2638:25 | strings2 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2638:27:2638:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2640:13:2640:20 | strings3 | | {EXTERNAL LOCATION} | & | +| main.rs:2641:9:2645:9 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2641:10:2645:9 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2642:13:2642:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2642:26:2642:30 | "foo" | | {EXTERNAL LOCATION} | & | +| main.rs:2642:26:2642:30 | "foo" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2643:13:2643:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2643:26:2643:30 | "bar" | | {EXTERNAL LOCATION} | & | +| main.rs:2643:26:2643:30 | "bar" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2644:13:2644:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2644:26:2644:30 | "baz" | | {EXTERNAL LOCATION} | & | +| main.rs:2644:26:2644:30 | "baz" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2646:9:2646:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2646:18:2646:25 | strings3 | | {EXTERNAL LOCATION} | & | +| main.rs:2646:27:2646:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2648:13:2648:21 | callables | | {EXTERNAL LOCATION} | [;] | +| main.rs:2648:25:2648:81 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2648:26:2648:42 | ...::new(...) | | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2648:45:2648:61 | ...::new(...) | | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2648:64:2648:80 | ...::new(...) | | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2649:9:2653:9 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2650:12:2650:20 | callables | | {EXTERNAL LOCATION} | [;] | +| main.rs:2651:9:2653:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2657:9:2657:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2657:18:2657:22 | 0..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2657:24:2657:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2658:9:2658:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2658:18:2658:26 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2658:19:2658:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2658:19:2658:25 | 0u8..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2658:28:2658:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2659:13:2659:17 | range | | {EXTERNAL LOCATION} | Range | +| main.rs:2659:21:2659:25 | 0..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2660:9:2660:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2660:18:2660:22 | range | | {EXTERNAL LOCATION} | Range | +| main.rs:2660:24:2660:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2661:13:2661:22 | range_full | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2661:26:2661:27 | .. | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2662:9:2662:51 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2662:18:2662:48 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2662:19:2662:36 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2662:20:2662:23 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2662:26:2662:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2662:32:2662:35 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2662:38:2662:47 | range_full | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2662:50:2662:51 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2664:13:2664:18 | range1 | | {EXTERNAL LOCATION} | Range | +| main.rs:2665:9:2668:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | +| main.rs:2666:20:2666:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2667:18:2667:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2669:9:2669:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2669:18:2669:23 | range1 | | {EXTERNAL LOCATION} | Range | +| main.rs:2669:25:2669:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2674:9:2674:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2674:24:2674:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2676:13:2676:18 | vals4a | | {EXTERNAL LOCATION} | Vec | +| main.rs:2676:13:2676:18 | vals4a | A | {EXTERNAL LOCATION} | Global | +| main.rs:2676:13:2676:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2676:32:2676:43 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2676:33:2676:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2677:9:2677:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2677:18:2677:23 | vals4a | | {EXTERNAL LOCATION} | Vec | +| main.rs:2677:18:2677:23 | vals4a | A | {EXTERNAL LOCATION} | Global | +| main.rs:2677:18:2677:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2677:25:2677:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2679:22:2679:33 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2679:23:2679:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2680:9:2680:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2680:25:2680:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2682:13:2682:17 | vals5 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2682:21:2682:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2682:31:2682:42 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2682:32:2682:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2683:9:2683:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2683:18:2683:22 | vals5 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2683:24:2683:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2685:13:2685:17 | vals6 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2685:13:2685:17 | vals6 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2685:13:2685:17 | vals6 | T | {EXTERNAL LOCATION} | & | +| main.rs:2685:13:2685:17 | vals6 | T.TRef | {EXTERNAL LOCATION} | u64 | +| main.rs:2685:32:2685:43 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2685:33:2685:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2686:9:2686:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2686:18:2686:22 | vals6 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2686:18:2686:22 | vals6 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2686:18:2686:22 | vals6 | T | {EXTERNAL LOCATION} | & | +| main.rs:2686:18:2686:22 | vals6 | T.TRef | {EXTERNAL LOCATION} | u64 | +| main.rs:2686:24:2686:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2688:17:2688:21 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2688:17:2688:21 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2688:25:2688:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2688:25:2688:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2689:9:2689:13 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2689:9:2689:13 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2689:20:2689:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2690:9:2690:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2690:18:2690:22 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2690:18:2690:22 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2690:24:2690:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2694:17:2697:9 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2695:13:2696:13 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2695:29:2696:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2699:17:2699:20 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2699:17:2699:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2699:24:2699:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2699:24:2699:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2700:9:2700:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2700:9:2700:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2700:24:2700:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2700:24:2700:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2700:33:2700:37 | "one" | | {EXTERNAL LOCATION} | & | +| main.rs:2700:33:2700:37 | "one" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2701:9:2701:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2701:9:2701:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2701:24:2701:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2701:24:2701:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2701:33:2701:37 | "two" | | {EXTERNAL LOCATION} | & | +| main.rs:2701:33:2701:37 | "two" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2702:9:2702:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2702:20:2702:23 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2702:20:2702:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2702:32:2702:33 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2703:9:2703:37 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2703:22:2703:25 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2703:22:2703:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2703:36:2703:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2704:9:2704:42 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2704:13:2704:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2704:29:2704:32 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2704:29:2704:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2704:41:2704:42 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2705:9:2705:36 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2705:13:2705:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2705:29:2705:33 | &map1 | | {EXTERNAL LOCATION} | & | +| main.rs:2705:30:2705:33 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2705:30:2705:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2705:35:2705:36 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2709:17:2709:17 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2711:17:2714:9 | while ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2711:23:2711:23 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2712:9:2714:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2713:13:2713:13 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2725:40:2727:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2725:40:2727:9 | { ... } | T | main.rs:2719:5:2719:20 | S1 | +| main.rs:2725:40:2727:9 | { ... } | T.T | main.rs:2724:10:2724:19 | T | +| main.rs:2729:30:2731:9 | { ... } | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2729:30:2731:9 | { ... } | T | main.rs:2724:10:2724:19 | T | +| main.rs:2733:19:2733:22 | SelfParam | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2733:19:2733:22 | SelfParam | T | main.rs:2724:10:2724:19 | T | +| main.rs:2733:33:2735:9 | { ... } | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2733:33:2735:9 | { ... } | T | main.rs:2724:10:2724:19 | T | +| main.rs:2734:13:2734:16 | self | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2734:13:2734:16 | self | T | main.rs:2724:10:2724:19 | T | +| main.rs:2746:15:2746:15 | x | | main.rs:2746:12:2746:12 | T | +| main.rs:2746:26:2748:5 | { ... } | | main.rs:2746:12:2746:12 | T | +| main.rs:2747:9:2747:9 | x | | main.rs:2746:12:2746:12 | T | +| main.rs:2750:16:2772:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2751:13:2751:14 | x1 | | {EXTERNAL LOCATION} | Option | +| main.rs:2751:13:2751:14 | x1 | T | main.rs:2719:5:2719:20 | S1 | +| main.rs:2751:13:2751:14 | x1 | T.T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2751:34:2751:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2751:34:2751:48 | ...::assoc_fun(...) | T | main.rs:2719:5:2719:20 | S1 | +| main.rs:2752:13:2752:14 | x2 | | {EXTERNAL LOCATION} | Option | +| main.rs:2752:13:2752:14 | x2 | T | main.rs:2719:5:2719:20 | S1 | +| main.rs:2752:13:2752:14 | x2 | T.T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2752:18:2752:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2752:18:2752:38 | ...::assoc_fun(...) | T | main.rs:2719:5:2719:20 | S1 | +| main.rs:2752:18:2752:38 | ...::assoc_fun(...) | T.T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2753:13:2753:14 | x3 | | {EXTERNAL LOCATION} | Option | +| main.rs:2753:13:2753:14 | x3 | T | main.rs:2719:5:2719:20 | S1 | +| main.rs:2753:13:2753:14 | x3 | T.T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2753:18:2753:32 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2753:18:2753:32 | ...::assoc_fun(...) | T | main.rs:2719:5:2719:20 | S1 | +| main.rs:2753:18:2753:32 | ...::assoc_fun(...) | T.T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2754:13:2754:14 | x4 | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2754:13:2754:14 | x4 | T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2754:18:2754:48 | ...::method(...) | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2754:18:2754:48 | ...::method(...) | T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2754:35:2754:47 | ...::default(...) | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2755:13:2755:14 | x5 | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2755:13:2755:14 | x5 | T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2755:18:2755:42 | ...::method(...) | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2755:18:2755:42 | ...::method(...) | T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2755:29:2755:41 | ...::default(...) | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2759:21:2759:33 | ...::default(...) | | main.rs:2721:5:2722:14 | S2 | +| main.rs:2760:13:2760:15 | x10 | | main.rs:2742:5:2744:5 | S5 | +| main.rs:2760:13:2760:15 | x10 | T5 | main.rs:2721:5:2722:14 | S2 | +| main.rs:2760:19:2763:9 | S5::<...> {...} | | main.rs:2742:5:2744:5 | S5 | +| main.rs:2760:19:2763:9 | S5::<...> {...} | T5 | main.rs:2721:5:2722:14 | S2 | +| main.rs:2764:13:2764:15 | x11 | | main.rs:2742:5:2744:5 | S5 | +| main.rs:2764:19:2764:34 | S5 {...} | | main.rs:2742:5:2744:5 | S5 | +| main.rs:2765:13:2765:15 | x12 | | main.rs:2742:5:2744:5 | S5 | +| main.rs:2765:19:2765:33 | S5 {...} | | main.rs:2742:5:2744:5 | S5 | +| main.rs:2766:13:2766:15 | x13 | | main.rs:2742:5:2744:5 | S5 | +| main.rs:2766:19:2769:9 | S5 {...} | | main.rs:2742:5:2744:5 | S5 | +| main.rs:2768:20:2768:32 | ...::default(...) | | main.rs:2721:5:2722:14 | S2 | +| main.rs:2770:13:2770:15 | x14 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2770:19:2770:48 | foo::<...>(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2771:13:2771:15 | x15 | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2771:13:2771:15 | x15 | T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2771:19:2771:37 | ...::default(...) | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2771:19:2771:37 | ...::default(...) | T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2780:35:2782:9 | { ... } | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2780:35:2782:9 | { ... } | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2780:35:2782:9 | { ... } | T1 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2781:13:2781:26 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2781:14:2781:18 | S1 {...} | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2781:21:2781:25 | S1 {...} | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2783:16:2783:19 | SelfParam | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2783:22:2783:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2786:16:2820:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2787:13:2787:13 | a | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2787:13:2787:13 | a | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2787:13:2787:13 | a | T1 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2787:17:2787:30 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2787:17:2787:30 | ...::get_pair(...) | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2787:17:2787:30 | ...::get_pair(...) | T1 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2788:17:2788:17 | b | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2788:17:2788:17 | b | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2788:17:2788:17 | b | T1 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2788:21:2788:34 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2788:21:2788:34 | ...::get_pair(...) | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2788:21:2788:34 | ...::get_pair(...) | T1 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2789:13:2789:18 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2789:22:2789:35 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2789:22:2789:35 | ...::get_pair(...) | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2789:22:2789:35 | ...::get_pair(...) | T1 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2790:13:2790:22 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2790:26:2790:39 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2790:26:2790:39 | ...::get_pair(...) | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2790:26:2790:39 | ...::get_pair(...) | T1 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2791:13:2791:26 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2791:30:2791:43 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2791:30:2791:43 | ...::get_pair(...) | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2791:30:2791:43 | ...::get_pair(...) | T1 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2793:9:2793:9 | a | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2793:9:2793:9 | a | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2793:9:2793:9 | a | T1 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2794:9:2794:9 | b | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2794:9:2794:9 | b | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2794:9:2794:9 | b | T1 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2807:13:2807:16 | pair | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2807:20:2807:25 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2808:13:2808:13 | i | | {EXTERNAL LOCATION} | i64 | +| main.rs:2808:22:2808:25 | pair | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2809:13:2809:13 | j | | {EXTERNAL LOCATION} | bool | +| main.rs:2809:23:2809:26 | pair | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2811:20:2811:25 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2813:13:2813:18 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2813:30:2813:41 | "unexpected" | | {EXTERNAL LOCATION} | & | +| main.rs:2813:30:2813:41 | "unexpected" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2813:30:2813:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2813:30:2813:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2814:25:2814:34 | "expected" | | {EXTERNAL LOCATION} | & | +| main.rs:2814:25:2814:34 | "expected" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2814:25:2814:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2814:25:2814:34 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2818:13:2818:13 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2818:17:2818:31 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2818:18:2818:31 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2818:18:2818:31 | ...::get_pair(...) | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2818:18:2818:31 | ...::get_pair(...) | T1 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2819:9:2819:9 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2825:27:2847:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2826:13:2826:23 | boxed_value | | {EXTERNAL LOCATION} | Box | +| main.rs:2826:13:2826:23 | boxed_value | A | {EXTERNAL LOCATION} | Global | +| main.rs:2826:27:2826:42 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2826:27:2826:42 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2826:36:2826:41 | 100i32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2829:15:2829:25 | boxed_value | | {EXTERNAL LOCATION} | Box | +| main.rs:2829:15:2829:25 | boxed_value | A | {EXTERNAL LOCATION} | Global | +| main.rs:2830:24:2832:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2831:26:2831:36 | "Boxed 100\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:2831:26:2831:36 | "Boxed 100\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2831:26:2831:36 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2831:26:2831:36 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2833:22:2836:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2835:26:2835:42 | "Boxed value: {}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:2835:26:2835:42 | "Boxed value: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2835:26:2835:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2835:26:2835:51 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2840:13:2840:22 | nested_box | | {EXTERNAL LOCATION} | Box | +| main.rs:2840:13:2840:22 | nested_box | A | {EXTERNAL LOCATION} | Global | +| main.rs:2840:26:2840:50 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2840:26:2840:50 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2840:35:2840:49 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2840:35:2840:49 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2840:44:2840:48 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2841:15:2841:24 | nested_box | | {EXTERNAL LOCATION} | Box | +| main.rs:2841:15:2841:24 | nested_box | A | {EXTERNAL LOCATION} | Global | +| main.rs:2842:26:2845:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2844:26:2844:43 | "Nested boxed: {}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:2844:26:2844:43 | "Nested boxed: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2844:26:2844:59 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2844:26:2844:59 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2856:36:2858:9 | { ... } | | main.rs:2853:5:2853:22 | Path | +| main.rs:2857:13:2857:19 | Path {...} | | main.rs:2853:5:2853:22 | Path | +| main.rs:2860:29:2860:33 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2860:29:2860:33 | SelfParam | TRef | main.rs:2853:5:2853:22 | Path | +| main.rs:2860:59:2862:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:2860:59:2862:9 | { ... } | E | {EXTERNAL LOCATION} | () | +| main.rs:2860:59:2862:9 | { ... } | T | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2861:16:2861:29 | ...::new(...) | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2868:39:2870:9 | { ... } | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2869:13:2869:22 | PathBuf {...} | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2878:18:2878:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2878:18:2878:22 | SelfParam | TRef | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2878:34:2882:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2878:34:2882:9 | { ... } | TRef | main.rs:2853:5:2853:22 | Path | +| main.rs:2880:33:2880:43 | ...::new(...) | | main.rs:2853:5:2853:22 | Path | +| main.rs:2881:13:2881:17 | &path | | {EXTERNAL LOCATION} | & | +| main.rs:2885:16:2893:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2886:13:2886:17 | path1 | | main.rs:2853:5:2853:22 | Path | +| main.rs:2886:21:2886:31 | ...::new(...) | | main.rs:2853:5:2853:22 | Path | +| main.rs:2887:21:2887:25 | path1 | | main.rs:2853:5:2853:22 | Path | +| main.rs:2890:13:2890:20 | pathbuf1 | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2890:24:2890:37 | ...::new(...) | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2891:24:2891:31 | pathbuf1 | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2898:14:2898:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2898:14:2898:18 | SelfParam | TRef | main.rs:2897:5:2899:5 | Self [trait MyTrait] | +| main.rs:2905:14:2905:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2905:14:2905:18 | SelfParam | TRef | main.rs:2901:5:2902:19 | S | +| main.rs:2905:14:2905:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2905:28:2907:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2906:13:2906:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2906:13:2906:16 | self | TRef | main.rs:2901:5:2902:19 | S | +| main.rs:2906:13:2906:16 | self | TRef.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2911:14:2911:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2911:14:2911:18 | SelfParam | TRef | main.rs:2901:5:2902:19 | S | +| main.rs:2911:14:2911:18 | SelfParam | TRef.T | main.rs:2901:5:2902:19 | S | +| main.rs:2911:14:2911:18 | SelfParam | TRef.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2911:28:2913:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2912:13:2912:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2912:13:2912:16 | self | TRef | main.rs:2901:5:2902:19 | S | +| main.rs:2912:13:2912:16 | self | TRef.T | main.rs:2901:5:2902:19 | S | +| main.rs:2912:13:2912:16 | self | TRef.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2917:15:2917:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2917:15:2917:19 | SelfParam | TRef | main.rs:2901:5:2902:19 | S | +| main.rs:2917:15:2917:19 | SelfParam | TRef.T | main.rs:2916:10:2916:16 | T | +| main.rs:2917:33:2919:9 | { ... } | | main.rs:2901:5:2902:19 | S | +| main.rs:2917:33:2919:9 | { ... } | T | main.rs:2901:5:2902:19 | S | +| main.rs:2917:33:2919:9 | { ... } | T.T | main.rs:2916:10:2916:16 | T | +| main.rs:2918:17:2918:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2918:17:2918:20 | self | TRef | main.rs:2901:5:2902:19 | S | +| main.rs:2918:17:2918:20 | self | TRef.T | main.rs:2916:10:2916:16 | T | +| main.rs:2922:14:2922:14 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2922:48:2939:5 | { ... } | | {EXTERNAL LOCATION} | Box | +| main.rs:2922:48:2939:5 | { ... } | A | {EXTERNAL LOCATION} | Global | +| main.rs:2922:48:2939:5 | { ... } | T | main.rs:2897:5:2899:5 | dyn MyTrait | +| main.rs:2922:48:2939:5 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2923:20:2923:20 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2933:12:2933:12 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2935:13:2935:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2935:13:2935:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2937:13:2937:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2937:13:2937:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2943:22:2947:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2944:18:2944:18 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2944:33:2946:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2945:13:2945:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2952:11:2952:14 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:2952:30:2960:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2955:13:2957:13 | if cond {...} | | {EXTERNAL LOCATION} | () | +| main.rs:2955:16:2955:19 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:2955:21:2957:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2963:20:2970:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2968:18:2968:26 | "b: {:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:2968:18:2968:26 | "b: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2968:18:2968:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2968:18:2968:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2972:20:2974:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2977:11:2977:14 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:2977:30:2985:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2978:13:2978:13 | a | | {EXTERNAL LOCATION} | () | +| main.rs:2978:17:2982:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2979:13:2981:13 | if cond {...} | | {EXTERNAL LOCATION} | () | +| main.rs:2979:16:2979:19 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:2979:21:2981:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2983:18:2983:26 | "a: {:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:2983:18:2983:26 | "a: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2983:18:2983:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2983:18:2983:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2983:29:2983:29 | a | | {EXTERNAL LOCATION} | () | +| main.rs:2989:16:3036:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2991:13:2991:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2991:13:2991:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2995:26:2995:28 | opt | | {EXTERNAL LOCATION} | Option | +| main.rs:2995:26:2995:28 | opt | T | main.rs:2995:23:2995:23 | T | +| main.rs:2995:42:2995:42 | x | | main.rs:2995:23:2995:23 | T | +| main.rs:2995:48:2995:49 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2998:9:2998:24 | pin_option(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3005:13:3005:13 | x | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3005:17:3005:39 | ...::A {...} | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3006:13:3006:13 | x | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3006:13:3006:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:3006:13:3006:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:3006:40:3006:40 | x | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3007:13:3007:13 | x | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3007:13:3007:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:3007:17:3007:52 | ...::A {...} | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3007:17:3007:52 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:3009:13:3009:13 | x | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3009:13:3009:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:3009:17:3011:9 | ...::B::<...> {...} | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3009:17:3011:9 | ...::B::<...> {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:3010:20:3010:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | +| main.rs:3013:29:3013:29 | e | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3013:29:3013:29 | e | T1 | main.rs:3013:26:3013:26 | T | +| main.rs:3013:29:3013:29 | e | T2 | {EXTERNAL LOCATION} | String | +| main.rs:3013:53:3013:53 | x | | main.rs:3013:26:3013:26 | T | +| main.rs:3013:59:3013:60 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:3016:13:3016:13 | x | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3016:17:3018:9 | ...::B {...} | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3017:20:3017:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | +| main.rs:3019:9:3019:27 | pin_my_either(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3019:23:3019:23 | x | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3022:13:3022:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:3022:13:3022:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:3022:13:3022:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:3026:29:3026:31 | res | | {EXTERNAL LOCATION} | Result | +| main.rs:3026:29:3026:31 | res | E | main.rs:3026:26:3026:26 | E | +| main.rs:3026:29:3026:31 | res | T | main.rs:3026:23:3026:23 | T | +| main.rs:3026:48:3026:48 | x | | main.rs:3026:26:3026:26 | E | +| main.rs:3026:54:3026:55 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:3029:9:3029:28 | pin_result(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3029:23:3029:27 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:3031:17:3031:17 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:3031:17:3031:17 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:3031:21:3031:30 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:3031:21:3031:30 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:3032:9:3032:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:3032:9:3032:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:3035:9:3035:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:3035:9:3035:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:3041:14:3041:17 | SelfParam | | main.rs:3040:5:3042:5 | Self [trait MyTrait] | +| main.rs:3046:14:3046:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | +| main.rs:3046:28:3048:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:3047:13:3047:16 | self | | {EXTERNAL LOCATION} | i32 | +| main.rs:3053:14:3053:17 | SelfParam | | {EXTERNAL LOCATION} | usize | +| main.rs:3053:28:3055:9 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:3054:13:3054:16 | self | | {EXTERNAL LOCATION} | usize | +| main.rs:3060:14:3060:17 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:3060:14:3060:17 | SelfParam | TRef | main.rs:3058:10:3058:10 | T | +| main.rs:3060:28:3062:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:3060:28:3062:9 | { ... } | TRef | main.rs:3058:10:3058:10 | T | +| main.rs:3061:13:3061:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:3061:13:3061:16 | self | TRef | main.rs:3058:10:3058:10 | T | +| main.rs:3065:25:3069:5 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:3077:11:3112:1 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:3078:5:3078:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3079:5:3079:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:3080:5:3080:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:3080:20:3080:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:3080:41:3080:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:3081:5:3081:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3082:5:3082:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3083:5:3083:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3084:5:3084:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3085:5:3085:33 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3086:5:3086:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3087:5:3087:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3088:5:3088:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3089:5:3089:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3090:5:3090:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3091:5:3091:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3092:5:3092:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3093:5:3093:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3094:5:3094:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3095:5:3095:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3096:5:3096:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3097:5:3097:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:3097:5:3097:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:3098:5:3098:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3099:5:3099:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3100:5:3100:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3101:5:3101:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3102:5:3102:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3103:5:3103:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3104:5:3104:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3105:5:3105:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3106:5:3106:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3107:5:3107:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3108:5:3108:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3109:5:3109:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3110:5:3110:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:3110:5:3110:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:3110:5:3110:20 | ...::f(...) | T | main.rs:2897:5:2899:5 | dyn MyTrait | +| main.rs:3110:5:3110:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:3110:16:3110:19 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:3111:5:3111:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option | +| pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:15:5:18:5 | if ... {...} | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:15:31:18:5 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:17:18:17:25 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:17:18:17:25 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:17:18:17:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:17:18:17:25 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:20:23:23:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:22:22:22:29 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:22:22:22:29 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:22:22:22:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:22:22:22:29 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:24:17:24:18 | TupleExpr | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:28:14:28:21 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:28:14:28:21 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:28:14:28:21 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:28:14:28:21 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:30:14:30:21 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:30:14:30:21 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:30:14:30:21 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:30:14:30:21 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:32:9:32:14 | value2 | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:32:18:32:26 | &... | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:33:5:36:5 | if ... {...} | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:33:12:33:22 | &... | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:33:26:33:31 | value2 | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:33:33:36:5 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:35:18:35:25 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:35:18:35:25 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:35:18:35:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:35:18:35:25 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:39:5:42:5 | if ... {...} | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:39:16:39:19 | mesg | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:39:30:42:5 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:40:13:40:16 | mesg | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:40:20:40:23 | mesg | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:41:18:41:25 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:41:18:41:25 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:41:18:41:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:41:18:41:25 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:41:20:41:23 | mesg | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:45:5:48:5 | if ... {...} | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:45:21:45:24 | mesg | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:45:36:48:5 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:46:13:46:16 | mesg | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:46:20:46:23 | mesg | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:47:18:47:25 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:47:18:47:25 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:47:18:47:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:47:18:47:25 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:47:20:47:23 | mesg | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:50:13:50:18 | value5 | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:51:9:51:9 | x | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:51:13:51:18 | value5 | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:53:9:53:24 | my_record_struct | | pattern_matching.rs:1:1:4:1 | MyRecordStruct | +| pattern_matching.rs:53:28:56:5 | MyRecordStruct {...} | | pattern_matching.rs:1:1:4:1 | MyRecordStruct | +| pattern_matching.rs:55:17:55:21 | false | | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:57:5:61:5 | if ... {...} | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:57:12:57:44 | MyRecordStruct {...} | | pattern_matching.rs:1:1:4:1 | MyRecordStruct | +| pattern_matching.rs:57:48:57:63 | my_record_struct | | pattern_matching.rs:1:1:4:1 | MyRecordStruct | +| pattern_matching.rs:57:65:61:5 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:60:9:60:10 | TupleExpr | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:63:45:63:49 | false | | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:64:5:68:5 | if ... {...} | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:64:60:68:5 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:67:9:67:10 | TupleExpr | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:70:9:70:16 | my_enum1 | | pattern_matching.rs:8:1:11:1 | MyEnum | +| pattern_matching.rs:70:20:73:5 | ...::Variant1 {...} | | pattern_matching.rs:8:1:11:1 | MyEnum | +| pattern_matching.rs:72:17:72:21 | false | | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:74:11:74:18 | my_enum1 | | pattern_matching.rs:8:1:11:1 | MyEnum | +| pattern_matching.rs:75:9:75:43 | ...::Variant1 {...} | | pattern_matching.rs:8:1:11:1 | MyEnum | +| pattern_matching.rs:75:48:79:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:78:13:78:14 | TupleExpr | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:80:45:84:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:83:13:83:14 | TupleExpr | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:88:9:88:13 | false | | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:89:9:92:9 | MyRecordStruct {...} | | pattern_matching.rs:1:1:4:1 | MyRecordStruct | +| pattern_matching.rs:91:21:91:28 | "string" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:91:21:91:28 | "string" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:98:13:101:13 | MyRecordStruct {...} | | pattern_matching.rs:1:1:4:1 | MyRecordStruct | +| pattern_matching.rs:102:14:107:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:106:13:106:14 | TupleExpr | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:108:14:108:15 | TupleExpr | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:113:13:116:5 | if ... {...} | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:114:5:116:5 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:120:13:123:5 | if ... {...} | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:121:5:123:5 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:127:13:130:5 | if ... {...} | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:128:5:130:5 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:168:27:217:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:169:9:169:13 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:169:17:169:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:171:11:171:15 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:173:15:176:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:174:17:174:29 | literal_match | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:174:33:174:37 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:175:22:175:42 | "Literal pattern: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:175:22:175:42 | "Literal pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:175:22:175:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:175:22:175:57 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:175:45:175:57 | literal_match | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:177:15:180:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:178:17:178:32 | negative_literal | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:178:36:178:40 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:179:22:179:43 | "Negative literal: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:179:22:179:43 | "Negative literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:179:22:179:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:179:22:179:61 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:179:46:179:61 | negative_literal | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:181:14:184:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:182:17:182:28 | zero_literal | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:182:32:182:36 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:183:22:183:39 | "Zero literal: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:183:22:183:39 | "Zero literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:183:22:183:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:183:22:183:53 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:183:42:183:53 | zero_literal | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:185:14:185:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:188:9:188:17 | float_val | | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:188:21:188:27 | 3.14f64 | | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:189:11:189:19 | float_val | | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:190:17:193:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:191:17:191:24 | pi_match | | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:191:28:191:36 | float_val | | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:192:22:192:37 | "Pi matched: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:192:22:192:37 | "Pi matched: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:192:22:192:47 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:192:22:192:47 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:192:40:192:47 | pi_match | | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:194:14:194:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:197:9:197:18 | string_val | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:197:9:197:18 | string_val | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:197:22:197:28 | "hello" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:197:22:197:28 | "hello" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:198:11:198:20 | string_val | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:198:11:198:20 | string_val | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:199:9:199:15 | "hello" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:199:9:199:15 | "hello" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:199:20:202:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:200:17:200:27 | hello_match | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:200:17:200:27 | hello_match | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:200:31:200:40 | string_val | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:200:31:200:40 | string_val | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:201:22:201:41 | "String literal: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:201:22:201:41 | "String literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:201:22:201:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:201:22:201:54 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:201:44:201:54 | hello_match | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:201:44:201:54 | hello_match | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:203:14:203:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:206:9:206:16 | bool_val | | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:206:20:206:23 | true | | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:207:11:207:18 | bool_val | | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:208:9:208:12 | true | | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:208:17:211:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:209:17:209:26 | true_match | | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:209:30:209:37 | bool_val | | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:210:22:210:39 | "True literal: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:210:22:210:39 | "True literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:210:22:210:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:210:22:210:51 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:210:42:210:51 | true_match | | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:212:9:212:13 | false | | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:212:18:215:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:213:17:213:27 | false_match | | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:213:31:213:38 | bool_val | | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:214:22:214:40 | "False literal: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:214:22:214:40 | "False literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:214:22:214:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:214:22:214:53 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:214:43:214:53 | false_match | | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:219:30:277:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:220:9:220:13 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:220:17:220:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:223:11:223:15 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:224:14:227:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:226:22:226:45 | "Identifier pattern: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:226:22:226:45 | "Identifier pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:226:22:226:58 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:226:22:226:58 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:231:11:231:16 | &value | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:231:12:231:16 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:232:13:232:13 | x | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:232:18:235:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:233:17:233:25 | ref_bound | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:233:29:233:29 | x | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:234:22:234:49 | "Reference identifier: {:?}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:234:22:234:49 | "Reference identifier: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:234:22:234:60 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:234:22:234:60 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:234:52:234:60 | ref_bound | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:239:13:239:25 | mutable_value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:239:29:239:33 | 10i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:240:11:240:23 | mutable_value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:241:18:245:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:244:22:244:45 | "Mutable identifier: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:244:22:244:45 | "Mutable identifier: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:244:22:244:56 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:244:22:244:56 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:249:39:249:43 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:251:35:254:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:253:22:253:49 | "@ pattern with literal: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:253:22:253:49 | "@ pattern with literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:253:22:253:59 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:253:22:253:59 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:255:40:258:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:257:22:257:47 | "@ pattern with range: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:257:22:257:47 | "@ pattern with range: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:257:22:257:63 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:257:22:257:63 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:259:30:262:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:261:22:261:37 | "Some value: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:261:22:261:37 | "Some value: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:261:22:261:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:261:22:261:49 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:263:27:265:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:264:22:264:33 | "None value\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:264:22:264:33 | "None value\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:264:22:264:33 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:264:22:264:33 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:269:13:269:23 | ref_mut_val | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:269:27:269:30 | 5i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:270:11:270:26 | &mut ref_mut_val | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:270:16:270:26 | ref_mut_val | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:271:17:271:17 | x | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:271:22:275:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:272:17:272:29 | ref_mut_bound | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:272:33:272:33 | x | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:273:15:273:27 | ref_mut_bound | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:274:22:274:38 | "Ref mut pattern\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:274:22:274:38 | "Ref mut pattern\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:274:22:274:38 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:274:22:274:38 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:279:28:290:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:280:9:280:13 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:280:17:280:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:282:11:282:15 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:283:24:283:39 | "Specific match\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:283:24:283:39 | "Specific match\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:283:24:283:39 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:283:24:283:39 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:285:14:288:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:286:17:286:32 | wildcard_context | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:286:36:286:40 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:287:22:287:47 | "Wildcard pattern for: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:287:22:287:47 | "Wildcard pattern for: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:287:22:287:65 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:287:22:287:65 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:287:50:287:65 | wildcard_context | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:292:25:324:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:293:9:293:13 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:293:17:293:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:295:11:295:15 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:297:19:300:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:298:17:298:31 | range_inclusive | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:298:35:298:39 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:299:22:299:42 | "Range inclusive: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:299:22:299:42 | "Range inclusive: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:299:22:299:59 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:299:22:299:59 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:299:45:299:59 | range_inclusive | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:301:17:304:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:302:17:302:26 | range_from | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:302:30:302:34 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:303:22:303:40 | "Range from 11: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:303:22:303:40 | "Range from 11: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:303:22:303:52 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:303:22:303:52 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:303:43:303:52 | range_from | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:305:17:308:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:306:17:306:34 | range_to_inclusive | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:306:38:306:42 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:307:22:307:47 | "Range to 0 inclusive: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:307:22:307:47 | "Range to 0 inclusive: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:307:22:307:67 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:307:22:307:67 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:307:50:307:67 | range_to_inclusive | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:309:14:309:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:312:9:312:16 | char_val | | {EXTERNAL LOCATION} | char | +| pattern_matching.rs:312:20:312:22 | 'c' | | {EXTERNAL LOCATION} | char | +| pattern_matching.rs:313:11:313:18 | char_val | | {EXTERNAL LOCATION} | char | +| pattern_matching.rs:314:9:314:11 | 'a' | | {EXTERNAL LOCATION} | char | +| pattern_matching.rs:314:15:314:17 | 'z' | | {EXTERNAL LOCATION} | char | +| pattern_matching.rs:314:22:317:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:315:17:315:30 | lowercase_char | | {EXTERNAL LOCATION} | char | +| pattern_matching.rs:315:34:315:41 | char_val | | {EXTERNAL LOCATION} | char | +| pattern_matching.rs:316:22:316:41 | "Lowercase char: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:316:22:316:41 | "Lowercase char: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:316:22:316:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:316:22:316:57 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:316:44:316:57 | lowercase_char | | {EXTERNAL LOCATION} | char | +| pattern_matching.rs:318:9:318:11 | 'A' | | {EXTERNAL LOCATION} | char | +| pattern_matching.rs:318:15:318:17 | 'Z' | | {EXTERNAL LOCATION} | char | +| pattern_matching.rs:318:22:321:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:319:17:319:30 | uppercase_char | | {EXTERNAL LOCATION} | char | +| pattern_matching.rs:319:34:319:41 | char_val | | {EXTERNAL LOCATION} | char | +| pattern_matching.rs:320:22:320:41 | "Uppercase char: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:320:22:320:41 | "Uppercase char: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:320:22:320:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:320:22:320:57 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:320:44:320:57 | uppercase_char | | {EXTERNAL LOCATION} | char | +| pattern_matching.rs:322:14:322:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:326:29:355:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:327:9:327:13 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:327:17:327:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:328:13:328:25 | mutable_value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:328:29:328:33 | 10i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:331:11:331:16 | &value | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:331:12:331:16 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:332:9:332:11 | &42 | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:332:16:335:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:333:17:333:27 | deref_match | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:333:31:333:35 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:334:22:334:45 | "Dereferenced match: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:334:22:334:45 | "Dereferenced match: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:334:22:334:58 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:334:22:334:58 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:334:48:334:58 | deref_match | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:336:9:336:10 | &... | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:336:15:339:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:338:22:338:47 | "Dereferenced binding: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:338:22:338:47 | "Dereferenced binding: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:338:22:338:60 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:338:22:338:60 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:342:11:342:28 | &mut mutable_value | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:342:16:342:28 | mutable_value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:343:9:343:18 | &mut ... | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:343:18:343:18 | x | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:343:23:346:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:344:17:344:29 | mut_ref_bound | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:344:33:344:33 | x | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:345:22:345:46 | "Mutable ref pattern: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:345:22:345:46 | "Mutable ref pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:345:22:345:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:345:22:345:61 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:345:49:345:61 | mut_ref_bound | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:349:11:349:16 | &value | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:349:12:349:16 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:350:13:350:13 | x | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:350:18:353:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:351:17:351:27 | ref_pattern | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:351:31:351:31 | x | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:352:22:352:44 | "Reference pattern: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:352:22:352:44 | "Reference pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:352:22:352:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:352:22:352:57 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:352:47:352:57 | ref_pattern | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:357:26:398:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:358:9:358:13 | point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:358:17:358:38 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:361:11:361:15 | point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:362:9:362:28 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:362:33:365:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:363:17:363:22 | origin | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:363:26:363:30 | point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:364:22:364:41 | "Origin point: {:?}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:364:22:364:41 | "Origin point: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:364:22:364:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:364:22:364:49 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:364:44:364:49 | origin | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:366:9:366:25 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:366:30:370:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:368:17:368:28 | x_axis_point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:368:32:368:36 | point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:369:22:369:56 | "Point on x-axis: x={}, point=... | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:369:22:369:56 | "Point on x-axis: x={}, point=... | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:369:22:369:80 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:369:22:369:80 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:369:69:369:80 | x_axis_point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:371:9:371:27 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:371:32:374:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:372:17:372:27 | ten_x_point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:372:31:372:35 | point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:373:22:373:44 | "Point with x=10: {:?}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:373:22:373:44 | "Point with x=10: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:373:22:373:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:373:22:373:57 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:373:47:373:57 | ten_x_point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:375:9:375:22 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:375:27:379:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:378:22:378:46 | "General point: ({}, {})\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:378:22:378:46 | "General point: ({}, {})\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:378:22:378:68 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:378:22:378:68 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:383:9:383:13 | shape | | pattern_matching.rs:145:1:150:1 | Shape | +| pattern_matching.rs:383:17:386:5 | ...::Rectangle {...} | | pattern_matching.rs:145:1:150:1 | Shape | +| pattern_matching.rs:387:11:387:15 | shape | | pattern_matching.rs:145:1:150:1 | Shape | +| pattern_matching.rs:388:9:391:9 | ...::Rectangle {...} | | pattern_matching.rs:145:1:150:1 | Shape | +| pattern_matching.rs:391:14:395:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:394:22:394:39 | "Rectangle: {}x{}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:394:22:394:39 | "Rectangle: {}x{}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:394:22:394:64 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:394:22:394:64 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:396:14:396:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:400:32:441:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:405:29:408:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:407:22:407:37 | "Pure red: {:?}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:407:22:407:37 | "Pure red: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:407:22:407:48 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:407:22:407:48 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:409:27:417:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:414:17:414:37 | "Color: ({}, {}, {})\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:414:17:414:37 | "Color: ({}, {}, {})\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:414:17:415:62 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:414:17:415:62 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:422:27:425:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:424:22:424:42 | "Reddish color: {:?}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:424:22:424:42 | "Reddish color: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:424:22:424:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:424:22:424:57 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:426:25:429:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:428:22:428:45 | "Any color with red: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:428:22:428:45 | "Any color with red: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:428:22:428:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:428:22:428:54 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:436:23:439:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:438:22:438:34 | "Wrapped: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:438:22:438:34 | "Wrapped: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:438:22:438:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:438:22:438:49 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:443:25:498:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:444:9:444:13 | tuple | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:444:17:444:36 | TupleExpr | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:444:18:444:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:444:24:444:27 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:444:30:444:35 | 3.0f32 | | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:447:11:447:15 | tuple | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:448:9:448:19 | TuplePat | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:448:24:451:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:449:17:449:27 | exact_tuple | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:449:31:449:35 | tuple | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:450:22:450:40 | "Exact tuple: {:?}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:450:22:450:40 | "Exact tuple: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:450:22:450:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:450:22:450:53 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:450:43:450:53 | exact_tuple | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:452:9:452:17 | TuplePat | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:452:22:457:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:456:22:456:42 | "Tuple: ({}, {}, {})\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:456:22:456:42 | "Tuple: ({}, {}, {})\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:456:22:456:79 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:456:22:456:79 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:461:11:461:15 | tuple | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:462:24:465:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:464:22:464:40 | "First element: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:464:22:464:40 | "First element: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:464:22:464:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:464:22:464:53 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:469:9:469:12 | unit | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:469:16:469:17 | TupleExpr | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:470:11:470:14 | unit | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:471:9:471:10 | TuplePat | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:471:15:474:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:472:17:472:26 | unit_value | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:472:30:472:33 | unit | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:473:22:473:39 | "Unit value: {:?}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:473:22:473:39 | "Unit value: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:473:22:473:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:473:22:473:51 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:473:42:473:51 | unit_value | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:478:9:478:14 | single | | {EXTERNAL LOCATION} | (T_1) | +| pattern_matching.rs:478:18:478:25 | TupleExpr | | {EXTERNAL LOCATION} | (T_1) | +| pattern_matching.rs:478:19:478:23 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:479:11:479:16 | single | | {EXTERNAL LOCATION} | (T_1) | +| pattern_matching.rs:480:9:480:12 | TuplePat | | {EXTERNAL LOCATION} | (T_1) | +| pattern_matching.rs:480:17:483:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:482:22:482:47 | "Single element tuple: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:482:22:482:47 | "Single element tuple: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:482:22:482:60 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:482:22:482:60 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:487:9:487:18 | ref_tuple1 | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:487:9:487:18 | ref_tuple1 | TRef | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:487:9:487:18 | ref_tuple1 | TRef.T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:487:9:487:18 | ref_tuple1 | TRef.T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:487:35:487:41 | &... | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:487:36:487:41 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:488:5:491:5 | if ... {...} | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:488:12:488:17 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:488:21:488:30 | ref_tuple1 | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:488:21:488:30 | ref_tuple1 | TRef | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:488:21:488:30 | ref_tuple1 | TRef.T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:488:21:488:30 | ref_tuple1 | TRef.T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:488:32:491:5 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:489:18:489:24 | "n: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:489:18:489:24 | "n: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:489:18:489:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:489:18:489:27 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:490:18:490:24 | "m: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:490:18:490:24 | "m: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:490:18:490:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:490:18:490:27 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:494:9:494:18 | ref_tuple2 | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:494:9:494:18 | ref_tuple2 | TRef | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:494:9:494:18 | ref_tuple2 | TRef.T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:494:9:494:18 | ref_tuple2 | TRef.T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:494:35:494:41 | &... | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:494:36:494:41 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:495:9:495:14 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:495:18:495:27 | ref_tuple2 | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:495:18:495:27 | ref_tuple2 | TRef | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:495:18:495:27 | ref_tuple2 | TRef.T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:495:18:495:27 | ref_tuple2 | TRef.T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:496:14:496:20 | "n: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:496:14:496:20 | "n: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:496:14:496:23 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:496:14:496:23 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:497:14:497:20 | "m: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:497:14:497:20 | "m: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:497:14:497:23 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:497:14:497:23 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:500:33:520:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:501:9:501:13 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:501:17:501:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:504:11:504:15 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:505:16:508:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:507:22:507:48 | "Parenthesized pattern: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:507:22:507:48 | "Parenthesized pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:507:22:507:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:507:22:507:61 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:512:9:512:13 | tuple | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:512:17:512:28 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:512:18:512:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:512:24:512:27 | 2i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:513:11:513:15 | tuple | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:514:9:514:16 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:514:21:518:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:517:22:517:53 | "Parenthesized in tuple: {}, {... | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:517:22:517:53 | "Parenthesized in tuple: {}, {... | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:517:22:517:71 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:517:22:517:71 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:522:25:563:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:523:9:523:13 | slice | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:523:9:523:13 | slice | TRef | {EXTERNAL LOCATION} | [] | +| pattern_matching.rs:523:9:523:13 | slice | TRef.TSlice | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:523:25:523:40 | &... | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:523:26:523:40 | [...] | | {EXTERNAL LOCATION} | [;] | +| pattern_matching.rs:526:11:526:15 | slice | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:526:11:526:15 | slice | TRef | {EXTERNAL LOCATION} | [] | +| pattern_matching.rs:526:11:526:15 | slice | TRef.TSlice | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:527:15:530:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:528:17:528:27 | empty_slice | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:528:17:528:27 | empty_slice | TRef | {EXTERNAL LOCATION} | [] | +| pattern_matching.rs:528:17:528:27 | empty_slice | TRef.TSlice | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:528:31:528:35 | slice | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:528:31:528:35 | slice | TRef | {EXTERNAL LOCATION} | [] | +| pattern_matching.rs:528:31:528:35 | slice | TRef.TSlice | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:529:22:529:40 | "Empty slice: {:?}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:529:22:529:40 | "Empty slice: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:529:22:529:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:529:22:529:53 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:529:43:529:53 | empty_slice | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:529:43:529:53 | empty_slice | TRef | {EXTERNAL LOCATION} | [] | +| pattern_matching.rs:529:43:529:53 | empty_slice | TRef.TSlice | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:531:16:534:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:533:22:533:41 | "Single element: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:533:22:533:41 | "Single element: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:533:22:533:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:533:22:533:54 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:535:28:539:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:538:22:538:43 | "Two elements: {}, {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:538:22:538:43 | "Two elements: {}, {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:538:22:538:70 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:538:22:538:70 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:540:39:550:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:545:17:545:53 | "First: {}, last: {}, middle l... | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:545:17:545:53 | "First: {}, last: {}, middle l... | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:545:17:548:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:545:17:548:34 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:554:9:554:13 | array | | {EXTERNAL LOCATION} | [;] | +| pattern_matching.rs:554:17:554:28 | [...] | | {EXTERNAL LOCATION} | [;] | +| pattern_matching.rs:554:18:554:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:555:11:555:15 | array | | {EXTERNAL LOCATION} | [;] | +| pattern_matching.rs:556:22:561:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:560:22:560:49 | "Array elements: {}, {}, {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:560:22:560:49 | "Array elements: {}, {}, {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:560:22:560:70 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:560:22:560:70 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:565:24:601:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:568:9:568:13 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:568:17:568:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:570:11:570:15 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:571:21:574:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:572:17:572:27 | const_match | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:572:31:572:35 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:573:22:573:43 | "Matches constant: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:573:22:573:43 | "Matches constant: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:573:22:573:56 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:573:22:573:56 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:573:46:573:56 | const_match | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:575:14:575:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:579:33:579:37 | 10i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:581:27:583:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:582:22:582:35 | "None variant\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:582:22:582:35 | "None variant\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:582:22:582:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:582:22:582:35 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:584:30:587:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:586:22:586:37 | "Some value: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:586:22:586:37 | "Some value: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:586:22:586:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:586:22:586:49 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:592:39:595:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:594:22:594:35 | "Ok value: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:594:22:594:35 | "Ok value: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:594:22:594:45 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:594:22:594:45 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:596:40:599:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:598:22:598:32 | "Error: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:598:22:598:32 | "Error: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:598:22:598:43 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:598:22:598:43 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:603:22:638:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:604:9:604:13 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:604:17:604:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:607:11:607:15 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:608:22:611:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:609:17:609:25 | small_num | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:609:29:609:33 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:610:22:610:39 | "Small number: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:610:22:610:39 | "Small number: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:610:22:610:50 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:610:22:610:50 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:610:42:610:50 | small_num | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:612:20:615:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:613:17:613:25 | round_num | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:613:29:613:33 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:614:22:614:39 | "Round number: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:614:22:614:39 | "Round number: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:614:22:614:50 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:614:22:614:50 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:614:42:614:50 | round_num | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:616:14:616:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:620:9:620:13 | point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:620:17:620:36 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:621:11:621:15 | point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:622:9:622:29 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:622:33:622:53 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:622:58:626:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:625:22:625:46 | "Point on axis: ({}, {})\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:625:22:625:46 | "Point on axis: ({}, {})\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:625:22:625:62 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:625:22:625:62 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:627:14:627:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:631:11:631:15 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:632:30:635:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:633:17:633:30 | range_or_value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:633:34:633:38 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:634:22:634:35 | "In range: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:634:22:634:35 | "In range: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:634:22:634:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:634:22:634:51 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:634:38:634:51 | range_or_value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:636:14:636:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:640:24:674:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:641:9:641:13 | tuple | | {EXTERNAL LOCATION} | (T_4) | +| pattern_matching.rs:641:17:641:41 | TupleExpr | | {EXTERNAL LOCATION} | (T_4) | +| pattern_matching.rs:641:18:641:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:641:24:641:27 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:641:30:641:35 | 3.0f32 | | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:641:38:641:40 | 4u8 | | {EXTERNAL LOCATION} | u8 | +| pattern_matching.rs:644:11:644:15 | tuple | | {EXTERNAL LOCATION} | (T_4) | +| pattern_matching.rs:645:24:648:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:647:22:647:42 | "First with rest: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:647:22:647:42 | "First with rest: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:647:22:647:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:647:22:647:54 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:651:11:651:15 | tuple | | {EXTERNAL LOCATION} | (T_4) | +| pattern_matching.rs:652:23:655:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:654:22:654:41 | "Last with rest: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:654:22:654:41 | "Last with rest: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:654:22:654:52 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:654:22:654:52 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:658:11:658:15 | tuple | | {EXTERNAL LOCATION} | (T_4) | +| pattern_matching.rs:659:30:663:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:662:22:662:45 | "First and last: {}, {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:662:22:662:45 | "First and last: {}, {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:662:22:662:67 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:662:22:662:67 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:667:9:667:13 | point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:667:17:667:38 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:668:11:668:15 | point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:669:9:669:23 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:669:28:672:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:671:22:671:39 | "X coordinate: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:671:22:671:39 | "X coordinate: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:671:22:671:47 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:671:22:671:47 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:676:25:696:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:694:21:694:25 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:694:21:694:25 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:694:21:694:25 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:695:21:695:25 | 10i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:695:21:695:25 | 10i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:695:21:695:25 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:698:34:724:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:700:9:700:20 | complex_data | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:700:24:700:79 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:700:25:700:44 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:702:11:702:22 | complex_data | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:704:9:704:61 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:704:10:704:26 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:704:66:712:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:709:17:709:57 | "Complex nested: y={}, green={... | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:709:17:709:57 | "Complex nested: y={}, green={... | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:709:17:710:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:709:17:710:44 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:714:9:714:41 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:714:10:714:24 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:714:45:714:71 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:714:46:714:67 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:714:76:717:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:716:22:716:50 | "Alternative complex: x={:?}\\n... | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:716:22:716:50 | "Alternative complex: x={:?}\\n... | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:716:22:716:65 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:716:22:716:65 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:719:18:722:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:721:22:721:47 | "Other complex data: {:?}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:721:22:721:47 | "Other complex data: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:721:22:721:62 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:721:22:721:62 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:726:37:758:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:728:9:728:13 | point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:728:17:728:38 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:729:9:729:22 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:729:26:729:30 | point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:733:9:733:13 | tuple | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:733:17:733:36 | TupleExpr | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:733:18:733:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:733:24:733:27 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:733:30:733:35 | 3.0f32 | | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:734:9:734:17 | TuplePat | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:734:21:734:25 | tuple | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:739:9:739:13 | array | | {EXTERNAL LOCATION} | [;] | +| pattern_matching.rs:739:17:739:34 | [...] | | {EXTERNAL LOCATION} | [;] | +| pattern_matching.rs:739:18:739:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:740:29:740:33 | array | | {EXTERNAL LOCATION} | [;] | +| pattern_matching.rs:751:9:751:13 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:751:17:751:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:752:13:752:19 | ref_val | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:752:13:752:19 | ref_val | TRef | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:752:23:752:27 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:753:9:753:15 | let_ref | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:753:9:753:15 | let_ref | TRef | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:753:19:753:25 | ref_val | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:753:19:753:25 | ref_val | TRef | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:756:13:756:19 | mut_val | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:756:23:756:27 | 10i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:757:9:757:15 | let_mut | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:757:19:757:25 | mut_val | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:760:42:789:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:763:22:763:35 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:763:59:767:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:763:59:767:5 | { ... } | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:763:59:767:5 | { ... } | T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:766:9:766:26 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:769:22:769:35 | Color(...) | | pattern_matching.rs:142:1:143:25 | Color | +| pattern_matching.rs:769:51:772:5 | { ... } | | {EXTERNAL LOCATION} | u8 | +| pattern_matching.rs:774:22:774:38 | TuplePat | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:774:22:774:38 | TuplePat | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:774:22:774:38 | TuplePat | T1 | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:774:22:774:38 | TuplePat | T2 | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:774:74:778:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:774:74:778:5 | { ... } | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:774:74:778:5 | { ... } | T1 | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:777:9:777:34 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:781:9:781:13 | point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:781:17:781:37 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:782:9:782:17 | extracted | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:782:9:782:17 | extracted | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:782:9:782:17 | extracted | T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:782:21:782:40 | extract_point(...) | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:782:21:782:40 | extract_point(...) | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:782:21:782:40 | extract_point(...) | T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:782:35:782:39 | point | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:785:9:785:11 | red | | {EXTERNAL LOCATION} | u8 | +| pattern_matching.rs:785:15:785:34 | extract_color(...) | | {EXTERNAL LOCATION} | u8 | +| pattern_matching.rs:787:9:787:13 | tuple | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:787:17:787:38 | TupleExpr | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:787:18:787:22 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:787:25:787:31 | 3.14f64 | | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:787:34:787:37 | true | | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:788:9:788:23 | tuple_extracted | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:788:9:788:23 | tuple_extracted | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:788:9:788:23 | tuple_extracted | T1 | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:788:27:788:46 | extract_tuple(...) | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:788:27:788:46 | extract_tuple(...) | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:788:27:788:46 | extract_tuple(...) | T1 | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:788:41:788:45 | tuple | | {EXTERNAL LOCATION} | (T_3) | +| pattern_matching.rs:792:35:824:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:794:23:794:42 | (...) | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:794:23:794:42 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:794:45:794:64 | (...) | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:794:45:794:64 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:795:5:799:5 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:795:9:795:22 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:795:34:799:5 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:798:18:798:42 | "Point in loop: ({}, {})\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:798:18:798:42 | "Point in loop: ({}, {})\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:798:18:798:58 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:798:18:798:58 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:802:39:802:43 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:803:5:806:5 | if ... {...} | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:803:50:806:5 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:805:18:805:44 | "If let with @ pattern: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:805:18:805:44 | "If let with @ pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:805:18:805:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:805:18:805:54 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:809:13:809:17 | stack | | {EXTERNAL LOCATION} | Vec | +| pattern_matching.rs:809:13:809:17 | stack | A | {EXTERNAL LOCATION} | Global | +| pattern_matching.rs:809:13:809:17 | stack | T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:809:36:809:39 | 1i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:810:5:813:5 | while ... { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:810:25:810:29 | stack | | {EXTERNAL LOCATION} | Vec | +| pattern_matching.rs:810:25:810:29 | stack | A | {EXTERNAL LOCATION} | Global | +| pattern_matching.rs:810:25:810:29 | stack | T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:810:37:813:5 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:812:18:812:29 | "Popped: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:812:18:812:29 | "Popped: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:812:18:812:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:812:18:812:42 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:816:9:816:13 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:816:17:816:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:817:11:817:15 | value | | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:818:23:821:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:820:22:820:35 | "Positive: {}\\n" | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:820:22:820:35 | "Positive: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:820:22:820:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:820:22:820:44 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:822:14:822:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:826:28:846:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:827:5:827:7 | f(...) | | {EXTERNAL LOCATION} | Option | +| pattern_matching.rs:827:5:827:7 | f(...) | T | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:828:5:828:22 | literal_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:829:5:829:25 | identifier_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:830:5:830:23 | wildcard_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:831:5:831:20 | range_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:832:5:832:24 | reference_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:833:5:833:21 | record_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:834:5:834:27 | tuple_struct_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:835:5:835:20 | tuple_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:836:5:836:28 | parenthesized_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:837:5:837:20 | slice_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:838:5:838:19 | path_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:839:5:839:17 | or_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:840:5:840:19 | rest_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:841:5:841:20 | macro_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:842:5:842:29 | complex_nested_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:843:5:843:32 | patterns_in_let_statements(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:844:5:844:37 | patterns_in_function_parameters(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:845:5:845:30 | patterns_in_control_flow(...) | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:3:28:3:28 | x | | {EXTERNAL LOCATION} | *const | +| raw_pointer.rs:3:28:3:28 | x | TPtrConst | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:3:50:6:1 | { ... } | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:4:24:4:24 | x | | {EXTERNAL LOCATION} | *const | +| raw_pointer.rs:4:24:4:24 | x | TPtrConst | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:8:26:8:26 | x | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:8:26:8:26 | x | TPtrMut | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:8:47:11:1 | { ... } | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:9:24:9:24 | x | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:9:24:9:24 | x | TPtrMut | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:13:23:19:1 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:14:9:14:9 | a | | {EXTERNAL LOCATION} | i64 | +| raw_pointer.rs:15:9:15:9 | x | | {EXTERNAL LOCATION} | *const | +| raw_pointer.rs:15:13:15:24 | &raw const a | | {EXTERNAL LOCATION} | *const | +| raw_pointer.rs:15:24:15:24 | a | | {EXTERNAL LOCATION} | i64 | +| raw_pointer.rs:16:5:18:5 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:17:19:17:19 | x | | {EXTERNAL LOCATION} | *const | +| raw_pointer.rs:21:21:27:1 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:22:13:22:13 | a | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:22:17:22:21 | 10i32 | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:23:9:23:9 | x | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:23:13:23:22 | &raw mut a | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:23:22:23:22 | a | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:24:5:26:5 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:25:19:25:19 | x | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:29:18:29:21 | cond | | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:29:30:40:1 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:30:9:30:9 | a | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:30:13:30:17 | 10i32 | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:32:9:32:19 | ptr_written | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:32:23:32:32 | null_mut(...) | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:33:5:39:5 | if cond {...} | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:33:8:33:11 | cond | | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:34:9:38:9 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:36:14:36:24 | ptr_written | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:36:28:36:28 | a | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:37:23:37:33 | ptr_written | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:42:24:42:27 | cond | | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:42:36:51:1 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:44:9:44:16 | ptr_read | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:44:20:44:29 | null_mut(...) | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:45:5:50:5 | if cond {...} | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:45:8:45:11 | cond | | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:46:9:49:9 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:48:17:48:18 | _y | | {EXTERNAL LOCATION} | i64 | +| raw_pointer.rs:48:28:48:35 | ptr_read | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:53:15:60:1 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:54:5:54:32 | raw_pointer_const_deref(...) | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:54:29:54:31 | &10 | | {EXTERNAL LOCATION} | & | +| raw_pointer.rs:55:5:55:36 | raw_pointer_mut_deref(...) | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:55:27:55:35 | &mut true | | {EXTERNAL LOCATION} | & | +| raw_pointer.rs:55:32:55:35 | true | | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:56:5:56:22 | raw_const_borrow(...) | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:57:5:57:20 | raw_mut_borrow(...) | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:58:5:58:24 | raw_mut_write(...) | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:58:19:58:23 | false | | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:59:5:59:30 | raw_type_from_deref(...) | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:59:25:59:29 | false | | {EXTERNAL LOCATION} | bool | inferType | blanket_impl.rs:15:18:15:22 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:15:18:15:22 | SelfParam | TRef | blanket_impl.rs:9:5:10:14 | S2 | @@ -2615,8 +7106,6 @@ inferType | main.rs:1025:18:1025:49 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1025:26:1025:27 | x3 | | main.rs:943:5:944:13 | S | | main.rs:1025:26:1025:40 | x3.putTwo(...) | | main.rs:892:5:895:5 | Wrapper | -| main.rs:1025:26:1025:40 | x3.putTwo(...) | A | main.rs:963:36:963:50 | AssociatedParam | -| main.rs:1025:26:1025:49 | ... .unwrap() | | main.rs:963:36:963:50 | AssociatedParam | | main.rs:1025:36:1025:36 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:1025:39:1025:39 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:1027:20:1027:20 | S | | main.rs:943:5:944:13 | S | @@ -2658,17 +7147,13 @@ inferType | main.rs:1050:24:1050:28 | SelfParam | TRef | main.rs:1048:5:1051:5 | Self [trait Subtrait] | | main.rs:1059:23:1059:27 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1059:23:1059:27 | SelfParam | TRef | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | -| main.rs:1059:30:1059:31 | c1 | | main.rs:1043:9:1043:21 | Content | -| main.rs:1059:49:1059:50 | c2 | | main.rs:1043:9:1043:21 | Content | | main.rs:1059:68:1062:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1060:13:1060:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1060:13:1060:16 | self | TRef | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | | main.rs:1060:13:1060:27 | self.insert(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1060:25:1060:26 | c1 | | main.rs:1043:9:1043:21 | Content | | main.rs:1061:13:1061:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1061:13:1061:16 | self | TRef | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | | main.rs:1061:13:1061:27 | self.insert(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1061:25:1061:26 | c2 | | main.rs:1043:9:1043:21 | Content | | main.rs:1069:19:1069:23 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1069:19:1069:23 | SelfParam | TRef | main.rs:1065:5:1065:24 | MyType | | main.rs:1069:19:1069:23 | SelfParam | TRef.T | main.rs:1067:10:1067:10 | T | @@ -2693,25 +7178,17 @@ inferType | main.rs:1077:15:1077:18 | self | TRef.T | main.rs:1074:10:1074:17 | T | | main.rs:1081:33:1081:36 | item | | {EXTERNAL LOCATION} | & | | main.rs:1081:33:1081:36 | item | TRef | main.rs:1081:20:1081:30 | T | -| main.rs:1081:57:1083:5 | { ... } | | main.rs:1043:9:1043:21 | Content | | main.rs:1082:9:1082:12 | item | | {EXTERNAL LOCATION} | & | | main.rs:1082:9:1082:12 | item | TRef | main.rs:1081:20:1081:30 | T | -| main.rs:1082:9:1082:26 | item.get_content() | | main.rs:1043:9:1043:21 | Content | | main.rs:1085:35:1085:38 | item | | {EXTERNAL LOCATION} | & | | main.rs:1085:35:1085:38 | item | TRef | main.rs:1085:21:1085:32 | T | -| main.rs:1085:45:1085:46 | c1 | | main.rs:1043:9:1043:21 | Content | -| main.rs:1085:61:1085:62 | c2 | | main.rs:1043:9:1043:21 | Content | -| main.rs:1085:77:1085:78 | c3 | | main.rs:1043:9:1043:21 | Content | | main.rs:1085:93:1088:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1086:9:1086:12 | item | | {EXTERNAL LOCATION} | & | | main.rs:1086:9:1086:12 | item | TRef | main.rs:1085:21:1085:32 | T | | main.rs:1086:9:1086:23 | item.insert(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1086:21:1086:22 | c1 | | main.rs:1043:9:1043:21 | Content | | main.rs:1087:9:1087:12 | item | | {EXTERNAL LOCATION} | & | | main.rs:1087:9:1087:12 | item | TRef | main.rs:1085:21:1085:32 | T | | main.rs:1087:9:1087:31 | item.insert_two(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1087:25:1087:26 | c2 | | main.rs:1043:9:1043:21 | Content | -| main.rs:1087:29:1087:30 | c3 | | main.rs:1043:9:1043:21 | Content | | main.rs:1090:15:1096:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1091:13:1091:17 | item1 | | main.rs:1065:5:1065:24 | MyType | | main.rs:1091:13:1091:17 | item1 | T | {EXTERNAL LOCATION} | i64 | @@ -3980,7 +8457,6 @@ inferType | main.rs:1762:17:1762:20 | self | TRef.TSlice | main.rs:1760:14:1760:23 | T | | main.rs:1762:17:1762:27 | self.get(...) | | {EXTERNAL LOCATION} | Option | | main.rs:1762:17:1762:27 | self.get(...) | T | {EXTERNAL LOCATION} | & | -| main.rs:1762:17:1762:27 | self.get(...) | T.TRef | main.rs:1760:14:1760:23 | T | | main.rs:1762:17:1762:36 | ... .unwrap() | | {EXTERNAL LOCATION} | & | | main.rs:1762:17:1762:36 | ... .unwrap() | TRef | main.rs:1760:14:1760:23 | T | | main.rs:1762:26:1762:26 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -4093,8 +8569,8 @@ inferType | main.rs:1803:13:1803:13 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:1803:17:1803:33 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:1806:26:1806:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1806:26:1806:30 | SelfParam | TRef | file://:0:0:0:0 | * | -| main.rs:1806:26:1806:30 | SelfParam | TRef.TPtr | main.rs:1805:14:1805:23 | T | +| main.rs:1806:26:1806:30 | SelfParam | TRef | {EXTERNAL LOCATION} | *mut | +| main.rs:1806:26:1806:30 | SelfParam | TRef.TPtrMut | main.rs:1805:14:1805:23 | T | | main.rs:1806:39:1808:13 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1806:39:1808:13 | { ... } | TRef | main.rs:1805:14:1805:23 | T | | main.rs:1807:17:1807:34 | { ... } | | {EXTERNAL LOCATION} | & | @@ -4102,17 +8578,17 @@ inferType | main.rs:1807:26:1807:32 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1807:26:1807:32 | &... | TRef | main.rs:1805:14:1805:23 | T | | main.rs:1807:27:1807:32 | * ... | | main.rs:1805:14:1805:23 | T | -| main.rs:1807:28:1807:32 | * ... | | file://:0:0:0:0 | * | -| main.rs:1807:28:1807:32 | * ... | TPtr | main.rs:1805:14:1805:23 | T | +| main.rs:1807:28:1807:32 | * ... | | {EXTERNAL LOCATION} | *mut | +| main.rs:1807:28:1807:32 | * ... | TPtrMut | main.rs:1805:14:1805:23 | T | | main.rs:1807:29:1807:32 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1807:29:1807:32 | self | TRef | file://:0:0:0:0 | * | -| main.rs:1807:29:1807:32 | self | TRef.TPtr | main.rs:1805:14:1805:23 | T | +| main.rs:1807:29:1807:32 | self | TRef | {EXTERNAL LOCATION} | *mut | +| main.rs:1807:29:1807:32 | self | TRef.TPtrMut | main.rs:1805:14:1805:23 | T | | main.rs:1810:31:1812:13 | { ... } | | main.rs:1805:14:1805:23 | T | | main.rs:1811:17:1811:28 | ...::default(...) | | main.rs:1805:14:1805:23 | T | | main.rs:1815:17:1815:17 | v | | {EXTERNAL LOCATION} | i32 | | main.rs:1815:21:1815:22 | 42 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1816:13:1816:13 | p | | file://:0:0:0:0 | * | -| main.rs:1816:13:1816:13 | p | TPtr | {EXTERNAL LOCATION} | i32 | +| main.rs:1816:13:1816:13 | p | | {EXTERNAL LOCATION} | *mut | +| main.rs:1816:13:1816:13 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | | main.rs:1816:27:1816:32 | &mut v | | {EXTERNAL LOCATION} | & | | main.rs:1816:27:1816:32 | &mut v | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1816:32:1816:32 | v | | {EXTERNAL LOCATION} | i32 | @@ -4120,8 +8596,8 @@ inferType | main.rs:1817:13:1817:13 | x | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1817:17:1817:40 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1817:17:1817:40 | { ... } | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1817:26:1817:26 | p | | file://:0:0:0:0 | * | -| main.rs:1817:26:1817:26 | p | TPtr | {EXTERNAL LOCATION} | i32 | +| main.rs:1817:26:1817:26 | p | | {EXTERNAL LOCATION} | *mut | +| main.rs:1817:26:1817:26 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | | main.rs:1817:26:1817:38 | p.my_method() | | {EXTERNAL LOCATION} | & | | main.rs:1817:26:1817:38 | p.my_method() | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1818:13:1818:13 | x | | {EXTERNAL LOCATION} | & | @@ -4131,10 +8607,10 @@ inferType | main.rs:1818:26:1818:48 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | | main.rs:1818:26:1818:48 | ...::my_method(...) | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1818:46:1818:47 | &p | | {EXTERNAL LOCATION} | & | -| main.rs:1818:46:1818:47 | &p | TRef | file://:0:0:0:0 | * | -| main.rs:1818:46:1818:47 | &p | TRef.TPtr | {EXTERNAL LOCATION} | i32 | -| main.rs:1818:47:1818:47 | p | | file://:0:0:0:0 | * | -| main.rs:1818:47:1818:47 | p | TPtr | {EXTERNAL LOCATION} | i32 | +| main.rs:1818:46:1818:47 | &p | TRef | {EXTERNAL LOCATION} | *mut | +| main.rs:1818:46:1818:47 | &p | TRef.TPtrMut | {EXTERNAL LOCATION} | i32 | +| main.rs:1818:47:1818:47 | p | | {EXTERNAL LOCATION} | *mut | +| main.rs:1818:47:1818:47 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | | main.rs:1819:13:1819:13 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:1819:17:1819:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:1825:16:1837:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -4626,9 +9102,7 @@ inferType | main.rs:2076:44:2076:50 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2080:26:2080:26 | a | | main.rs:2080:18:2080:23 | T | | main.rs:2080:32:2080:32 | b | | main.rs:2080:18:2080:23 | T | -| main.rs:2080:51:2082:5 | { ... } | | {EXTERNAL LOCATION} | Output | | main.rs:2081:9:2081:9 | a | | main.rs:2080:18:2080:23 | T | -| main.rs:2081:9:2081:13 | ... + ... | | {EXTERNAL LOCATION} | Output | | main.rs:2081:13:2081:13 | b | | main.rs:2080:18:2080:23 | T | | main.rs:2084:16:2215:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2088:13:2088:18 | i64_eq | | {EXTERNAL LOCATION} | bool | @@ -4907,11 +9381,13 @@ inferType | main.rs:2224:24:2224:25 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2227:25:2229:5 | { ... } | | main.rs:2221:5:2221:14 | S1 | | main.rs:2228:9:2228:10 | S1 | | main.rs:2221:5:2221:14 | S1 | -| main.rs:2231:41:2233:5 | { ... } | | main.rs:2231:16:2231:39 | impl ... | +| main.rs:2231:41:2233:5 | { ... } | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2231:41:2233:5 | { ... } | dyn(Output) | main.rs:2221:5:2221:14 | S1 | | main.rs:2232:9:2232:20 | { ... } | | {EXTERNAL LOCATION} | dyn Future | | main.rs:2232:9:2232:20 | { ... } | dyn(Output) | main.rs:2221:5:2221:14 | S1 | | main.rs:2232:17:2232:18 | S1 | | main.rs:2221:5:2221:14 | S1 | -| main.rs:2235:41:2237:5 | { ... } | | main.rs:2235:16:2235:39 | impl ... | +| main.rs:2235:41:2237:5 | { ... } | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2235:41:2237:5 | { ... } | dyn(Output) | {EXTERNAL LOCATION} | () | | main.rs:2236:9:2236:16 | { ... } | | {EXTERNAL LOCATION} | dyn Future | | main.rs:2236:9:2236:16 | { ... } | dyn(Output) | {EXTERNAL LOCATION} | () | | main.rs:2245:13:2245:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | @@ -4924,9 +9400,8 @@ inferType | main.rs:2248:13:2248:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | | main.rs:2248:13:2248:38 | ...::Ready(...) | T | main.rs:2221:5:2221:14 | S1 | | main.rs:2248:36:2248:37 | S1 | | main.rs:2221:5:2221:14 | S1 | -| main.rs:2252:41:2254:5 | { ... } | | main.rs:2252:16:2252:39 | impl ... | +| main.rs:2252:41:2254:5 | { ... } | | main.rs:2239:5:2239:14 | S2 | | main.rs:2253:9:2253:10 | S2 | | main.rs:2239:5:2239:14 | S2 | -| main.rs:2253:9:2253:10 | S2 | | main.rs:2252:16:2252:39 | impl ... | | main.rs:2256:22:2264:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2257:9:2257:12 | f1(...) | | {EXTERNAL LOCATION} | dyn Future | | main.rs:2257:9:2257:12 | f1(...) | dyn(Output) | main.rs:2221:5:2221:14 | S1 | @@ -4964,9 +9439,8 @@ inferType | main.rs:2286:15:2286:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2286:15:2286:19 | SelfParam | TRef | main.rs:2268:5:2269:14 | S1 | | main.rs:2286:22:2286:23 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2289:37:2291:5 | { ... } | | main.rs:2289:16:2289:35 | impl ... + ... | +| main.rs:2289:37:2291:5 | { ... } | | main.rs:2268:5:2269:14 | S1 | | main.rs:2290:9:2290:10 | S1 | | main.rs:2268:5:2269:14 | S1 | -| main.rs:2290:9:2290:10 | S1 | | main.rs:2289:16:2289:35 | impl ... + ... | | main.rs:2294:18:2294:22 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2294:18:2294:22 | SelfParam | TRef | main.rs:2293:5:2295:5 | Self [trait MyTrait] | | main.rs:2298:18:2298:22 | SelfParam | | {EXTERNAL LOCATION} | & | @@ -4985,9 +9459,8 @@ inferType | main.rs:2305:25:2305:28 | self | TRef | main.rs:2271:5:2271:22 | S3 | | main.rs:2305:25:2305:28 | self | TRef.T3 | main.rs:2303:10:2303:17 | T | | main.rs:2306:13:2306:21 | t.clone() | | main.rs:2303:10:2303:17 | T | -| main.rs:2310:45:2312:5 | { ... } | | main.rs:2310:28:2310:43 | impl ... | +| main.rs:2310:45:2312:5 | { ... } | | main.rs:2268:5:2269:14 | S1 | | main.rs:2311:9:2311:10 | S1 | | main.rs:2268:5:2269:14 | S1 | -| main.rs:2311:9:2311:10 | S1 | | main.rs:2310:28:2310:43 | impl ... | | main.rs:2314:41:2314:41 | t | | main.rs:2314:26:2314:38 | B | | main.rs:2314:52:2316:5 | { ... } | | main.rs:2314:23:2314:23 | A | | main.rs:2315:9:2315:9 | t | | main.rs:2314:26:2314:38 | B | @@ -5138,9 +9611,7 @@ inferType | main.rs:2388:23:2388:23 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2391:37:2391:37 | a | | main.rs:2391:20:2391:34 | T | | main.rs:2391:43:2391:43 | b | | {EXTERNAL LOCATION} | usize | -| main.rs:2394:5:2396:5 | { ... } | | {EXTERNAL LOCATION} | Output | | main.rs:2395:9:2395:9 | a | | main.rs:2391:20:2391:34 | T | -| main.rs:2395:9:2395:12 | a[b] | | {EXTERNAL LOCATION} | Output | | main.rs:2395:11:2395:11 | b | | {EXTERNAL LOCATION} | usize | | main.rs:2398:16:2409:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2399:17:2399:19 | vec | | main.rs:2363:5:2366:5 | MyVec | @@ -5219,9 +9690,7 @@ inferType | main.rs:2463:25:2463:29 | other | | main.rs:2457:5:2457:19 | S | | main.rs:2463:25:2463:29 | other | T | main.rs:2459:10:2459:17 | T | | main.rs:2463:54:2465:9 | { ... } | | main.rs:2457:5:2457:19 | S | -| main.rs:2463:54:2465:9 | { ... } | T | main.rs:2420:9:2420:20 | Output | | main.rs:2464:13:2464:39 | S(...) | | main.rs:2457:5:2457:19 | S | -| main.rs:2464:13:2464:39 | S(...) | T | main.rs:2420:9:2420:20 | Output | | main.rs:2464:15:2464:22 | (...) | | main.rs:2459:10:2459:17 | T | | main.rs:2464:16:2464:19 | self | | main.rs:2457:5:2457:19 | S | | main.rs:2464:16:2464:19 | self | T | main.rs:2459:10:2459:17 | T | @@ -5233,9 +9702,7 @@ inferType | main.rs:2472:19:2472:22 | SelfParam | T | main.rs:2468:10:2468:17 | T | | main.rs:2472:25:2472:29 | other | | main.rs:2468:10:2468:17 | T | | main.rs:2472:51:2474:9 | { ... } | | main.rs:2457:5:2457:19 | S | -| main.rs:2472:51:2474:9 | { ... } | T | main.rs:2420:9:2420:20 | Output | | main.rs:2473:13:2473:37 | S(...) | | main.rs:2457:5:2457:19 | S | -| main.rs:2473:13:2473:37 | S(...) | T | main.rs:2420:9:2420:20 | Output | | main.rs:2473:15:2473:22 | (...) | | main.rs:2468:10:2468:17 | T | | main.rs:2473:16:2473:19 | self | | main.rs:2457:5:2457:19 | S | | main.rs:2473:16:2473:19 | self | T | main.rs:2468:10:2468:17 | T | @@ -5481,7 +9948,6 @@ inferType | main.rs:2627:43:2627:47 | "baz" | | {EXTERNAL LOCATION} | & | | main.rs:2627:43:2627:47 | "baz" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2628:9:2628:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2628:13:2628:13 | s | | {EXTERNAL LOCATION} | Item | | main.rs:2628:13:2628:13 | s | | {EXTERNAL LOCATION} | & | | main.rs:2628:13:2628:13 | s | TRef | {EXTERNAL LOCATION} | & | | main.rs:2628:13:2628:13 | s | TRef.TRef | {EXTERNAL LOCATION} | str | @@ -5494,7 +9960,6 @@ inferType | main.rs:2628:19:2628:26 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | | main.rs:2628:28:2628:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2629:9:2629:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2629:13:2629:13 | s | | {EXTERNAL LOCATION} | Item | | main.rs:2629:13:2629:13 | s | | {EXTERNAL LOCATION} | & | | main.rs:2629:13:2629:13 | s | TRef | {EXTERNAL LOCATION} | & | | main.rs:2629:13:2629:13 | s | TRef.TRef | {EXTERNAL LOCATION} | str | @@ -5549,7 +10014,6 @@ inferType | main.rs:2644:26:2644:30 | "baz" | | {EXTERNAL LOCATION} | & | | main.rs:2644:26:2644:30 | "baz" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2646:9:2646:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2646:13:2646:13 | s | | {EXTERNAL LOCATION} | Item | | main.rs:2646:13:2646:13 | s | | {EXTERNAL LOCATION} | & | | main.rs:2646:13:2646:13 | s | TRef | {EXTERNAL LOCATION} | String | | main.rs:2646:18:2646:25 | strings3 | | {EXTERNAL LOCATION} | & | @@ -5607,7 +10071,6 @@ inferType | main.rs:2661:13:2661:22 | range_full | | {EXTERNAL LOCATION} | RangeFull | | main.rs:2661:26:2661:27 | .. | | {EXTERNAL LOCATION} | RangeFull | | main.rs:2662:9:2662:51 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2662:13:2662:13 | i | | {EXTERNAL LOCATION} | Item | | main.rs:2662:18:2662:48 | &... | | {EXTERNAL LOCATION} | & | | main.rs:2662:19:2662:36 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2662:19:2662:36 | [...] | TArray | {EXTERNAL LOCATION} | i64 | @@ -6528,48 +10991,75 @@ inferType | main.rs:3035:9:3035:9 | x | T | {EXTERNAL LOCATION} | i32 | | main.rs:3035:9:3035:17 | x.push(...) | | {EXTERNAL LOCATION} | () | | main.rs:3035:16:3035:16 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:3044:11:3079:1 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:3045:5:3045:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3046:5:3046:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:3047:5:3047:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:3047:20:3047:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:3047:41:3047:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:3048:5:3048:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3049:5:3049:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3050:5:3050:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3051:5:3051:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3052:5:3052:33 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3053:5:3053:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3054:5:3054:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3055:5:3055:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3056:5:3056:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3057:5:3057:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3058:5:3058:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3059:5:3059:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3060:5:3060:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3061:5:3061:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3062:5:3062:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3063:5:3063:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3064:5:3064:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:3064:5:3064:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:3065:5:3065:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3066:5:3066:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3067:5:3067:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3068:5:3068:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3069:5:3069:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3070:5:3070:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3071:5:3071:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3072:5:3072:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3073:5:3073:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3074:5:3074:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3075:5:3075:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3076:5:3076:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3077:5:3077:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:3077:5:3077:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:3077:5:3077:20 | ...::f(...) | T | main.rs:2897:5:2899:5 | dyn MyTrait | -| main.rs:3077:5:3077:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:3077:16:3077:19 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:3078:5:3078:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3041:14:3041:17 | SelfParam | | main.rs:3040:5:3042:5 | Self [trait MyTrait] | +| main.rs:3046:14:3046:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | +| main.rs:3046:28:3048:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:3047:13:3047:16 | self | | {EXTERNAL LOCATION} | i32 | +| main.rs:3053:14:3053:17 | SelfParam | | {EXTERNAL LOCATION} | usize | +| main.rs:3053:28:3055:9 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:3054:13:3054:16 | self | | {EXTERNAL LOCATION} | usize | +| main.rs:3060:14:3060:17 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:3060:14:3060:17 | SelfParam | TRef | main.rs:3058:10:3058:10 | T | +| main.rs:3060:28:3062:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:3060:28:3062:9 | { ... } | TRef | main.rs:3058:10:3058:10 | T | +| main.rs:3061:13:3061:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:3061:13:3061:16 | self | TRef | main.rs:3058:10:3058:10 | T | +| main.rs:3065:25:3069:5 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:3066:17:3066:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:3066:17:3066:17 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:3066:21:3066:21 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:3066:21:3066:21 | 0 | | {EXTERNAL LOCATION} | usize | +| main.rs:3067:9:3067:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:3067:9:3067:9 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:3067:9:3067:17 | ... = ... | | {EXTERNAL LOCATION} | () | +| main.rs:3067:13:3067:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:3067:13:3067:13 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:3067:13:3067:17 | x.f() | | {EXTERNAL LOCATION} | i32 | +| main.rs:3067:13:3067:17 | x.f() | | {EXTERNAL LOCATION} | usize | +| main.rs:3068:9:3068:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:3068:9:3068:9 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:3077:11:3112:1 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:3078:5:3078:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3079:5:3079:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:3080:5:3080:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:3080:20:3080:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:3080:41:3080:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:3081:5:3081:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3082:5:3082:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3083:5:3083:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3084:5:3084:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3085:5:3085:33 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3086:5:3086:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3087:5:3087:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3088:5:3088:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3089:5:3089:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3090:5:3090:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3091:5:3091:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3092:5:3092:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3093:5:3093:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3094:5:3094:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3095:5:3095:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3096:5:3096:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3097:5:3097:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:3097:5:3097:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:3098:5:3098:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3099:5:3099:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3100:5:3100:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3101:5:3101:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3102:5:3102:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3103:5:3103:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3104:5:3104:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3105:5:3105:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3106:5:3106:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3107:5:3107:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3108:5:3108:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3109:5:3109:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3110:5:3110:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:3110:5:3110:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:3110:5:3110:20 | ...::f(...) | T | main.rs:2897:5:2899:5 | dyn MyTrait | +| main.rs:3110:5:3110:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:3110:16:3110:19 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:3111:5:3111:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () | | pattern_matching.rs:14:9:14:13 | value | | {EXTERNAL LOCATION} | Option | @@ -8360,4 +12850,99 @@ inferType | pattern_matching.rs:843:5:843:32 | patterns_in_let_statements(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:844:5:844:37 | patterns_in_function_parameters(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:845:5:845:30 | patterns_in_control_flow(...) | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:3:28:3:28 | x | | {EXTERNAL LOCATION} | *const | +| raw_pointer.rs:3:28:3:28 | x | TPtrConst | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:3:50:6:1 | { ... } | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:4:9:4:10 | _y | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:4:14:4:26 | { ... } | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:4:23:4:24 | * ... | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:4:24:4:24 | x | | {EXTERNAL LOCATION} | *const | +| raw_pointer.rs:4:24:4:24 | x | TPtrConst | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:5:5:5:5 | 0 | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:8:26:8:26 | x | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:8:26:8:26 | x | TPtrMut | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:8:47:11:1 | { ... } | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:9:9:9:10 | _y | | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:9:14:9:26 | { ... } | | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:9:23:9:24 | * ... | | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:9:24:9:24 | x | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:9:24:9:24 | x | TPtrMut | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:10:5:10:5 | 0 | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:13:23:19:1 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:14:9:14:9 | a | | {EXTERNAL LOCATION} | i64 | +| raw_pointer.rs:14:18:14:19 | 10 | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:14:18:14:19 | 10 | | {EXTERNAL LOCATION} | i64 | +| raw_pointer.rs:15:9:15:9 | x | | {EXTERNAL LOCATION} | *const | +| raw_pointer.rs:15:9:15:9 | x | TPtrConst | {EXTERNAL LOCATION} | i64 | +| raw_pointer.rs:15:13:15:24 | &raw const a | | {EXTERNAL LOCATION} | *const | +| raw_pointer.rs:15:13:15:24 | &raw const a | TPtrConst | {EXTERNAL LOCATION} | i64 | +| raw_pointer.rs:15:24:15:24 | a | | {EXTERNAL LOCATION} | i64 | +| raw_pointer.rs:16:5:18:5 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:17:13:17:14 | _y | | {EXTERNAL LOCATION} | i64 | +| raw_pointer.rs:17:18:17:19 | * ... | | {EXTERNAL LOCATION} | i64 | +| raw_pointer.rs:17:19:17:19 | x | | {EXTERNAL LOCATION} | *const | +| raw_pointer.rs:17:19:17:19 | x | TPtrConst | {EXTERNAL LOCATION} | i64 | +| raw_pointer.rs:21:21:27:1 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:22:13:22:13 | a | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:22:17:22:21 | 10i32 | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:23:9:23:9 | x | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:23:9:23:9 | x | TPtrMut | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:23:13:23:22 | &raw mut a | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:23:13:23:22 | &raw mut a | TPtrMut | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:23:22:23:22 | a | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:24:5:26:5 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:25:13:25:14 | _y | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:25:18:25:19 | * ... | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:25:19:25:19 | x | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:25:19:25:19 | x | TPtrMut | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:29:18:29:21 | cond | | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:29:30:40:1 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:30:9:30:9 | a | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:30:13:30:17 | 10i32 | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:32:9:32:19 | ptr_written | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:32:9:32:19 | ptr_written | TPtrMut | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:32:23:32:32 | null_mut(...) | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:32:23:32:32 | null_mut(...) | TPtrMut | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:33:5:39:5 | if cond {...} | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:33:8:33:11 | cond | | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:33:13:39:5 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:34:9:38:9 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:36:13:36:24 | * ... | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:36:13:36:28 | ... = ... | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:36:14:36:24 | ptr_written | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:36:14:36:24 | ptr_written | TPtrMut | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:36:28:36:28 | a | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:37:17:37:18 | _y | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:37:22:37:33 | * ... | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:37:23:37:33 | ptr_written | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:37:23:37:33 | ptr_written | TPtrMut | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:42:24:42:27 | cond | | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:42:36:51:1 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:44:9:44:16 | ptr_read | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:44:9:44:16 | ptr_read | TPtrMut | {EXTERNAL LOCATION} | i64 | +| raw_pointer.rs:44:20:44:29 | null_mut(...) | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:44:20:44:29 | null_mut(...) | TPtrMut | {EXTERNAL LOCATION} | i64 | +| raw_pointer.rs:45:5:50:5 | if cond {...} | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:45:8:45:11 | cond | | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:45:13:50:5 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:46:9:49:9 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:48:17:48:18 | _y | | {EXTERNAL LOCATION} | i64 | +| raw_pointer.rs:48:27:48:35 | * ... | | {EXTERNAL LOCATION} | i64 | +| raw_pointer.rs:48:28:48:35 | ptr_read | | {EXTERNAL LOCATION} | *mut | +| raw_pointer.rs:48:28:48:35 | ptr_read | TPtrMut | {EXTERNAL LOCATION} | i64 | +| raw_pointer.rs:53:15:60:1 | { ... } | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:54:5:54:32 | raw_pointer_const_deref(...) | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:54:29:54:31 | &10 | | {EXTERNAL LOCATION} | & | +| raw_pointer.rs:54:29:54:31 | &10 | TRef | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:54:30:54:31 | 10 | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:55:5:55:36 | raw_pointer_mut_deref(...) | | {EXTERNAL LOCATION} | i32 | +| raw_pointer.rs:55:27:55:35 | &mut true | | {EXTERNAL LOCATION} | & | +| raw_pointer.rs:55:27:55:35 | &mut true | TRef | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:55:32:55:35 | true | | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:56:5:56:22 | raw_const_borrow(...) | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:57:5:57:20 | raw_mut_borrow(...) | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:58:5:58:24 | raw_mut_write(...) | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:58:19:58:23 | false | | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:59:5:59:30 | raw_type_from_deref(...) | | {EXTERNAL LOCATION} | () | +| raw_pointer.rs:59:25:59:29 | false | | {EXTERNAL LOCATION} | bool | testFailures diff --git a/rust/ql/test/library-tests/type-inference/type-inference.ql b/rust/ql/test/library-tests/type-inference/type-inference.ql index 01af646007da..81cad0f975e7 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.ql +++ b/rust/ql/test/library-tests/type-inference/type-inference.ql @@ -4,15 +4,25 @@ import codeql.rust.internal.Type import codeql.rust.internal.TypeInference as TypeInference import TypeInference -query predicate inferType(AstNode n, TypePath path, Type t) { - t = TypeInference::inferType(n, path) and - t != TUnknownType() and +private predicate relevantNode(AstNode n) { n.fromSource() and not n.isFromMacroExpansion() and not n instanceof IdentPat and // avoid overlap in the output with the underlying `Name` node not n instanceof LiteralPat // avoid overlap in the output with the underlying `Literal` node } +query predicate inferCertainType(AstNode n, TypePath path, Type t) { + t = TypeInference::CertainTypeInference::inferCertainType(n, path) and + t != TUnknownType() and + relevantNode(n) +} + +query predicate inferType(AstNode n, TypePath path, Type t) { + t = TypeInference::inferType(n, path) and + t != TUnknownType() and + relevantNode(n) +} + module ResolveTest implements TestSig { string getARelevantTag() { result = ["target", "fieldof"] } @@ -38,11 +48,11 @@ module ResolveTest implements TestSig { not target.(Function).getName().getText() = ["panic_fmt", "_print", "format", "must_use"] and tag = "target" or - target = resolveStructFieldExpr(source) and + target = resolveStructFieldExpr(source, _) and any(Struct s | s.getStructField(_) = target).getName().getText() = value and tag = "fieldof" or - target = resolveTupleFieldExpr(source) and + target = resolveTupleFieldExpr(source, _) and any(Struct s | s.getTupleField(_) = target).getName().getText() = value and tag = "fieldof" ) diff --git a/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected index 6b4022b86e57..8dfdad04adf5 100644 --- a/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected @@ -1,3 +1,17 @@ -multipleCallTargets +multipleResolvedTargets +| main.rs:16:15:16:16 | * ... | | main.rs:91:19:91:40 | ...::from(...) | | main.rs:113:19:113:40 | ...::from(...) | +| main.rs:507:5:507:10 | * ... | +| main.rs:512:5:512:6 | * ... | +| main.rs:513:9:513:10 | * ... | +| main.rs:514:9:514:10 | * ... | +| main.rs:519:5:519:6 | * ... | +| main.rs:520:9:520:10 | * ... | +| main.rs:521:9:521:10 | * ... | +| main.rs:522:5:522:6 | * ... | +| main.rs:530:5:530:6 | * ... | +| main.rs:542:5:542:7 | * ... | +| main.rs:542:6:542:7 | * ... | +| main.rs:552:5:552:6 | * ... | +| main.rs:699:9:699:13 | * ... | diff --git a/rust/ql/test/query-tests/diagnostics/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/diagnostics/CONSISTENCY/PathResolutionConsistency.expected index bb60014263b3..fbf9238f366e 100644 --- a/rust/ql/test/query-tests/diagnostics/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/diagnostics/CONSISTENCY/PathResolutionConsistency.expected @@ -1,2 +1,2 @@ -multipleCallTargets +multipleResolvedTargets | my_struct.rs:25:19:25:37 | ...::from(...) | diff --git a/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected b/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected index a1f9b448ac75..df7070c966a7 100644 --- a/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected +++ b/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected @@ -22,11 +22,12 @@ edges | src/main.rs:9:35:9:43 | file_name | src/main.rs:9:21:9:44 | ...::from(...) | provenance | MaD:14 | | src/main.rs:11:24:11:32 | file_path | src/main.rs:11:5:11:22 | ...::read_to_string | provenance | MaD:6 Sink:MaD:6 | | src/main.rs:50:51:50:59 | file_path | src/main.rs:52:32:52:40 | file_path | provenance | | -| src/main.rs:52:9:52:17 | file_path [&ref] | src/main.rs:53:21:53:44 | file_path.canonicalize() [Ok] | provenance | Config | +| src/main.rs:52:9:52:17 | file_path [&ref] | src/main.rs:53:21:53:29 | file_path [&ref] | provenance | | | src/main.rs:52:21:52:41 | ...::new(...) [&ref] | src/main.rs:52:9:52:17 | file_path [&ref] | provenance | | | src/main.rs:52:31:52:40 | &file_path [&ref] | src/main.rs:52:21:52:41 | ...::new(...) [&ref] | provenance | MaD:13 | | src/main.rs:52:32:52:40 | file_path | src/main.rs:52:31:52:40 | &file_path [&ref] | provenance | | | src/main.rs:53:9:53:17 | file_path | src/main.rs:58:24:58:32 | file_path | provenance | | +| src/main.rs:53:21:53:29 | file_path [&ref] | src/main.rs:53:21:53:44 | file_path.canonicalize() [Ok] | provenance | Config | | src/main.rs:53:21:53:44 | file_path.canonicalize() [Ok] | src/main.rs:53:21:53:53 | ... .unwrap() | provenance | MaD:12 | | src/main.rs:53:21:53:53 | ... .unwrap() | src/main.rs:53:9:53:17 | file_path | provenance | | | src/main.rs:58:24:58:32 | file_path | src/main.rs:58:5:58:22 | ...::read_to_string | provenance | MaD:6 Sink:MaD:6 | @@ -37,27 +38,22 @@ edges | src/main.rs:66:32:66:40 | file_path | src/main.rs:66:31:66:40 | &file_path [&ref] | provenance | | | src/main.rs:71:24:71:32 | file_path [&ref] | src/main.rs:71:5:71:22 | ...::read_to_string | provenance | MaD:6 Sink:MaD:6 | | src/main.rs:90:11:90:19 | file_path | src/main.rs:93:32:93:40 | file_path | provenance | | -| src/main.rs:93:9:93:17 | file_path [&ref] | src/main.rs:98:21:98:44 | file_path.canonicalize() [Ok] | provenance | Config | +| src/main.rs:93:9:93:17 | file_path [&ref] | src/main.rs:98:21:98:29 | file_path [&ref] | provenance | | | src/main.rs:93:21:93:41 | ...::new(...) [&ref] | src/main.rs:93:9:93:17 | file_path [&ref] | provenance | | | src/main.rs:93:31:93:40 | &file_path [&ref] | src/main.rs:93:21:93:41 | ...::new(...) [&ref] | provenance | MaD:13 | | src/main.rs:93:32:93:40 | file_path | src/main.rs:93:31:93:40 | &file_path [&ref] | provenance | | | src/main.rs:98:9:98:17 | file_path | src/main.rs:99:24:99:32 | file_path | provenance | | +| src/main.rs:98:21:98:29 | file_path [&ref] | src/main.rs:98:21:98:44 | file_path.canonicalize() [Ok] | provenance | Config | | src/main.rs:98:21:98:44 | file_path.canonicalize() [Ok] | src/main.rs:98:21:98:53 | ... .unwrap() | provenance | MaD:12 | | src/main.rs:98:21:98:53 | ... .unwrap() | src/main.rs:98:9:98:17 | file_path | provenance | | | src/main.rs:99:24:99:32 | file_path | src/main.rs:99:5:99:22 | ...::read_to_string | provenance | MaD:6 Sink:MaD:6 | | src/main.rs:103:9:103:13 | path1 | src/main.rs:104:33:104:37 | path1 | provenance | | -| src/main.rs:103:9:103:13 | path1 | src/main.rs:104:33:104:45 | path1.clone() | provenance | MaD:8 | | src/main.rs:103:9:103:13 | path1 | src/main.rs:106:39:106:43 | path1 | provenance | | -| src/main.rs:103:9:103:13 | path1 | src/main.rs:106:39:106:51 | path1.clone() | provenance | MaD:8 | | src/main.rs:103:9:103:13 | path1 | src/main.rs:109:41:109:45 | path1 | provenance | | -| src/main.rs:103:9:103:13 | path1 | src/main.rs:109:41:109:53 | path1.clone() | provenance | MaD:8 | | src/main.rs:103:9:103:13 | path1 | src/main.rs:112:45:112:49 | path1 | provenance | | -| src/main.rs:103:9:103:13 | path1 | src/main.rs:112:45:112:57 | path1.clone() | provenance | MaD:8 | | src/main.rs:103:9:103:13 | path1 | src/main.rs:115:39:115:43 | path1 | provenance | | | src/main.rs:103:9:103:13 | path1 | src/main.rs:122:27:122:31 | path1 | provenance | | -| src/main.rs:103:9:103:13 | path1 | src/main.rs:122:27:122:39 | path1.clone() | provenance | MaD:8 | | src/main.rs:103:9:103:13 | path1 | src/main.rs:123:37:123:41 | path1 | provenance | | -| src/main.rs:103:9:103:13 | path1 | src/main.rs:123:37:123:49 | path1.clone() | provenance | MaD:8 | | src/main.rs:103:17:103:30 | ...::args | src/main.rs:103:17:103:32 | ...::args(...) [element] | provenance | Src:MaD:7 | | src/main.rs:103:17:103:32 | ...::args(...) [element] | src/main.rs:103:17:103:39 | ... .nth(...) [Some] | provenance | MaD:10 | | src/main.rs:103:17:103:39 | ... .nth(...) [Some] | src/main.rs:103:17:103:48 | ... .unwrap() | provenance | MaD:11 | @@ -89,8 +85,9 @@ edges | src/main.rs:115:38:115:43 | &path1 [&ref] | src/main.rs:115:17:115:44 | ...::new(...) [&ref] | provenance | MaD:13 | | src/main.rs:115:39:115:43 | path1 | src/main.rs:115:38:115:43 | &path1 [&ref] | provenance | | | src/main.rs:116:33:116:37 | path5 [&ref] | src/main.rs:116:13:116:31 | ...::open | provenance | MaD:2 Sink:MaD:2 | -| src/main.rs:116:33:116:37 | path5 [&ref] | src/main.rs:118:17:118:36 | path5.canonicalize() [Ok] | provenance | Config | +| src/main.rs:116:33:116:37 | path5 [&ref] | src/main.rs:118:17:118:21 | path5 [&ref] | provenance | | | src/main.rs:118:9:118:13 | path6 | src/main.rs:119:33:119:37 | path6 | provenance | | +| src/main.rs:118:17:118:21 | path5 [&ref] | src/main.rs:118:17:118:36 | path5.canonicalize() [Ok] | provenance | Config | | src/main.rs:118:17:118:36 | path5.canonicalize() [Ok] | src/main.rs:118:17:118:45 | ... .unwrap() | provenance | MaD:12 | | src/main.rs:118:17:118:45 | ... .unwrap() | src/main.rs:118:9:118:13 | path6 | provenance | | | src/main.rs:119:33:119:37 | path6 | src/main.rs:119:13:119:31 | ...::open | provenance | MaD:2 Sink:MaD:2 | @@ -124,7 +121,7 @@ models | 7 | Source: std::env::args; ReturnValue.Element; commandargs | | 8 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | | 9 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint | -| 10 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 10 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | | 11 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | | 12 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | | 13 | Summary: ::new; Argument[0].Reference; ReturnValue.Reference; value | @@ -142,6 +139,7 @@ nodes | src/main.rs:52:31:52:40 | &file_path [&ref] | semmle.label | &file_path [&ref] | | src/main.rs:52:32:52:40 | file_path | semmle.label | file_path | | src/main.rs:53:9:53:17 | file_path | semmle.label | file_path | +| src/main.rs:53:21:53:29 | file_path [&ref] | semmle.label | file_path [&ref] | | src/main.rs:53:21:53:44 | file_path.canonicalize() [Ok] | semmle.label | file_path.canonicalize() [Ok] | | src/main.rs:53:21:53:53 | ... .unwrap() | semmle.label | ... .unwrap() | | src/main.rs:58:5:58:22 | ...::read_to_string | semmle.label | ...::read_to_string | @@ -159,6 +157,7 @@ nodes | src/main.rs:93:31:93:40 | &file_path [&ref] | semmle.label | &file_path [&ref] | | src/main.rs:93:32:93:40 | file_path | semmle.label | file_path | | src/main.rs:98:9:98:17 | file_path | semmle.label | file_path | +| src/main.rs:98:21:98:29 | file_path [&ref] | semmle.label | file_path [&ref] | | src/main.rs:98:21:98:44 | file_path.canonicalize() [Ok] | semmle.label | file_path.canonicalize() [Ok] | | src/main.rs:98:21:98:53 | ... .unwrap() | semmle.label | ... .unwrap() | | src/main.rs:99:5:99:22 | ...::read_to_string | semmle.label | ...::read_to_string | @@ -201,6 +200,7 @@ nodes | src/main.rs:116:13:116:31 | ...::open | semmle.label | ...::open | | src/main.rs:116:33:116:37 | path5 [&ref] | semmle.label | path5 [&ref] | | src/main.rs:118:9:118:13 | path6 | semmle.label | path6 | +| src/main.rs:118:17:118:21 | path5 [&ref] | semmle.label | path5 [&ref] | | src/main.rs:118:17:118:36 | path5.canonicalize() [Ok] | semmle.label | path5.canonicalize() [Ok] | | src/main.rs:118:17:118:45 | ... .unwrap() | semmle.label | ... .unwrap() | | src/main.rs:119:13:119:31 | ...::open | semmle.label | ...::open | diff --git a/rust/ql/test/query-tests/security/CWE-079/actix/XSS.expected b/rust/ql/test/query-tests/security/CWE-079/actix/XSS.expected index 3eff00192fe1..9667a9216e6f 100644 --- a/rust/ql/test/query-tests/security/CWE-079/actix/XSS.expected +++ b/rust/ql/test/query-tests/security/CWE-079/actix/XSS.expected @@ -2,8 +2,9 @@ | main.rs:25:5:25:13 | ...::new | main.rs:8:1:8:18 | to | main.rs:25:5:25:13 | ...::new | Cross-site scripting vulnerability due to a $@. | main.rs:8:1:8:18 | to | user-provided value | edges | main.rs:8:1:8:18 | to | main.rs:9:29:9:51 | ...: ...::Path::<...> | provenance | Src:MaD:2 | -| main.rs:9:29:9:51 | ...: ...::Path::<...> | main.rs:10:22:10:38 | path.into_inner() | provenance | MaD:3 | +| main.rs:9:29:9:51 | ...: ...::Path::<...> | main.rs:10:22:10:25 | path | provenance | | | main.rs:10:9:10:18 | user_input | main.rs:13:9:22:18 | MacroExpr | provenance | | +| main.rs:10:22:10:25 | path | main.rs:10:22:10:38 | path.into_inner() | provenance | MaD:3 | | main.rs:10:22:10:38 | path.into_inner() | main.rs:10:9:10:18 | user_input | provenance | | | main.rs:12:9:12:12 | html | main.rs:25:15:25:18 | html | provenance | | | main.rs:13:9:22:18 | ...::format(...) | main.rs:13:9:22:18 | { ... } | provenance | | @@ -21,6 +22,7 @@ nodes | main.rs:8:1:8:18 | to | semmle.label | to | | main.rs:9:29:9:51 | ...: ...::Path::<...> | semmle.label | ...: ...::Path::<...> | | main.rs:10:9:10:18 | user_input | semmle.label | user_input | +| main.rs:10:22:10:25 | path | semmle.label | path | | main.rs:10:22:10:38 | path.into_inner() | semmle.label | path.into_inner() | | main.rs:12:9:12:12 | html | semmle.label | html | | main.rs:13:9:22:18 | ...::format(...) | semmle.label | ...::format(...) | diff --git a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected index 34a867e09173..3187982b20e0 100644 --- a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected @@ -1,4 +1,4 @@ -multipleCallTargets +multipleResolvedTargets | mysql.rs:15:24:15:39 | ...::from(...) | | mysql.rs:16:26:16:85 | ...::from(...) | | mysql.rs:18:13:18:66 | ...::from(...) | diff --git a/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected b/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected index d699ca4a389c..17f03c0fc920 100644 --- a/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected +++ b/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected @@ -40,75 +40,48 @@ edges | mysql.rs:12:33:14:19 | ... .text() [Ok] | mysql.rs:12:33:15:40 | ... .unwrap_or(...) | provenance | MaD:32 | | mysql.rs:12:33:15:40 | ... .unwrap_or(...) | mysql.rs:12:13:12:29 | mut remote_string | provenance | | | mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:25:38:25:49 | unsafe_query | provenance | | -| mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:25:38:25:58 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:26:64:26:75 | unsafe_query | provenance | | -| mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:26:64:26:84 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:27:25:27:36 | unsafe_query | provenance | | -| mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:27:25:27:45 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:28:39:28:50 | unsafe_query | provenance | | -| mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:28:39:28:59 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:29:65:29:76 | unsafe_query | provenance | | -| mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:29:65:29:85 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:30:33:30:44 | unsafe_query | provenance | | -| mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:30:33:30:53 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:32:13:32:24 | unsafe_query | provenance | | -| mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:32:13:32:33 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:36:33:36:44 | unsafe_query | provenance | | -| mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:36:33:36:53 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:37:32:37:43 | unsafe_query | provenance | | -| mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:37:32:37:52 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:39:13:39:24 | unsafe_query | provenance | | -| mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:39:13:39:33 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:42:39:42:50 | unsafe_query | provenance | | -| mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:42:39:42:59 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:75:31:75:42 | unsafe_query | provenance | | -| mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:75:31:75:51 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:80:26:80:37 | unsafe_query | provenance | | -| mysql.rs:17:13:17:24 | unsafe_query | mysql.rs:80:26:80:46 | unsafe_query.as_str() | provenance | MaD:29 | -| mysql.rs:18:13:18:83 | ... + ... | mysql.rs:17:13:17:24 | unsafe_query | provenance | | | mysql.rs:18:13:18:83 | ... + ... | mysql.rs:18:13:18:89 | ... + ... | provenance | MaD:27 | | mysql.rs:18:13:18:83 | ... + ... | mysql.rs:18:13:18:89 | ... + ... | provenance | MaD:28 | | mysql.rs:18:13:18:89 | ... + ... | mysql.rs:17:13:17:24 | unsafe_query | provenance | | | mysql.rs:18:70:18:83 | &remote_string [&ref] | mysql.rs:18:13:18:83 | ... + ... | provenance | MaD:26 | | mysql.rs:18:71:18:83 | remote_string | mysql.rs:18:70:18:83 | &remote_string [&ref] | provenance | | | mysql.rs:25:38:25:49 | unsafe_query | mysql.rs:25:38:25:58 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:25:38:25:58 | unsafe_query.as_str() | mysql.rs:25:32:25:36 | query | provenance | MaD:1 Sink:MaD:1 | | mysql.rs:25:38:25:58 | unsafe_query.as_str() [&ref] | mysql.rs:25:32:25:36 | query | provenance | MaD:1 Sink:MaD:1 | | mysql.rs:26:64:26:75 | unsafe_query | mysql.rs:26:64:26:84 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:26:64:26:84 | unsafe_query.as_str() | mysql.rs:26:54:26:62 | query_opt | provenance | MaD:9 Sink:MaD:9 | | mysql.rs:26:64:26:84 | unsafe_query.as_str() [&ref] | mysql.rs:26:54:26:62 | query_opt | provenance | MaD:9 Sink:MaD:9 | | mysql.rs:27:25:27:36 | unsafe_query | mysql.rs:27:25:27:45 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:27:25:27:45 | unsafe_query.as_str() | mysql.rs:27:14:27:23 | query_drop | provenance | MaD:2 Sink:MaD:2 | | mysql.rs:27:25:27:45 | unsafe_query.as_str() [&ref] | mysql.rs:27:14:27:23 | query_drop | provenance | MaD:2 Sink:MaD:2 | | mysql.rs:28:39:28:50 | unsafe_query | mysql.rs:28:39:28:59 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:28:39:28:59 | unsafe_query.as_str() | mysql.rs:28:27:28:37 | query_first | provenance | MaD:3 Sink:MaD:3 | | mysql.rs:28:39:28:59 | unsafe_query.as_str() [&ref] | mysql.rs:28:27:28:37 | query_first | provenance | MaD:3 Sink:MaD:3 | | mysql.rs:29:65:29:76 | unsafe_query | mysql.rs:29:65:29:85 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:29:65:29:85 | unsafe_query.as_str() | mysql.rs:29:49:29:63 | query_first_opt | provenance | MaD:4 Sink:MaD:4 | | mysql.rs:29:65:29:85 | unsafe_query.as_str() [&ref] | mysql.rs:29:49:29:63 | query_first_opt | provenance | MaD:4 Sink:MaD:4 | | mysql.rs:30:33:30:44 | unsafe_query | mysql.rs:30:33:30:53 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:30:33:30:53 | unsafe_query.as_str() | mysql.rs:30:22:30:31 | query_fold | provenance | MaD:5 Sink:MaD:5 | | mysql.rs:30:33:30:53 | unsafe_query.as_str() [&ref] | mysql.rs:30:22:30:31 | query_fold | provenance | MaD:5 Sink:MaD:5 | | mysql.rs:32:13:32:24 | unsafe_query | mysql.rs:32:13:32:33 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:32:13:32:33 | unsafe_query.as_str() | mysql.rs:31:22:31:35 | query_fold_opt | provenance | MaD:6 Sink:MaD:6 | | mysql.rs:32:13:32:33 | unsafe_query.as_str() [&ref] | mysql.rs:31:22:31:35 | query_fold_opt | provenance | MaD:6 Sink:MaD:6 | | mysql.rs:36:33:36:44 | unsafe_query | mysql.rs:36:33:36:53 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:36:33:36:53 | unsafe_query.as_str() | mysql.rs:36:22:36:31 | query_iter | provenance | MaD:17 Sink:MaD:17 | | mysql.rs:36:33:36:53 | unsafe_query.as_str() [&ref] | mysql.rs:36:22:36:31 | query_iter | provenance | MaD:17 Sink:MaD:17 | | mysql.rs:37:32:37:43 | unsafe_query | mysql.rs:37:32:37:52 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:37:32:37:52 | unsafe_query.as_str() | mysql.rs:37:22:37:30 | query_map | provenance | MaD:7 Sink:MaD:7 | | mysql.rs:37:32:37:52 | unsafe_query.as_str() [&ref] | mysql.rs:37:22:37:30 | query_map | provenance | MaD:7 Sink:MaD:7 | | mysql.rs:39:13:39:24 | unsafe_query | mysql.rs:39:13:39:33 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:39:13:39:33 | unsafe_query.as_str() | mysql.rs:38:22:38:34 | query_map_opt | provenance | MaD:8 Sink:MaD:8 | | mysql.rs:39:13:39:33 | unsafe_query.as_str() [&ref] | mysql.rs:38:22:38:34 | query_map_opt | provenance | MaD:8 Sink:MaD:8 | | mysql.rs:42:39:42:50 | unsafe_query | mysql.rs:42:39:42:59 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:42:39:42:59 | unsafe_query.as_str() | mysql.rs:42:33:42:37 | query | provenance | MaD:1 Sink:MaD:1 | | mysql.rs:42:39:42:59 | unsafe_query.as_str() [&ref] | mysql.rs:42:33:42:37 | query | provenance | MaD:1 Sink:MaD:1 | | mysql.rs:75:31:75:42 | unsafe_query | mysql.rs:75:31:75:51 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:75:31:75:51 | unsafe_query.as_str() | mysql.rs:75:26:75:29 | prep | provenance | MaD:16 Sink:MaD:16 | | mysql.rs:75:31:75:51 | unsafe_query.as_str() [&ref] | mysql.rs:75:26:75:29 | prep | provenance | MaD:16 Sink:MaD:16 | | mysql.rs:80:26:80:37 | unsafe_query | mysql.rs:80:26:80:46 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:80:26:80:46 | unsafe_query.as_str() | mysql.rs:80:15:80:24 | query_drop | provenance | MaD:2 Sink:MaD:2 | | mysql.rs:80:26:80:46 | unsafe_query.as_str() [&ref] | mysql.rs:80:15:80:24 | query_drop | provenance | MaD:2 Sink:MaD:2 | | mysql.rs:97:13:97:29 | mut remote_string | mysql.rs:103:71:103:83 | remote_string | provenance | | | mysql.rs:97:33:97:54 | ...::get | mysql.rs:97:33:97:77 | ...::get(...) [Ok] | provenance | Src:MaD:23 | @@ -117,55 +90,36 @@ edges | mysql.rs:97:33:99:19 | ... .text() [Ok] | mysql.rs:97:33:100:40 | ... .unwrap_or(...) | provenance | MaD:32 | | mysql.rs:97:33:100:40 | ... .unwrap_or(...) | mysql.rs:97:13:97:29 | mut remote_string | provenance | | | mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:110:38:110:49 | unsafe_query | provenance | | -| mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:110:38:110:58 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:111:25:111:36 | unsafe_query | provenance | | -| mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:111:25:111:45 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:112:47:112:58 | unsafe_query | provenance | | -| mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:112:47:112:67 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:114:25:114:36 | unsafe_query | provenance | | -| mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:114:25:114:45 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:116:33:116:44 | unsafe_query | provenance | | -| mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:116:33:116:53 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:118:40:118:51 | unsafe_query | provenance | | -| mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:118:40:118:60 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:121:24:121:35 | unsafe_query | provenance | | -| mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:121:24:121:44 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:149:31:149:42 | unsafe_query | provenance | | -| mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:149:31:149:51 | unsafe_query.as_str() | provenance | MaD:29 | | mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:154:26:154:37 | unsafe_query | provenance | | -| mysql.rs:102:13:102:24 | unsafe_query | mysql.rs:154:26:154:46 | unsafe_query.as_str() | provenance | MaD:29 | -| mysql.rs:103:13:103:83 | ... + ... | mysql.rs:102:13:102:24 | unsafe_query | provenance | | | mysql.rs:103:13:103:83 | ... + ... | mysql.rs:103:13:103:89 | ... + ... | provenance | MaD:27 | | mysql.rs:103:13:103:83 | ... + ... | mysql.rs:103:13:103:89 | ... + ... | provenance | MaD:28 | | mysql.rs:103:13:103:89 | ... + ... | mysql.rs:102:13:102:24 | unsafe_query | provenance | | | mysql.rs:103:70:103:83 | &remote_string [&ref] | mysql.rs:103:13:103:83 | ... + ... | provenance | MaD:26 | | mysql.rs:103:71:103:83 | remote_string | mysql.rs:103:70:103:83 | &remote_string [&ref] | provenance | | | mysql.rs:110:38:110:49 | unsafe_query | mysql.rs:110:38:110:58 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:110:38:110:58 | unsafe_query.as_str() | mysql.rs:110:32:110:36 | query | provenance | MaD:10 Sink:MaD:10 | | mysql.rs:110:38:110:58 | unsafe_query.as_str() [&ref] | mysql.rs:110:32:110:36 | query | provenance | MaD:10 Sink:MaD:10 | | mysql.rs:111:25:111:36 | unsafe_query | mysql.rs:111:25:111:45 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:111:25:111:45 | unsafe_query.as_str() | mysql.rs:111:14:111:23 | query_drop | provenance | MaD:11 Sink:MaD:11 | | mysql.rs:111:25:111:45 | unsafe_query.as_str() [&ref] | mysql.rs:111:14:111:23 | query_drop | provenance | MaD:11 Sink:MaD:11 | | mysql.rs:112:47:112:58 | unsafe_query | mysql.rs:112:47:112:67 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:112:47:112:67 | unsafe_query.as_str() | mysql.rs:112:35:112:45 | query_first | provenance | MaD:12 Sink:MaD:12 | | mysql.rs:112:47:112:67 | unsafe_query.as_str() [&ref] | mysql.rs:112:35:112:45 | query_first | provenance | MaD:12 Sink:MaD:12 | | mysql.rs:114:25:114:36 | unsafe_query | mysql.rs:114:25:114:45 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:114:25:114:45 | unsafe_query.as_str() | mysql.rs:114:14:114:23 | query_fold | provenance | MaD:13 Sink:MaD:13 | | mysql.rs:114:25:114:45 | unsafe_query.as_str() [&ref] | mysql.rs:114:14:114:23 | query_fold | provenance | MaD:13 Sink:MaD:13 | | mysql.rs:116:33:116:44 | unsafe_query | mysql.rs:116:33:116:53 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:116:33:116:53 | unsafe_query.as_str() | mysql.rs:116:22:116:31 | query_iter | provenance | MaD:19 Sink:MaD:19 | | mysql.rs:116:33:116:53 | unsafe_query.as_str() [&ref] | mysql.rs:116:22:116:31 | query_iter | provenance | MaD:19 Sink:MaD:19 | | mysql.rs:118:40:118:51 | unsafe_query | mysql.rs:118:40:118:60 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:118:40:118:60 | unsafe_query.as_str() | mysql.rs:118:14:118:25 | query_stream | provenance | MaD:15 Sink:MaD:15 | | mysql.rs:118:40:118:60 | unsafe_query.as_str() [&ref] | mysql.rs:118:14:118:25 | query_stream | provenance | MaD:15 Sink:MaD:15 | | mysql.rs:121:24:121:35 | unsafe_query | mysql.rs:121:24:121:44 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:121:24:121:44 | unsafe_query.as_str() | mysql.rs:121:14:121:22 | query_map | provenance | MaD:14 Sink:MaD:14 | | mysql.rs:121:24:121:44 | unsafe_query.as_str() [&ref] | mysql.rs:121:14:121:22 | query_map | provenance | MaD:14 Sink:MaD:14 | | mysql.rs:149:31:149:42 | unsafe_query | mysql.rs:149:31:149:51 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:149:31:149:51 | unsafe_query.as_str() | mysql.rs:149:26:149:29 | prep | provenance | MaD:18 Sink:MaD:18 | | mysql.rs:149:31:149:51 | unsafe_query.as_str() [&ref] | mysql.rs:149:26:149:29 | prep | provenance | MaD:18 Sink:MaD:18 | | mysql.rs:154:26:154:37 | unsafe_query | mysql.rs:154:26:154:46 | unsafe_query.as_str() [&ref] | provenance | MaD:29 | -| mysql.rs:154:26:154:46 | unsafe_query.as_str() | mysql.rs:154:15:154:24 | query_drop | provenance | MaD:11 Sink:MaD:11 | | mysql.rs:154:26:154:46 | unsafe_query.as_str() [&ref] | mysql.rs:154:15:154:24 | query_drop | provenance | MaD:11 Sink:MaD:11 | | sqlx.rs:47:9:47:18 | arg_string | sqlx.rs:53:27:53:36 | arg_string | provenance | | | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:47:22:47:37 | ...::args(...) [element] | provenance | Src:MaD:24 | @@ -180,33 +134,30 @@ edges | sqlx.rs:48:25:48:78 | ... .unwrap() | sqlx.rs:48:25:48:85 | ... .text() [Ok] | provenance | MaD:33 | | sqlx.rs:48:25:48:85 | ... .text() [Ok] | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | provenance | MaD:32 | | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | sqlx.rs:48:9:48:21 | remote_string | provenance | | -| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | provenance | MaD:29 | +| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:38 | unsafe_query_1 [&ref] | provenance | | | sqlx.rs:53:26:53:36 | &arg_string [&ref] | sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | provenance | | | sqlx.rs:53:27:53:36 | arg_string | sqlx.rs:53:26:53:36 | &arg_string [&ref] | provenance | | -| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() [&ref] | provenance | MaD:29 | +| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:42 | unsafe_query_2 [&ref] | provenance | | | sqlx.rs:54:26:54:39 | &remote_string [&ref] | sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | provenance | | | sqlx.rs:54:27:54:39 | remote_string | sqlx.rs:54:26:54:39 | &remote_string [&ref] | provenance | | | sqlx.rs:55:9:55:22 | unsafe_query_3 | sqlx.rs:81:29:81:42 | unsafe_query_3 | provenance | | -| sqlx.rs:55:9:55:22 | unsafe_query_3 | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() | provenance | MaD:29 | -| sqlx.rs:55:26:55:96 | ... + ... | sqlx.rs:55:9:55:22 | unsafe_query_3 | provenance | | | sqlx.rs:55:26:55:96 | ... + ... | sqlx.rs:55:26:55:102 | ... + ... | provenance | MaD:27 | | sqlx.rs:55:26:55:96 | ... + ... | sqlx.rs:55:26:55:102 | ... + ... | provenance | MaD:28 | | sqlx.rs:55:26:55:102 | ... + ... | sqlx.rs:55:9:55:22 | unsafe_query_3 | provenance | | | sqlx.rs:55:83:55:96 | &remote_string [&ref] | sqlx.rs:55:26:55:96 | ... + ... | provenance | MaD:26 | | sqlx.rs:55:84:55:96 | remote_string | sqlx.rs:55:83:55:96 | &remote_string [&ref] | provenance | | | sqlx.rs:56:9:56:22 | unsafe_query_4 | sqlx.rs:82:29:82:42 | unsafe_query_4 | provenance | | -| sqlx.rs:56:9:56:22 | unsafe_query_4 | sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() | provenance | MaD:29 | | sqlx.rs:59:17:59:72 | ...::format(...) | sqlx.rs:59:17:59:72 | { ... } | provenance | | | sqlx.rs:59:17:59:72 | ...::must_use(...) | sqlx.rs:56:9:56:22 | unsafe_query_4 | provenance | | | sqlx.rs:59:17:59:72 | MacroExpr | sqlx.rs:59:17:59:72 | ...::format(...) | provenance | MaD:34 | | sqlx.rs:59:17:59:72 | { ... } | sqlx.rs:59:17:59:72 | ...::must_use(...) | provenance | MaD:35 | +| sqlx.rs:78:25:78:38 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | provenance | MaD:29 | | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | sqlx.rs:78:13:78:23 | ...::query | provenance | MaD:20 Sink:MaD:20 | +| sqlx.rs:80:29:80:42 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() [&ref] | provenance | MaD:29 | | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() [&ref] | sqlx.rs:80:17:80:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:81:29:81:42 | unsafe_query_3 | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() [&ref] | provenance | MaD:29 | -| sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() | sqlx.rs:81:17:81:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() [&ref] | sqlx.rs:81:17:81:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:82:29:82:42 | unsafe_query_4 | sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() [&ref] | provenance | MaD:29 | -| sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() | sqlx.rs:82:17:82:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() [&ref] | sqlx.rs:82:17:82:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:100:9:100:21 | remote_string | sqlx.rs:102:84:102:96 | remote_string | provenance | | | sqlx.rs:100:25:100:46 | ...::get | sqlx.rs:100:25:100:69 | ...::get(...) [Ok] | provenance | Src:MaD:23 | @@ -215,40 +166,27 @@ edges | sqlx.rs:100:25:100:85 | ... .text() [Ok] | sqlx.rs:100:25:100:118 | ... .unwrap_or(...) | provenance | MaD:32 | | sqlx.rs:100:25:100:118 | ... .unwrap_or(...) | sqlx.rs:100:9:100:21 | remote_string | provenance | | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:113:31:113:44 | unsafe_query_1 | provenance | | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() | provenance | MaD:29 | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:120:29:120:42 | unsafe_query_1 | provenance | | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() | provenance | MaD:29 | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:127:29:127:42 | unsafe_query_1 | provenance | | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() | provenance | MaD:29 | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:136:55:136:68 | unsafe_query_1 | provenance | | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() | provenance | MaD:29 | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:145:55:145:68 | unsafe_query_1 | provenance | | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() | provenance | MaD:29 | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:153:29:153:42 | unsafe_query_1 | provenance | | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() | provenance | MaD:29 | -| sqlx.rs:102:26:102:96 | ... + ... | sqlx.rs:102:9:102:22 | unsafe_query_1 | provenance | | | sqlx.rs:102:26:102:96 | ... + ... | sqlx.rs:102:26:102:102 | ... + ... | provenance | MaD:27 | | sqlx.rs:102:26:102:96 | ... + ... | sqlx.rs:102:26:102:102 | ... + ... | provenance | MaD:28 | | sqlx.rs:102:26:102:102 | ... + ... | sqlx.rs:102:9:102:22 | unsafe_query_1 | provenance | | | sqlx.rs:102:83:102:96 | &remote_string [&ref] | sqlx.rs:102:26:102:96 | ... + ... | provenance | MaD:26 | | sqlx.rs:102:84:102:96 | remote_string | sqlx.rs:102:83:102:96 | &remote_string [&ref] | provenance | | | sqlx.rs:113:31:113:44 | unsafe_query_1 | sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() [&ref] | provenance | MaD:29 | -| sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() | sqlx.rs:113:17:113:29 | ...::raw_sql | provenance | MaD:22 Sink:MaD:22 | | sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() [&ref] | sqlx.rs:113:17:113:29 | ...::raw_sql | provenance | MaD:22 Sink:MaD:22 | | sqlx.rs:120:29:120:42 | unsafe_query_1 | sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:29 | -| sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() | sqlx.rs:120:17:120:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() [&ref] | sqlx.rs:120:17:120:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:127:29:127:42 | unsafe_query_1 | sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:29 | -| sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() | sqlx.rs:127:17:127:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() [&ref] | sqlx.rs:127:17:127:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:136:55:136:68 | unsafe_query_1 | sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() [&ref] | provenance | MaD:29 | -| sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() | sqlx.rs:136:40:136:53 | ...::query_as | provenance | MaD:21 Sink:MaD:21 | | sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() [&ref] | sqlx.rs:136:40:136:53 | ...::query_as | provenance | MaD:21 Sink:MaD:21 | | sqlx.rs:145:55:145:68 | unsafe_query_1 | sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() [&ref] | provenance | MaD:29 | -| sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() | sqlx.rs:145:40:145:53 | ...::query_as | provenance | MaD:21 Sink:MaD:21 | | sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() [&ref] | sqlx.rs:145:40:145:53 | ...::query_as | provenance | MaD:21 Sink:MaD:21 | | sqlx.rs:153:29:153:42 | unsafe_query_1 | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:29 | -| sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() | sqlx.rs:153:17:153:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() [&ref] | sqlx.rs:153:17:153:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:173:9:173:21 | remote_string | sqlx.rs:175:84:175:96 | remote_string | provenance | | | sqlx.rs:173:25:173:46 | ...::get | sqlx.rs:173:25:173:69 | ...::get(...) [Ok] | provenance | Src:MaD:23 | @@ -257,15 +195,12 @@ edges | sqlx.rs:173:25:173:85 | ... .text() [Ok] | sqlx.rs:173:25:173:118 | ... .unwrap_or(...) | provenance | MaD:32 | | sqlx.rs:173:25:173:118 | ... .unwrap_or(...) | sqlx.rs:173:9:173:21 | remote_string | provenance | | | sqlx.rs:175:9:175:22 | unsafe_query_1 | sqlx.rs:188:29:188:42 | unsafe_query_1 | provenance | | -| sqlx.rs:175:9:175:22 | unsafe_query_1 | sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() | provenance | MaD:29 | -| sqlx.rs:175:26:175:96 | ... + ... | sqlx.rs:175:9:175:22 | unsafe_query_1 | provenance | | | sqlx.rs:175:26:175:96 | ... + ... | sqlx.rs:175:26:175:102 | ... + ... | provenance | MaD:27 | | sqlx.rs:175:26:175:96 | ... + ... | sqlx.rs:175:26:175:102 | ... + ... | provenance | MaD:28 | | sqlx.rs:175:26:175:102 | ... + ... | sqlx.rs:175:9:175:22 | unsafe_query_1 | provenance | | | sqlx.rs:175:83:175:96 | &remote_string [&ref] | sqlx.rs:175:26:175:96 | ... + ... | provenance | MaD:26 | | sqlx.rs:175:84:175:96 | remote_string | sqlx.rs:175:83:175:96 | &remote_string [&ref] | provenance | | | sqlx.rs:188:29:188:42 | unsafe_query_1 | sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:29 | -| sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() | sqlx.rs:188:17:188:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() [&ref] | sqlx.rs:188:17:188:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | models | 1 | Sink: <_ as mysql::conn::queryable::Queryable>::query; Argument[0]; sql-injection | @@ -292,7 +227,7 @@ models | 22 | Sink: sqlx_core::raw_sql::raw_sql; Argument[0]; sql-injection | | 23 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | | 24 | Source: std::env::args; ReturnValue.Element; commandargs | -| 25 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 25 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | | 26 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | | 27 | Summary: <_ as core::ops::arith::Add>::add; Argument[self]; ReturnValue; taint | | 28 | Summary: ::add; Argument[self]; ReturnValue; value | @@ -317,55 +252,42 @@ nodes | mysql.rs:18:71:18:83 | remote_string | semmle.label | remote_string | | mysql.rs:25:32:25:36 | query | semmle.label | query | | mysql.rs:25:38:25:49 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:25:38:25:58 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:25:38:25:58 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:26:54:26:62 | query_opt | semmle.label | query_opt | | mysql.rs:26:64:26:75 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:26:64:26:84 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:26:64:26:84 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:27:14:27:23 | query_drop | semmle.label | query_drop | | mysql.rs:27:25:27:36 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:27:25:27:45 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:27:25:27:45 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:28:27:28:37 | query_first | semmle.label | query_first | | mysql.rs:28:39:28:50 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:28:39:28:59 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:28:39:28:59 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:29:49:29:63 | query_first_opt | semmle.label | query_first_opt | | mysql.rs:29:65:29:76 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:29:65:29:85 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:29:65:29:85 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:30:22:30:31 | query_fold | semmle.label | query_fold | | mysql.rs:30:33:30:44 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:30:33:30:53 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:30:33:30:53 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:31:22:31:35 | query_fold_opt | semmle.label | query_fold_opt | | mysql.rs:32:13:32:24 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:32:13:32:33 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:32:13:32:33 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:36:22:36:31 | query_iter | semmle.label | query_iter | | mysql.rs:36:33:36:44 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:36:33:36:53 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:36:33:36:53 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:37:22:37:30 | query_map | semmle.label | query_map | | mysql.rs:37:32:37:43 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:37:32:37:52 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:37:32:37:52 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:38:22:38:34 | query_map_opt | semmle.label | query_map_opt | | mysql.rs:39:13:39:24 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:39:13:39:33 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:39:13:39:33 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:42:33:42:37 | query | semmle.label | query | | mysql.rs:42:39:42:50 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:42:39:42:59 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:42:39:42:59 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:75:26:75:29 | prep | semmle.label | prep | | mysql.rs:75:31:75:42 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:75:31:75:51 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:75:31:75:51 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:80:15:80:24 | query_drop | semmle.label | query_drop | | mysql.rs:80:26:80:37 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:80:26:80:46 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:80:26:80:46 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:97:13:97:29 | mut remote_string | semmle.label | mut remote_string | | mysql.rs:97:33:97:54 | ...::get | semmle.label | ...::get | @@ -380,39 +302,30 @@ nodes | mysql.rs:103:71:103:83 | remote_string | semmle.label | remote_string | | mysql.rs:110:32:110:36 | query | semmle.label | query | | mysql.rs:110:38:110:49 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:110:38:110:58 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:110:38:110:58 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:111:14:111:23 | query_drop | semmle.label | query_drop | | mysql.rs:111:25:111:36 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:111:25:111:45 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:111:25:111:45 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:112:35:112:45 | query_first | semmle.label | query_first | | mysql.rs:112:47:112:58 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:112:47:112:67 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:112:47:112:67 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:114:14:114:23 | query_fold | semmle.label | query_fold | | mysql.rs:114:25:114:36 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:114:25:114:45 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:114:25:114:45 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:116:22:116:31 | query_iter | semmle.label | query_iter | | mysql.rs:116:33:116:44 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:116:33:116:53 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:116:33:116:53 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:118:14:118:25 | query_stream | semmle.label | query_stream | | mysql.rs:118:40:118:51 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:118:40:118:60 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:118:40:118:60 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:121:14:121:22 | query_map | semmle.label | query_map | | mysql.rs:121:24:121:35 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:121:24:121:44 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:121:24:121:44 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:149:26:149:29 | prep | semmle.label | prep | | mysql.rs:149:31:149:42 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:149:31:149:51 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:149:31:149:51 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:154:15:154:24 | query_drop | semmle.label | query_drop | | mysql.rs:154:26:154:37 | unsafe_query | semmle.label | unsafe_query | -| mysql.rs:154:26:154:46 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:154:26:154:46 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | sqlx.rs:47:9:47:18 | arg_string | semmle.label | arg_string | | sqlx.rs:47:22:47:35 | ...::args | semmle.label | ...::args | @@ -442,16 +355,16 @@ nodes | sqlx.rs:59:17:59:72 | MacroExpr | semmle.label | MacroExpr | | sqlx.rs:59:17:59:72 | { ... } | semmle.label | { ... } | | sqlx.rs:78:13:78:23 | ...::query | semmle.label | ...::query | +| sqlx.rs:78:25:78:38 | unsafe_query_1 [&ref] | semmle.label | unsafe_query_1 [&ref] | | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | | sqlx.rs:80:17:80:27 | ...::query | semmle.label | ...::query | +| sqlx.rs:80:29:80:42 | unsafe_query_2 [&ref] | semmle.label | unsafe_query_2 [&ref] | | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() [&ref] | semmle.label | unsafe_query_2.as_str() [&ref] | | sqlx.rs:81:17:81:27 | ...::query | semmle.label | ...::query | | sqlx.rs:81:29:81:42 | unsafe_query_3 | semmle.label | unsafe_query_3 | -| sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() | semmle.label | unsafe_query_3.as_str() | | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() [&ref] | semmle.label | unsafe_query_3.as_str() [&ref] | | sqlx.rs:82:17:82:27 | ...::query | semmle.label | ...::query | | sqlx.rs:82:29:82:42 | unsafe_query_4 | semmle.label | unsafe_query_4 | -| sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() | semmle.label | unsafe_query_4.as_str() | | sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() [&ref] | semmle.label | unsafe_query_4.as_str() [&ref] | | sqlx.rs:100:9:100:21 | remote_string | semmle.label | remote_string | | sqlx.rs:100:25:100:46 | ...::get | semmle.label | ...::get | @@ -466,27 +379,21 @@ nodes | sqlx.rs:102:84:102:96 | remote_string | semmle.label | remote_string | | sqlx.rs:113:17:113:29 | ...::raw_sql | semmle.label | ...::raw_sql | | sqlx.rs:113:31:113:44 | unsafe_query_1 | semmle.label | unsafe_query_1 | -| sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | | sqlx.rs:120:17:120:27 | ...::query | semmle.label | ...::query | | sqlx.rs:120:29:120:42 | unsafe_query_1 | semmle.label | unsafe_query_1 | -| sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | | sqlx.rs:127:17:127:27 | ...::query | semmle.label | ...::query | | sqlx.rs:127:29:127:42 | unsafe_query_1 | semmle.label | unsafe_query_1 | -| sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | | sqlx.rs:136:40:136:53 | ...::query_as | semmle.label | ...::query_as | | sqlx.rs:136:55:136:68 | unsafe_query_1 | semmle.label | unsafe_query_1 | -| sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | | sqlx.rs:145:40:145:53 | ...::query_as | semmle.label | ...::query_as | | sqlx.rs:145:55:145:68 | unsafe_query_1 | semmle.label | unsafe_query_1 | -| sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | | sqlx.rs:153:17:153:27 | ...::query | semmle.label | ...::query | | sqlx.rs:153:29:153:42 | unsafe_query_1 | semmle.label | unsafe_query_1 | -| sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | | sqlx.rs:173:9:173:21 | remote_string | semmle.label | remote_string | | sqlx.rs:173:25:173:46 | ...::get | semmle.label | ...::get | @@ -501,6 +408,5 @@ nodes | sqlx.rs:175:84:175:96 | remote_string | semmle.label | remote_string | | sqlx.rs:188:17:188:27 | ...::query | semmle.label | ...::query | | sqlx.rs:188:29:188:42 | unsafe_query_1 | semmle.label | unsafe_query_1 | -| sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/PathResolutionConsistency.expected index c25043e0ef65..698af5a02797 100644 --- a/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/PathResolutionConsistency.expected @@ -1,2 +1,2 @@ -multipleCallTargets +multipleResolvedTargets | main.rs:9:43:9:63 | ...::from(...) | diff --git a/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected b/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected index 2e00f941c24e..d812380d9c71 100644 --- a/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected +++ b/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected @@ -58,7 +58,7 @@ models | 4 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | | 5 | Source: std::env::args; ReturnValue.Element; commandargs | | 6 | Source: std::env::var; ReturnValue.Field[core::result::Result::Ok(0)]; environment | -| 7 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 7 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | | 8 | Summary: ::unwrap_or_default; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | | 9 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | | 10 | Summary: ::unwrap_or; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | diff --git a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected index 078bce75133f..260e09db470e 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected @@ -1,4 +1,20 @@ -multipleCallTargets +multipleResolvedTargets +| test_logging.rs:214:13:214:22 | * ... | +| test_logging.rs:214:13:214:22 | * ... | +| test_logging.rs:214:13:214:22 | * ... | +| test_logging.rs:214:13:214:22 | * ... | +| test_logging.rs:217:13:217:22 | * ... | +| test_logging.rs:217:13:217:22 | * ... | +| test_logging.rs:217:13:217:22 | * ... | +| test_logging.rs:217:13:217:22 | * ... | +| test_logging.rs:223:13:223:28 | * ... | +| test_logging.rs:223:13:223:28 | * ... | +| test_logging.rs:223:13:223:28 | * ... | +| test_logging.rs:223:13:223:28 | * ... | +| test_logging.rs:226:13:226:28 | * ... | +| test_logging.rs:226:13:226:28 | * ... | +| test_logging.rs:226:13:226:28 | * ... | +| test_logging.rs:226:13:226:28 | * ... | | test_storage.rs:13:10:13:33 | ...::from(...) | | test_storage.rs:17:10:17:35 | ...::from(...) | | test_storage.rs:21:10:21:35 | ...::from(...) | diff --git a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected index 5b1e89fb7aa0..4f4cc63cb26c 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected @@ -49,119 +49,117 @@ | test_logging.rs:223:13:223:28 | ...::assert_failed | test_logging.rs:223:52:223:59 | password | test_logging.rs:223:13:223:28 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:223:52:223:59 | password | password | | test_logging.rs:226:13:226:28 | ...::assert_failed | test_logging.rs:226:52:226:59 | password | test_logging.rs:226:13:226:28 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:226:52:226:59 | password | password | | test_logging.rs:229:23:229:28 | expect | test_logging.rs:229:54:229:61 | password | test_logging.rs:229:23:229:28 | expect | This operation writes $@ to a log file. | test_logging.rs:229:54:229:61 | password | password | -| test_logging.rs:229:23:229:28 | expect | test_logging.rs:229:54:229:61 | password | test_logging.rs:229:23:229:28 | expect | This operation writes $@ to a log file. | test_logging.rs:229:54:229:61 | password | password | | test_logging.rs:242:10:242:14 | write | test_logging.rs:242:42:242:49 | password | test_logging.rs:242:10:242:14 | write | This operation writes $@ to a log file. | test_logging.rs:242:42:242:49 | password | password | | test_logging.rs:245:10:245:18 | write_all | test_logging.rs:245:46:245:53 | password | test_logging.rs:245:10:245:18 | write_all | This operation writes $@ to a log file. | test_logging.rs:245:46:245:53 | password | password | | test_logging.rs:248:9:248:13 | write | test_logging.rs:248:41:248:48 | password | test_logging.rs:248:9:248:13 | write | This operation writes $@ to a log file. | test_logging.rs:248:41:248:48 | password | password | | test_logging.rs:251:9:251:13 | write | test_logging.rs:251:41:251:48 | password | test_logging.rs:251:9:251:13 | write | This operation writes $@ to a log file. | test_logging.rs:251:41:251:48 | password | password | edges -| test_logging.rs:42:12:42:35 | MacroExpr | test_logging.rs:42:5:42:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:42:12:42:35 | MacroExpr | test_logging.rs:42:5:42:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:42:28:42:35 | password | test_logging.rs:42:12:42:35 | MacroExpr | provenance | | -| test_logging.rs:43:12:43:35 | MacroExpr | test_logging.rs:43:5:43:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:43:12:43:35 | MacroExpr | test_logging.rs:43:5:43:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:43:28:43:35 | password | test_logging.rs:43:12:43:35 | MacroExpr | provenance | | -| test_logging.rs:44:11:44:34 | MacroExpr | test_logging.rs:44:5:44:9 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:44:11:44:34 | MacroExpr | test_logging.rs:44:5:44:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:44:27:44:34 | password | test_logging.rs:44:11:44:34 | MacroExpr | provenance | | -| test_logging.rs:45:12:45:35 | MacroExpr | test_logging.rs:45:5:45:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:45:12:45:35 | MacroExpr | test_logging.rs:45:5:45:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:45:28:45:35 | password | test_logging.rs:45:12:45:35 | MacroExpr | provenance | | -| test_logging.rs:46:11:46:34 | MacroExpr | test_logging.rs:46:5:46:9 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:46:11:46:34 | MacroExpr | test_logging.rs:46:5:46:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:46:27:46:34 | password | test_logging.rs:46:11:46:34 | MacroExpr | provenance | | -| test_logging.rs:47:24:47:47 | MacroExpr | test_logging.rs:47:5:47:8 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:47:24:47:47 | MacroExpr | test_logging.rs:47:5:47:8 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:47:40:47:47 | password | test_logging.rs:47:24:47:47 | MacroExpr | provenance | | -| test_logging.rs:52:12:52:35 | MacroExpr | test_logging.rs:52:5:52:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:52:12:52:35 | MacroExpr | test_logging.rs:52:5:52:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:52:28:52:35 | password | test_logging.rs:52:12:52:35 | MacroExpr | provenance | | -| test_logging.rs:54:12:54:48 | MacroExpr | test_logging.rs:54:5:54:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:54:12:54:48 | MacroExpr | test_logging.rs:54:5:54:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:54:41:54:48 | password | test_logging.rs:54:12:54:48 | MacroExpr | provenance | | -| test_logging.rs:56:12:56:46 | MacroExpr | test_logging.rs:56:5:56:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:56:12:56:46 | MacroExpr | test_logging.rs:56:5:56:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:56:39:56:46 | password | test_logging.rs:56:12:56:46 | MacroExpr | provenance | | -| test_logging.rs:57:12:57:33 | MacroExpr | test_logging.rs:57:5:57:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:57:12:57:33 | MacroExpr | test_logging.rs:57:5:57:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:57:24:57:31 | password | test_logging.rs:57:12:57:33 | MacroExpr | provenance | | -| test_logging.rs:58:12:58:35 | MacroExpr | test_logging.rs:58:5:58:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:58:12:58:35 | MacroExpr | test_logging.rs:58:5:58:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:58:24:58:31 | password | test_logging.rs:58:12:58:35 | MacroExpr | provenance | | -| test_logging.rs:60:30:60:53 | MacroExpr | test_logging.rs:60:5:60:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:60:30:60:53 | MacroExpr | test_logging.rs:60:5:60:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:60:46:60:53 | password | test_logging.rs:60:30:60:53 | MacroExpr | provenance | | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:10 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:10 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | test_logging.rs:61:5:61:10 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | test_logging.rs:61:5:61:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | | test_logging.rs:61:20:61:28 | &password | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:61:20:61:28 | &password [&ref] | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:61:21:61:28 | password | test_logging.rs:61:20:61:28 | &password | provenance | Config | | test_logging.rs:61:21:61:28 | password | test_logging.rs:61:20:61:28 | &password [&ref] | provenance | | -| test_logging.rs:65:24:65:47 | MacroExpr | test_logging.rs:65:5:65:8 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:65:24:65:47 | MacroExpr | test_logging.rs:65:5:65:8 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:65:40:65:47 | password | test_logging.rs:65:24:65:47 | MacroExpr | provenance | | -| test_logging.rs:67:42:67:65 | MacroExpr | test_logging.rs:67:5:67:8 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:67:42:67:65 | MacroExpr | test_logging.rs:67:5:67:8 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:67:58:67:65 | password | test_logging.rs:67:42:67:65 | MacroExpr | provenance | | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:8 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:8 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | test_logging.rs:68:5:68:8 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:8 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:8 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | test_logging.rs:68:5:68:8 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | | test_logging.rs:68:18:68:26 | &password | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:68:18:68:26 | &password [&ref] | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:68:19:68:26 | password | test_logging.rs:68:18:68:26 | &password | provenance | Config | | test_logging.rs:68:19:68:26 | password | test_logging.rs:68:18:68:26 | &password [&ref] | provenance | | -| test_logging.rs:72:23:72:46 | MacroExpr | test_logging.rs:72:5:72:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:72:23:72:46 | MacroExpr | test_logging.rs:72:5:72:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:72:39:72:46 | password | test_logging.rs:72:23:72:46 | MacroExpr | provenance | | -| test_logging.rs:74:41:74:64 | MacroExpr | test_logging.rs:74:5:74:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:74:41:74:64 | MacroExpr | test_logging.rs:74:5:74:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:74:57:74:64 | password | test_logging.rs:74:41:74:64 | MacroExpr | provenance | | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:10 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:10 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | test_logging.rs:75:5:75:10 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | test_logging.rs:75:5:75:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | | test_logging.rs:75:20:75:28 | &password | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:75:20:75:28 | &password [&ref] | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:75:21:75:28 | password | test_logging.rs:75:20:75:28 | &password | provenance | Config | | test_logging.rs:75:21:75:28 | password | test_logging.rs:75:20:75:28 | &password [&ref] | provenance | | -| test_logging.rs:76:23:76:46 | MacroExpr | test_logging.rs:76:5:76:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:76:23:76:46 | MacroExpr | test_logging.rs:76:5:76:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:76:39:76:46 | password | test_logging.rs:76:23:76:46 | MacroExpr | provenance | | -| test_logging.rs:82:20:82:43 | MacroExpr | test_logging.rs:82:5:82:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:82:20:82:43 | MacroExpr | test_logging.rs:82:5:82:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:82:36:82:43 | password | test_logging.rs:82:20:82:43 | MacroExpr | provenance | | -| test_logging.rs:84:38:84:61 | MacroExpr | test_logging.rs:84:5:84:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:84:38:84:61 | MacroExpr | test_logging.rs:84:5:84:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:84:54:84:61 | password | test_logging.rs:84:38:84:61 | MacroExpr | provenance | | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:10 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:10 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | test_logging.rs:85:5:85:10 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | test_logging.rs:85:5:85:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | | test_logging.rs:85:20:85:28 | &password | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:85:20:85:28 | &password [&ref] | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:85:21:85:28 | password | test_logging.rs:85:20:85:28 | &password | provenance | Config | | test_logging.rs:85:21:85:28 | password | test_logging.rs:85:20:85:28 | &password [&ref] | provenance | | -| test_logging.rs:86:20:86:43 | MacroExpr | test_logging.rs:86:5:86:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:86:20:86:43 | MacroExpr | test_logging.rs:86:5:86:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:86:36:86:43 | password | test_logging.rs:86:20:86:43 | MacroExpr | provenance | | | test_logging.rs:93:9:93:10 | m1 | test_logging.rs:94:11:94:28 | MacroExpr | provenance | | | test_logging.rs:93:14:93:22 | &password | test_logging.rs:93:9:93:10 | m1 | provenance | | | test_logging.rs:93:15:93:22 | password | test_logging.rs:93:14:93:22 | &password | provenance | Config | -| test_logging.rs:94:11:94:28 | MacroExpr | test_logging.rs:94:5:94:9 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:94:11:94:28 | MacroExpr | test_logging.rs:94:5:94:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:96:9:96:10 | m2 | test_logging.rs:97:11:97:18 | MacroExpr | provenance | | | test_logging.rs:96:14:96:49 | ... + ... | test_logging.rs:96:9:96:10 | m2 | provenance | | -| test_logging.rs:96:41:96:49 | &password | test_logging.rs:96:9:96:10 | m2 | provenance | | -| test_logging.rs:96:41:96:49 | &password | test_logging.rs:96:14:96:49 | ... + ... | provenance | MaD:18 | | test_logging.rs:96:41:96:49 | &password | test_logging.rs:96:14:96:49 | ... + ... | provenance | MaD:17 | -| test_logging.rs:96:41:96:49 | &password [&ref] | test_logging.rs:96:14:96:49 | ... + ... | provenance | MaD:17 | +| test_logging.rs:96:41:96:49 | &password | test_logging.rs:96:14:96:49 | ... + ... | provenance | MaD:16 | +| test_logging.rs:96:41:96:49 | &password [&ref] | test_logging.rs:96:14:96:49 | ... + ... | provenance | MaD:16 | | test_logging.rs:96:42:96:49 | password | test_logging.rs:96:41:96:49 | &password | provenance | Config | | test_logging.rs:96:42:96:49 | password | test_logging.rs:96:41:96:49 | &password [&ref] | provenance | | -| test_logging.rs:97:11:97:18 | MacroExpr | test_logging.rs:97:5:97:9 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:97:11:97:18 | MacroExpr | test_logging.rs:97:5:97:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:99:9:99:10 | m3 | test_logging.rs:100:11:100:18 | MacroExpr | provenance | | | test_logging.rs:99:22:99:45 | ...::format(...) | test_logging.rs:99:22:99:45 | { ... } | provenance | | | test_logging.rs:99:22:99:45 | ...::must_use(...) | test_logging.rs:99:9:99:10 | m3 | provenance | | -| test_logging.rs:99:22:99:45 | MacroExpr | test_logging.rs:99:22:99:45 | ...::format(...) | provenance | MaD:21 | -| test_logging.rs:99:22:99:45 | { ... } | test_logging.rs:99:22:99:45 | ...::must_use(...) | provenance | MaD:22 | +| test_logging.rs:99:22:99:45 | MacroExpr | test_logging.rs:99:22:99:45 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:99:22:99:45 | { ... } | test_logging.rs:99:22:99:45 | ...::must_use(...) | provenance | MaD:21 | | test_logging.rs:99:38:99:45 | password | test_logging.rs:99:22:99:45 | MacroExpr | provenance | | -| test_logging.rs:100:11:100:18 | MacroExpr | test_logging.rs:100:5:100:9 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:118:12:118:41 | MacroExpr | test_logging.rs:118:5:118:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:100:11:100:18 | MacroExpr | test_logging.rs:100:5:100:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:118:12:118:41 | MacroExpr | test_logging.rs:118:5:118:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:12:118:41 | MacroExpr | provenance | | | test_logging.rs:129:9:129:10 | t1 [tuple.1] | test_logging.rs:131:28:131:29 | t1 [tuple.1] | provenance | | | test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | test_logging.rs:129:9:129:10 | t1 [tuple.1] | provenance | | | test_logging.rs:129:25:129:32 | password | test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | provenance | | -| test_logging.rs:131:12:131:31 | MacroExpr | test_logging.rs:131:5:131:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:131:12:131:31 | MacroExpr | test_logging.rs:131:5:131:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:131:28:131:29 | t1 [tuple.1] | test_logging.rs:131:28:131:31 | t1.1 | provenance | | | test_logging.rs:131:28:131:31 | t1.1 | test_logging.rs:131:12:131:31 | MacroExpr | provenance | | -| test_logging.rs:141:11:141:37 | MacroExpr | test_logging.rs:141:5:141:9 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:141:11:141:37 | MacroExpr | test_logging.rs:141:5:141:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:141:27:141:37 | s1.password | test_logging.rs:141:11:141:37 | MacroExpr | provenance | | -| test_logging.rs:151:11:151:37 | MacroExpr | test_logging.rs:151:5:151:9 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:151:11:151:37 | MacroExpr | test_logging.rs:151:5:151:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:151:27:151:37 | s2.password | test_logging.rs:151:11:151:37 | MacroExpr | provenance | | | test_logging.rs:176:33:176:79 | &... | test_logging.rs:176:22:176:31 | log_expect | provenance | MaD:1 Sink:MaD:1 | | test_logging.rs:176:33:176:79 | &... [&ref] | test_logging.rs:176:22:176:31 | log_expect | provenance | MaD:1 Sink:MaD:1 | @@ -169,8 +167,8 @@ edges | test_logging.rs:176:34:176:79 | MacroExpr | test_logging.rs:176:33:176:79 | &... [&ref] | provenance | | | test_logging.rs:176:42:176:78 | ...::format(...) | test_logging.rs:176:42:176:78 | { ... } | provenance | | | test_logging.rs:176:42:176:78 | ...::must_use(...) | test_logging.rs:176:34:176:79 | MacroExpr | provenance | | -| test_logging.rs:176:42:176:78 | MacroExpr | test_logging.rs:176:42:176:78 | ...::format(...) | provenance | MaD:21 | -| test_logging.rs:176:42:176:78 | { ... } | test_logging.rs:176:42:176:78 | ...::must_use(...) | provenance | MaD:22 | +| test_logging.rs:176:42:176:78 | MacroExpr | test_logging.rs:176:42:176:78 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:176:42:176:78 | { ... } | test_logging.rs:176:42:176:78 | ...::must_use(...) | provenance | MaD:21 | | test_logging.rs:176:70:176:78 | password2 | test_logging.rs:176:42:176:78 | MacroExpr | provenance | | | test_logging.rs:180:35:180:81 | &... | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:3 Sink:MaD:3 | | test_logging.rs:180:35:180:81 | &... [&ref] | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:3 Sink:MaD:3 | @@ -178,104 +176,84 @@ edges | test_logging.rs:180:36:180:81 | MacroExpr | test_logging.rs:180:35:180:81 | &... [&ref] | provenance | | | test_logging.rs:180:44:180:80 | ...::format(...) | test_logging.rs:180:44:180:80 | { ... } | provenance | | | test_logging.rs:180:44:180:80 | ...::must_use(...) | test_logging.rs:180:36:180:81 | MacroExpr | provenance | | -| test_logging.rs:180:44:180:80 | MacroExpr | test_logging.rs:180:44:180:80 | ...::format(...) | provenance | MaD:21 | -| test_logging.rs:180:44:180:80 | { ... } | test_logging.rs:180:44:180:80 | ...::must_use(...) | provenance | MaD:22 | +| test_logging.rs:180:44:180:80 | MacroExpr | test_logging.rs:180:44:180:80 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:180:44:180:80 | { ... } | test_logging.rs:180:44:180:80 | ...::must_use(...) | provenance | MaD:21 | | test_logging.rs:180:72:180:80 | password2 | test_logging.rs:180:44:180:80 | MacroExpr | provenance | | | test_logging.rs:183:9:183:19 | err_result2 [Err] | test_logging.rs:184:13:184:23 | err_result2 [Err] | provenance | | | test_logging.rs:183:47:183:68 | Err(...) [Err] | test_logging.rs:183:9:183:19 | err_result2 [Err] | provenance | | -| test_logging.rs:183:51:183:59 | password2 | test_logging.rs:183:51:183:67 | password2.clone() | provenance | MaD:16 | +| test_logging.rs:183:51:183:59 | password2 | test_logging.rs:183:51:183:67 | password2.clone() | provenance | MaD:15 | | test_logging.rs:183:51:183:67 | password2.clone() | test_logging.rs:183:47:183:68 | Err(...) [Err] | provenance | | | test_logging.rs:184:13:184:23 | err_result2 [Err] | test_logging.rs:184:25:184:34 | log_expect | provenance | MaD:4 Sink:MaD:4 | | test_logging.rs:187:9:187:19 | err_result3 [Err] | test_logging.rs:188:13:188:23 | err_result3 [Err] | provenance | | | test_logging.rs:187:47:187:60 | Err(...) [Err] | test_logging.rs:187:9:187:19 | err_result3 [Err] | provenance | | | test_logging.rs:187:51:187:59 | password2 | test_logging.rs:187:47:187:60 | Err(...) [Err] | provenance | | | test_logging.rs:188:13:188:23 | err_result3 [Err] | test_logging.rs:188:25:188:34 | log_unwrap | provenance | MaD:5 Sink:MaD:5 | -| test_logging.rs:192:12:192:37 | MacroExpr | test_logging.rs:192:5:192:10 | ...::_print | provenance | MaD:15 Sink:MaD:15 | +| test_logging.rs:192:12:192:37 | MacroExpr | test_logging.rs:192:5:192:10 | ...::_print | provenance | MaD:14 Sink:MaD:14 | | test_logging.rs:192:30:192:37 | password | test_logging.rs:192:12:192:37 | MacroExpr | provenance | | -| test_logging.rs:193:14:193:37 | MacroExpr | test_logging.rs:193:5:193:12 | ...::_print | provenance | MaD:15 Sink:MaD:15 | +| test_logging.rs:193:14:193:37 | MacroExpr | test_logging.rs:193:5:193:12 | ...::_print | provenance | MaD:14 Sink:MaD:14 | | test_logging.rs:193:30:193:37 | password | test_logging.rs:193:14:193:37 | MacroExpr | provenance | | -| test_logging.rs:194:13:194:38 | MacroExpr | test_logging.rs:194:5:194:11 | ...::_eprint | provenance | MaD:14 Sink:MaD:14 | +| test_logging.rs:194:13:194:38 | MacroExpr | test_logging.rs:194:5:194:11 | ...::_eprint | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:194:31:194:38 | password | test_logging.rs:194:13:194:38 | MacroExpr | provenance | | -| test_logging.rs:195:15:195:38 | MacroExpr | test_logging.rs:195:5:195:13 | ...::_eprint | provenance | MaD:14 Sink:MaD:14 | +| test_logging.rs:195:15:195:38 | MacroExpr | test_logging.rs:195:5:195:13 | ...::_eprint | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:195:31:195:38 | password | test_logging.rs:195:15:195:38 | MacroExpr | provenance | | -| test_logging.rs:199:20:199:43 | MacroExpr | test_logging.rs:199:13:199:18 | ...::panic_fmt | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:199:20:199:43 | MacroExpr | test_logging.rs:199:13:199:18 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | | test_logging.rs:199:36:199:43 | password | test_logging.rs:199:20:199:43 | MacroExpr | provenance | | -| test_logging.rs:202:19:202:42 | MacroExpr | test_logging.rs:202:13:202:17 | ...::panic_fmt | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:202:19:202:42 | MacroExpr | test_logging.rs:202:13:202:17 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | | test_logging.rs:202:35:202:42 | password | test_logging.rs:202:19:202:42 | MacroExpr | provenance | | -| test_logging.rs:205:28:205:51 | MacroExpr | test_logging.rs:205:13:205:26 | ...::panic_fmt | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:205:28:205:51 | MacroExpr | test_logging.rs:205:13:205:26 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | | test_logging.rs:205:44:205:51 | password | test_logging.rs:205:28:205:51 | MacroExpr | provenance | | -| test_logging.rs:208:26:208:49 | MacroExpr | test_logging.rs:208:13:208:24 | ...::panic_fmt | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:208:26:208:49 | MacroExpr | test_logging.rs:208:13:208:24 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | | test_logging.rs:208:42:208:49 | password | test_logging.rs:208:26:208:49 | MacroExpr | provenance | | -| test_logging.rs:211:28:211:51 | MacroExpr | test_logging.rs:211:13:211:19 | ...::panic_fmt | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:211:28:211:51 | MacroExpr | test_logging.rs:211:13:211:19 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | | test_logging.rs:211:44:211:51 | password | test_logging.rs:211:28:211:51 | MacroExpr | provenance | | -| test_logging.rs:214:13:214:22 | ...::assert_failed [Some] | test_logging.rs:214:13:214:22 | ...::assert_failed | provenance | Sink:MaD:9 | | test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | test_logging.rs:214:13:214:22 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | test_logging.rs:214:13:214:22 | ...::assert_failed [Some] | provenance | MaD:10 | | test_logging.rs:214:30:214:53 | MacroExpr | test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | provenance | | | test_logging.rs:214:46:214:53 | password | test_logging.rs:214:30:214:53 | MacroExpr | provenance | | -| test_logging.rs:217:13:217:22 | ...::assert_failed [Some] | test_logging.rs:217:13:217:22 | ...::assert_failed | provenance | Sink:MaD:9 | | test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | test_logging.rs:217:13:217:22 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | test_logging.rs:217:13:217:22 | ...::assert_failed [Some] | provenance | MaD:10 | | test_logging.rs:217:30:217:53 | MacroExpr | test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | provenance | | | test_logging.rs:217:46:217:53 | password | test_logging.rs:217:30:217:53 | MacroExpr | provenance | | -| test_logging.rs:220:34:220:57 | MacroExpr | test_logging.rs:220:13:220:25 | ...::panic_fmt | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:220:34:220:57 | MacroExpr | test_logging.rs:220:13:220:25 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | | test_logging.rs:220:50:220:57 | password | test_logging.rs:220:34:220:57 | MacroExpr | provenance | | -| test_logging.rs:223:13:223:28 | ...::assert_failed [Some] | test_logging.rs:223:13:223:28 | ...::assert_failed | provenance | Sink:MaD:9 | | test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | test_logging.rs:223:13:223:28 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | test_logging.rs:223:13:223:28 | ...::assert_failed [Some] | provenance | MaD:10 | | test_logging.rs:223:36:223:59 | MacroExpr | test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | provenance | | | test_logging.rs:223:52:223:59 | password | test_logging.rs:223:36:223:59 | MacroExpr | provenance | | -| test_logging.rs:226:13:226:28 | ...::assert_failed [Some] | test_logging.rs:226:13:226:28 | ...::assert_failed | provenance | Sink:MaD:9 | | test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | test_logging.rs:226:13:226:28 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | test_logging.rs:226:13:226:28 | ...::assert_failed [Some] | provenance | MaD:10 | | test_logging.rs:226:36:226:59 | MacroExpr | test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | provenance | | | test_logging.rs:226:52:226:59 | password | test_logging.rs:226:36:226:59 | MacroExpr | provenance | | -| test_logging.rs:229:30:229:62 | MacroExpr | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | provenance | MaD:20 | -| test_logging.rs:229:30:229:71 | ... .as_str() | test_logging.rs:229:23:229:28 | expect | provenance | MaD:2 Sink:MaD:2 | -| test_logging.rs:229:30:229:71 | ... .as_str() | test_logging.rs:229:23:229:28 | expect | provenance | MaD:2 Sink:MaD:2 | -| test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | test_logging.rs:229:23:229:28 | expect | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:229:30:229:62 | MacroExpr | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | provenance | MaD:19 | | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | test_logging.rs:229:23:229:28 | expect | provenance | MaD:2 Sink:MaD:2 | | test_logging.rs:229:38:229:61 | ...::format(...) | test_logging.rs:229:38:229:61 | { ... } | provenance | | | test_logging.rs:229:38:229:61 | ...::must_use(...) | test_logging.rs:229:30:229:62 | MacroExpr | provenance | | -| test_logging.rs:229:38:229:61 | ...::must_use(...) | test_logging.rs:229:30:229:71 | ... .as_str() | provenance | MaD:20 | -| test_logging.rs:229:38:229:61 | MacroExpr | test_logging.rs:229:38:229:61 | ...::format(...) | provenance | MaD:21 | -| test_logging.rs:229:38:229:61 | { ... } | test_logging.rs:229:38:229:61 | ...::must_use(...) | provenance | MaD:22 | +| test_logging.rs:229:38:229:61 | MacroExpr | test_logging.rs:229:38:229:61 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:229:38:229:61 | { ... } | test_logging.rs:229:38:229:61 | ...::must_use(...) | provenance | MaD:21 | | test_logging.rs:229:54:229:61 | password | test_logging.rs:229:38:229:61 | MacroExpr | provenance | | -| test_logging.rs:242:16:242:50 | MacroExpr | test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref] | provenance | MaD:19 | -| test_logging.rs:242:16:242:61 | ... .as_bytes() | test_logging.rs:242:10:242:14 | write | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:242:16:242:50 | MacroExpr | test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref] | provenance | MaD:18 | | test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref] | test_logging.rs:242:10:242:14 | write | provenance | MaD:7 Sink:MaD:7 | | test_logging.rs:242:24:242:49 | ...::format(...) | test_logging.rs:242:24:242:49 | { ... } | provenance | | | test_logging.rs:242:24:242:49 | ...::must_use(...) | test_logging.rs:242:16:242:50 | MacroExpr | provenance | | -| test_logging.rs:242:24:242:49 | ...::must_use(...) | test_logging.rs:242:16:242:61 | ... .as_bytes() | provenance | MaD:19 | -| test_logging.rs:242:24:242:49 | MacroExpr | test_logging.rs:242:24:242:49 | ...::format(...) | provenance | MaD:21 | -| test_logging.rs:242:24:242:49 | { ... } | test_logging.rs:242:24:242:49 | ...::must_use(...) | provenance | MaD:22 | +| test_logging.rs:242:24:242:49 | MacroExpr | test_logging.rs:242:24:242:49 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:242:24:242:49 | { ... } | test_logging.rs:242:24:242:49 | ...::must_use(...) | provenance | MaD:21 | | test_logging.rs:242:42:242:49 | password | test_logging.rs:242:24:242:49 | MacroExpr | provenance | | -| test_logging.rs:245:20:245:54 | MacroExpr | test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref] | provenance | MaD:19 | -| test_logging.rs:245:20:245:65 | ... .as_bytes() | test_logging.rs:245:10:245:18 | write_all | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:245:20:245:54 | MacroExpr | test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref] | provenance | MaD:18 | | test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref] | test_logging.rs:245:10:245:18 | write_all | provenance | MaD:8 Sink:MaD:8 | | test_logging.rs:245:28:245:53 | ...::format(...) | test_logging.rs:245:28:245:53 | { ... } | provenance | | | test_logging.rs:245:28:245:53 | ...::must_use(...) | test_logging.rs:245:20:245:54 | MacroExpr | provenance | | -| test_logging.rs:245:28:245:53 | ...::must_use(...) | test_logging.rs:245:20:245:65 | ... .as_bytes() | provenance | MaD:19 | -| test_logging.rs:245:28:245:53 | MacroExpr | test_logging.rs:245:28:245:53 | ...::format(...) | provenance | MaD:21 | -| test_logging.rs:245:28:245:53 | { ... } | test_logging.rs:245:28:245:53 | ...::must_use(...) | provenance | MaD:22 | +| test_logging.rs:245:28:245:53 | MacroExpr | test_logging.rs:245:28:245:53 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:245:28:245:53 | { ... } | test_logging.rs:245:28:245:53 | ...::must_use(...) | provenance | MaD:21 | | test_logging.rs:245:46:245:53 | password | test_logging.rs:245:28:245:53 | MacroExpr | provenance | | -| test_logging.rs:248:15:248:49 | MacroExpr | test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref] | provenance | MaD:19 | -| test_logging.rs:248:15:248:60 | ... .as_bytes() | test_logging.rs:248:9:248:13 | write | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:248:15:248:49 | MacroExpr | test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref] | provenance | MaD:18 | | test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref] | test_logging.rs:248:9:248:13 | write | provenance | MaD:7 Sink:MaD:7 | | test_logging.rs:248:23:248:48 | ...::format(...) | test_logging.rs:248:23:248:48 | { ... } | provenance | | | test_logging.rs:248:23:248:48 | ...::must_use(...) | test_logging.rs:248:15:248:49 | MacroExpr | provenance | | -| test_logging.rs:248:23:248:48 | ...::must_use(...) | test_logging.rs:248:15:248:60 | ... .as_bytes() | provenance | MaD:19 | -| test_logging.rs:248:23:248:48 | MacroExpr | test_logging.rs:248:23:248:48 | ...::format(...) | provenance | MaD:21 | -| test_logging.rs:248:23:248:48 | { ... } | test_logging.rs:248:23:248:48 | ...::must_use(...) | provenance | MaD:22 | +| test_logging.rs:248:23:248:48 | MacroExpr | test_logging.rs:248:23:248:48 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:248:23:248:48 | { ... } | test_logging.rs:248:23:248:48 | ...::must_use(...) | provenance | MaD:21 | | test_logging.rs:248:41:248:48 | password | test_logging.rs:248:23:248:48 | MacroExpr | provenance | | -| test_logging.rs:251:15:251:49 | MacroExpr | test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref] | provenance | MaD:19 | -| test_logging.rs:251:15:251:60 | ... .as_bytes() | test_logging.rs:251:9:251:13 | write | provenance | MaD:6 Sink:MaD:6 | +| test_logging.rs:251:15:251:49 | MacroExpr | test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref] | provenance | MaD:18 | | test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref] | test_logging.rs:251:9:251:13 | write | provenance | MaD:6 Sink:MaD:6 | | test_logging.rs:251:23:251:48 | ...::format(...) | test_logging.rs:251:23:251:48 | { ... } | provenance | | | test_logging.rs:251:23:251:48 | ...::must_use(...) | test_logging.rs:251:15:251:49 | MacroExpr | provenance | | -| test_logging.rs:251:23:251:48 | ...::must_use(...) | test_logging.rs:251:15:251:60 | ... .as_bytes() | provenance | MaD:19 | -| test_logging.rs:251:23:251:48 | MacroExpr | test_logging.rs:251:23:251:48 | ...::format(...) | provenance | MaD:21 | -| test_logging.rs:251:23:251:48 | { ... } | test_logging.rs:251:23:251:48 | ...::must_use(...) | provenance | MaD:22 | +| test_logging.rs:251:23:251:48 | MacroExpr | test_logging.rs:251:23:251:48 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:251:23:251:48 | { ... } | test_logging.rs:251:23:251:48 | ...::must_use(...) | provenance | MaD:21 | | test_logging.rs:251:41:251:48 | password | test_logging.rs:251:23:251:48 | MacroExpr | provenance | | models | 1 | Sink: ::log_expect; Argument[0]; log-injection | @@ -287,19 +265,18 @@ models | 7 | Sink: ::write; Argument[0]; log-injection | | 8 | Sink: ::write_all; Argument[0]; log-injection | | 9 | Sink: core::panicking::assert_failed; Argument[3].Field[core::option::Option::Some(0)]; log-injection | -| 10 | Sink: core::panicking::assert_failed; Argument[3]; log-injection | -| 11 | Sink: core::panicking::panic_fmt; Argument[0]; log-injection | -| 12 | Sink: log::__private_api::log; Argument[1]; log-injection | -| 13 | Sink: log::__private_api::log; Argument[3]; log-injection | -| 14 | Sink: std::io::stdio::_eprint; Argument[0]; log-injection | -| 15 | Sink: std::io::stdio::_print; Argument[0]; log-injection | -| 16 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | -| 17 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | -| 18 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint | -| 19 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | -| 20 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 21 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | -| 22 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | +| 10 | Sink: core::panicking::panic_fmt; Argument[0]; log-injection | +| 11 | Sink: log::__private_api::log; Argument[1]; log-injection | +| 12 | Sink: log::__private_api::log; Argument[3]; log-injection | +| 13 | Sink: std::io::stdio::_eprint; Argument[0]; log-injection | +| 14 | Sink: std::io::stdio::_print; Argument[0]; log-injection | +| 15 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | +| 16 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | +| 17 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint | +| 18 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | +| 19 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 20 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | +| 21 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | nodes | test_logging.rs:42:5:42:10 | ...::log | semmle.label | ...::log | | test_logging.rs:42:12:42:35 | MacroExpr | semmle.label | MacroExpr | @@ -486,12 +463,10 @@ nodes | test_logging.rs:211:28:211:51 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:211:44:211:51 | password | semmle.label | password | | test_logging.rs:214:13:214:22 | ...::assert_failed | semmle.label | ...::assert_failed | -| test_logging.rs:214:13:214:22 | ...::assert_failed [Some] | semmle.label | ...::assert_failed [Some] | | test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | | test_logging.rs:214:30:214:53 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:214:46:214:53 | password | semmle.label | password | | test_logging.rs:217:13:217:22 | ...::assert_failed | semmle.label | ...::assert_failed | -| test_logging.rs:217:13:217:22 | ...::assert_failed [Some] | semmle.label | ...::assert_failed [Some] | | test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | | test_logging.rs:217:30:217:53 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:217:46:217:53 | password | semmle.label | password | @@ -499,19 +474,15 @@ nodes | test_logging.rs:220:34:220:57 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:220:50:220:57 | password | semmle.label | password | | test_logging.rs:223:13:223:28 | ...::assert_failed | semmle.label | ...::assert_failed | -| test_logging.rs:223:13:223:28 | ...::assert_failed [Some] | semmle.label | ...::assert_failed [Some] | | test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | | test_logging.rs:223:36:223:59 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:223:52:223:59 | password | semmle.label | password | | test_logging.rs:226:13:226:28 | ...::assert_failed | semmle.label | ...::assert_failed | -| test_logging.rs:226:13:226:28 | ...::assert_failed [Some] | semmle.label | ...::assert_failed [Some] | | test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | | test_logging.rs:226:36:226:59 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:226:52:226:59 | password | semmle.label | password | | test_logging.rs:229:23:229:28 | expect | semmle.label | expect | -| test_logging.rs:229:23:229:28 | expect | semmle.label | expect | | test_logging.rs:229:30:229:62 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:229:30:229:71 | ... .as_str() | semmle.label | ... .as_str() | | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | semmle.label | ... .as_str() [&ref] | | test_logging.rs:229:38:229:61 | ...::format(...) | semmle.label | ...::format(...) | | test_logging.rs:229:38:229:61 | ...::must_use(...) | semmle.label | ...::must_use(...) | @@ -520,7 +491,6 @@ nodes | test_logging.rs:229:54:229:61 | password | semmle.label | password | | test_logging.rs:242:10:242:14 | write | semmle.label | write | | test_logging.rs:242:16:242:50 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:242:16:242:61 | ... .as_bytes() | semmle.label | ... .as_bytes() | | test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref] | semmle.label | ... .as_bytes() [&ref] | | test_logging.rs:242:24:242:49 | ...::format(...) | semmle.label | ...::format(...) | | test_logging.rs:242:24:242:49 | ...::must_use(...) | semmle.label | ...::must_use(...) | @@ -529,7 +499,6 @@ nodes | test_logging.rs:242:42:242:49 | password | semmle.label | password | | test_logging.rs:245:10:245:18 | write_all | semmle.label | write_all | | test_logging.rs:245:20:245:54 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:245:20:245:65 | ... .as_bytes() | semmle.label | ... .as_bytes() | | test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref] | semmle.label | ... .as_bytes() [&ref] | | test_logging.rs:245:28:245:53 | ...::format(...) | semmle.label | ...::format(...) | | test_logging.rs:245:28:245:53 | ...::must_use(...) | semmle.label | ...::must_use(...) | @@ -538,7 +507,6 @@ nodes | test_logging.rs:245:46:245:53 | password | semmle.label | password | | test_logging.rs:248:9:248:13 | write | semmle.label | write | | test_logging.rs:248:15:248:49 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:248:15:248:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | | test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref] | semmle.label | ... .as_bytes() [&ref] | | test_logging.rs:248:23:248:48 | ...::format(...) | semmle.label | ...::format(...) | | test_logging.rs:248:23:248:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | @@ -547,7 +515,6 @@ nodes | test_logging.rs:248:41:248:48 | password | semmle.label | password | | test_logging.rs:251:9:251:13 | write | semmle.label | write | | test_logging.rs:251:15:251:49 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:251:15:251:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | | test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref] | semmle.label | ... .as_bytes() [&ref] | | test_logging.rs:251:23:251:48 | ...::format(...) | semmle.label | ...::format(...) | | test_logging.rs:251:23:251:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | diff --git a/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.expected b/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.expected index d5f5cbca0023..ab94bd3efe80 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.expected @@ -9,60 +9,41 @@ | test_storage.rs:204:31:204:37 | prepare | test_storage.rs:190:86:190:103 | get_phone_number(...) | test_storage.rs:204:31:204:37 | prepare | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:190:86:190:103 | get_phone_number(...) | get_phone_number(...) | edges | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:100:25:100:37 | insert_query2 | provenance | | -| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:100:25:100:46 | insert_query2.as_str() | provenance | MaD:10 | | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:115:27:115:39 | insert_query2 | provenance | | -| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:115:27:115:48 | insert_query2.as_str() | provenance | MaD:10 | | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:119:25:119:37 | insert_query2 | provenance | | -| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:119:25:119:46 | insert_query2.as_str() | provenance | MaD:10 | | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:125:25:125:37 | insert_query2 | provenance | | -| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:125:25:125:46 | insert_query2.as_str() | provenance | MaD:10 | | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:139:25:139:37 | insert_query2 | provenance | | -| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:139:25:139:46 | insert_query2.as_str() | provenance | MaD:10 | -| test_storage.rs:71:25:71:114 | ... + ... | test_storage.rs:71:9:71:21 | insert_query2 | provenance | | | test_storage.rs:71:25:71:114 | ... + ... | test_storage.rs:71:25:71:121 | ... + ... | provenance | MaD:8 | | test_storage.rs:71:25:71:114 | ... + ... | test_storage.rs:71:25:71:121 | ... + ... | provenance | MaD:9 | | test_storage.rs:71:25:71:121 | ... + ... | test_storage.rs:71:9:71:21 | insert_query2 | provenance | | -| test_storage.rs:71:96:71:114 | &... | test_storage.rs:71:9:71:21 | insert_query2 | provenance | | -| test_storage.rs:71:96:71:114 | &... | test_storage.rs:71:25:71:114 | ... + ... | provenance | | | test_storage.rs:71:96:71:114 | &... | test_storage.rs:71:25:71:114 | ... + ... | provenance | MaD:7 | | test_storage.rs:71:96:71:114 | &... | test_storage.rs:71:25:71:114 | ... + ... | provenance | MaD:6 | | test_storage.rs:71:96:71:114 | &... [&ref] | test_storage.rs:71:25:71:114 | ... + ... | provenance | MaD:6 | | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:71:96:71:114 | &... | provenance | Config | | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:71:96:71:114 | &... [&ref] | provenance | | | test_storage.rs:100:25:100:37 | insert_query2 | test_storage.rs:100:25:100:46 | insert_query2.as_str() [&ref] | provenance | MaD:10 | -| test_storage.rs:100:25:100:46 | insert_query2.as_str() | test_storage.rs:100:13:100:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:100:25:100:46 | insert_query2.as_str() [&ref] | test_storage.rs:100:13:100:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:115:27:115:39 | insert_query2 | test_storage.rs:115:27:115:48 | insert_query2.as_str() [&ref] | provenance | MaD:10 | -| test_storage.rs:115:27:115:48 | insert_query2.as_str() | test_storage.rs:115:13:115:25 | ...::raw_sql | provenance | MaD:5 Sink:MaD:5 | | test_storage.rs:115:27:115:48 | insert_query2.as_str() [&ref] | test_storage.rs:115:13:115:25 | ...::raw_sql | provenance | MaD:5 Sink:MaD:5 | | test_storage.rs:119:25:119:37 | insert_query2 | test_storage.rs:119:25:119:46 | insert_query2.as_str() [&ref] | provenance | MaD:10 | -| test_storage.rs:119:25:119:46 | insert_query2.as_str() | test_storage.rs:119:13:119:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:119:25:119:46 | insert_query2.as_str() [&ref] | test_storage.rs:119:13:119:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:125:25:125:37 | insert_query2 | test_storage.rs:125:25:125:46 | insert_query2.as_str() [&ref] | provenance | MaD:10 | -| test_storage.rs:125:25:125:46 | insert_query2.as_str() | test_storage.rs:125:13:125:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:125:25:125:46 | insert_query2.as_str() [&ref] | test_storage.rs:125:13:125:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:139:25:139:37 | insert_query2 | test_storage.rs:139:25:139:46 | insert_query2.as_str() [&ref] | provenance | MaD:10 | -| test_storage.rs:139:25:139:46 | insert_query2.as_str() | test_storage.rs:139:13:139:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:139:25:139:46 | insert_query2.as_str() [&ref] | test_storage.rs:139:13:139:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:189:9:189:24 | insert_query_bad | test_storage.rs:194:25:194:40 | insert_query_bad | provenance | | -| test_storage.rs:189:28:189:117 | ... + ... | test_storage.rs:189:9:189:24 | insert_query_bad | provenance | | | test_storage.rs:189:28:189:117 | ... + ... | test_storage.rs:189:28:189:124 | ... + ... | provenance | MaD:8 | | test_storage.rs:189:28:189:117 | ... + ... | test_storage.rs:189:28:189:124 | ... + ... | provenance | MaD:9 | | test_storage.rs:189:28:189:124 | ... + ... | test_storage.rs:189:9:189:24 | insert_query_bad | provenance | | -| test_storage.rs:189:99:189:117 | &... | test_storage.rs:189:9:189:24 | insert_query_bad | provenance | | -| test_storage.rs:189:99:189:117 | &... | test_storage.rs:189:28:189:117 | ... + ... | provenance | | | test_storage.rs:189:99:189:117 | &... | test_storage.rs:189:28:189:117 | ... + ... | provenance | MaD:7 | | test_storage.rs:189:99:189:117 | &... | test_storage.rs:189:28:189:117 | ... + ... | provenance | MaD:6 | | test_storage.rs:189:99:189:117 | &... [&ref] | test_storage.rs:189:28:189:117 | ... + ... | provenance | MaD:6 | | test_storage.rs:189:100:189:117 | get_phone_number(...) | test_storage.rs:189:99:189:117 | &... | provenance | Config | | test_storage.rs:189:100:189:117 | get_phone_number(...) | test_storage.rs:189:99:189:117 | &... [&ref] | provenance | | | test_storage.rs:190:9:190:24 | select_query_bad | test_storage.rs:196:35:196:50 | select_query_bad | provenance | | -| test_storage.rs:190:28:190:103 | ... + ... | test_storage.rs:190:9:190:24 | select_query_bad | provenance | | | test_storage.rs:190:28:190:103 | ... + ... | test_storage.rs:190:28:190:109 | ... + ... | provenance | MaD:8 | | test_storage.rs:190:28:190:103 | ... + ... | test_storage.rs:190:28:190:109 | ... + ... | provenance | MaD:9 | | test_storage.rs:190:28:190:109 | ... + ... | test_storage.rs:190:9:190:24 | select_query_bad | provenance | | -| test_storage.rs:190:85:190:103 | &... | test_storage.rs:190:9:190:24 | select_query_bad | provenance | | -| test_storage.rs:190:85:190:103 | &... | test_storage.rs:190:28:190:103 | ... + ... | provenance | | | test_storage.rs:190:85:190:103 | &... | test_storage.rs:190:28:190:103 | ... + ... | provenance | MaD:7 | | test_storage.rs:190:85:190:103 | &... | test_storage.rs:190:28:190:103 | ... + ... | provenance | MaD:6 | | test_storage.rs:190:85:190:103 | &... [&ref] | test_storage.rs:190:28:190:103 | ... + ... | provenance | MaD:6 | @@ -101,23 +82,18 @@ nodes | test_storage.rs:71:97:71:114 | get_phone_number(...) | semmle.label | get_phone_number(...) | | test_storage.rs:100:13:100:23 | ...::query | semmle.label | ...::query | | test_storage.rs:100:25:100:37 | insert_query2 | semmle.label | insert_query2 | -| test_storage.rs:100:25:100:46 | insert_query2.as_str() | semmle.label | insert_query2.as_str() | | test_storage.rs:100:25:100:46 | insert_query2.as_str() [&ref] | semmle.label | insert_query2.as_str() [&ref] | | test_storage.rs:115:13:115:25 | ...::raw_sql | semmle.label | ...::raw_sql | | test_storage.rs:115:27:115:39 | insert_query2 | semmle.label | insert_query2 | -| test_storage.rs:115:27:115:48 | insert_query2.as_str() | semmle.label | insert_query2.as_str() | | test_storage.rs:115:27:115:48 | insert_query2.as_str() [&ref] | semmle.label | insert_query2.as_str() [&ref] | | test_storage.rs:119:13:119:23 | ...::query | semmle.label | ...::query | | test_storage.rs:119:25:119:37 | insert_query2 | semmle.label | insert_query2 | -| test_storage.rs:119:25:119:46 | insert_query2.as_str() | semmle.label | insert_query2.as_str() | | test_storage.rs:119:25:119:46 | insert_query2.as_str() [&ref] | semmle.label | insert_query2.as_str() [&ref] | | test_storage.rs:125:13:125:23 | ...::query | semmle.label | ...::query | | test_storage.rs:125:25:125:37 | insert_query2 | semmle.label | insert_query2 | -| test_storage.rs:125:25:125:46 | insert_query2.as_str() | semmle.label | insert_query2.as_str() | | test_storage.rs:125:25:125:46 | insert_query2.as_str() [&ref] | semmle.label | insert_query2.as_str() [&ref] | | test_storage.rs:139:13:139:23 | ...::query | semmle.label | ...::query | | test_storage.rs:139:25:139:37 | insert_query2 | semmle.label | insert_query2 | -| test_storage.rs:139:25:139:46 | insert_query2.as_str() | semmle.label | insert_query2.as_str() | | test_storage.rs:139:25:139:46 | insert_query2.as_str() [&ref] | semmle.label | insert_query2.as_str() [&ref] | | test_storage.rs:189:9:189:24 | insert_query_bad | semmle.label | insert_query_bad | | test_storage.rs:189:28:189:117 | ... + ... | semmle.label | ... + ... | diff --git a/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/CONSISTENCY/PathResolutionConsistency.expected index b9925a323cc8..18400b7ab59b 100644 --- a/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/CONSISTENCY/PathResolutionConsistency.expected @@ -1,2 +1,2 @@ -multipleCallTargets +multipleResolvedTargets | test_cipher.rs:114:23:114:50 | ...::new(...) | diff --git a/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/Cargo.lock b/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/Cargo.lock index 708b79ed46d5..a47021d54b46 100644 --- a/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/Cargo.lock +++ b/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/Cargo.lock @@ -76,6 +76,15 @@ dependencies = [ "cipher", ] +[[package]] +name = "ecb" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a8bfa975b1aec2145850fcaa1c6fe269a16578c44705a532ae3edc92b8881c7" +dependencies = [ + "cipher", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -146,6 +155,7 @@ dependencies = [ "cbc", "cipher", "des", + "ecb", "rabbit", "rc2", "rc4", diff --git a/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/options.yml b/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/options.yml index 5a3cf0cab12e..139cb084be20 100644 --- a/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/options.yml +++ b/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/options.yml @@ -8,3 +8,4 @@ qltest_dependencies: - rc2 = { version = "0.8.1" } - rc5 = { version = "0.0.1" } - cbc = { version = "0.1.2" } + - ecb = { version = "0.1.2" } diff --git a/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/test_cipher.rs b/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/test_cipher.rs index 61471ac99ecf..17db0f9ceb19 100644 --- a/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/test_cipher.rs +++ b/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/test_cipher.rs @@ -145,3 +145,33 @@ fn test_cbc( let des_cipher4 = cbc::Encryptor::::new(key.into(), iv.into()); // $ MISSING: Alert[rust/weak-cryptographic-algorithm] _ = des_cipher4.encrypt_padded_b2b_mut::(input, data).unwrap(); } + +type MyAesEcbEncryptor = ecb::Encryptor; + +fn test_ecb( + key: &[u8], key128: &[u8;16], + input: &[u8], data: &mut [u8] +) { + let data_len = data.len(); + + // aes with ECB (weak block mode) + let aes_cipher1 = ecb::Encryptor::::new(key128.into()); // $ MISSING: Alert[rust/weak-cryptographic-algorithm] + _ = aes_cipher1.encrypt_padded_mut::(data, data_len).unwrap(); + + let aes_cipher2 = MyAesEcbEncryptor::new(key.into()); // $ MISSING: Alert[rust/weak-cryptographic-algorithm] + _ = aes_cipher2.encrypt_padded_mut::(data, data_len).unwrap(); + + let aes_cipher3 = ecb::Encryptor::::new_from_slice(&key).unwrap(); // $ MISSING: Alert[rust/weak-cryptographic-algorithm] + _ = aes_cipher3.encrypt_padded_mut::(data, data_len).unwrap(); + + let aes_cipher4 = ecb::Encryptor::::new(key.into()); // $ MISSING: Alert[rust/weak-cryptographic-algorithm] + _ = aes_cipher4.encrypt_padded_b2b_mut::(input, data).unwrap(); + + // des with ECB (broken cipher + weak block mode) + let des_cipher1 = ecb::Encryptor::::new(key.into()); // $ MISSING: Alert[rust/weak-cryptographic-algorithm] + _ = des_cipher1.encrypt_padded_mut::(data, data_len).unwrap(); + + // rc2 with ECB (broken cipher + weak block mode) + let rc2_cipher1 = ecb::Encryptor::::new(key.into()); // $ MISSING: Alert[rust/weak-cryptographic-algorithm] + _ = rc2_cipher1.encrypt_padded_mut::(data, data_len).unwrap(); +} diff --git a/rust/ql/test/query-tests/security/CWE-614/InsecureCookie.expected b/rust/ql/test/query-tests/security/CWE-614/InsecureCookie.expected index e3a4998b532b..7decd880f595 100644 --- a/rust/ql/test/query-tests/security/CWE-614/InsecureCookie.expected +++ b/rust/ql/test/query-tests/security/CWE-614/InsecureCookie.expected @@ -125,9 +125,7 @@ edges | main.rs:53:5:53:49 | ... .secure(...) | main.rs:53:5:53:63 | ... .secure(...) | provenance | MaD:35 | | main.rs:53:5:53:63 | ... .secure(...) | main.rs:53:65:53:69 | build | provenance | MaD:2 Sink:MaD:2 | | main.rs:58:9:58:13 | mut a | main.rs:59:13:59:13 | a | provenance | | -| main.rs:58:9:58:13 | mut a | main.rs:59:13:59:21 | a.clone() | provenance | MaD:18 | | main.rs:58:9:58:13 | mut a | main.rs:60:22:60:22 | a | provenance | | -| main.rs:58:9:58:13 | mut a | main.rs:60:22:60:30 | a.clone() | provenance | MaD:18 | | main.rs:58:17:58:27 | ...::new | main.rs:58:17:58:44 | ...::new(...) | provenance | Src:MaD:17 MaD:17 | | main.rs:58:17:58:44 | ...::new(...) | main.rs:58:9:58:13 | mut a | provenance | | | main.rs:59:13:59:13 | a | main.rs:59:13:59:21 | a.clone() | provenance | MaD:18 | @@ -135,21 +133,14 @@ edges | main.rs:60:22:60:22 | a | main.rs:60:22:60:30 | a.clone() | provenance | MaD:18 | | main.rs:60:22:60:30 | a.clone() | main.rs:60:9:60:20 | add_original | provenance | MaD:5 Sink:MaD:5 | | main.rs:63:5:63:5 | [SSA] a | main.rs:64:13:64:13 | a | provenance | | -| main.rs:63:5:63:5 | [SSA] a | main.rs:64:13:64:21 | a.clone() | provenance | MaD:18 | | main.rs:63:5:63:5 | [SSA] a | main.rs:70:29:70:29 | a | provenance | | -| main.rs:63:5:63:5 | [SSA] a | main.rs:70:29:70:37 | a.clone() | provenance | MaD:18 | | main.rs:63:5:63:5 | [SSA] a | main.rs:79:30:79:30 | a | provenance | | -| main.rs:63:5:63:5 | [SSA] a | main.rs:79:30:79:38 | a.clone() | provenance | MaD:18 | | main.rs:63:5:63:5 | a | main.rs:64:13:64:13 | a | provenance | | -| main.rs:63:5:63:5 | a | main.rs:64:13:64:21 | a.clone() | provenance | MaD:18 | | main.rs:63:5:63:5 | a | main.rs:70:29:70:29 | a | provenance | | -| main.rs:63:5:63:5 | a | main.rs:70:29:70:37 | a.clone() | provenance | MaD:18 | | main.rs:63:5:63:5 | a | main.rs:79:30:79:30 | a | provenance | | -| main.rs:63:5:63:5 | a | main.rs:79:30:79:38 | a.clone() | provenance | MaD:18 | | main.rs:64:13:64:13 | a | main.rs:64:13:64:21 | a.clone() | provenance | MaD:18 | | main.rs:64:13:64:21 | a.clone() | main.rs:64:9:64:11 | add | provenance | MaD:4 Sink:MaD:4 | | main.rs:68:9:68:13 | mut b | main.rs:69:20:69:20 | b | provenance | | -| main.rs:68:9:68:13 | mut b | main.rs:69:20:69:28 | b.clone() | provenance | MaD:18 | | main.rs:68:17:68:29 | ...::named | main.rs:68:17:68:37 | ...::named(...) | provenance | Src:MaD:16 MaD:16 | | main.rs:68:17:68:37 | ...::named(...) | main.rs:68:9:68:13 | mut b | provenance | | | main.rs:69:20:69:20 | b | main.rs:69:20:69:28 | b.clone() | provenance | MaD:18 | @@ -157,15 +148,11 @@ edges | main.rs:70:29:70:29 | a | main.rs:70:29:70:37 | a.clone() | provenance | MaD:18 | | main.rs:70:29:70:37 | a.clone() | main.rs:70:16:70:27 | add_original | provenance | MaD:9 Sink:MaD:9 | | main.rs:71:5:71:5 | [SSA] b | main.rs:72:20:72:20 | b | provenance | | -| main.rs:71:5:71:5 | [SSA] b | main.rs:72:20:72:28 | b.clone() | provenance | MaD:18 | | main.rs:71:5:71:5 | b | main.rs:72:20:72:20 | b | provenance | | -| main.rs:71:5:71:5 | b | main.rs:72:20:72:28 | b.clone() | provenance | MaD:18 | | main.rs:72:20:72:20 | b | main.rs:72:20:72:28 | b.clone() | provenance | MaD:18 | | main.rs:72:20:72:28 | b.clone() | main.rs:72:16:72:18 | add | provenance | MaD:8 Sink:MaD:8 | | main.rs:77:9:77:13 | mut c | main.rs:78:21:78:21 | c | provenance | | -| main.rs:77:9:77:13 | mut c | main.rs:78:21:78:29 | c.clone() | provenance | MaD:18 | | main.rs:77:9:77:13 | mut c | main.rs:83:21:83:21 | c | provenance | | -| main.rs:77:9:77:13 | mut c | main.rs:83:21:83:29 | c.clone() | provenance | MaD:18 | | main.rs:77:17:77:28 | ...::from | main.rs:77:17:77:36 | ...::from(...) | provenance | Src:MaD:14 MaD:14 | | main.rs:77:17:77:36 | ...::from(...) | main.rs:77:9:77:13 | mut c | provenance | | | main.rs:78:21:78:21 | c | main.rs:78:21:78:29 | c.clone() | provenance | MaD:18 | @@ -175,9 +162,7 @@ edges | main.rs:83:21:83:21 | c | main.rs:83:21:83:29 | c.clone() | provenance | MaD:18 | | main.rs:83:21:83:29 | c.clone() | main.rs:83:17:83:19 | add | provenance | MaD:6 Sink:MaD:6 | | main.rs:87:9:87:13 | mut d | main.rs:88:13:88:13 | d | provenance | | -| main.rs:87:9:87:13 | mut d | main.rs:88:13:88:21 | d.clone() | provenance | MaD:18 | | main.rs:87:9:87:13 | mut d | main.rs:94:13:94:13 | d | provenance | | -| main.rs:87:9:87:13 | mut d | main.rs:94:13:94:21 | d.clone() | provenance | MaD:18 | | main.rs:87:17:87:28 | ...::from | main.rs:87:17:87:36 | ...::from(...) | provenance | Src:MaD:14 MaD:14 | | main.rs:87:17:87:36 | ...::from(...) | main.rs:87:9:87:13 | mut d | provenance | | | main.rs:88:13:88:13 | d | main.rs:88:13:88:21 | d.clone() | provenance | MaD:18 | @@ -188,25 +173,22 @@ edges | main.rs:114:5:114:36 | ...::build(...) | main.rs:114:5:114:54 | ... .partitioned(...) | provenance | MaD:33 | | main.rs:114:5:114:54 | ... .partitioned(...) | main.rs:114:56:114:60 | build | provenance | MaD:2 Sink:MaD:2 | | main.rs:122:9:122:9 | a | main.rs:123:20:123:20 | a | provenance | | -| main.rs:122:9:122:9 | a | main.rs:123:20:123:28 | a.clone() | provenance | MaD:18 | | main.rs:122:13:122:41 | ...::new | main.rs:122:13:122:58 | ...::new(...) | provenance | Src:MaD:13 MaD:13 | | main.rs:122:13:122:58 | ...::new(...) | main.rs:122:9:122:9 | a | provenance | | | main.rs:123:20:123:20 | a | main.rs:123:20:123:28 | a.clone() | provenance | MaD:18 | | main.rs:123:20:123:28 | a.clone() | main.rs:123:13:123:18 | insert | provenance | MaD:1 Sink:MaD:1 | | main.rs:130:9:130:9 | c | main.rs:131:20:131:20 | c | provenance | | -| main.rs:130:9:130:9 | c | main.rs:131:20:131:28 | c.clone() | provenance | MaD:18 | -| main.rs:130:9:130:9 | c | main.rs:134:13:134:35 | c.set_partitioned(...) | provenance | MaD:25 | +| main.rs:130:9:130:9 | c | main.rs:134:13:134:13 | c | provenance | | | main.rs:130:13:130:13 | b | main.rs:130:13:130:31 | b.set_secure(...) | provenance | MaD:28 | | main.rs:130:13:130:31 | b.set_secure(...) | main.rs:130:9:130:9 | c | provenance | | | main.rs:131:20:131:20 | c | main.rs:131:20:131:28 | c.clone() | provenance | MaD:18 | | main.rs:131:20:131:28 | c.clone() | main.rs:131:13:131:18 | insert | provenance | MaD:1 Sink:MaD:1 | | main.rs:134:9:134:9 | d | main.rs:135:20:135:20 | d | provenance | | -| main.rs:134:9:134:9 | d | main.rs:135:20:135:28 | d.clone() | provenance | MaD:18 | +| main.rs:134:13:134:13 | c | main.rs:134:13:134:35 | c.set_partitioned(...) | provenance | MaD:25 | | main.rs:134:13:134:35 | c.set_partitioned(...) | main.rs:134:9:134:9 | d | provenance | | | main.rs:135:20:135:20 | d | main.rs:135:20:135:28 | d.clone() | provenance | MaD:18 | | main.rs:135:20:135:28 | d.clone() | main.rs:135:13:135:18 | insert | provenance | MaD:1 Sink:MaD:1 | | main.rs:146:9:146:9 | g | main.rs:147:20:147:20 | g | provenance | | -| main.rs:146:9:146:9 | g | main.rs:147:20:147:28 | g.clone() | provenance | MaD:18 | | main.rs:146:13:146:13 | f | main.rs:146:13:146:31 | f.set_secure(...) | provenance | MaD:28 | | main.rs:146:13:146:31 | f.set_secure(...) | main.rs:146:9:146:9 | g | provenance | | | main.rs:147:20:147:20 | g | main.rs:147:20:147:28 | g.clone() | provenance | MaD:18 | @@ -216,29 +198,17 @@ edges | main.rs:151:13:151:61 | ...::from(...) | main.rs:151:9:151:9 | h | provenance | | | main.rs:152:20:152:20 | h | main.rs:152:13:152:18 | insert | provenance | MaD:1 Sink:MaD:1 | | main.rs:155:9:155:9 | i | main.rs:156:20:156:20 | i | provenance | | -| main.rs:155:9:155:9 | i | main.rs:156:20:156:28 | i.clone() | provenance | MaD:18 | | main.rs:155:9:155:9 | i | main.rs:157:20:157:20 | i | provenance | | -| main.rs:155:9:155:9 | i | main.rs:157:20:157:28 | i.clone() | provenance | MaD:18 | | main.rs:155:9:155:9 | i | main.rs:158:20:158:20 | i | provenance | | -| main.rs:155:9:155:9 | i | main.rs:158:20:158:28 | i.clone() | provenance | MaD:18 | | main.rs:155:9:155:9 | i | main.rs:159:20:159:20 | i | provenance | | -| main.rs:155:9:155:9 | i | main.rs:159:20:159:28 | i.clone() | provenance | MaD:18 | | main.rs:155:9:155:9 | i | main.rs:160:20:160:20 | i | provenance | | -| main.rs:155:9:155:9 | i | main.rs:160:20:160:28 | i.clone() | provenance | MaD:18 | | main.rs:155:9:155:9 | i | main.rs:161:20:161:20 | i | provenance | | -| main.rs:155:9:155:9 | i | main.rs:161:20:161:28 | i.clone() | provenance | MaD:18 | | main.rs:155:9:155:9 | i | main.rs:162:20:162:20 | i | provenance | | -| main.rs:155:9:155:9 | i | main.rs:162:20:162:28 | i.clone() | provenance | MaD:18 | | main.rs:155:9:155:9 | i | main.rs:163:20:163:20 | i | provenance | | -| main.rs:155:9:155:9 | i | main.rs:163:20:163:28 | i.clone() | provenance | MaD:18 | | main.rs:155:9:155:9 | i | main.rs:164:20:164:20 | i | provenance | | -| main.rs:155:9:155:9 | i | main.rs:164:20:164:28 | i.clone() | provenance | MaD:18 | | main.rs:155:9:155:9 | i | main.rs:165:20:165:20 | i | provenance | | -| main.rs:155:9:155:9 | i | main.rs:165:20:165:28 | i.clone() | provenance | MaD:18 | | main.rs:155:9:155:9 | i | main.rs:166:20:166:20 | i | provenance | | -| main.rs:155:9:155:9 | i | main.rs:166:20:166:28 | i.clone() | provenance | MaD:18 | | main.rs:155:9:155:9 | i | main.rs:167:20:167:20 | i | provenance | | -| main.rs:155:9:155:9 | i | main.rs:167:20:167:28 | i.clone() | provenance | MaD:18 | | main.rs:155:13:155:41 | ...::new | main.rs:155:13:155:58 | ...::new(...) | provenance | Src:MaD:13 MaD:13 | | main.rs:155:13:155:58 | ...::new(...) | main.rs:155:9:155:9 | i | provenance | | | main.rs:156:20:156:20 | i | main.rs:156:20:156:28 | i.clone() | provenance | MaD:18 | @@ -285,31 +255,22 @@ edges | main.rs:198:5:198:53 | ... .secure(...) | main.rs:198:5:198:63 | ... .path(...) | provenance | MaD:34 | | main.rs:198:5:198:63 | ... .path(...) | main.rs:198:65:198:70 | finish | provenance | MaD:3 Sink:MaD:3 | | main.rs:201:5:201:11 | [SSA] cookie1 | main.rs:202:13:202:19 | cookie1 | provenance | | -| main.rs:201:5:201:11 | [SSA] cookie1 | main.rs:202:13:202:27 | cookie1.clone() | provenance | MaD:18 | | main.rs:201:5:201:11 | cookie1 | main.rs:202:13:202:19 | cookie1 | provenance | | -| main.rs:201:5:201:11 | cookie1 | main.rs:202:13:202:27 | cookie1.clone() | provenance | MaD:18 | | main.rs:202:13:202:19 | cookie1 | main.rs:202:13:202:27 | cookie1.clone() | provenance | MaD:18 | | main.rs:202:13:202:27 | cookie1.clone() | main.rs:202:9:202:11 | add | provenance | MaD:4 Sink:MaD:4 | | main.rs:212:5:212:22 | ...::build | main.rs:212:5:212:39 | ...::build(...) | provenance | Src:MaD:15 MaD:15 | | main.rs:212:5:212:39 | ...::build(...) | main.rs:212:41:212:46 | finish | provenance | MaD:3 Sink:MaD:3 | | main.rs:214:9:214:15 | cookie3 | main.rs:215:13:215:19 | cookie3 | provenance | | -| main.rs:214:9:214:15 | cookie3 | main.rs:215:13:215:27 | cookie3.clone() | provenance | MaD:18 | | main.rs:214:19:214:34 | ...::new | main.rs:214:19:214:51 | ...::new(...) | provenance | Src:MaD:17 MaD:17 | | main.rs:214:19:214:51 | ...::new(...) | main.rs:214:9:214:15 | cookie3 | provenance | | | main.rs:215:13:215:19 | cookie3 | main.rs:215:13:215:27 | cookie3.clone() | provenance | MaD:18 | | main.rs:215:13:215:27 | cookie3.clone() | main.rs:215:9:215:11 | add | provenance | MaD:4 Sink:MaD:4 | | main.rs:218:5:218:11 | [SSA] cookie2 | main.rs:219:13:219:19 | cookie2 | provenance | | -| main.rs:218:5:218:11 | [SSA] cookie2 | main.rs:219:13:219:27 | cookie2.clone() | provenance | MaD:18 | | main.rs:218:5:218:11 | cookie2 | main.rs:219:13:219:19 | cookie2 | provenance | | -| main.rs:218:5:218:11 | cookie2 | main.rs:219:13:219:27 | cookie2.clone() | provenance | MaD:18 | | main.rs:219:13:219:19 | cookie2 | main.rs:219:13:219:27 | cookie2.clone() | provenance | MaD:18 | | main.rs:219:13:219:27 | cookie2.clone() | main.rs:219:9:219:11 | add | provenance | MaD:4 Sink:MaD:4 | | main.rs:228:5:228:11 | [SSA] cookie1 | main.rs:229:13:229:19 | cookie1 | provenance | | -| main.rs:228:5:228:11 | [SSA] cookie1 | main.rs:229:13:229:27 | cookie1.clone() | provenance | MaD:18 | | main.rs:228:5:228:11 | cookie1 | main.rs:229:13:229:19 | cookie1 | provenance | | -| main.rs:228:5:228:11 | cookie1 | main.rs:229:13:229:19 | cookie1 | provenance | MaD:39 | -| main.rs:228:5:228:11 | cookie1 | main.rs:229:13:229:27 | cookie1.clone() | provenance | MaD:39 | -| main.rs:228:5:228:11 | cookie1 | main.rs:229:13:229:27 | cookie1.clone() | provenance | MaD:18 | | main.rs:229:13:229:19 | cookie1 | main.rs:229:13:229:27 | cookie1.clone() | provenance | MaD:18 | | main.rs:229:13:229:27 | cookie1.clone() | main.rs:229:9:229:11 | add | provenance | MaD:11 Sink:MaD:11 | | main.rs:241:9:241:25 | cookie_config_bad | main.rs:242:43:242:59 | cookie_config_bad | provenance | | @@ -328,23 +289,18 @@ edges | main.rs:260:5:260:57 | ... .secure(...) | main.rs:260:5:260:67 | ... .path(...) | provenance | MaD:34 | | main.rs:260:5:260:67 | ... .path(...) | main.rs:260:69:260:74 | finish | provenance | MaD:3 Sink:MaD:3 | | main.rs:263:5:263:11 | [SSA] cookie1 | main.rs:264:13:264:19 | cookie1 | provenance | | -| main.rs:263:5:263:11 | [SSA] cookie1 | main.rs:264:13:264:27 | cookie1.clone() | provenance | MaD:18 | | main.rs:263:5:263:11 | cookie1 | main.rs:264:13:264:19 | cookie1 | provenance | | -| main.rs:263:5:263:11 | cookie1 | main.rs:264:13:264:27 | cookie1.clone() | provenance | MaD:18 | | main.rs:264:13:264:19 | cookie1 | main.rs:264:13:264:27 | cookie1.clone() | provenance | MaD:18 | | main.rs:264:13:264:27 | cookie1.clone() | main.rs:264:9:264:11 | add | provenance | MaD:4 Sink:MaD:4 | | main.rs:274:5:274:26 | ...::build | main.rs:274:5:274:43 | ...::build(...) | provenance | Src:MaD:15 MaD:15 | | main.rs:274:5:274:43 | ...::build(...) | main.rs:274:45:274:50 | finish | provenance | MaD:3 Sink:MaD:3 | | main.rs:276:9:276:15 | cookie3 | main.rs:277:13:277:19 | cookie3 | provenance | | -| main.rs:276:9:276:15 | cookie3 | main.rs:277:13:277:27 | cookie3.clone() | provenance | MaD:18 | | main.rs:276:19:276:38 | ...::new | main.rs:276:19:276:55 | ...::new(...) | provenance | Src:MaD:17 MaD:17 | | main.rs:276:19:276:55 | ...::new(...) | main.rs:276:9:276:15 | cookie3 | provenance | | | main.rs:277:13:277:19 | cookie3 | main.rs:277:13:277:27 | cookie3.clone() | provenance | MaD:18 | | main.rs:277:13:277:27 | cookie3.clone() | main.rs:277:9:277:11 | add | provenance | MaD:4 Sink:MaD:4 | | main.rs:280:5:280:11 | [SSA] cookie2 | main.rs:281:13:281:19 | cookie2 | provenance | | -| main.rs:280:5:280:11 | [SSA] cookie2 | main.rs:281:13:281:27 | cookie2.clone() | provenance | MaD:18 | | main.rs:280:5:280:11 | cookie2 | main.rs:281:13:281:19 | cookie2 | provenance | | -| main.rs:280:5:280:11 | cookie2 | main.rs:281:13:281:27 | cookie2.clone() | provenance | MaD:18 | | main.rs:281:13:281:19 | cookie2 | main.rs:281:13:281:27 | cookie2.clone() | provenance | MaD:18 | | main.rs:281:13:281:27 | cookie2.clone() | main.rs:281:9:281:11 | add | provenance | MaD:4 Sink:MaD:4 | models @@ -386,7 +342,6 @@ models | 36 | Summary: ::name; Argument[self]; ReturnValue; taint | | 37 | Summary: ::path; Argument[self]; ReturnValue; taint | | 38 | Summary: ::secure; Argument[self].OptionalBarrier[cookie-secure-arg0]; ReturnValue; taint | -| 39 | Summary: ::set_secure; Argument[self].OptionalBarrier[cookie-secure-arg0]; Argument[self]; taint | nodes | main.rs:8:19:8:50 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:8:19:8:64 | ... .secure(...) | semmle.label | ... .secure(...) | @@ -526,6 +481,7 @@ nodes | main.rs:131:20:131:20 | c | semmle.label | c | | main.rs:131:20:131:28 | c.clone() | semmle.label | c.clone() | | main.rs:134:9:134:9 | d | semmle.label | d | +| main.rs:134:13:134:13 | c | semmle.label | c | | main.rs:134:13:134:35 | c.set_partitioned(...) | semmle.label | c.set_partitioned(...) | | main.rs:135:13:135:18 | insert | semmle.label | insert | | main.rs:135:20:135:20 | d | semmle.label | d | diff --git a/rust/ql/test/query-tests/security/CWE-696/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-696/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index 538ecf9c2e35..000000000000 --- a/rust/ql/test/query-tests/security/CWE-696/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -multipleCallTargets -| test.rs:117:9:117:21 | ptr.is_null() | diff --git a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index 1abeb1aeb874..000000000000 --- a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,7 +0,0 @@ -multipleCallTargets -| main.rs:242:44:242:78 | ... .cast() | -| main.rs:245:44:245:78 | ... .cast() | -| main.rs:248:44:248:78 | ... .cast() | -| main.rs:251:14:251:48 | ... .cast() | -| main.rs:254:14:254:48 | ... .cast() | -| main.rs:257:14:257:48 | ... .cast() | diff --git a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected index 8fcbd27ac02e..24edd2ff7f50 100644 --- a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected +++ b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected @@ -57,104 +57,109 @@ edges | main.rs:18:41:18:41 | v | main.rs:20:50:20:50 | v | provenance | | | main.rs:18:41:18:41 | v | main.rs:29:60:29:60 | v | provenance | | | main.rs:18:41:18:41 | v | main.rs:32:60:32:60 | v | provenance | | -| main.rs:18:41:18:41 | v | main.rs:32:60:32:89 | ... * ... | provenance | | -| main.rs:18:41:18:41 | v | main.rs:35:9:35:10 | s6 | provenance | | | main.rs:18:41:18:41 | v | main.rs:35:49:35:49 | v | provenance | | | main.rs:20:9:20:10 | l2 | main.rs:21:31:21:32 | l2 | provenance | | -| main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:40 | +| main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:42 | | main.rs:20:14:20:63 | ... .unwrap() | main.rs:20:9:20:10 | l2 | provenance | | -| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:30 | +| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:34 | | main.rs:21:31:21:32 | l2 | main.rs:21:13:21:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:21:31:21:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:24 | -| main.rs:21:31:21:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:24 | +| main.rs:21:31:21:32 | l2 | main.rs:22:31:22:32 | l2 | provenance | | +| main.rs:21:31:21:32 | l2 | main.rs:23:31:23:32 | l2 | provenance | | | main.rs:21:31:21:32 | l2 | main.rs:24:38:24:39 | l2 | provenance | | -| main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:40 | +| main.rs:22:31:22:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:28 | +| main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:42 | | main.rs:22:31:22:53 | ... .unwrap() | main.rs:22:13:22:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:40 | -| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:33 | +| main.rs:23:31:23:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:28 | +| main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:42 | +| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:36 | | main.rs:23:31:23:68 | ... .pad_to_align() | main.rs:23:13:23:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:24:38:24:39 | l2 | main.rs:24:13:24:36 | ...::alloc_zeroed | provenance | MaD:16 Sink:MaD:16 | | main.rs:29:9:29:10 | l4 | main.rs:30:31:30:32 | l4 | provenance | | | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | main.rs:29:9:29:10 | l4 | provenance | | -| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:32 | +| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:35 | | main.rs:30:31:30:32 | l4 | main.rs:30:13:30:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:32:9:32:10 | l5 | main.rs:33:31:33:32 | l5 | provenance | | | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | main.rs:32:9:32:10 | l5 | provenance | | -| main.rs:32:60:32:60 | v | main.rs:32:60:32:89 | ... * ... | provenance | MaD:43 | -| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:32 | +| main.rs:32:60:32:60 | v | main.rs:32:60:32:89 | ... * ... | provenance | MaD:27 | +| main.rs:32:60:32:60 | v | main.rs:32:60:32:89 | ... * ... | provenance | MaD:45 | +| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:35 | | main.rs:33:31:33:32 | l5 | main.rs:33:13:33:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:35:9:35:10 | s6 | main.rs:36:60:36:61 | s6 | provenance | | -| main.rs:35:15:35:49 | ... * ... | main.rs:35:9:35:10 | s6 | provenance | | -| main.rs:35:49:35:49 | v | main.rs:35:15:35:49 | ... * ... | provenance | MaD:42 | +| main.rs:35:14:35:54 | ... + ... | main.rs:35:9:35:10 | s6 | provenance | | +| main.rs:35:15:35:49 | ... * ... | main.rs:35:14:35:54 | ... + ... | provenance | MaD:24 | +| main.rs:35:49:35:49 | v | main.rs:35:15:35:49 | ... * ... | provenance | MaD:26 | +| main.rs:35:49:35:49 | v | main.rs:35:15:35:49 | ... * ... | provenance | MaD:25 | +| main.rs:35:49:35:49 | v | main.rs:35:15:35:49 | ... * ... | provenance | MaD:44 | | main.rs:36:9:36:10 | l6 | main.rs:37:31:37:32 | l6 | provenance | | -| main.rs:36:9:36:10 | l6 [Layout.size] | main.rs:37:31:37:32 | l6 [Layout.size] | provenance | | | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | main.rs:36:9:36:10 | l6 | provenance | | -| main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) [Layout.size] | main.rs:36:9:36:10 | l6 [Layout.size] | provenance | | -| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:32 | -| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) [Layout.size] | provenance | MaD:31 | +| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:35 | | main.rs:37:31:37:32 | l6 | main.rs:37:13:37:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:37:31:37:32 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:37 | -| main.rs:37:31:37:32 | l6 [Layout.size] | main.rs:39:60:39:68 | l6.size() | provenance | MaD:36 | +| main.rs:37:31:37:32 | l6 | main.rs:39:60:39:61 | l6 | provenance | | | main.rs:39:9:39:10 | l7 | main.rs:40:31:40:32 | l7 | provenance | | | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | main.rs:39:9:39:10 | l7 | provenance | | -| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:32 | +| main.rs:39:60:39:61 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:39 | +| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:35 | | main.rs:40:31:40:32 | l7 | main.rs:40:13:40:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:43:44:43:51 | ...: usize | main.rs:50:41:50:41 | v | provenance | | -| main.rs:43:44:43:51 | ...: usize | main.rs:51:41:51:45 | ... + ... | provenance | | +| main.rs:43:44:43:51 | ...: usize | main.rs:51:41:51:41 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:53:48:53:48 | v | provenance | | -| main.rs:43:44:43:51 | ...: usize | main.rs:54:48:54:53 | ... * ... | provenance | | +| main.rs:43:44:43:51 | ...: usize | main.rs:54:48:54:48 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:58:34:58:34 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:67:46:67:46 | v | provenance | | -| main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:40 | +| main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:42 | | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | main.rs:50:31:50:53 | ... .0 | provenance | | | main.rs:50:31:50:53 | ... .0 | main.rs:50:13:50:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:34 | -| main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:40 | +| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:37 | +| main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:42 | | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | main.rs:51:31:51:57 | ... .0 | provenance | | | main.rs:51:31:51:57 | ... .0 | main.rs:51:13:51:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:34 | -| main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:40 | +| main.rs:51:41:51:41 | v | main.rs:51:41:51:45 | ... + ... | provenance | MaD:24 | +| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:37 | +| main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:42 | | main.rs:53:31:53:58 | ... .unwrap() | main.rs:53:13:53:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:35 | -| main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:40 | +| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:38 | +| main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:42 | | main.rs:54:31:54:63 | ... .unwrap() | main.rs:54:13:54:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:35 | +| main.rs:54:48:54:48 | v | main.rs:54:48:54:53 | ... * ... | provenance | MaD:27 | +| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:38 | | main.rs:58:9:58:20 | TuplePat [tuple.0] | main.rs:58:10:58:11 | k1 | provenance | | | main.rs:58:10:58:11 | k1 | main.rs:59:31:59:32 | k1 | provenance | | -| main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:39 | +| main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:41 | | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | main.rs:58:9:58:20 | TuplePat [tuple.0] | provenance | | -| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:34 | +| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:37 | | main.rs:59:31:59:32 | k1 | main.rs:59:13:59:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:59:31:59:32 | k1 | main.rs:60:34:60:35 | k1 | provenance | | -| main.rs:59:31:59:32 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:27 | +| main.rs:59:31:59:32 | k1 | main.rs:62:24:62:25 | k1 | provenance | | | main.rs:59:31:59:32 | k1 | main.rs:64:48:64:49 | k1 | provenance | | -| main.rs:59:31:59:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:29 | +| main.rs:59:31:59:32 | k1 | main.rs:65:31:65:32 | k1 | provenance | | | main.rs:60:9:60:20 | TuplePat [tuple.0] | main.rs:60:10:60:11 | k2 | provenance | | | main.rs:60:10:60:11 | k2 | main.rs:61:31:61:32 | k2 | provenance | | -| main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:40 | +| main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:42 | | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | main.rs:60:9:60:20 | TuplePat [tuple.0] | provenance | | -| main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:26 | +| main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:30 | | main.rs:61:31:61:32 | k2 | main.rs:61:13:61:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:62:9:62:20 | TuplePat [tuple.0] | main.rs:62:10:62:11 | k3 | provenance | | | main.rs:62:10:62:11 | k3 | main.rs:63:31:63:32 | k3 | provenance | | -| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:40 | +| main.rs:62:24:62:25 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:31 | +| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:42 | | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | main.rs:62:9:62:20 | TuplePat [tuple.0] | provenance | | | main.rs:63:31:63:32 | k3 | main.rs:63:13:63:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:40 | +| main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:42 | | main.rs:64:31:64:59 | ... .unwrap() | main.rs:64:13:64:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:28 | -| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:40 | +| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:32 | +| main.rs:65:31:65:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:33 | +| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:42 | | main.rs:65:31:65:59 | ... .unwrap() | main.rs:65:13:65:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:67:9:67:10 | l4 | main.rs:68:31:68:32 | l4 | provenance | | -| main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:40 | +| main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:42 | | main.rs:67:14:67:56 | ... .unwrap() | main.rs:67:9:67:10 | l4 | provenance | | -| main.rs:67:46:67:46 | v | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | +| main.rs:67:46:67:46 | v | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | | main.rs:68:31:68:32 | l4 | main.rs:68:13:68:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:86:35:86:42 | ...: usize | main.rs:87:54:87:54 | v | provenance | | | main.rs:87:9:87:14 | layout | main.rs:88:31:88:36 | layout | provenance | | -| main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:40 | +| main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:42 | | main.rs:87:18:87:67 | ... .unwrap() | main.rs:87:9:87:14 | layout | provenance | | -| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:30 | +| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:34 | | main.rs:88:31:88:36 | layout | main.rs:88:13:88:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:91:38:91:45 | ...: usize | main.rs:92:47:92:47 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:101:51:101:51 | v | provenance | | @@ -165,16 +170,16 @@ edges | main.rs:91:38:91:45 | ...: usize | main.rs:161:55:161:55 | v | provenance | | | main.rs:92:9:92:10 | l1 | main.rs:96:35:96:36 | l1 | provenance | | | main.rs:92:9:92:10 | l1 | main.rs:102:35:102:36 | l1 | provenance | | -| main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | main.rs:92:14:92:57 | ... .unwrap() | provenance | MaD:40 | +| main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | main.rs:92:14:92:57 | ... .unwrap() | provenance | MaD:42 | | main.rs:92:14:92:57 | ... .unwrap() | main.rs:92:9:92:10 | l1 | provenance | | -| main.rs:92:47:92:47 | v | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | +| main.rs:92:47:92:47 | v | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | | main.rs:96:35:96:36 | l1 | main.rs:96:17:96:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:96:35:96:36 | l1 | main.rs:109:35:109:36 | l1 | provenance | | | main.rs:96:35:96:36 | l1 | main.rs:111:35:111:36 | l1 | provenance | | | main.rs:101:13:101:14 | l3 | main.rs:103:35:103:36 | l3 | provenance | | -| main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | main.rs:101:18:101:61 | ... .unwrap() | provenance | MaD:40 | +| main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | main.rs:101:18:101:61 | ... .unwrap() | provenance | MaD:42 | | main.rs:101:18:101:61 | ... .unwrap() | main.rs:101:13:101:14 | l3 | provenance | | -| main.rs:101:51:101:51 | v | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | +| main.rs:101:51:101:51 | v | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | | main.rs:102:35:102:36 | l1 | main.rs:102:17:102:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:102:35:102:36 | l1 | main.rs:109:35:109:36 | l1 | provenance | | | main.rs:102:35:102:36 | l1 | main.rs:111:35:111:36 | l1 | provenance | | @@ -185,28 +190,28 @@ edges | main.rs:111:35:111:36 | l1 | main.rs:111:17:111:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:111:35:111:36 | l1 | main.rs:146:35:146:36 | l1 | provenance | | | main.rs:145:13:145:14 | l9 | main.rs:148:35:148:36 | l9 | provenance | | -| main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | main.rs:145:18:145:61 | ... .unwrap() | provenance | MaD:40 | +| main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | main.rs:145:18:145:61 | ... .unwrap() | provenance | MaD:42 | | main.rs:145:18:145:61 | ... .unwrap() | main.rs:145:13:145:14 | l9 | provenance | | -| main.rs:145:51:145:51 | v | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | +| main.rs:145:51:145:51 | v | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | | main.rs:146:35:146:36 | l1 | main.rs:146:17:146:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:146:35:146:36 | l1 | main.rs:177:31:177:32 | l1 | provenance | | | main.rs:148:35:148:36 | l9 | main.rs:148:17:148:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:151:9:151:11 | l10 | main.rs:152:31:152:33 | l10 | provenance | | -| main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | main.rs:151:15:151:78 | ... .unwrap() | provenance | MaD:40 | +| main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | main.rs:151:15:151:78 | ... .unwrap() | provenance | MaD:42 | | main.rs:151:15:151:78 | ... .unwrap() | main.rs:151:9:151:11 | l10 | provenance | | -| main.rs:151:48:151:68 | ...::min(...) | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | -| main.rs:151:62:151:62 | v | main.rs:151:48:151:68 | ...::min(...) | provenance | MaD:45 | +| main.rs:151:48:151:68 | ...::min(...) | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | +| main.rs:151:62:151:62 | v | main.rs:151:48:151:68 | ...::min(...) | provenance | MaD:47 | | main.rs:152:31:152:33 | l10 | main.rs:152:13:152:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:154:9:154:11 | l11 | main.rs:155:31:155:33 | l11 | provenance | | -| main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | main.rs:154:15:154:78 | ... .unwrap() | provenance | MaD:40 | +| main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | main.rs:154:15:154:78 | ... .unwrap() | provenance | MaD:42 | | main.rs:154:15:154:78 | ... .unwrap() | main.rs:154:9:154:11 | l11 | provenance | | -| main.rs:154:48:154:68 | ...::max(...) | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | -| main.rs:154:62:154:62 | v | main.rs:154:48:154:68 | ...::max(...) | provenance | MaD:44 | +| main.rs:154:48:154:68 | ...::max(...) | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | +| main.rs:154:62:154:62 | v | main.rs:154:48:154:68 | ...::max(...) | provenance | MaD:46 | | main.rs:155:31:155:33 | l11 | main.rs:155:13:155:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:161:13:161:15 | l13 | main.rs:162:35:162:37 | l13 | provenance | | -| main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:40 | +| main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:42 | | main.rs:161:19:161:68 | ... .unwrap() | main.rs:161:13:161:15 | l13 | provenance | | -| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:30 | +| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:34 | | main.rs:162:35:162:37 | l13 | main.rs:162:17:162:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:162:35:162:37 | l13 | main.rs:169:35:169:37 | l13 | provenance | | | main.rs:169:35:169:37 | l13 | main.rs:169:17:169:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | @@ -214,9 +219,9 @@ edges | main.rs:183:29:183:36 | ...: usize | main.rs:192:46:192:46 | v | provenance | | | main.rs:183:29:183:36 | ...: usize | main.rs:202:48:202:48 | v | provenance | | | main.rs:192:9:192:10 | l2 | main.rs:193:38:193:39 | l2 | provenance | | -| main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | main.rs:192:14:192:56 | ... .unwrap() | provenance | MaD:40 | +| main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | main.rs:192:14:192:56 | ... .unwrap() | provenance | MaD:42 | | main.rs:192:14:192:56 | ... .unwrap() | main.rs:192:9:192:10 | l2 | provenance | | -| main.rs:192:46:192:46 | v | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | +| main.rs:192:46:192:46 | v | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | | main.rs:193:38:193:39 | l2 | main.rs:193:32:193:36 | alloc | provenance | MaD:10 Sink:MaD:10 | | main.rs:193:38:193:39 | l2 | main.rs:194:45:194:46 | l2 | provenance | | | main.rs:194:45:194:46 | l2 | main.rs:194:32:194:43 | alloc_zeroed | provenance | MaD:11 Sink:MaD:11 | @@ -251,20 +256,21 @@ edges | main.rs:230:46:230:46 | v | main.rs:230:13:230:44 | ...::try_with_capacity_in | provenance | MaD:3 Sink:MaD:3 | | main.rs:230:46:230:46 | v | main.rs:231:42:231:42 | v | provenance | | | main.rs:231:42:231:42 | v | main.rs:231:13:231:40 | ...::with_capacity_in | provenance | MaD:4 Sink:MaD:4 | -| main.rs:279:24:279:41 | ...: String | main.rs:280:21:280:47 | user_input.parse() [Ok] | provenance | MaD:41 | +| main.rs:279:24:279:41 | ...: String | main.rs:280:21:280:30 | user_input | provenance | | | main.rs:280:9:280:17 | num_bytes | main.rs:282:54:282:62 | num_bytes | provenance | | +| main.rs:280:21:280:30 | user_input | main.rs:280:21:280:47 | user_input.parse() [Ok] | provenance | MaD:43 | | main.rs:280:21:280:47 | user_input.parse() [Ok] | main.rs:280:21:280:48 | TryExpr | provenance | | -| main.rs:280:21:280:48 | TryExpr | main.rs:280:9:280:17 | num_bytes | provenance | | -| main.rs:280:21:280:48 | TryExpr | main.rs:280:21:280:77 | ... * ... | provenance | MaD:43 | +| main.rs:280:21:280:48 | TryExpr | main.rs:280:21:280:77 | ... * ... | provenance | MaD:27 | +| main.rs:280:21:280:48 | TryExpr | main.rs:280:21:280:77 | ... * ... | provenance | MaD:45 | | main.rs:280:21:280:77 | ... * ... | main.rs:280:9:280:17 | num_bytes | provenance | | | main.rs:282:9:282:14 | layout | main.rs:284:40:284:45 | layout | provenance | | -| main.rs:282:18:282:66 | ...::from_size_align(...) [Ok] | main.rs:282:18:282:75 | ... .unwrap() | provenance | MaD:40 | +| main.rs:282:18:282:66 | ...::from_size_align(...) [Ok] | main.rs:282:18:282:75 | ... .unwrap() | provenance | MaD:42 | | main.rs:282:18:282:75 | ... .unwrap() | main.rs:282:9:282:14 | layout | provenance | | -| main.rs:282:54:282:62 | num_bytes | main.rs:282:18:282:66 | ...::from_size_align(...) [Ok] | provenance | MaD:30 | +| main.rs:282:54:282:62 | num_bytes | main.rs:282:18:282:66 | ...::from_size_align(...) [Ok] | provenance | MaD:34 | | main.rs:284:40:284:45 | layout | main.rs:284:22:284:38 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:308:25:308:38 | ...::args | main.rs:308:25:308:40 | ...::args(...) [element] | provenance | Src:MaD:22 | | main.rs:308:25:308:40 | ...::args(...) [element] | main.rs:308:25:308:47 | ... .nth(...) [Some] | provenance | MaD:23 | -| main.rs:308:25:308:47 | ... .nth(...) [Some] | main.rs:308:25:308:74 | ... .unwrap_or(...) | provenance | MaD:38 | +| main.rs:308:25:308:47 | ... .nth(...) [Some] | main.rs:308:25:308:74 | ... .unwrap_or(...) | provenance | MaD:40 | | main.rs:308:25:308:74 | ... .unwrap_or(...) | main.rs:279:24:279:41 | ...: String | provenance | | | main.rs:317:9:317:9 | v | main.rs:320:34:320:34 | v | provenance | | | main.rs:317:9:317:9 | v | main.rs:321:42:321:42 | v | provenance | | @@ -274,9 +280,9 @@ edges | main.rs:317:9:317:9 | v | main.rs:325:22:325:22 | v | provenance | | | main.rs:317:13:317:26 | ...::args | main.rs:317:13:317:28 | ...::args(...) [element] | provenance | Src:MaD:22 | | main.rs:317:13:317:28 | ...::args(...) [element] | main.rs:317:13:317:35 | ... .nth(...) [Some] | provenance | MaD:23 | -| main.rs:317:13:317:35 | ... .nth(...) [Some] | main.rs:317:13:317:65 | ... .unwrap_or(...) | provenance | MaD:38 | -| main.rs:317:13:317:65 | ... .unwrap_or(...) | main.rs:317:13:317:82 | ... .parse() [Ok] | provenance | MaD:41 | -| main.rs:317:13:317:82 | ... .parse() [Ok] | main.rs:317:13:317:91 | ... .unwrap() | provenance | MaD:40 | +| main.rs:317:13:317:35 | ... .nth(...) [Some] | main.rs:317:13:317:65 | ... .unwrap_or(...) | provenance | MaD:40 | +| main.rs:317:13:317:65 | ... .unwrap_or(...) | main.rs:317:13:317:82 | ... .parse() [Ok] | provenance | MaD:43 | +| main.rs:317:13:317:82 | ... .parse() [Ok] | main.rs:317:13:317:91 | ... .unwrap() | provenance | MaD:42 | | main.rs:317:13:317:91 | ... .unwrap() | main.rs:317:9:317:9 | v | provenance | | | main.rs:320:34:320:34 | v | main.rs:12:36:12:43 | ...: usize | provenance | | | main.rs:321:42:321:42 | v | main.rs:43:44:43:51 | ...: usize | provenance | | @@ -307,29 +313,31 @@ models | 20 | Sink: libc::unix::malloc; Argument[0]; alloc-size | | 21 | Sink: libc::unix::realloc; Argument[1]; alloc-size | | 22 | Source: std::env::args; ReturnValue.Element; commandargs | -| 23 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 24 | Summary: ::align_to; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 25 | Summary: ::array; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 26 | Summary: ::extend; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 27 | Summary: ::extend; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 28 | Summary: ::extend_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 29 | Summary: ::extend_packed; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 30 | Summary: ::from_size_align; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 31 | Summary: ::from_size_align_unchecked; Argument[0]; ReturnValue.Field[core::alloc::layout::Layout::size]; value | -| 32 | Summary: ::from_size_align_unchecked; Argument[0]; ReturnValue; taint | -| 33 | Summary: ::pad_to_align; Argument[self]; ReturnValue; taint | -| 34 | Summary: ::repeat; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 35 | Summary: ::repeat_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 36 | Summary: ::size; Argument[self].Field[core::alloc::layout::Layout::size]; ReturnValue; value | -| 37 | Summary: ::size; Argument[self]; ReturnValue; taint | -| 38 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 39 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 40 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 41 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 42 | Summary: ::mul; Argument[0]; ReturnValue; taint | -| 43 | Summary: ::mul; Argument[self]; ReturnValue; taint | -| 44 | Summary: core::cmp::max; Argument[0]; ReturnValue; value | -| 45 | Summary: core::cmp::min; Argument[0]; ReturnValue; value | +| 23 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 24 | Summary: <_ as core::ops::arith::Add>::add; Argument[self]; ReturnValue; taint | +| 25 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[0].Reference; ReturnValue; taint | +| 26 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[0]; ReturnValue; taint | +| 27 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self]; ReturnValue; taint | +| 28 | Summary: ::align_to; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 29 | Summary: ::array; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 30 | Summary: ::extend; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 31 | Summary: ::extend; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 32 | Summary: ::extend_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 33 | Summary: ::extend_packed; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 34 | Summary: ::from_size_align; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 35 | Summary: ::from_size_align_unchecked; Argument[0]; ReturnValue; taint | +| 36 | Summary: ::pad_to_align; Argument[self].Reference; ReturnValue; taint | +| 37 | Summary: ::repeat; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 38 | Summary: ::repeat_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 39 | Summary: ::size; Argument[self].Reference; ReturnValue; taint | +| 40 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 41 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 42 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 43 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 44 | Summary: ::mul; Argument[0]; ReturnValue; taint | +| 45 | Summary: ::mul; Argument[self]; ReturnValue; taint | +| 46 | Summary: core::cmp::max; Argument[0]; ReturnValue; value | +| 47 | Summary: core::cmp::min; Argument[0]; ReturnValue; value | nodes | main.rs:12:36:12:43 | ...: usize | semmle.label | ...: usize | | main.rs:18:13:18:31 | ...::realloc | semmle.label | ...::realloc | @@ -341,9 +349,11 @@ nodes | main.rs:21:13:21:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:21:31:21:32 | l2 | semmle.label | l2 | | main.rs:22:13:22:29 | ...::alloc | semmle.label | ...::alloc | +| main.rs:22:31:22:32 | l2 | semmle.label | l2 | | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | semmle.label | l2.align_to(...) [Ok] | | main.rs:22:31:22:53 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:23:13:23:29 | ...::alloc | semmle.label | ...::alloc | +| main.rs:23:31:23:32 | l2 | semmle.label | l2 | | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | semmle.label | l2.align_to(...) [Ok] | | main.rs:23:31:23:53 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:23:31:23:68 | ... .pad_to_align() | semmle.label | ... .pad_to_align() | @@ -361,18 +371,17 @@ nodes | main.rs:33:13:33:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:33:31:33:32 | l5 | semmle.label | l5 | | main.rs:35:9:35:10 | s6 | semmle.label | s6 | +| main.rs:35:14:35:54 | ... + ... | semmle.label | ... + ... | | main.rs:35:15:35:49 | ... * ... | semmle.label | ... * ... | | main.rs:35:49:35:49 | v | semmle.label | v | | main.rs:36:9:36:10 | l6 | semmle.label | l6 | -| main.rs:36:9:36:10 | l6 [Layout.size] | semmle.label | l6 [Layout.size] | | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | semmle.label | ...::from_size_align_unchecked(...) | -| main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) [Layout.size] | semmle.label | ...::from_size_align_unchecked(...) [Layout.size] | | main.rs:36:60:36:61 | s6 | semmle.label | s6 | | main.rs:37:13:37:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:37:31:37:32 | l6 | semmle.label | l6 | -| main.rs:37:31:37:32 | l6 [Layout.size] | semmle.label | l6 [Layout.size] | | main.rs:39:9:39:10 | l7 | semmle.label | l7 | | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | semmle.label | ...::from_size_align_unchecked(...) | +| main.rs:39:60:39:61 | l6 | semmle.label | l6 | | main.rs:39:60:39:68 | l6.size() | semmle.label | l6.size() | | main.rs:40:13:40:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:40:31:40:32 | l7 | semmle.label | l7 | @@ -386,6 +395,7 @@ nodes | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | semmle.label | l2.repeat(...) [Ok, tuple.0] | | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | semmle.label | ... .unwrap() [tuple.0] | | main.rs:51:31:51:57 | ... .0 | semmle.label | ... .0 | +| main.rs:51:41:51:41 | v | semmle.label | v | | main.rs:51:41:51:45 | ... + ... | semmle.label | ... + ... | | main.rs:53:13:53:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | semmle.label | l2.repeat_packed(...) [Ok] | @@ -394,6 +404,7 @@ nodes | main.rs:54:13:54:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | semmle.label | l2.repeat_packed(...) [Ok] | | main.rs:54:31:54:63 | ... .unwrap() | semmle.label | ... .unwrap() | +| main.rs:54:48:54:48 | v | semmle.label | v | | main.rs:54:48:54:53 | ... * ... | semmle.label | ... * ... | | main.rs:58:9:58:20 | TuplePat [tuple.0] | semmle.label | TuplePat [tuple.0] | | main.rs:58:10:58:11 | k1 | semmle.label | k1 | @@ -411,6 +422,7 @@ nodes | main.rs:61:31:61:32 | k2 | semmle.label | k2 | | main.rs:62:9:62:20 | TuplePat [tuple.0] | semmle.label | TuplePat [tuple.0] | | main.rs:62:10:62:11 | k3 | semmle.label | k3 | +| main.rs:62:24:62:25 | k1 | semmle.label | k1 | | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | semmle.label | k1.extend(...) [Ok, tuple.0] | | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | semmle.label | ... .unwrap() [tuple.0] | | main.rs:63:13:63:29 | ...::alloc | semmle.label | ...::alloc | @@ -420,6 +432,7 @@ nodes | main.rs:64:31:64:59 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:64:48:64:49 | k1 | semmle.label | k1 | | main.rs:65:13:65:29 | ...::alloc | semmle.label | ...::alloc | +| main.rs:65:31:65:32 | k1 | semmle.label | k1 | | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | semmle.label | k1.extend_packed(...) [Ok] | | main.rs:65:31:65:59 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:67:9:67:10 | l4 | semmle.label | l4 | @@ -532,6 +545,7 @@ nodes | main.rs:231:42:231:42 | v | semmle.label | v | | main.rs:279:24:279:41 | ...: String | semmle.label | ...: String | | main.rs:280:9:280:17 | num_bytes | semmle.label | num_bytes | +| main.rs:280:21:280:30 | user_input | semmle.label | user_input | | main.rs:280:21:280:47 | user_input.parse() [Ok] | semmle.label | user_input.parse() [Ok] | | main.rs:280:21:280:48 | TryExpr | semmle.label | TryExpr | | main.rs:280:21:280:77 | ... * ... | semmle.label | ... * ... | diff --git a/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected b/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected index e4657a426ea5..081ec36f4edb 100644 --- a/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected +++ b/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected @@ -10,37 +10,45 @@ | test_cookie.rs:21:28:21:34 | [0; 64] | test_cookie.rs:21:28:21:34 | [0; 64] | test_cookie.rs:22:16:22:24 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:22:16:22:24 | ...::from | a key | | test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:42:14:42:32 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:42:14:42:32 | ...::from | a key | | test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:53:14:53:32 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:53:14:53:32 | ...::from | a key | +| test_heuristic.rs:44:31:44:38 | [0u8; 16] | test_heuristic.rs:44:31:44:38 | [0u8; 16] | test_heuristic.rs:45:41:45:48 | const_iv | This hard-coded value is used as $@. | test_heuristic.rs:45:41:45:48 | const_iv | an initialization vector | +| test_heuristic.rs:63:30:63:37 | "secret" | test_heuristic.rs:63:30:63:37 | "secret" | test_heuristic.rs:63:30:63:37 | "secret" | This hard-coded value is used as $@. | test_heuristic.rs:63:30:63:37 | "secret" | a password | +| test_heuristic.rs:64:20:64:27 | [0u8; 16] | test_heuristic.rs:64:20:64:27 | [0u8; 16] | test_heuristic.rs:64:19:64:27 | &... | This hard-coded value is used as $@. | test_heuristic.rs:64:19:64:27 | &... | a nonce | +| test_heuristic.rs:65:31:65:38 | [0u8; 16] | test_heuristic.rs:65:31:65:38 | [0u8; 16] | test_heuristic.rs:65:30:65:38 | &... | This hard-coded value is used as $@. | test_heuristic.rs:65:30:65:38 | &... | a salt | +| test_heuristic.rs:67:22:67:22 | 0 | test_heuristic.rs:67:22:67:22 | 0 | test_heuristic.rs:67:22:67:22 | 0 | This hard-coded value is used as $@. | test_heuristic.rs:67:22:67:22 | 0 | a salt | +| test_heuristic.rs:69:32:69:32 | 1 | test_heuristic.rs:69:32:69:32 | 1 | test_heuristic.rs:69:22:69:32 | ... + ... | This hard-coded value is used as $@. | test_heuristic.rs:69:22:69:32 | ... + ... | a salt | +| test_heuristic.rs:70:34:70:35 | 32 | test_heuristic.rs:70:34:70:35 | 32 | test_heuristic.rs:70:22:70:62 | ... ^ ... | This hard-coded value is used as $@. | test_heuristic.rs:70:22:70:62 | ... ^ ... | a salt | +| test_heuristic.rs:70:52:70:61 | 0xFFFFFFFF | test_heuristic.rs:70:52:70:61 | 0xFFFFFFFF | test_heuristic.rs:70:22:70:62 | ... ^ ... | This hard-coded value is used as $@. | test_heuristic.rs:70:22:70:62 | ... ^ ... | a salt | edges | test_cipher.rs:18:9:18:14 | const1 [&ref] | test_cipher.rs:19:73:19:78 | const1 [&ref] | provenance | | | test_cipher.rs:18:28:18:36 | &... [&ref] | test_cipher.rs:18:9:18:14 | const1 [&ref] | provenance | | | test_cipher.rs:18:29:18:36 | [0u8; 16] | test_cipher.rs:18:28:18:36 | &... [&ref] | provenance | | | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | test_cipher.rs:19:30:19:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | -| test_cipher.rs:19:73:19:78 | const1 [&ref] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | provenance | MaD:9 | +| test_cipher.rs:19:73:19:78 | const1 [&ref] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | provenance | MaD:19 | | test_cipher.rs:25:9:25:14 | const4 [&ref] | test_cipher.rs:26:66:26:71 | const4 [&ref] | provenance | | | test_cipher.rs:25:28:25:36 | &... [&ref] | test_cipher.rs:25:9:25:14 | const4 [&ref] | provenance | | | test_cipher.rs:25:29:25:36 | [0u8; 16] | test_cipher.rs:25:28:25:36 | &... [&ref] | provenance | | | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | test_cipher.rs:26:30:26:40 | ...::new | provenance | MaD:4 Sink:MaD:4 | -| test_cipher.rs:26:66:26:71 | const4 [&ref] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | provenance | MaD:9 | +| test_cipher.rs:26:66:26:71 | const4 [&ref] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | provenance | MaD:19 | | test_cipher.rs:29:9:29:14 | const5 [&ref] | test_cipher.rs:30:95:30:100 | const5 [&ref] | provenance | | | test_cipher.rs:29:28:29:36 | &... [&ref] | test_cipher.rs:29:9:29:14 | const5 [&ref] | provenance | | | test_cipher.rs:29:29:29:36 | [0u8; 16] | test_cipher.rs:29:28:29:36 | &... [&ref] | provenance | | | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | test_cipher.rs:30:30:30:40 | ...::new | provenance | MaD:5 Sink:MaD:5 | -| test_cipher.rs:30:95:30:100 | const5 [&ref] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | provenance | MaD:9 | +| test_cipher.rs:30:95:30:100 | const5 [&ref] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | provenance | MaD:19 | | test_cipher.rs:37:9:37:14 | const7 | test_cipher.rs:38:74:38:79 | const7 | provenance | | | test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:37:9:37:14 | const7 | provenance | | | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | test_cipher.rs:38:30:38:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | -| test_cipher.rs:38:73:38:79 | &const7 [&ref] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | provenance | MaD:9 | +| test_cipher.rs:38:73:38:79 | &const7 [&ref] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | provenance | MaD:19 | | test_cipher.rs:38:74:38:79 | const7 | test_cipher.rs:38:73:38:79 | &const7 [&ref] | provenance | | | test_cipher.rs:41:9:41:14 | const8 [&ref] | test_cipher.rs:42:73:42:78 | const8 [&ref] | provenance | | | test_cipher.rs:41:28:41:76 | &... [&ref] | test_cipher.rs:41:9:41:14 | const8 [&ref] | provenance | | | test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:41:28:41:76 | &... [&ref] | provenance | | | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | test_cipher.rs:42:30:42:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | -| test_cipher.rs:42:73:42:78 | const8 [&ref] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | provenance | MaD:9 | +| test_cipher.rs:42:73:42:78 | const8 [&ref] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | provenance | MaD:19 | | test_cipher.rs:50:9:50:15 | const10 [element] | test_cipher.rs:51:75:51:81 | const10 [element] | provenance | | | test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | provenance | Src:MaD:7 | | test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | test_cipher.rs:50:9:50:15 | const10 [element] | provenance | | | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | test_cipher.rs:51:31:51:48 | ...::new | provenance | MaD:3 Sink:MaD:3 Sink:MaD:3 | -| test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | provenance | MaD:9 | +| test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | provenance | MaD:19 | | test_cipher.rs:51:75:51:81 | const10 [element] | test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | provenance | | | test_cipher.rs:73:9:73:14 | const2 [&ref] | test_cipher.rs:74:46:74:51 | const2 [&ref] | provenance | | | test_cipher.rs:73:18:73:26 | &... [&ref] | test_cipher.rs:73:9:73:14 | const2 [&ref] | provenance | | @@ -59,9 +67,24 @@ edges | test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:8 | | test_cookie.rs:42:34:42:39 | array2 | test_cookie.rs:42:14:42:32 | ...::from | provenance | MaD:2 Sink:MaD:2 | | test_cookie.rs:49:9:49:14 | array3 [element] | test_cookie.rs:53:34:53:39 | array3 [element] | provenance | | -| test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | provenance | MaD:10 | +| test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | provenance | MaD:20 | | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | test_cookie.rs:49:9:49:14 | array3 [element] | provenance | | | test_cookie.rs:53:34:53:39 | array3 [element] | test_cookie.rs:53:14:53:32 | ...::from | provenance | MaD:2 Sink:MaD:2 | +| test_heuristic.rs:44:9:44:16 | const_iv [&ref] | test_heuristic.rs:45:41:45:48 | const_iv | provenance | | +| test_heuristic.rs:44:30:44:38 | &... [&ref] | test_heuristic.rs:44:9:44:16 | const_iv [&ref] | provenance | | +| test_heuristic.rs:44:31:44:38 | [0u8; 16] | test_heuristic.rs:44:30:44:38 | &... [&ref] | provenance | | +| test_heuristic.rs:64:20:64:27 | [0u8; 16] | test_heuristic.rs:64:19:64:27 | &... | provenance | | +| test_heuristic.rs:65:31:65:38 | [0u8; 16] | test_heuristic.rs:65:30:65:38 | &... | provenance | | +| test_heuristic.rs:69:32:69:32 | 1 | test_heuristic.rs:69:22:69:32 | ... + ... | provenance | MaD:10 | +| test_heuristic.rs:69:32:69:32 | 1 | test_heuristic.rs:69:22:69:32 | ... + ... | provenance | MaD:9 | +| test_heuristic.rs:70:23:70:35 | ... << ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:15 | +| test_heuristic.rs:70:34:70:35 | 32 | test_heuristic.rs:70:23:70:35 | ... << ... | provenance | MaD:17 | +| test_heuristic.rs:70:34:70:35 | 32 | test_heuristic.rs:70:23:70:35 | ... << ... | provenance | MaD:16 | +| test_heuristic.rs:70:34:70:35 | 32 | test_heuristic.rs:70:23:70:35 | ... << ... | provenance | MaD:18 | +| test_heuristic.rs:70:41:70:61 | ... & ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:14 | +| test_heuristic.rs:70:41:70:61 | ... & ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:13 | +| test_heuristic.rs:70:52:70:61 | 0xFFFFFFFF | test_heuristic.rs:70:41:70:61 | ... & ... | provenance | MaD:12 | +| test_heuristic.rs:70:52:70:61 | 0xFFFFFFFF | test_heuristic.rs:70:41:70:61 | ... & ... | provenance | MaD:11 | models | 1 | Sink: <_ as crypto_common::KeyInit>::new_from_slice; Argument[0]; credentials-key | | 2 | Sink: ::from; Argument[0]; credentials-key | @@ -71,8 +94,18 @@ models | 6 | Sink: ::from; Argument[0].Reference; credentials-key | | 7 | Source: core::mem::zeroed; ReturnValue.Element; constant-source | | 8 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint | -| 9 | Summary: ::from_slice; Argument[0].Reference; ReturnValue.Reference; value | -| 10 | Summary: alloc::vec::from_elem; Argument[0]; ReturnValue.Element; value | +| 9 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | +| 10 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint | +| 11 | Summary: <_ as core::ops::bit::BitAnd>::bitand; Argument[0].Reference; ReturnValue; taint | +| 12 | Summary: <_ as core::ops::bit::BitAnd>::bitand; Argument[0]; ReturnValue; taint | +| 13 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0].Reference; ReturnValue; taint | +| 14 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0]; ReturnValue; taint | +| 15 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self]; ReturnValue; taint | +| 16 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0].Reference; ReturnValue; taint | +| 17 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0]; ReturnValue; taint | +| 18 | Summary: ::shl; Argument[0]; ReturnValue; taint | +| 19 | Summary: ::from_slice; Argument[0].Reference; ReturnValue.Reference; value | +| 20 | Summary: alloc::vec::from_elem; Argument[0]; ReturnValue.Element; value | nodes | test_cipher.rs:18:9:18:14 | const1 [&ref] | semmle.label | const1 [&ref] | | test_cipher.rs:18:28:18:36 | &... [&ref] | semmle.label | &... [&ref] | @@ -136,4 +169,21 @@ nodes | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | semmle.label | ...::from_elem(...) [element] | | test_cookie.rs:53:14:53:32 | ...::from | semmle.label | ...::from | | test_cookie.rs:53:34:53:39 | array3 [element] | semmle.label | array3 [element] | +| test_heuristic.rs:44:9:44:16 | const_iv [&ref] | semmle.label | const_iv [&ref] | +| test_heuristic.rs:44:30:44:38 | &... [&ref] | semmle.label | &... [&ref] | +| test_heuristic.rs:44:31:44:38 | [0u8; 16] | semmle.label | [0u8; 16] | +| test_heuristic.rs:45:41:45:48 | const_iv | semmle.label | const_iv | +| test_heuristic.rs:63:30:63:37 | "secret" | semmle.label | "secret" | +| test_heuristic.rs:64:19:64:27 | &... | semmle.label | &... | +| test_heuristic.rs:64:20:64:27 | [0u8; 16] | semmle.label | [0u8; 16] | +| test_heuristic.rs:65:30:65:38 | &... | semmle.label | &... | +| test_heuristic.rs:65:31:65:38 | [0u8; 16] | semmle.label | [0u8; 16] | +| test_heuristic.rs:67:22:67:22 | 0 | semmle.label | 0 | +| test_heuristic.rs:69:22:69:32 | ... + ... | semmle.label | ... + ... | +| test_heuristic.rs:69:32:69:32 | 1 | semmle.label | 1 | +| test_heuristic.rs:70:22:70:62 | ... ^ ... | semmle.label | ... ^ ... | +| test_heuristic.rs:70:23:70:35 | ... << ... | semmle.label | ... << ... | +| test_heuristic.rs:70:34:70:35 | 32 | semmle.label | 32 | +| test_heuristic.rs:70:41:70:61 | ... & ... | semmle.label | ... & ... | +| test_heuristic.rs:70:52:70:61 | 0xFFFFFFFF | semmle.label | 0xFFFFFFFF | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-798/test_heuristic.rs b/rust/ql/test/query-tests/security/CWE-798/test_heuristic.rs new file mode 100644 index 000000000000..f8f16a16d12f --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-798/test_heuristic.rs @@ -0,0 +1,71 @@ + +// --- tests --- + +fn encrypt_with(plaintext: &str, key: &[u8;16], iv: &[u8;16]) { + // ... +} + +fn encrypt2(plaintext: &str, crypto_key: &[u8;16], iv_bytes: &[u8;16]) { + // ... +} + +fn database_op(text: &str, primary_key: &str, pivot: &str) { + // note: this one has nothing to do with encryption, but has + // `key` and `iv` contained within the parameter names. +} + +struct MyCryptor { +} + +impl MyCryptor { + fn new(password: &str) -> MyCryptor { + MyCryptor { } + } + + fn set_nonce(&self, nonce: &[u8;16]) { + // ... + } + + fn encrypt(&self, plaintext: &str, salt: &[u8;16]) { + // ... + } + + fn set_salt_u64(&self, salt: u64) { + // ... + } +} + +fn test(var_string: &str, var_data: &[u8;16], var_u64: u64) { + encrypt_with("plaintext", var_data, var_data); + + let const_key: &[u8;16] = &[0u8;16]; // $ MISSING: Alert[rust/hard-coded-cryptographic-value] + encrypt_with("plaintext", const_key, var_data); // $ MISSING: Sink + + let const_iv: &[u8;16] = &[0u8;16]; // $ Alert[rust/hard-coded-cryptographic-value] + encrypt_with("plaintext", var_data, const_iv); // $ Sink + + encrypt2("plaintext", var_data, var_data); + + let const_key2: &[u8;16] = &[1u8;16]; // $ MISSING: Alert[rust/hard-coded-cryptographic-value] + encrypt2("plaintext", const_key2, var_data); // $ MISSING: Sink + + let const_iv: &[u8;16] = &[1u8;16]; // $ MISSING: Alert[rust/hard-coded-cryptographic-value] + encrypt2("plaintext", var_data, const_iv); // $ MISSING: Sink + + let const_key_str = "primary_key"; + let const_pivot_str = "pivot"; + database_op("text", const_key_str, const_pivot_str); + + let mc1 = MyCryptor::new(var_string); + mc1.set_nonce(var_data); + mc1.encrypt("plaintext", var_data); + + let mc2 = MyCryptor::new("secret"); // $ Alert[rust/hard-coded-cryptographic-value] + mc2.set_nonce(&[0u8;16]); // $ Alert[rust/hard-coded-cryptographic-value] + mc2.encrypt("plaintext", &[0u8;16]); // $ Alert[rust/hard-coded-cryptographic-value] + + mc2.set_salt_u64(0); // $ Alert[rust/hard-coded-cryptographic-value] + mc2.set_salt_u64(var_u64); + mc2.set_salt_u64(var_u64 + 1); // $ SPURIOUS: Alert[rust/hard-coded-cryptographic-value] + mc2.set_salt_u64((var_u64 << 32) ^ (var_u64 & 0xFFFFFFFF)); // $ SPURIOUS: Alert[rust/hard-coded-cryptographic-value] +} diff --git a/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected b/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected index c24c6a728bbf..69573c738578 100644 --- a/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected +++ b/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected @@ -27,24 +27,6 @@ edges | deallocation.rs:242:6:242:7 | p1 | deallocation.rs:245:14:245:15 | p1 | provenance | | | deallocation.rs:242:6:242:7 | p1 | deallocation.rs:252:14:252:15 | p1 | provenance | | | deallocation.rs:242:30:242:38 | &raw const my_buffer | deallocation.rs:242:6:242:7 | p1 | provenance | | -| deallocation.rs:322:28:322:43 | ...: ... | deallocation.rs:324:18:324:20 | ptr | provenance | | -| deallocation.rs:334:27:334:42 | ...: ... | deallocation.rs:342:18:342:20 | ptr | provenance | | -| deallocation.rs:351:7:351:10 | ptr1 | deallocation.rs:354:4:354:7 | ptr1 | provenance | | -| deallocation.rs:351:7:351:10 | ptr1 | deallocation.rs:354:4:354:7 | ptr1 | provenance | | -| deallocation.rs:351:14:351:33 | &raw mut ... | deallocation.rs:351:7:351:10 | ptr1 | provenance | | -| deallocation.rs:352:7:352:10 | ptr2 | deallocation.rs:355:4:355:7 | ptr2 | provenance | | -| deallocation.rs:352:7:352:10 | ptr2 | deallocation.rs:355:4:355:7 | ptr2 | provenance | | -| deallocation.rs:352:14:352:33 | &raw mut ... | deallocation.rs:352:7:352:10 | ptr2 | provenance | | -| deallocation.rs:354:4:354:7 | ptr1 | deallocation.rs:357:27:357:30 | ptr1 | provenance | | -| deallocation.rs:355:4:355:7 | ptr2 | deallocation.rs:359:26:359:29 | ptr2 | provenance | | -| deallocation.rs:357:27:357:30 | ptr1 | deallocation.rs:322:28:322:43 | ...: ... | provenance | | -| deallocation.rs:359:26:359:29 | ptr2 | deallocation.rs:334:27:334:42 | ...: ... | provenance | | -| deallocation.rs:370:6:370:9 | ptr1 | deallocation.rs:373:13:373:16 | ptr1 | provenance | | -| deallocation.rs:370:6:370:9 | ptr1 | deallocation.rs:381:13:381:16 | ptr1 | provenance | | -| deallocation.rs:370:13:370:28 | &raw mut ... | deallocation.rs:370:6:370:9 | ptr1 | provenance | | -| deallocation.rs:389:6:389:9 | ptr2 | deallocation.rs:392:13:392:16 | ptr2 | provenance | | -| deallocation.rs:389:6:389:9 | ptr2 | deallocation.rs:402:13:402:16 | ptr2 | provenance | | -| deallocation.rs:389:13:389:28 | &raw mut ... | deallocation.rs:389:6:389:9 | ptr2 | provenance | | | lifetime.rs:21:2:21:18 | return ... | lifetime.rs:54:11:54:30 | get_local_dangling(...) | provenance | | | lifetime.rs:21:9:21:18 | &my_local1 | lifetime.rs:21:2:21:18 | return ... | provenance | | | lifetime.rs:27:2:27:22 | return ... | lifetime.rs:55:11:55:34 | get_local_dangling_mut(...) | provenance | | @@ -80,15 +62,6 @@ edges | lifetime.rs:94:7:94:16 | &my_local1 | lifetime.rs:94:2:94:3 | p3 | provenance | | | lifetime.rs:119:15:119:24 | &my_local3 | lifetime.rs:91:17:91:30 | ...: ... | provenance | | | lifetime.rs:119:27:119:44 | &mut my_local_mut4 | lifetime.rs:91:33:91:44 | ...: ... | provenance | | -| lifetime.rs:127:2:127:24 | return ... | lifetime.rs:139:11:139:21 | get_const(...) | provenance | | -| lifetime.rs:127:9:127:24 | &MY_GLOBAL_CONST | lifetime.rs:127:2:127:24 | return ... | provenance | | -| lifetime.rs:134:3:134:30 | return ... | lifetime.rs:140:11:140:26 | get_static_mut(...) | provenance | | -| lifetime.rs:134:10:134:30 | &mut MY_GLOBAL_STATIC | lifetime.rs:134:3:134:30 | return ... | provenance | | -| lifetime.rs:139:6:139:7 | p1 | lifetime.rs:147:14:147:15 | p1 | provenance | | -| lifetime.rs:139:11:139:21 | get_const(...) | lifetime.rs:139:6:139:7 | p1 | provenance | | -| lifetime.rs:140:6:140:7 | p2 | lifetime.rs:148:14:148:15 | p2 | provenance | | -| lifetime.rs:140:6:140:7 | p2 | lifetime.rs:154:5:154:6 | p2 | provenance | | -| lifetime.rs:140:11:140:26 | get_static_mut(...) | lifetime.rs:140:6:140:7 | p2 | provenance | | | lifetime.rs:161:17:161:31 | ...: ... | lifetime.rs:164:13:164:15 | ptr | provenance | | | lifetime.rs:169:17:169:31 | ...: ... | lifetime.rs:172:13:172:15 | ptr | provenance | | | lifetime.rs:177:17:177:31 | ...: ... | lifetime.rs:180:13:180:15 | ptr | provenance | | @@ -106,7 +79,6 @@ edges | lifetime.rs:201:15:201:17 | ptr | lifetime.rs:177:17:177:31 | ...: ... | provenance | | | lifetime.rs:206:19:206:36 | ...: ... | lifetime.rs:216:16:216:21 | ptr_up | provenance | | | lifetime.rs:208:6:208:13 | ptr_ours | lifetime.rs:211:33:211:40 | ptr_ours | provenance | | -| lifetime.rs:208:6:208:13 | ptr_ours | lifetime.rs:217:18:217:25 | ptr_ours | provenance | | | lifetime.rs:208:6:208:13 | ptr_ours | lifetime.rs:225:2:225:16 | return ptr_ours | provenance | | | lifetime.rs:208:17:208:29 | &my_local_rec | lifetime.rs:208:6:208:13 | ptr_ours | provenance | | | lifetime.rs:211:7:211:14 | ptr_down | lifetime.rs:218:18:218:25 | ptr_down | provenance | | @@ -141,6 +113,16 @@ edges | lifetime.rs:305:15:305:37 | get_pointer_from_enum(...) | lifetime.rs:305:6:305:11 | result | provenance | | | lifetime.rs:313:10:313:29 | ...::Pointer(...) [Pointer] | lifetime.rs:313:27:313:28 | p2 | provenance | | | lifetime.rs:313:27:313:28 | p2 | lifetime.rs:314:23:314:24 | p2 | provenance | | +| lifetime.rs:332:6:332:13 | mut ref1 | lifetime.rs:338:9:338:35 | ...::Pointer(...) | provenance | | +| lifetime.rs:332:17:332:22 | &enum1 | lifetime.rs:332:6:332:13 | mut ref1 | provenance | | +| lifetime.rs:336:3:336:6 | ref1 | lifetime.rs:338:9:338:35 | ...::Pointer(...) | provenance | | +| lifetime.rs:336:10:336:15 | &inner | lifetime.rs:336:3:336:6 | ref1 | provenance | | +| lifetime.rs:338:9:338:35 | ...::Pointer(...) | lifetime.rs:339:28:339:30 | ptr | provenance | | +| lifetime.rs:348:6:348:13 | mut ref1 | lifetime.rs:354:9:354:35 | ...::Pointer(...) | provenance | | +| lifetime.rs:348:17:348:22 | &enum1 | lifetime.rs:348:6:348:13 | mut ref1 | provenance | | +| lifetime.rs:352:3:352:6 | ref1 | lifetime.rs:354:9:354:35 | ...::Pointer(...) | provenance | | +| lifetime.rs:352:10:352:15 | &inner | lifetime.rs:352:3:352:6 | ref1 | provenance | | +| lifetime.rs:354:9:354:35 | ...::Pointer(...) | lifetime.rs:355:28:355:30 | ptr | provenance | | | lifetime.rs:383:3:383:4 | p1 | lifetime.rs:388:15:388:16 | p1 | provenance | | | lifetime.rs:383:3:383:4 | p1 | lifetime.rs:391:15:391:16 | p1 | provenance | | | lifetime.rs:383:3:383:4 | p1 | lifetime.rs:399:6:399:7 | p1 | provenance | | @@ -150,42 +132,21 @@ edges | lifetime.rs:383:3:383:4 | p1 | lifetime.rs:428:7:428:8 | p1 | provenance | | | lifetime.rs:383:3:383:4 | p1 | lifetime.rs:433:7:433:8 | p1 | provenance | | | lifetime.rs:383:31:383:37 | &raw mut my_pair | lifetime.rs:383:3:383:4 | p1 | provenance | | -| lifetime.rs:384:3:384:4 | p2 | lifetime.rs:394:14:394:15 | p2 | provenance | | -| lifetime.rs:384:3:384:4 | p2 | lifetime.rs:421:15:421:16 | p2 | provenance | | -| lifetime.rs:384:27:384:35 | &raw const ... | lifetime.rs:384:3:384:4 | p2 | provenance | | -| lifetime.rs:385:3:385:4 | p3 | lifetime.rs:395:14:395:15 | p3 | provenance | | -| lifetime.rs:385:3:385:4 | p3 | lifetime.rs:400:5:400:6 | p3 | provenance | | -| lifetime.rs:385:3:385:4 | p3 | lifetime.rs:400:5:400:6 | p3 | provenance | | -| lifetime.rs:385:31:385:39 | &raw mut ... | lifetime.rs:385:3:385:4 | p3 | provenance | | -| lifetime.rs:400:5:400:6 | p3 | lifetime.rs:422:15:422:16 | p3 | provenance | | -| lifetime.rs:400:5:400:6 | p3 | lifetime.rs:429:6:429:7 | p3 | provenance | | | lifetime.rs:442:6:442:7 | r1 | lifetime.rs:443:42:443:43 | r1 | provenance | | | lifetime.rs:442:17:442:23 | &my_val | lifetime.rs:442:6:442:7 | r1 | provenance | | | lifetime.rs:443:6:443:7 | p1 | lifetime.rs:446:13:446:14 | p1 | provenance | | | lifetime.rs:443:6:443:7 | p1 | lifetime.rs:450:2:450:10 | return p1 | provenance | | | lifetime.rs:443:23:443:44 | ...::from_ref(...) | lifetime.rs:443:6:443:7 | p1 | provenance | | -| lifetime.rs:443:42:443:43 | r1 | lifetime.rs:443:23:443:44 | ...::from_ref(...) | provenance | MaD:5 | +| lifetime.rs:443:42:443:43 | r1 | lifetime.rs:443:23:443:44 | ...::from_ref(...) | provenance | MaD:3 | | lifetime.rs:450:2:450:10 | return p1 | lifetime.rs:454:11:454:29 | get_ptr_from_ref(...) | provenance | | | lifetime.rs:450:2:450:10 | return p1 | lifetime.rs:460:13:460:31 | get_ptr_from_ref(...) | provenance | | | lifetime.rs:454:6:454:7 | p1 | lifetime.rs:459:13:459:14 | p1 | provenance | | | lifetime.rs:454:11:454:29 | get_ptr_from_ref(...) | lifetime.rs:454:6:454:7 | p1 | provenance | | | lifetime.rs:568:7:568:8 | p2 | lifetime.rs:572:14:572:15 | p2 | provenance | | | lifetime.rs:568:24:568:33 | &my_local2 | lifetime.rs:568:7:568:8 | p2 | provenance | | -| lifetime.rs:630:3:630:6 | str2 | lifetime.rs:633:15:633:18 | str2 | provenance | | -| lifetime.rs:630:3:630:6 | str2 | lifetime.rs:641:14:641:17 | str2 | provenance | | -| lifetime.rs:630:10:630:25 | &... | lifetime.rs:630:3:630:6 | str2 | provenance | | -| lifetime.rs:654:4:654:7 | str2 | lifetime.rs:655:22:655:25 | str2 | provenance | | -| lifetime.rs:654:11:654:35 | ... + ... | lifetime.rs:654:4:654:7 | str2 | provenance | | -| lifetime.rs:654:31:654:35 | &str1 | lifetime.rs:654:4:654:7 | str2 | provenance | | -| lifetime.rs:654:31:654:35 | &str1 | lifetime.rs:654:11:654:35 | ... + ... | provenance | MaD:2 | -| lifetime.rs:654:31:654:35 | &str1 | lifetime.rs:654:11:654:35 | ... + ... | provenance | MaD:1 | | lifetime.rs:655:4:655:7 | ref1 | lifetime.rs:659:15:659:18 | ref1 | provenance | | | lifetime.rs:655:4:655:7 | ref1 | lifetime.rs:667:14:667:17 | ref1 | provenance | | -| lifetime.rs:655:4:655:7 | ref1 [&ref] | lifetime.rs:659:15:659:18 | ref1 | provenance | | -| lifetime.rs:655:4:655:7 | ref1 [&ref] | lifetime.rs:667:14:667:17 | ref1 | provenance | | | lifetime.rs:655:11:655:25 | &raw const str2 | lifetime.rs:655:4:655:7 | ref1 | provenance | | -| lifetime.rs:655:11:655:25 | &raw const str2 [&ref] | lifetime.rs:655:4:655:7 | ref1 [&ref] | provenance | | -| lifetime.rs:655:22:655:25 | str2 | lifetime.rs:655:11:655:25 | &raw const str2 [&ref] | provenance | | | lifetime.rs:781:2:781:19 | return ... | lifetime.rs:785:11:785:41 | get_local_for_unsafe_function(...) | provenance | | | lifetime.rs:781:9:781:19 | &my_local10 | lifetime.rs:781:2:781:19 | return ... | provenance | | | lifetime.rs:785:6:785:7 | p1 | lifetime.rs:789:12:789:13 | p1 | provenance | | @@ -197,47 +158,23 @@ edges | main.rs:18:9:18:10 | p1 [&ref] | main.rs:21:19:21:20 | p1 | provenance | | | main.rs:18:9:18:10 | p1 [&ref] | main.rs:29:19:29:20 | p1 | provenance | | | main.rs:18:14:18:29 | ...::as_ptr(...) [&ref] | main.rs:18:9:18:10 | p1 [&ref] | provenance | | -| main.rs:18:26:18:28 | &b1 | main.rs:18:14:18:29 | ...::as_ptr(...) [&ref] | provenance | MaD:4 | +| main.rs:18:26:18:28 | &b1 | main.rs:18:14:18:29 | ...::as_ptr(...) [&ref] | provenance | MaD:2 | | main.rs:44:9:44:10 | p2 [&ref] | main.rs:51:23:51:24 | p2 | provenance | | | main.rs:44:9:44:10 | p2 [&ref] | main.rs:64:23:64:24 | p2 | provenance | | | main.rs:44:14:44:29 | ...::as_ptr(...) [&ref] | main.rs:44:9:44:10 | p2 [&ref] | provenance | | -| main.rs:44:26:44:28 | &b2 | main.rs:44:14:44:29 | ...::as_ptr(...) [&ref] | provenance | MaD:4 | +| main.rs:44:26:44:28 | &b2 | main.rs:44:14:44:29 | ...::as_ptr(...) [&ref] | provenance | MaD:2 | | main.rs:47:9:47:10 | p3 [&ref] | main.rs:52:23:52:24 | p3 | provenance | | | main.rs:47:14:47:37 | ...::as_mut_ptr(...) [&ref] | main.rs:47:9:47:10 | p3 [&ref] | provenance | | -| main.rs:47:30:47:36 | &mut b3 | main.rs:47:14:47:37 | ...::as_mut_ptr(...) [&ref] | provenance | MaD:3 | +| main.rs:47:30:47:36 | &mut b3 | main.rs:47:14:47:37 | ...::as_mut_ptr(...) [&ref] | provenance | MaD:1 | models -| 1 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | -| 2 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint | -| 3 | Summary: ::as_mut_ptr; Argument[0].Reference.Reference; ReturnValue.Reference; value | -| 4 | Summary: ::as_ptr; Argument[0].Reference.Reference; ReturnValue.Reference; value | -| 5 | Summary: core::ptr::from_ref; Argument[0]; ReturnValue; value | +| 1 | Summary: ::as_mut_ptr; Argument[0].Reference.Reference; ReturnValue.Reference; value | +| 2 | Summary: ::as_ptr; Argument[0].Reference.Reference; ReturnValue.Reference; value | +| 3 | Summary: core::ptr::from_ref; Argument[0]; ReturnValue; value | nodes | deallocation.rs:242:6:242:7 | p1 | semmle.label | p1 | | deallocation.rs:242:30:242:38 | &raw const my_buffer | semmle.label | &raw const my_buffer | | deallocation.rs:245:14:245:15 | p1 | semmle.label | p1 | | deallocation.rs:252:14:252:15 | p1 | semmle.label | p1 | -| deallocation.rs:322:28:322:43 | ...: ... | semmle.label | ...: ... | -| deallocation.rs:324:18:324:20 | ptr | semmle.label | ptr | -| deallocation.rs:334:27:334:42 | ...: ... | semmle.label | ...: ... | -| deallocation.rs:342:18:342:20 | ptr | semmle.label | ptr | -| deallocation.rs:351:7:351:10 | ptr1 | semmle.label | ptr1 | -| deallocation.rs:351:14:351:33 | &raw mut ... | semmle.label | &raw mut ... | -| deallocation.rs:352:7:352:10 | ptr2 | semmle.label | ptr2 | -| deallocation.rs:352:14:352:33 | &raw mut ... | semmle.label | &raw mut ... | -| deallocation.rs:354:4:354:7 | ptr1 | semmle.label | ptr1 | -| deallocation.rs:354:4:354:7 | ptr1 | semmle.label | ptr1 | -| deallocation.rs:355:4:355:7 | ptr2 | semmle.label | ptr2 | -| deallocation.rs:355:4:355:7 | ptr2 | semmle.label | ptr2 | -| deallocation.rs:357:27:357:30 | ptr1 | semmle.label | ptr1 | -| deallocation.rs:359:26:359:29 | ptr2 | semmle.label | ptr2 | -| deallocation.rs:370:6:370:9 | ptr1 | semmle.label | ptr1 | -| deallocation.rs:370:13:370:28 | &raw mut ... | semmle.label | &raw mut ... | -| deallocation.rs:373:13:373:16 | ptr1 | semmle.label | ptr1 | -| deallocation.rs:381:13:381:16 | ptr1 | semmle.label | ptr1 | -| deallocation.rs:389:6:389:9 | ptr2 | semmle.label | ptr2 | -| deallocation.rs:389:13:389:28 | &raw mut ... | semmle.label | &raw mut ... | -| deallocation.rs:392:13:392:16 | ptr2 | semmle.label | ptr2 | -| deallocation.rs:402:13:402:16 | ptr2 | semmle.label | ptr2 | | lifetime.rs:21:2:21:18 | return ... | semmle.label | return ... | | lifetime.rs:21:9:21:18 | &my_local1 | semmle.label | &my_local1 | | lifetime.rs:27:2:27:22 | return ... | semmle.label | return ... | @@ -283,17 +220,6 @@ nodes | lifetime.rs:110:5:110:6 | p2 | semmle.label | p2 | | lifetime.rs:119:15:119:24 | &my_local3 | semmle.label | &my_local3 | | lifetime.rs:119:27:119:44 | &mut my_local_mut4 | semmle.label | &mut my_local_mut4 | -| lifetime.rs:127:2:127:24 | return ... | semmle.label | return ... | -| lifetime.rs:127:9:127:24 | &MY_GLOBAL_CONST | semmle.label | &MY_GLOBAL_CONST | -| lifetime.rs:134:3:134:30 | return ... | semmle.label | return ... | -| lifetime.rs:134:10:134:30 | &mut MY_GLOBAL_STATIC | semmle.label | &mut MY_GLOBAL_STATIC | -| lifetime.rs:139:6:139:7 | p1 | semmle.label | p1 | -| lifetime.rs:139:11:139:21 | get_const(...) | semmle.label | get_const(...) | -| lifetime.rs:140:6:140:7 | p2 | semmle.label | p2 | -| lifetime.rs:140:11:140:26 | get_static_mut(...) | semmle.label | get_static_mut(...) | -| lifetime.rs:147:14:147:15 | p1 | semmle.label | p1 | -| lifetime.rs:148:14:148:15 | p2 | semmle.label | p2 | -| lifetime.rs:154:5:154:6 | p2 | semmle.label | p2 | | lifetime.rs:161:17:161:31 | ...: ... | semmle.label | ...: ... | | lifetime.rs:164:13:164:15 | ptr | semmle.label | ptr | | lifetime.rs:169:17:169:31 | ...: ... | semmle.label | ...: ... | @@ -316,7 +242,6 @@ nodes | lifetime.rs:211:18:211:52 | access_ptr_rec(...) | semmle.label | access_ptr_rec(...) | | lifetime.rs:211:33:211:40 | ptr_ours | semmle.label | ptr_ours | | lifetime.rs:216:16:216:21 | ptr_up | semmle.label | ptr_up | -| lifetime.rs:217:18:217:25 | ptr_ours | semmle.label | ptr_ours | | lifetime.rs:218:18:218:25 | ptr_down | semmle.label | ptr_down | | lifetime.rs:225:2:225:16 | return ptr_ours | semmle.label | return ptr_ours | | lifetime.rs:230:6:230:14 | ptr_start | semmle.label | ptr_start | @@ -350,26 +275,27 @@ nodes | lifetime.rs:313:27:313:28 | p2 | semmle.label | p2 | | lifetime.rs:314:23:314:24 | p2 | semmle.label | p2 | | lifetime.rs:317:13:317:18 | result | semmle.label | result | +| lifetime.rs:332:6:332:13 | mut ref1 | semmle.label | mut ref1 | +| lifetime.rs:332:17:332:22 | &enum1 | semmle.label | &enum1 | +| lifetime.rs:336:3:336:6 | ref1 | semmle.label | ref1 | +| lifetime.rs:336:10:336:15 | &inner | semmle.label | &inner | +| lifetime.rs:338:9:338:35 | ...::Pointer(...) | semmle.label | ...::Pointer(...) | +| lifetime.rs:339:28:339:30 | ptr | semmle.label | ptr | +| lifetime.rs:348:6:348:13 | mut ref1 | semmle.label | mut ref1 | +| lifetime.rs:348:17:348:22 | &enum1 | semmle.label | &enum1 | +| lifetime.rs:352:3:352:6 | ref1 | semmle.label | ref1 | +| lifetime.rs:352:10:352:15 | &inner | semmle.label | &inner | +| lifetime.rs:354:9:354:35 | ...::Pointer(...) | semmle.label | ...::Pointer(...) | +| lifetime.rs:355:28:355:30 | ptr | semmle.label | ptr | | lifetime.rs:383:3:383:4 | p1 | semmle.label | p1 | | lifetime.rs:383:31:383:37 | &raw mut my_pair | semmle.label | &raw mut my_pair | -| lifetime.rs:384:3:384:4 | p2 | semmle.label | p2 | -| lifetime.rs:384:27:384:35 | &raw const ... | semmle.label | &raw const ... | -| lifetime.rs:385:3:385:4 | p3 | semmle.label | p3 | -| lifetime.rs:385:31:385:39 | &raw mut ... | semmle.label | &raw mut ... | | lifetime.rs:388:15:388:16 | p1 | semmle.label | p1 | | lifetime.rs:391:15:391:16 | p1 | semmle.label | p1 | -| lifetime.rs:394:14:394:15 | p2 | semmle.label | p2 | -| lifetime.rs:395:14:395:15 | p3 | semmle.label | p3 | | lifetime.rs:399:6:399:7 | p1 | semmle.label | p1 | -| lifetime.rs:400:5:400:6 | p3 | semmle.label | p3 | -| lifetime.rs:400:5:400:6 | p3 | semmle.label | p3 | | lifetime.rs:401:6:401:7 | p1 | semmle.label | p1 | | lifetime.rs:411:16:411:17 | p1 | semmle.label | p1 | | lifetime.rs:416:16:416:17 | p1 | semmle.label | p1 | -| lifetime.rs:421:15:421:16 | p2 | semmle.label | p2 | -| lifetime.rs:422:15:422:16 | p3 | semmle.label | p3 | | lifetime.rs:428:7:428:8 | p1 | semmle.label | p1 | -| lifetime.rs:429:6:429:7 | p3 | semmle.label | p3 | | lifetime.rs:433:7:433:8 | p1 | semmle.label | p1 | | lifetime.rs:442:6:442:7 | r1 | semmle.label | r1 | | lifetime.rs:442:17:442:23 | &my_val | semmle.label | &my_val | @@ -385,18 +311,8 @@ nodes | lifetime.rs:568:7:568:8 | p2 | semmle.label | p2 | | lifetime.rs:568:24:568:33 | &my_local2 | semmle.label | &my_local2 | | lifetime.rs:572:14:572:15 | p2 | semmle.label | p2 | -| lifetime.rs:630:3:630:6 | str2 | semmle.label | str2 | -| lifetime.rs:630:10:630:25 | &... | semmle.label | &... | -| lifetime.rs:633:15:633:18 | str2 | semmle.label | str2 | -| lifetime.rs:641:14:641:17 | str2 | semmle.label | str2 | -| lifetime.rs:654:4:654:7 | str2 | semmle.label | str2 | -| lifetime.rs:654:11:654:35 | ... + ... | semmle.label | ... + ... | -| lifetime.rs:654:31:654:35 | &str1 | semmle.label | &str1 | | lifetime.rs:655:4:655:7 | ref1 | semmle.label | ref1 | -| lifetime.rs:655:4:655:7 | ref1 [&ref] | semmle.label | ref1 [&ref] | | lifetime.rs:655:11:655:25 | &raw const str2 | semmle.label | &raw const str2 | -| lifetime.rs:655:11:655:25 | &raw const str2 [&ref] | semmle.label | &raw const str2 [&ref] | -| lifetime.rs:655:22:655:25 | str2 | semmle.label | str2 | | lifetime.rs:659:15:659:18 | ref1 | semmle.label | ref1 | | lifetime.rs:667:14:667:17 | ref1 | semmle.label | ref1 | | lifetime.rs:781:2:781:19 | return ... | semmle.label | return ... | diff --git a/rust/ql/test/query-tests/security/CWE-825/AccessInvalidPointer.expected b/rust/ql/test/query-tests/security/CWE-825/AccessInvalidPointer.expected index 6afe11ad0122..d3b5456063ff 100644 --- a/rust/ql/test/query-tests/security/CWE-825/AccessInvalidPointer.expected +++ b/rust/ql/test/query-tests/security/CWE-825/AccessInvalidPointer.expected @@ -10,7 +10,6 @@ | deallocation.rs:95:5:95:31 | ...::write::<...> | deallocation.rs:70:3:70:21 | ...::dealloc | deallocation.rs:95:5:95:31 | ...::write::<...> | This operation dereferences a pointer that may be $@. | deallocation.rs:70:3:70:21 | ...::dealloc | invalid | | deallocation.rs:115:13:115:18 | my_ptr | deallocation.rs:112:3:112:12 | ...::free | deallocation.rs:115:13:115:18 | my_ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:112:3:112:12 | ...::free | invalid | | deallocation.rs:130:14:130:15 | p1 | deallocation.rs:123:23:123:40 | ...::dangling | deallocation.rs:130:14:130:15 | p1 | This operation dereferences a pointer that may be $@. | deallocation.rs:123:23:123:40 | ...::dangling | invalid | -| deallocation.rs:130:14:130:15 | p1 | deallocation.rs:123:23:123:40 | ...::dangling | deallocation.rs:130:14:130:15 | p1 | This operation dereferences a pointer that may be $@. | deallocation.rs:123:23:123:40 | ...::dangling | invalid | | deallocation.rs:131:14:131:15 | p2 | deallocation.rs:124:21:124:42 | ...::dangling_mut | deallocation.rs:131:14:131:15 | p2 | This operation dereferences a pointer that may be $@. | deallocation.rs:124:21:124:42 | ...::dangling_mut | invalid | | deallocation.rs:132:14:132:15 | p3 | deallocation.rs:125:23:125:36 | ...::null | deallocation.rs:132:14:132:15 | p3 | This operation dereferences a pointer that may be $@. | deallocation.rs:125:23:125:36 | ...::null | invalid | | deallocation.rs:163:13:163:15 | ptr | deallocation.rs:159:9:159:26 | ...::null_mut | deallocation.rs:163:13:163:15 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:159:9:159:26 | ...::null_mut | invalid | @@ -27,8 +26,6 @@ | deallocation.rs:210:7:210:9 | ptr | deallocation.rs:207:9:207:26 | ...::null_mut | deallocation.rs:210:7:210:9 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:207:9:207:26 | ...::null_mut | invalid | | deallocation.rs:226:13:226:21 | const_ptr | deallocation.rs:219:15:219:32 | ...::null_mut | deallocation.rs:226:13:226:21 | const_ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:219:15:219:32 | ...::null_mut | invalid | | deallocation.rs:274:15:274:16 | p1 | deallocation.rs:270:3:270:25 | ...::drop_in_place | deallocation.rs:274:15:274:16 | p1 | This operation dereferences a pointer that may be $@. | deallocation.rs:270:3:270:25 | ...::drop_in_place | invalid | -| deallocation.rs:274:15:274:16 | p1 | deallocation.rs:270:3:270:25 | ...::drop_in_place | deallocation.rs:274:15:274:16 | p1 | This operation dereferences a pointer that may be $@. | deallocation.rs:270:3:270:25 | ...::drop_in_place | invalid | -| deallocation.rs:342:18:342:20 | ptr | deallocation.rs:336:3:336:25 | ...::drop_in_place | deallocation.rs:342:18:342:20 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:336:3:336:25 | ...::drop_in_place | invalid | | deallocation.rs:342:18:342:20 | ptr | deallocation.rs:336:3:336:25 | ...::drop_in_place | deallocation.rs:342:18:342:20 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:336:3:336:25 | ...::drop_in_place | invalid | edges | deallocation.rs:20:3:20:21 | ...::dealloc | deallocation.rs:20:23:20:24 | [post] m1 | provenance | Src:MaD:3 MaD:3 | @@ -49,7 +46,6 @@ edges | deallocation.rs:112:14:112:40 | [post] my_ptr as ... | deallocation.rs:115:13:115:18 | my_ptr | provenance | | | deallocation.rs:123:6:123:7 | p1 | deallocation.rs:130:14:130:15 | p1 | provenance | | | deallocation.rs:123:23:123:40 | ...::dangling | deallocation.rs:123:23:123:42 | ...::dangling(...) | provenance | Src:MaD:4 MaD:4 | -| deallocation.rs:123:23:123:40 | ...::dangling | deallocation.rs:123:23:123:42 | ...::dangling(...) | provenance | Src:MaD:4 MaD:4 | | deallocation.rs:123:23:123:42 | ...::dangling(...) | deallocation.rs:123:6:123:7 | p1 | provenance | | | deallocation.rs:124:6:124:7 | p2 | deallocation.rs:131:14:131:15 | p2 | provenance | | | deallocation.rs:124:21:124:42 | ...::dangling_mut | deallocation.rs:124:21:124:44 | ...::dangling_mut(...) | provenance | Src:MaD:5 MaD:5 | @@ -83,10 +79,8 @@ edges | deallocation.rs:219:15:219:32 | ...::null_mut | deallocation.rs:219:15:219:34 | ...::null_mut(...) | provenance | Src:MaD:8 MaD:8 | | deallocation.rs:219:15:219:34 | ...::null_mut(...) | deallocation.rs:219:3:219:11 | const_ptr | provenance | | | deallocation.rs:270:3:270:25 | ...::drop_in_place | deallocation.rs:270:27:270:28 | [post] p1 | provenance | Src:MaD:6 MaD:6 | -| deallocation.rs:270:3:270:25 | ...::drop_in_place | deallocation.rs:270:27:270:28 | [post] p1 | provenance | Src:MaD:6 MaD:6 | | deallocation.rs:270:27:270:28 | [post] p1 | deallocation.rs:274:15:274:16 | p1 | provenance | | | deallocation.rs:336:3:336:25 | ...::drop_in_place | deallocation.rs:336:27:336:29 | [post] ptr | provenance | Src:MaD:6 MaD:6 | -| deallocation.rs:336:3:336:25 | ...::drop_in_place | deallocation.rs:336:27:336:29 | [post] ptr | provenance | Src:MaD:6 MaD:6 | | deallocation.rs:336:27:336:29 | [post] ptr | deallocation.rs:342:18:342:20 | ptr | provenance | | models | 1 | Sink: core::ptr::read; Argument[0]; pointer-access | @@ -120,7 +114,6 @@ nodes | deallocation.rs:115:13:115:18 | my_ptr | semmle.label | my_ptr | | deallocation.rs:123:6:123:7 | p1 | semmle.label | p1 | | deallocation.rs:123:23:123:40 | ...::dangling | semmle.label | ...::dangling | -| deallocation.rs:123:23:123:40 | ...::dangling | semmle.label | ...::dangling | | deallocation.rs:123:23:123:42 | ...::dangling(...) | semmle.label | ...::dangling(...) | | deallocation.rs:124:6:124:7 | p2 | semmle.label | p2 | | deallocation.rs:124:21:124:42 | ...::dangling_mut | semmle.label | ...::dangling_mut | @@ -160,11 +153,9 @@ nodes | deallocation.rs:219:15:219:34 | ...::null_mut(...) | semmle.label | ...::null_mut(...) | | deallocation.rs:226:13:226:21 | const_ptr | semmle.label | const_ptr | | deallocation.rs:270:3:270:25 | ...::drop_in_place | semmle.label | ...::drop_in_place | -| deallocation.rs:270:3:270:25 | ...::drop_in_place | semmle.label | ...::drop_in_place | | deallocation.rs:270:27:270:28 | [post] p1 | semmle.label | [post] p1 | | deallocation.rs:274:15:274:16 | p1 | semmle.label | p1 | | deallocation.rs:336:3:336:25 | ...::drop_in_place | semmle.label | ...::drop_in_place | -| deallocation.rs:336:3:336:25 | ...::drop_in_place | semmle.label | ...::drop_in_place | | deallocation.rs:336:27:336:29 | [post] ptr | semmle.label | [post] ptr | | deallocation.rs:342:18:342:20 | ptr | semmle.label | ptr | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected index 40e59cf662ab..b3a011a27afa 100644 --- a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected @@ -1,14 +1,16 @@ -multipleCallTargets -| deallocation.rs:162:5:162:17 | ptr.is_null() | -| deallocation.rs:174:7:174:19 | ptr.is_null() | -| deallocation.rs:186:5:186:17 | ptr.is_null() | -| deallocation.rs:190:5:190:17 | ptr.is_null() | -| deallocation.rs:194:6:194:18 | ptr.is_null() | -| deallocation.rs:202:5:202:17 | ptr.is_null() | -| deallocation.rs:210:25:210:37 | ptr.is_null() | -| deallocation.rs:225:5:225:23 | const_ptr.is_null() | +multipleResolvedTargets | deallocation.rs:354:11:354:29 | ...::from(...) | | deallocation.rs:355:11:355:29 | ...::from(...) | +| deallocation.rs:420:2:420:4 | * ... | +| deallocation.rs:421:23:421:25 | * ... | +| deallocation.rs:425:33:425:35 | * ... | +| deallocation.rs:430:27:430:29 | * ... | +| lifetime.rs:217:17:217:25 | * ... | | lifetime.rs:610:13:610:31 | ...::from(...) | | lifetime.rs:611:13:611:31 | ...::from(...) | | lifetime.rs:628:13:628:31 | ...::from(...) | +| lifetime.rs:630:11:630:25 | * ... | +| lifetime.rs:692:12:692:14 | * ... | +| lifetime.rs:693:12:693:14 | * ... | +| lifetime.rs:694:12:694:14 | * ... | +| lifetime.rs:734:11:734:13 | * ... | diff --git a/rust/ql/test/query-tests/security/CWE-825/deallocation.rs b/rust/ql/test/query-tests/security/CWE-825/deallocation.rs index 073d03260b34..ce043d69fdd8 100644 --- a/rust/ql/test/query-tests/security/CWE-825/deallocation.rs +++ b/rust/ql/test/query-tests/security/CWE-825/deallocation.rs @@ -403,3 +403,29 @@ pub fn test_vec_reserve() { println!(" v4 = {}", v4); // corrupt in practice } } + +// --- pointer to reference --- + +pub fn test_pointer_converted_to_reference() { + let layout = std::alloc::Layout::new::(); + let m3; + + // allocate + unsafe { + let m1 = std::alloc::alloc(layout); // *mut u8 + let m2 = m1 as *mut u128; // *mut u128 + m3 = &mut *m2; // &u128 + } + + *m3 = 1; // GOOD + println!(" v1 = {}", *m3); // GOOD + + // free + unsafe { + std::alloc::dealloc((&raw mut *m3) as *mut u8, layout); // $ MISSING: Source[rust/access-invalid-pointer]=dealloc + } + // (m1, m2, m3 are now dangling) + + // (this is corrupt in practice) + println!(" v2 = {} (!)", *m3); // $ MISSING: Alert[rust/access-invalid-pointer]=dealloc +} diff --git a/rust/ql/test/query-tests/security/CWE-825/lifetime.rs b/rust/ql/test/query-tests/security/CWE-825/lifetime.rs index 83317aa13d1f..05a099e903fb 100644 --- a/rust/ql/test/query-tests/security/CWE-825/lifetime.rs +++ b/rust/ql/test/query-tests/security/CWE-825/lifetime.rs @@ -827,3 +827,33 @@ pub fn test_lifetimes_example_good() { println!(" val = {dereferenced_ptr}"); } + +// --- generic calls --- + +trait Processor { + fn process(ptr: *const i64) -> i64; +} + +struct MyProcessor { +} + +impl Processor for MyProcessor { + fn process(ptr: *const i64) -> i64 { + unsafe { + return *ptr; // good + } + } +} + +fn generic_caller() -> i64 +{ + let local_value: i64 = 10; + let ptr = &local_value as *const i64; + + return T::process(ptr); +} + +pub fn test_generic() { + let result = generic_caller::(); + println!(" result = {result}"); +} diff --git a/rust/ql/test/query-tests/security/CWE-825/main.rs b/rust/ql/test/query-tests/security/CWE-825/main.rs index d15f595e13c0..d14c5d463ece 100644 --- a/rust/ql/test/query-tests/security/CWE-825/main.rs +++ b/rust/ql/test/query-tests/security/CWE-825/main.rs @@ -143,6 +143,9 @@ fn main() { println!("test_vec_reserve:"); test_vec_reserve(); + println!("test_pointer_converted_to_reference:"); + test_pointer_converted_to_reference(); + // --- println!("test_local_dangling:"); @@ -209,4 +212,7 @@ fn main() { println!("test_lifetimes_example_good:"); test_lifetimes_example_good(); + + println!("test_generic:"); + test_generic(); } diff --git a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/PathResolutionConsistency.expected index 4d2cdee53ce5..be3b445209d5 100644 --- a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/PathResolutionConsistency.expected @@ -1,6 +1,31 @@ -multipleCallTargets +multipleResolvedTargets | main.rs:14:13:14:29 | ...::from(...) | | main.rs:15:13:15:29 | ...::from(...) | +| main.rs:223:9:223:18 | * ... | +| main.rs:223:9:223:18 | * ... | +| main.rs:223:9:223:18 | * ... | +| main.rs:223:9:223:18 | * ... | +| main.rs:228:9:228:18 | * ... | +| main.rs:228:9:228:18 | * ... | +| main.rs:228:9:228:18 | * ... | +| main.rs:228:9:228:18 | * ... | +| main.rs:353:5:353:14 | * ... | +| main.rs:353:5:353:14 | * ... | +| main.rs:353:5:353:14 | * ... | +| main.rs:353:5:353:14 | * ... | +| main.rs:539:13:539:14 | * ... | +| main.rs:544:19:544:20 | * ... | +| more.rs:34:11:34:19 | * ... | +| more.rs:45:20:45:26 | * ... | +| more.rs:56:20:56:30 | * ... | +| more.rs:56:21:56:30 | * ... | +| more.rs:61:20:61:30 | * ... | +| more.rs:61:21:61:30 | * ... | +| more.rs:67:20:67:25 | * ... | +| more.rs:71:5:71:10 | * ... | +| more.rs:75:5:75:10 | * ... | +| more.rs:80:5:80:10 | * ... | +| more.rs:82:20:82:26 | * ... | | unreachable.rs:165:20:165:42 | ...::from(...) | | unreachable.rs:171:9:171:15 | ...::from(...) | | unreachable.rs:177:17:177:25 | ...::from(...) | diff --git a/rust/ql/test/utils-tests/modelgenerator/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/utils-tests/modelgenerator/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..b9195fc15f0a --- /dev/null +++ b/rust/ql/test/utils-tests/modelgenerator/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,9 @@ +multipleResolvedTargets +| option.rs:34:18:34:22 | * ... | +| option.rs:61:15:61:19 | * ... | +| option.rs:69:15:69:19 | * ... | +| option.rs:306:9:306:13 | * ... | +| option.rs:335:13:335:17 | * ... | +| option.rs:483:27:483:29 | * ... | +| summaries.rs:87:5:87:6 | * ... | +| summaries.rs:92:5:92:6 | * ... | diff --git a/rust/ql/test/utils-tests/modelgenerator/option.rs b/rust/ql/test/utils-tests/modelgenerator/option.rs index 9af029791351..fd5cd649c2cf 100644 --- a/rust/ql/test/utils-tests/modelgenerator/option.rs +++ b/rust/ql/test/utils-tests/modelgenerator/option.rs @@ -325,7 +325,8 @@ impl MyOption { } // summary=::get_or_insert_with;Argument[self].Reference.Field[test::option::MyOption::MySome(0)];ReturnValue.Reference;value;dfc-generated - // MISSING: Mutating `self` parameter. + // summary=::get_or_insert_with;Argument[0].ReturnValue;Argument[self].Reference.Field[test::option::MyOption::MySome(0)];value;dfc-generated + // summary=::get_or_insert_with;Argument[0].ReturnValue;ReturnValue.Reference;value;dfc-generated pub fn get_or_insert_with(&mut self, f: F) -> &mut T where F: FnOnce() -> T, diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index 5861ede759b7..96173957278f 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -228,41 +228,35 @@ class _: loop_body: drop -class CallExprBase(Expr): - """ - A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. - """ - arg_list: optional["ArgList"] | child - attrs: list["Attr"] | child - args: list["Expr"] | synth - - -@annotate(CallExpr, replace_bases={Expr: CallExprBase}, cfg=True) +@annotate(CallExpr, cfg=True) class _: """ - A function call expression. For example: + NOTE: Consider using `Call` instead, as that excludes call expressions that are + instantiations of tuple structs and tuple variants. + + A call expression. For example: ```rust foo(42); foo::(42); foo[0](42); - foo(1) = 4; + Option::Some(42); // tuple variant instantiation ``` """ - arg_list: drop - attrs: drop -@annotate(MethodCallExpr, replace_bases={Expr: CallExprBase}, cfg=True) +@annotate(MethodCallExpr, cfg=True) class _: """ + NOTE: Consider using `MethodCall` instead, as that also includes calls to methods using + call syntax (such as `Foo::method(x)`), operation syntax (such as `x + y`), and + indexing syntax (such as `x[y]`). + A method call expression. For example: ```rust x.foo(42); x.foo::(42); ``` """ - arg_list: drop - attrs: drop @annotate(MatchArm) @@ -1926,7 +1920,7 @@ class _: @annotate(TupleField) class _: """ - A field in a tuple struct or tuple enum variant. + A field in a tuple struct or tuple variant. For example: ```rust @@ -1939,7 +1933,7 @@ class _: @annotate(TupleFieldList) class _: """ - A list of fields in a tuple struct or tuple enum variant. + A list of fields in a tuple struct or tuple variant. For example: ```rust diff --git a/rust/tools/builtins/types.rs b/rust/tools/builtins/types.rs index fc0be525ab44..d3fd06b21683 100644 --- a/rust/tools/builtins/types.rs +++ b/rust/tools/builtins/types.rs @@ -28,7 +28,7 @@ struct Slice; struct Array; struct Ref; struct RefMut; -struct Ptr; +struct PtrConst; struct PtrMut; // tuples diff --git a/shared/concepts/CHANGELOG.md b/shared/concepts/CHANGELOG.md index 062bb537ba27..e2c7978d2b6c 100644 --- a/shared/concepts/CHANGELOG.md +++ b/shared/concepts/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.12 + +No user-facing changes. + ## 0.0.11 No user-facing changes. diff --git a/shared/concepts/change-notes/released/0.0.12.md b/shared/concepts/change-notes/released/0.0.12.md new file mode 100644 index 000000000000..0e206033bc47 --- /dev/null +++ b/shared/concepts/change-notes/released/0.0.12.md @@ -0,0 +1,3 @@ +## 0.0.12 + +No user-facing changes. diff --git a/shared/concepts/codeql-pack.release.yml b/shared/concepts/codeql-pack.release.yml index e679dc420925..997fb8da83cd 100644 --- a/shared/concepts/codeql-pack.release.yml +++ b/shared/concepts/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.11 +lastReleaseVersion: 0.0.12 diff --git a/shared/concepts/qlpack.yml b/shared/concepts/qlpack.yml index 07fca2a0a454..8c44a51ff939 100644 --- a/shared/concepts/qlpack.yml +++ b/shared/concepts/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/concepts -version: 0.0.11 +version: 0.0.13-dev groups: shared library: true dependencies: diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index c35db78c988c..523f7667b246 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.22 + +No user-facing changes. + ## 2.0.21 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/2.0.22.md b/shared/controlflow/change-notes/released/2.0.22.md new file mode 100644 index 000000000000..8a2611adad2d --- /dev/null +++ b/shared/controlflow/change-notes/released/2.0.22.md @@ -0,0 +1,3 @@ +## 2.0.22 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index a572e88bffd4..980bdfe195ba 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.21 +lastReleaseVersion: 2.0.22 diff --git a/shared/controlflow/codeql/controlflow/Guards.qll b/shared/controlflow/codeql/controlflow/Guards.qll index c0d07278b9a8..b313afcdb6bb 100644 --- a/shared/controlflow/codeql/controlflow/Guards.qll +++ b/shared/controlflow/codeql/controlflow/Guards.qll @@ -1280,39 +1280,38 @@ module Make< } } - signature predicate guardChecksSig(Guard g, Expr e, boolean branch); + signature predicate guardChecksSig(Guard g, Expr e, GuardValue gv); bindingset[this] - signature class StateSig; + signature class ParamSig; - private module WithState { - signature predicate guardChecksSig(Guard g, Expr e, boolean branch, State state); + private module WithParam { + signature predicate guardChecksSig(Guard g, Expr e, GuardValue gv, P par); } /** * Extends a `BarrierGuard` input predicate with wrapped invocations. */ module ValidationWrapper { - private predicate guardChecksWithState(Guard g, Expr e, boolean branch, Unit state) { - guardChecks0(g, e, branch) and exists(state) + private predicate guardChecksWithParam(Guard g, Expr e, GuardValue gv, Unit par) { + guardChecks0(g, e, gv) and exists(par) } - private module StatefulWrapper = ValidationWrapperWithState; + private module ParameterizedWrapper = + ParameterizedValidationWrapper; /** * Holds if the guard `g` validates the SSA definition `def` upon evaluating to `val`. */ predicate guardChecksDef(Guard g, SsaDefinition def, GuardValue val) { - StatefulWrapper::guardChecksDef(g, def, val, _) + ParameterizedWrapper::guardChecksDef(g, def, val, _) } } /** * Extends a `BarrierGuard` input predicate with wrapped invocations. */ - module ValidationWrapperWithState< - StateSig State, WithState::guardChecksSig/4 guardChecks0> - { + module ParameterizedValidationWrapper::guardChecksSig/4 guardChecks0> { private import WrapperGuard /** @@ -1321,12 +1320,12 @@ module Make< * parameter has been validated by the given guard. */ private predicate validReturnInValidationWrapper( - ReturnExpr ret, ParameterPosition ppos, GuardValue retval, State state + ReturnExpr ret, ParameterPosition ppos, GuardValue retval, P par ) { exists(NonOverridableMethod m, SsaParameterInit param, Guard guard, GuardValue val | m.getAReturnExpr() = ret and param.getParameter() = m.getParameter(ppos) and - guardChecksDef(guard, param, val, state) + guardChecksDef(guard, param, val, par) | guard.valueControls(ret.getBasicBlock(), val) and relevantReturnExprValue(m, ret, retval) @@ -1341,7 +1340,7 @@ module Make< * that the argument has been validated by the given guard. */ private NonOverridableMethod validationWrapper( - ParameterPosition ppos, GuardValue retval, State state + ParameterPosition ppos, GuardValue retval, P par ) { forex(ReturnExpr ret | result.getAReturnExpr() = ret and @@ -1350,12 +1349,12 @@ module Make< disjointValues(notRetval, retval) ) | - validReturnInValidationWrapper(ret, ppos, retval, state) + validReturnInValidationWrapper(ret, ppos, retval, par) ) or exists(SsaParameterInit param, BasicBlock bb, Guard guard, GuardValue val | param.getParameter() = result.getParameter(ppos) and - guardChecksDef(guard, param, val, state) and + guardChecksDef(guard, param, val, par) and guard.valueControls(bb, val) and normalExitBlock(bb) and retval = TException(false) @@ -1365,12 +1364,12 @@ module Make< /** * Holds if the guard `g` validates the expression `e` upon evaluating to `val`. */ - private predicate guardChecks(Guard g, Expr e, GuardValue val, State state) { - guardChecks0(g, e, val.asBooleanValue(), state) + private predicate guardChecks(Guard g, Expr e, GuardValue val, P par) { + guardChecks0(g, e, val, par) or exists(NonOverridableMethodCall call, ParameterPosition ppos, ArgumentPosition apos | g = call and - call.getMethod() = validationWrapper(ppos, val, state) and + call.getMethod() = validationWrapper(ppos, val, par) and call.getArgument(apos) = e and parameterMatch(pragma[only_bind_out](ppos), pragma[only_bind_out](apos)) ) @@ -1379,9 +1378,9 @@ module Make< /** * Holds if the guard `g` validates the SSA definition `def` upon evaluating to `val`. */ - predicate guardChecksDef(Guard g, SsaDefinition def, GuardValue val, State state) { + predicate guardChecksDef(Guard g, SsaDefinition def, GuardValue val, P par) { exists(Expr e | - guardChecks(g, e, val, state) and + guardChecks(g, e, val, par) and guardReadsSsaVar(e, def) ) } diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 1374c5900672..37ae8d21aafb 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.21 +version: 2.0.23-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index a447303727c8..8ade6c20ef42 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.22 + +No user-facing changes. + ## 2.0.21 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/2.0.22.md b/shared/dataflow/change-notes/released/2.0.22.md new file mode 100644 index 000000000000..8a2611adad2d --- /dev/null +++ b/shared/dataflow/change-notes/released/2.0.22.md @@ -0,0 +1,3 @@ +## 2.0.22 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index a572e88bffd4..980bdfe195ba 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.21 +lastReleaseVersion: 2.0.22 diff --git a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll index baf473efff16..0c84d33244c1 100644 --- a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll @@ -75,6 +75,9 @@ module MakeImplContentDataFlow Lang> { /** Gets a limit on the number of reads out of sources and number of stores into sinks. */ default int accessPathLimit() { result = Lang::accessPathLimit() } + /** Gets the access path limit used in the internal invocation of the standard data flow library. */ + default int accessPathLimitInternal() { result = Lang::accessPathLimit() } + /** Holds if `c` is relevant for reads out of sources or stores into sinks. */ default predicate isRelevantContent(ContentSet c) { any() } } @@ -110,7 +113,7 @@ module MakeImplContentDataFlow Lang> { FlowFeature getAFeature() { result = ContentConfig::getAFeature() } - predicate accessPathLimit = ContentConfig::accessPathLimit/0; + predicate accessPathLimit = ContentConfig::accessPathLimitInternal/0; // needed to record reads/stores inside summarized callables predicate includeHiddenNodes() { any() } @@ -274,6 +277,16 @@ module MakeImplContentDataFlow Lang> { ) } + /** + * Gets the length of this access path. + */ + int length() { + this = TAccessPathNil() and + result = 0 + or + result = this.getTail().length() + 1 + } + /** * Gets the content set at index `i` in this access path, if any. */ diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index ddcd052e8fd5..aa74e44a8e80 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -207,6 +207,28 @@ module MakeImpl Lang> { flowLocal(source, sink) and Config::observeOverlayInformedIncrementalMode() } + /** + * Holds if data can flow from `source` to some sink. + * This is a local predicate that only has results local to the overlay/base database. + */ + predicate flowFromLocal(Node source) = forceLocal(Flow::flowFrom/1)(source) + + /** + * Holds if data can flow from `source` to some sink. + */ + predicate flowFrom(Node source) { + Flow::flowFrom(source) + or + // If we are overlay informed (i.e. we are not diff-informed), we + // merge in the local results which includes the base database results. + flowFromLocal(source) and Config::observeOverlayInformedIncrementalMode() + } + + /** + * Holds if data can flow from `source` to some sink. + */ + predicate flowFromExpr(Lang::DataFlowExpr source) { flowFrom(exprNode(source)) } + /** * Holds if data can flow from some source to `sink`. * This is a local predicate that only has results local to the overlay/base database. @@ -3501,6 +3523,16 @@ module MakeImpl Lang> { ) } + /** + * Holds if data can flow from `source` to some sink. + */ + predicate flowFrom(Node source) { exists(PathNode n | n.isSource() and n.getNode() = source) } + + /** + * Holds if data can flow from `source` to some sink. + */ + predicate flowFromExpr(Expr source) { flowFrom(exprNode(source)) } + /** * Holds if data can flow from some source to `sink`. */ diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplConsistency.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplConsistency.qll index 8f0d2cbdb771..c892cfe10348 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplConsistency.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplConsistency.qll @@ -74,6 +74,9 @@ signature module InputSig DataFlowL ) { none() } + + /** Holds if `(n1, n2)` should be excluded from the consistency test `localFlowIsLocal`. */ + default predicate localFlowIsLocalExclude(DataFlowLang::Node n1, DataFlowLang::Node n2) { none() } } module MakeConsistency< @@ -169,6 +172,7 @@ module MakeConsistency< query predicate localFlowIsLocal(Node n1, Node n2, string msg) { simpleLocalFlowStep(n1, n2, _) and nodeGetEnclosingCallable(n1) != nodeGetEnclosingCallable(n2) and + not Input::localFlowIsLocalExclude(n1, n2) and msg = "Local flow step does not preserve enclosing callable." } @@ -240,6 +244,13 @@ module MakeConsistency< private predicate hasPost(Node n) { exists(PostUpdateNode post | post.getPreUpdateNode() = n) } + /** + * Consider code like `a.b.f = source()`. There is flow from `source()` to + * `[post] a.b` (with an appropriate access path), but we also want there to + * be flow to `[post] a` (with an appropriate access path). The data flow + * library is able to infer this step because there is a read step from `a` + * to `a.b`, as long as the post-update node for `a` exists. + */ query predicate reverseRead(Node n, string msg) { exists(Node n2 | readStep(n, _, n2) and hasPost(n2) and not hasPost(n)) and not Input::reverseReadExclude(n) and diff --git a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll index 6cc9d6f88a45..a8260440938e 100644 --- a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll @@ -215,6 +215,35 @@ module Make< ] } + class AcceptingValue extends string { + AcceptingValue() { + this = + [ + "true", + "false", + "no-exception", + "zero", + "not-zero", + "null", + "not-null", + ] + } + + predicate isTrue() { this = "true" } + + predicate isFalse() { this = "false" } + + predicate isNoException() { this = "no-exception" } + + predicate isZero() { this = "zero" } + + predicate isNotZero() { this = "not-zero" } + + predicate isNull() { this = "null" } + + predicate isNotNull() { this = "not-null" } + } + /** * A class used to represent provenance values for MaD models. * @@ -633,6 +662,30 @@ module Make< unsupportedCallable(callable, _, _, _) } + private predicate isRelevantSource( + SourceElement e, string output, string kind, Provenance provenance, string model + ) { + e.isSource(output, kind, provenance, model) and + ( + provenance.isManual() + or + provenance.isGenerated() and + not exists(Provenance p | p.isManual() and e.isSource(_, kind, p, _)) + ) + } + + private predicate isRelevantSink( + SinkElement e, string input, string kind, Provenance provenance, string model + ) { + e.isSink(input, kind, provenance, model) and + ( + provenance.isManual() + or + provenance.isGenerated() and + not exists(Provenance p | p.isManual() and e.isSink(_, kind, p, _)) + ) + } + private predicate summarySpec(string spec) { exists(SummarizedCallable c | c.propagatesFlow(spec, _, _, _) @@ -640,9 +693,9 @@ module Make< c.propagatesFlow(_, spec, _, _) ) or - any(SourceElement s).isSource(spec, _, _, _) + isRelevantSource(_, spec, _, _, _) or - any(SinkElement s).isSink(spec, _, _, _) + isRelevantSink(_, spec, _, _, _) } import AccessPathSyntax::AccessPath @@ -1005,7 +1058,7 @@ module Make< SourceElement source, SummaryComponentStack s, string kind, string model ) { exists(string outSpec | - source.isSource(outSpec, kind, _, model) and + isRelevantSource(source, outSpec, kind, _, model) and External::interpretSpec(outSpec, s) ) } @@ -1028,7 +1081,7 @@ module Make< SinkElement sink, SummaryComponentStack s, string kind, string model ) { exists(string inSpec | - sink.isSink(inSpec, kind, _, model) and + isRelevantSink(sink, inSpec, kind, _, model) and External::interpretSpec(inSpec, s) ) } @@ -2015,6 +2068,12 @@ module Make< not exists(interpretComponent(c)) } + /** Holds if `acceptingvalue` is not a valid barrier guard accepting-value. */ + bindingset[acceptingvalue] + predicate invalidAcceptingValue(string acceptingvalue) { + not acceptingvalue instanceof AcceptingValue + } + /** Holds if `provenance` is not a valid provenance value. */ bindingset[provenance] predicate invalidProvenance(string provenance) { not provenance instanceof Provenance } @@ -2052,6 +2111,23 @@ module Make< Element n, string input, string kind, Provenance provenance, string model ); + /** + * Holds if an external barrier specification exists for `n` with output specification + * `output` and kind `kind`. + */ + predicate barrierElement( + Element n, string output, string kind, Provenance provenance, string model + ); + + /** + * Holds if an external barrier guard specification exists for `n` with input + * specification `input`, accepting value `acceptingvalue`, and kind `kind`. + */ + predicate barrierGuardElement( + Element n, string input, AcceptingValue acceptingvalue, string kind, + Provenance provenance, string model + ); + class SourceOrSinkElement extends Element; /** An entity used to interpret a source/sink specification. */ @@ -2105,7 +2181,9 @@ module Make< private predicate sourceSinkSpec(string spec) { sourceElement(_, spec, _, _, _) or - sinkElement(_, spec, _, _, _) + sinkElement(_, spec, _, _, _) or + barrierElement(_, spec, _, _, _) or + barrierGuardElement(_, spec, _, _, _, _) } private module AccessPath = AccessPathSyntax::AccessPath; @@ -2160,11 +2238,34 @@ module Make< ) } + private predicate barrierElementRef( + InterpretNode ref, SourceSinkAccessPath output, string kind, string model + ) { + exists(SourceOrSinkElement e | + barrierElement(e, output, kind, _, model) and + if outputNeedsReferenceExt(output.getToken(0)) + then e = ref.getCallTarget() + else e = ref.asElement() + ) + } + + private predicate barrierGuardElementRef( + InterpretNode ref, SourceSinkAccessPath input, AcceptingValue acceptingvalue, string kind, + string model + ) { + exists(SourceOrSinkElement e | + barrierGuardElement(e, input, acceptingvalue, kind, _, model) and + if inputNeedsReferenceExt(input.getToken(0)) + then e = ref.getCallTarget() + else e = ref.asElement() + ) + } + /** Holds if the first `n` tokens of `output` resolve to the given interpretation. */ private predicate interpretOutput( SourceSinkAccessPath output, int n, InterpretNode ref, InterpretNode node ) { - sourceElementRef(ref, output, _, _) and + (sourceElementRef(ref, output, _, _) or barrierElementRef(ref, output, _, _)) and n = 0 and ( if output = "" @@ -2220,7 +2321,7 @@ module Make< private predicate interpretInput( SourceSinkAccessPath input, int n, InterpretNode ref, InterpretNode node ) { - sinkElementRef(ref, input, _, _) and + (sinkElementRef(ref, input, _, _) or barrierGuardElementRef(ref, input, _, _, _)) and n = 0 and ( if input = "" @@ -2280,6 +2381,30 @@ module Make< ) } + /** + * Holds if `node` is specified as a barrier with the given kind in a MaD flow + * model. + */ + predicate isBarrierNode(InterpretNode node, string kind, string model) { + exists(InterpretNode ref, SourceSinkAccessPath output | + barrierElementRef(ref, output, kind, model) and + interpretOutput(output, output.getNumToken(), ref, node) + ) + } + + /** + * Holds if `node` is specified as a barrier guard argument with the + * given kind in a MaD flow model. + */ + predicate isBarrierGuardNode( + InterpretNode node, AcceptingValue acceptingvalue, string kind, string model + ) { + exists(InterpretNode ref, SourceSinkAccessPath input | + barrierGuardElementRef(ref, input, acceptingvalue, kind, model) and + interpretInput(input, input.getNumToken(), ref, node) + ) + } + final private class SourceOrSinkElementFinal = SourceOrSinkElement; signature predicate sourceOrSinkElementSig( diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index a8c2ac6ada99..33335ec904f2 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.0.21 +version: 2.0.23-dev groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index f57268a50332..27e5fb03dfa7 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.38 + +No user-facing changes. + ## 1.0.37 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.38.md b/shared/mad/change-notes/released/1.0.38.md new file mode 100644 index 000000000000..2c984549c5fb --- /dev/null +++ b/shared/mad/change-notes/released/1.0.38.md @@ -0,0 +1,3 @@ +## 1.0.38 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index 9ad62b332475..b14e9763a8d4 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.37 +lastReleaseVersion: 1.0.38 diff --git a/shared/mad/codeql/mad/ModelValidation.qll b/shared/mad/codeql/mad/ModelValidation.qll index 5d4698bed1d4..9791355d03ae 100644 --- a/shared/mad/codeql/mad/ModelValidation.qll +++ b/shared/mad/codeql/mad/ModelValidation.qll @@ -173,7 +173,7 @@ module KindValidation { or exists(string kind, string msg | Config::sinkKind(kind) | not kind instanceof ValidSinkKind and - msg = "Invalid kind \"" + kind + "\" in sink model." and + msg = "Invalid kind \"" + kind + "\" in sink or barrier model." and // The part of this message that refers to outdated sink kinds can be deleted after June 1st, 2024. if kind instanceof OutdatedSinkKind then result = msg + " " + kind.(OutdatedSinkKind).outdatedMessage() diff --git a/shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll b/shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll index 51dafc2cc96a..8abe45635803 100644 --- a/shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll +++ b/shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll @@ -277,6 +277,16 @@ module MakeModelGeneratorFactory< */ predicate isAdditionalContentFlowStep(Lang::Node nodeFrom, Lang::Node nodeTo); + /** + * Gets the access path limit for content flow analysis. + */ + default int contentAccessPathLimit() { result = 2 } + + /** + * Gets the internal access path limit for content flow analysis. + */ + default int contentAccessPathLimitInternal() { result = Lang::accessPathLimit() } + /** * Holds if the content set `c` is field like. */ @@ -650,7 +660,10 @@ module MakeModelGeneratorFactory< exists(Type t | t = n.(NodeExtended).getType() and not isRelevantType(t)) } - int accessPathLimit() { result = 2 } + predicate accessPathLimit = SummaryModelGeneratorInput::contentAccessPathLimit/0; + + predicate accessPathLimitInternal = + SummaryModelGeneratorInput::contentAccessPathLimitInternal/0; predicate isRelevantContent(DataFlow::ContentSet s) { isRelevantContent0(s) } @@ -703,14 +716,17 @@ module MakeModelGeneratorFactory< } /** - * Holds if the access path `ap` is not a parameter or returnvalue of a callback - * stored in a field. + * Holds if `ap` is valid for generating summary models. + * + * We currently don't include summaries that rely on parameters or return values + * of callbacks stored in fields, as those are not supported by the data flow + * library. * - * That is, we currently don't include summaries that rely on parameters or return values - * of callbacks stored in fields. + * We also exclude access paths with contents not supported by `printContent`. */ private predicate validateAccessPath(PropagateContentFlow::AccessPath ap) { - not (mentionsField(ap) and mentionsCallback(ap)) + not (mentionsField(ap) and mentionsCallback(ap)) and + forall(int i | i in [0 .. ap.length() - 1] | exists(getContent(ap, i))) } private predicate apiFlow( @@ -720,7 +736,9 @@ module MakeModelGeneratorFactory< ) { PropagateContentFlow::flow(p, reads, returnNodeExt, stores, preservesValue) and getEnclosingCallable(returnNodeExt) = api and - getEnclosingCallable(p) = api + getEnclosingCallable(p) = api and + validateAccessPath(reads) and + validateAccessPath(stores) } /** @@ -763,9 +781,7 @@ module MakeModelGeneratorFactory< PropagateContentFlow::AccessPath reads, ReturnNodeExt returnNodeExt, PropagateContentFlow::AccessPath stores, boolean preservesValue ) { - PropagateContentFlow::flow(p, reads, returnNodeExt, stores, preservesValue) and - getEnclosingCallable(returnNodeExt) = api and - getEnclosingCallable(p) = api and + apiFlow(api, p, reads, returnNodeExt, stores, preservesValue) and p = api.getARelevantParameterNode() } @@ -956,8 +972,6 @@ module MakeModelGeneratorFactory< input = parameterNodeAsExactInput(p) + printReadAccessPath(reads) and output = getExactOutput(returnNodeExt) + printStoreAccessPath(stores) and input != output and - validateAccessPath(reads) and - validateAccessPath(stores) and ( if mentionsField(reads) or mentionsField(stores) then lift = false and api.isRelevant() diff --git a/shared/mad/codeql/mad/static/ModelsAsData.qll b/shared/mad/codeql/mad/static/ModelsAsData.qll new file mode 100644 index 000000000000..84daaa9b6c86 --- /dev/null +++ b/shared/mad/codeql/mad/static/ModelsAsData.qll @@ -0,0 +1,345 @@ +overlay[local?] +module; + +signature module ExtensionsSig { + /** + * Holds if a source model exists for the given parameters. + */ + predicate sourceModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string output, string kind, string provenance, QlBuiltins::ExtensionId madId + ); + + /** + * Holds if a sink model exists for the given parameters. + */ + predicate sinkModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string input, string kind, string provenance, QlBuiltins::ExtensionId madId + ); + + /** + * Holds if a barrier model exists for the given parameters. + */ + predicate barrierModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string output, string kind, string provenance, QlBuiltins::ExtensionId madId + ); + + /** + * Holds if a barrier guard model exists for the given parameters. + */ + predicate barrierGuardModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string input, string acceptingvalue, string kind, string provenance, + QlBuiltins::ExtensionId madId + ); + + /** + * Holds if a summary model exists for the given parameters. + */ + predicate summaryModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string input, string output, string kind, string provenance, QlBuiltins::ExtensionId madId + ); + + /** + * Holds if a neutral model exists for the given parameters. + */ + predicate neutralModel( + string namespace, string type, string name, string signature, string kind, string provenance + ); + + /** + * Holds if the namespace `namespace` is part of the group `group`. + */ + predicate namespaceGrouping(string group, string namespace); +} + +signature module InputSig { + /** + * Holds if a source model exists for the given parameters. + */ + default predicate additionalSourceModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string output, string kind, string provenance, string model + ) { + none() + } + + /** + * Holds if a sink model exists for the given parameters. + */ + default predicate additionalSinkModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string input, string kind, string provenance, string model + ) { + none() + } + + /** + * Holds if a summary model exists for the given parameters. + */ + default predicate additionalSummaryModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string input, string output, string kind, string provenance, string model + ) { + none() + } + + /** Gets the separator used between namespace segments. */ + default string namespaceSegmentSeparator() { result = "." } + + /** Gets a cleaned-up version of the namespace for presentation in model coverage. */ + bindingset[ns] + default string cleanNamespace(string ns) { result = ns } +} + +module ModelsAsData { + /** + * Holds if the given extension tuple `madId` should pretty-print as `model`. + * + * Barrier models are included for completeness even though they will not show up in a path. + * + * This predicate should only be used in tests. + */ + predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) { + exists( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string output, string kind, string provenance + | + Extensions::sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, + provenance, madId) + | + model = + "Source: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + + "; " + ext + "; " + output + "; " + kind + "; " + provenance + ) + or + exists( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string input, string kind, string provenance + | + Extensions::sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, + provenance, madId) + | + model = + "Sink: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; " + + ext + "; " + input + "; " + kind + "; " + provenance + ) + or + exists( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string output, string kind, string provenance + | + Extensions::barrierModel(namespace, type, subtypes, name, signature, ext, output, kind, + provenance, madId) + | + model = + "Barrier: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + + "; " + ext + "; " + output + "; " + kind + "; " + provenance + ) + or + exists( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string input, string acceptingvalue, string kind, string provenance + | + Extensions::barrierGuardModel(namespace, type, subtypes, name, signature, ext, input, + acceptingvalue, kind, provenance, madId) + | + model = + "Barrier Guard: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + + signature + "; " + ext + "; " + input + "; " + acceptingvalue + "; " + kind + "; " + + provenance + ) + or + exists( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string input, string output, string kind, string provenance + | + Extensions::summaryModel(namespace, type, subtypes, name, signature, ext, input, output, kind, + provenance, madId) + | + model = + "Summary: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + + "; " + ext + "; " + input + "; " + output + "; " + kind + "; " + provenance + ) + } + + /** Gets the prefix for a group of namespaces. */ + private string groupPrefix() { result = "group:" } + + /** + * Gets a namespace represented by `namespaceOrGroup`. + * + * If `namespaceOrGroup` is of the form `group:` then `result` is a + * namespace in the group ``, as determined by `namespaceGrouping`. + * Otherwise, `result` is `namespaceOrGroup`. + */ + bindingset[namespaceOrGroup] + private string getNamespace(string namespaceOrGroup) { + not exists(string group | namespaceOrGroup = groupPrefix() + group) and + result = namespaceOrGroup + or + exists(string group | + Extensions::namespaceGrouping(group, result) and + namespaceOrGroup = groupPrefix() + group + ) + } + + /** + * Holds if a source model exists for the given parameters. + */ + predicate sourceModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string output, string kind, string provenance, string model + ) { + exists(string namespaceOrGroup | namespace = getNamespace(namespaceOrGroup) | + exists(QlBuiltins::ExtensionId madId | + Extensions::sourceModel(namespaceOrGroup, type, subtypes, name, signature, ext, output, + kind, provenance, madId) and + model = "MaD:" + madId.toString() + ) + or + Input::additionalSourceModel(namespaceOrGroup, type, subtypes, name, signature, ext, output, + kind, provenance, model) + ) + } + + /** + * Holds if a sink model exists for the given parameters. + */ + predicate sinkModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string input, string kind, string provenance, string model + ) { + exists(string namespaceOrGroup | namespace = getNamespace(namespaceOrGroup) | + exists(QlBuiltins::ExtensionId madId | + Extensions::sinkModel(namespaceOrGroup, type, subtypes, name, signature, ext, input, kind, + provenance, madId) and + model = "MaD:" + madId.toString() + ) + or + Input::additionalSinkModel(namespaceOrGroup, type, subtypes, name, signature, ext, input, + kind, provenance, model) + ) + } + + /** Holds if a barrier model exists for the given parameters. */ + predicate barrierModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string output, string kind, string provenance, string model + ) { + exists(string namespaceOrGroup, QlBuiltins::ExtensionId madId | + namespace = getNamespace(namespaceOrGroup) and + Extensions::barrierModel(namespaceOrGroup, type, subtypes, name, signature, ext, output, kind, + provenance, madId) and + model = "MaD:" + madId.toString() + ) + } + + /** Holds if a barrier guard model exists for the given parameters. */ + predicate barrierGuardModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string input, string acceptingvalue, string kind, string provenance, string model + ) { + exists(string namespaceOrGroup, QlBuiltins::ExtensionId madId | + namespace = getNamespace(namespaceOrGroup) and + Extensions::barrierGuardModel(namespaceOrGroup, type, subtypes, name, signature, ext, input, + acceptingvalue, kind, provenance, madId) and + model = "MaD:" + madId.toString() + ) + } + + /** + * Holds if a summary model exists for the given parameters. + */ + predicate summaryModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string input, string output, string kind, string provenance, string model + ) { + exists(string namespaceOrGroup | namespace = getNamespace(namespaceOrGroup) | + exists(QlBuiltins::ExtensionId madId | + Extensions::summaryModel(namespaceOrGroup, type, subtypes, name, signature, ext, input, + output, kind, provenance, madId) and + model = "MaD:" + madId.toString() + ) + or + Input::additionalSummaryModel(namespaceOrGroup, type, subtypes, name, signature, ext, input, + output, kind, provenance, model) + ) + } + + /** + * Holds if a neutral model exists for the given parameters. + */ + predicate neutralModel( + string namespace, string type, string name, string signature, string kind, string provenance + ) { + exists(string namespaceOrGroup | namespace = getNamespace(namespaceOrGroup) | + Extensions::neutralModel(namespaceOrGroup, type, name, signature, kind, provenance) + ) + } + + private predicate relevantNamespace(string namespace) { + exists(string ns | namespace = Input::cleanNamespace(ns) | + sourceModel(ns, _, _, _, _, _, _, _, _, _) or + sinkModel(ns, _, _, _, _, _, _, _, _, _) or + summaryModel(ns, _, _, _, _, _, _, _, _, _, _) + ) + } + + private predicate namespaceLink(string shortns, string longns) { + relevantNamespace(shortns) and + relevantNamespace(longns) and + longns.prefix(longns.indexOf(Input::namespaceSegmentSeparator())) = shortns + } + + private predicate canonicalNamespace(string namespace) { + relevantNamespace(namespace) and not namespaceLink(_, namespace) + } + + private predicate canonicalNamespaceLink(string namespace, string subns) { + canonicalNamespace(namespace) and + (subns = namespace or namespaceLink(namespace, subns)) + } + + /** + * Holds if MaD framework coverage of `namespace` is `n` api endpoints of the + * kind `(kind, part)`, and `namespaces` is the number of subnamespaces of + * `namespace` which have MaD framework coverage (including `namespace` + * itself). + */ + predicate modelCoverage(string namespace, int namespaces, string kind, string part, int n) { + namespaces = strictcount(string subns | canonicalNamespaceLink(namespace, subns)) and + ( + part = "source" and + n = + strictcount(string subns, string subnsClean, string type, boolean subtypes, string name, + string signature, string ext, string output, string provenance | + canonicalNamespaceLink(namespace, subnsClean) and + subnsClean = Input::cleanNamespace(subns) and + sourceModel(subns, type, subtypes, name, signature, ext, output, kind, provenance, _) + ) + or + part = "sink" and + n = + strictcount(string subns, string subnsClean, string type, boolean subtypes, string name, + string signature, string ext, string input, string provenance | + canonicalNamespaceLink(namespace, subnsClean) and + subnsClean = Input::cleanNamespace(subns) and + sinkModel(subns, type, subtypes, name, signature, ext, input, kind, provenance, _) + ) + or + part = "summary" and + n = + strictcount(string subns, string subnsClean, string type, boolean subtypes, string name, + string signature, string ext, string input, string output, string provenance | + canonicalNamespaceLink(namespace, subnsClean) and + subnsClean = Input::cleanNamespace(subns) and + summaryModel(subns, type, subtypes, name, signature, ext, input, output, kind, provenance, + _) + ) + ) + } +} diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 3b6e59e1c66e..271e93b5c0b7 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.37 +version: 1.0.39-dev groups: shared library: true dependencies: diff --git a/shared/quantum/CHANGELOG.md b/shared/quantum/CHANGELOG.md index 4f4b3189bb41..28235d47f61f 100644 --- a/shared/quantum/CHANGELOG.md +++ b/shared/quantum/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.16 + +No user-facing changes. + ## 0.0.15 No user-facing changes. diff --git a/shared/quantum/change-notes/released/0.0.16.md b/shared/quantum/change-notes/released/0.0.16.md new file mode 100644 index 000000000000..62b5521ea013 --- /dev/null +++ b/shared/quantum/change-notes/released/0.0.16.md @@ -0,0 +1,3 @@ +## 0.0.16 + +No user-facing changes. diff --git a/shared/quantum/codeql-pack.release.yml b/shared/quantum/codeql-pack.release.yml index dff35216fc69..a49f7be4cff3 100644 --- a/shared/quantum/codeql-pack.release.yml +++ b/shared/quantum/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.15 +lastReleaseVersion: 0.0.16 diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml index fed7bccf8556..1f08c524321e 100644 --- a/shared/quantum/qlpack.yml +++ b/shared/quantum/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/quantum -version: 0.0.15 +version: 0.0.17-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 99a7f7903274..c1a36a57de39 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.38 + +No user-facing changes. + ## 1.0.37 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.38.md b/shared/rangeanalysis/change-notes/released/1.0.38.md new file mode 100644 index 000000000000..2c984549c5fb --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/1.0.38.md @@ -0,0 +1,3 @@ +## 1.0.38 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index 9ad62b332475..b14e9763a8d4 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.37 +lastReleaseVersion: 1.0.38 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 0c7d0aa13d7c..f69da48d3fed 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.37 +version: 1.0.39-dev groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index bfca1c264b28..0002bcde38e0 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.38 + +No user-facing changes. + ## 1.0.37 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.38.md b/shared/regex/change-notes/released/1.0.38.md new file mode 100644 index 000000000000..2c984549c5fb --- /dev/null +++ b/shared/regex/change-notes/released/1.0.38.md @@ -0,0 +1,3 @@ +## 1.0.38 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index 9ad62b332475..b14e9763a8d4 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.37 +lastReleaseVersion: 1.0.38 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 9f6d1b864211..522248c9f304 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.37 +version: 1.0.39-dev groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 46a9b5f69853..1dfec3daacc1 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.14 + +No user-facing changes. + ## 2.0.13 No user-facing changes. diff --git a/shared/ssa/change-notes/released/2.0.14.md b/shared/ssa/change-notes/released/2.0.14.md new file mode 100644 index 000000000000..13190ad53e34 --- /dev/null +++ b/shared/ssa/change-notes/released/2.0.14.md @@ -0,0 +1,3 @@ +## 2.0.14 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 30d169d6eb84..23aa0864b298 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.13 +lastReleaseVersion: 2.0.14 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index d7d807069dc1..308542394133 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 2.0.13 +version: 2.0.15-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index b4d2815a6229..002730472533 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.38 + +No user-facing changes. + ## 1.0.37 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.38.md b/shared/threat-models/change-notes/released/1.0.38.md new file mode 100644 index 000000000000..2c984549c5fb --- /dev/null +++ b/shared/threat-models/change-notes/released/1.0.38.md @@ -0,0 +1,3 @@ +## 1.0.38 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index 9ad62b332475..b14e9763a8d4 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.37 +lastReleaseVersion: 1.0.38 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 00072b0dda51..6b972def9242 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.37 +version: 1.0.39-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 2760cd1f5299..ad2c71497db8 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.38 + +No user-facing changes. + ## 1.0.37 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.38.md b/shared/tutorial/change-notes/released/1.0.38.md new file mode 100644 index 000000000000..2c984549c5fb --- /dev/null +++ b/shared/tutorial/change-notes/released/1.0.38.md @@ -0,0 +1,3 @@ +## 1.0.38 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index 9ad62b332475..b14e9763a8d4 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.37 +lastReleaseVersion: 1.0.38 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 2eea555d2402..a1ea6bd35cf6 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.37 +version: 1.0.39-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index 2fc9a954f230..38e81a0275d8 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.38 + +No user-facing changes. + ## 1.0.37 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.38.md b/shared/typeflow/change-notes/released/1.0.38.md new file mode 100644 index 000000000000..2c984549c5fb --- /dev/null +++ b/shared/typeflow/change-notes/released/1.0.38.md @@ -0,0 +1,3 @@ +## 1.0.38 + +No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index 9ad62b332475..b14e9763a8d4 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.37 +lastReleaseVersion: 1.0.38 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 46209384455a..e2e41e87b792 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.37 +version: 1.0.39-dev groups: shared library: true dependencies: diff --git a/shared/typeinference/CHANGELOG.md b/shared/typeinference/CHANGELOG.md index 172f2ee2b297..d5252bfc0c4f 100644 --- a/shared/typeinference/CHANGELOG.md +++ b/shared/typeinference/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.19 + +No user-facing changes. + ## 0.0.18 No user-facing changes. diff --git a/shared/typeinference/change-notes/released/0.0.19.md b/shared/typeinference/change-notes/released/0.0.19.md new file mode 100644 index 000000000000..914e4c9074d1 --- /dev/null +++ b/shared/typeinference/change-notes/released/0.0.19.md @@ -0,0 +1,3 @@ +## 0.0.19 + +No user-facing changes. diff --git a/shared/typeinference/codeql-pack.release.yml b/shared/typeinference/codeql-pack.release.yml index a0d2bc59d979..f406319f372e 100644 --- a/shared/typeinference/codeql-pack.release.yml +++ b/shared/typeinference/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.18 +lastReleaseVersion: 0.0.19 diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index bf107c7d3f55..4bb348979c1c 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -705,7 +705,8 @@ module Make1 Input1> { } /** - * Holds if `app` is _not_ a possible instantiation of `constraint`. + * Holds if `app` is _not_ a possible instantiation of `constraint`, because `app` + * and `constraint` differ on concrete types at `path`. * * This is an approximation of `not isInstantiationOf(app, abs, constraint)`, but * defined without a negative occurrence of `isInstantiationOf`. @@ -719,9 +720,11 @@ module Make1 Input1> { * `isInstantiationOf` nor `isNotInstantiationOf` will hold. */ pragma[nomagic] - predicate isNotInstantiationOf(App app, TypeAbstraction abs, Constraint constraint) { + predicate isNotInstantiationOf( + App app, TypeAbstraction abs, Constraint constraint, TypePath path + ) { // `app` and `constraint` differ on a concrete type - exists(Type t, Type t2, TypePath path | + exists(Type t, Type t2 | t = resolveTypeAt(app, abs, constraint, path) and not t = abs.getATypeParameter() and app.getTypeAt(path) = t2 and @@ -983,6 +986,9 @@ module Make1 Input1> { } } + private module SatisfiesConstraintIsInstantiationOf = + IsInstantiationOf; + /** * Holds if `tt` satisfies `constraint` through `abs`, `sub`, and `constraintMention`. */ @@ -1004,13 +1010,21 @@ module Make1 Input1> { // constraint we need to find the right implementation, which is the // one where the type instantiates the precondition. if multipleConstraintImplementations(type, constraint) - then - IsInstantiationOf::isInstantiationOf(tt, - abs, condition) + then SatisfiesConstraintIsInstantiationOf::isInstantiationOf(tt, abs, condition) else any() ) } + pragma[nomagic] + private predicate isNotInstantiationOf( + HasTypeTree tt, TypeAbstraction abs, TypeMention condition, Type root + ) { + exists(TypePath path | + SatisfiesConstraintIsInstantiationOf::isNotInstantiationOf(tt, abs, condition, path) and + path.isCons(root.getATypeParameter(), _) + ) + } + /** * Holds if `tt` does not satisfy `constraint`. * @@ -1040,8 +1054,7 @@ module Make1 Input1> { forex(TypeAbstraction abs, TypeMention condition | rootTypesSatisfaction(type, constraint, abs, condition, _) | - IsInstantiationOf::isNotInstantiationOf(tt, - abs, condition) + isNotInstantiationOf(tt, abs, condition, type) ) ) ) diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index 7d1751f02325..0a5b99e7f11b 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.18 +version: 0.0.20-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 52da09238e52..81415ed396f8 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.22 + +No user-facing changes. + ## 2.0.21 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/2.0.22.md b/shared/typetracking/change-notes/released/2.0.22.md new file mode 100644 index 000000000000..8a2611adad2d --- /dev/null +++ b/shared/typetracking/change-notes/released/2.0.22.md @@ -0,0 +1,3 @@ +## 2.0.22 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index a572e88bffd4..980bdfe195ba 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.21 +lastReleaseVersion: 2.0.22 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index c5eceeab1c49..e657f74f636b 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.21 +version: 2.0.23-dev groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index bfc79532079c..6c9dced04a32 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.38 + +No user-facing changes. + ## 1.0.37 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.38.md b/shared/typos/change-notes/released/1.0.38.md new file mode 100644 index 000000000000..2c984549c5fb --- /dev/null +++ b/shared/typos/change-notes/released/1.0.38.md @@ -0,0 +1,3 @@ +## 1.0.38 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index 9ad62b332475..b14e9763a8d4 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.37 +lastReleaseVersion: 1.0.38 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 1552ab2d6ceb..31dfb14955fe 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.37 +version: 1.0.39-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index e3ff0ae2f34a..30fd964656d3 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.25 + +No user-facing changes. + ## 2.0.24 No user-facing changes. diff --git a/shared/util/change-notes/released/2.0.25.md b/shared/util/change-notes/released/2.0.25.md new file mode 100644 index 000000000000..ca39dd50c697 --- /dev/null +++ b/shared/util/change-notes/released/2.0.25.md @@ -0,0 +1,3 @@ +## 2.0.25 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 1460df314d51..f54d86201189 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.24 +lastReleaseVersion: 2.0.25 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index c34a8e3e1495..fed06829e338 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.24 +version: 2.0.26-dev groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index a196b41e650b..5c7447a15ddb 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.38 + +No user-facing changes. + ## 1.0.37 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.38.md b/shared/xml/change-notes/released/1.0.38.md new file mode 100644 index 000000000000..2c984549c5fb --- /dev/null +++ b/shared/xml/change-notes/released/1.0.38.md @@ -0,0 +1,3 @@ +## 1.0.38 + +No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index 9ad62b332475..b14e9763a8d4 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.37 +lastReleaseVersion: 1.0.38 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index f5656ec849ff..079ebe8518c0 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.37 +version: 1.0.39-dev groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 4a595f06ff9a..073ffd8edae0 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.38 + +No user-facing changes. + ## 1.0.37 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.38.md b/shared/yaml/change-notes/released/1.0.38.md new file mode 100644 index 000000000000..2c984549c5fb --- /dev/null +++ b/shared/yaml/change-notes/released/1.0.38.md @@ -0,0 +1,3 @@ +## 1.0.38 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index 9ad62b332475..b14e9763a8d4 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.37 +lastReleaseVersion: 1.0.38 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index b929ded01390..1e60008ca449 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.37 +version: 1.0.39-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index bcf798b73d48..da1d658ad024 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 6.1.3 + +No user-facing changes. + ## 6.1.2 No user-facing changes. diff --git a/swift/ql/lib/change-notes/2025-12-11-swift-6.2.2.md b/swift/ql/lib/change-notes/2025-12-11-swift-6.2.2.md new file mode 100644 index 000000000000..27927802dba5 --- /dev/null +++ b/swift/ql/lib/change-notes/2025-12-11-swift-6.2.2.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* Upgraded to allow analysis of Swift 6.2.2. \ No newline at end of file diff --git a/swift/ql/lib/change-notes/released/6.1.3.md b/swift/ql/lib/change-notes/released/6.1.3.md new file mode 100644 index 000000000000..34916dd37c80 --- /dev/null +++ b/swift/ql/lib/change-notes/released/6.1.3.md @@ -0,0 +1,3 @@ +## 6.1.3 + +No user-facing changes. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 8a2b5999deeb..e641a8749739 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 6.1.2 +lastReleaseVersion: 6.1.3 diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll b/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll index 46e2e63f2cab..692e3626080d 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll @@ -159,6 +159,19 @@ module SourceSinkInterpretationInput implements ) } + predicate barrierElement( + Element n, string output, string kind, Public::Provenance provenance, string model + ) { + none() + } + + predicate barrierGuardElement( + Element n, string input, Public::AcceptingValue acceptingvalue, string kind, + Public::Provenance provenance, string model + ) { + none() + } + private newtype TInterpretNode = TElement_(Element n) or TNode_(Node n) or diff --git a/swift/ql/lib/codeql/swift/security/CleartextTransmissionExtensions.qll b/swift/ql/lib/codeql/swift/security/CleartextTransmissionExtensions.qll index 4b31a7ab23f6..03d8dff31487 100644 --- a/swift/ql/lib/codeql/swift/security/CleartextTransmissionExtensions.qll +++ b/swift/ql/lib/codeql/swift/security/CleartextTransmissionExtensions.qll @@ -87,7 +87,7 @@ private class UrlTransmittedSink extends CleartextTransmissionSink { // exclude `tel:` and similar URLs. These URLs necessarily contain // sensitive data which you expect to transmit only by making the // phone call (or similar operation). - not ExcludeUrlFlow::flow(_, this) + not ExcludeUrlFlow::flowTo(this) } } diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 4817a01cf8e4..3e1437148de5 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 6.1.2 +version: 6.1.4-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index b019c5830597..d3fc5577d26f 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.2.12 + +No user-facing changes. + ## 1.2.11 No user-facing changes. diff --git a/swift/ql/src/change-notes/released/1.2.12.md b/swift/ql/src/change-notes/released/1.2.12.md new file mode 100644 index 000000000000..222316e646d0 --- /dev/null +++ b/swift/ql/src/change-notes/released/1.2.12.md @@ -0,0 +1,3 @@ +## 1.2.12 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 4bbe68e3fc02..3f5f457c354f 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.11 +lastReleaseVersion: 1.2.12 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 9cb379ef79ba..82f916cc3ccb 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.2.11 +version: 1.2.13-dev groups: - swift - queries diff --git a/swift/third_party/resources/resource-dir-linux.zip b/swift/third_party/resources/resource-dir-linux.zip index 970660d813f0..21f02672b1b0 100644 --- a/swift/third_party/resources/resource-dir-linux.zip +++ b/swift/third_party/resources/resource-dir-linux.zip @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e08f6da9166c36d8cc1bb6c3c80f18664feade81ae193daeaada5a9a009748b0 -size 385198654 +oid sha256:9d2aa88f3f9e2ff181a9c9607f95804b959fb334947cf72c566666b3be98ff2e +size 385200751 diff --git a/swift/third_party/resources/resource-dir-macos.zip b/swift/third_party/resources/resource-dir-macos.zip index c802f6fab297..1a059eda5ef8 100644 --- a/swift/third_party/resources/resource-dir-macos.zip +++ b/swift/third_party/resources/resource-dir-macos.zip @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e7505fccfe0a537b1583b754fbdd0720415cd9c5e076b542be0d4ec976c955c8 -size 613718859 +oid sha256:b5e4bfbfaf1c9bae0bff0580797803a05328c08fffee47de406a5fa6cd7e19c7 +size 613729529 diff --git a/swift/third_party/resources/swift-prebuilt-linux.tar.zst b/swift/third_party/resources/swift-prebuilt-linux.tar.zst index 1f1dba6a9747..2770d5be19f7 100644 --- a/swift/third_party/resources/swift-prebuilt-linux.tar.zst +++ b/swift/third_party/resources/swift-prebuilt-linux.tar.zst @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1aa54c08025679cea2128499040790c4792debcbe214144b099469debe0d488d -size 132780711 +oid sha256:b5efba3953668d02a15b74bcf637831be99824702cfd74ac8cf53b31d89a4f2a +size 132824388 diff --git a/swift/third_party/resources/swift-prebuilt-macos.tar.zst b/swift/third_party/resources/swift-prebuilt-macos.tar.zst index c66199543e14..7121b9743a56 100644 --- a/swift/third_party/resources/swift-prebuilt-macos.tar.zst +++ b/swift/third_party/resources/swift-prebuilt-macos.tar.zst @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c5b96fe3e221accd9435f40dbd123d388c3418e1e451751ffd6e67339b063cf7 -size 115298493 +oid sha256:4b5e8997a99155330871e146288a8947fa224ba05e54539c795f21c082c7a940 +size 115298351 diff --git a/swift/tools/tracing-config.lua b/swift/tools/tracing-config.lua index fdb0cfd16b68..a29e7b3b9536 100644 --- a/swift/tools/tracing-config.lua +++ b/swift/tools/tracing-config.lua @@ -53,6 +53,13 @@ function RegisterExtractorPack(id) strip_unsupported_arg(args, '-stack-check', 0) strip_unsupported_arg(args, '-experimental-skip-non-inlinable-function-bodies-without-types', 0) strip_unsupported_clang_arg(args, '-ivfsstatcache', 1) + strip_unsupported_clang_arg(args, '-fno-odr-hash-protocols', 0) + strip_unsupported_clang_arg(args, '-clang-vendor-feature=+disableNonDependentMemberExprInCurrentInstantiation', 0) + strip_unsupported_clang_arg(args, '-clang-vendor-feature=+enableAggressiveVLAFolding', 0) + strip_unsupported_clang_arg(args, '-clang-vendor-feature=+revert09abecef7bbf', 0) + strip_unsupported_clang_arg(args, '-clang-vendor-feature=+thisNoAlignAttr', 0) + strip_unsupported_clang_arg(args, '-clang-vendor-feature=+thisNoNullAttr', 0) + strip_unsupported_clang_arg(args, '-clang-vendor-feature=+disableAtImportPrivateFrameworkInImplementationError', 0) -- The four args below are removed to workaround version mismatches due to recent versions -- of Xcode defaulting to explicit modules: strip_unsupported_arg(args, '-disable-implicit-swift-modules', 0) @@ -120,6 +127,9 @@ function RegisterExtractorPack(id) if compilerArguments.argv[1] == '-emit-supported-features' then return nil end + if compilerArguments.argv[1] == '-scan-dependencies' then + return nil + end strip_unsupported_args(compilerArguments.argv) replace_resource_dir(compilerPath, compilerArguments.argv)